[Java] 数据分析--统计
二项分布
- 需求:5个四面体筛子,筛子三面绿色,一面红色,模拟1000000次,统计每次试验红色落地筛子个数的分布
- 实现:用循环实现5个筛子和1000000次试验,定义函数numRedDown模拟5个筛子试验结果,redDown模拟单次试验结果
Simulation.java

1 import java.util.Random;
2
3 public class Simulation{
4 static final Random RANDOM = new Random();
5 static final int n = 5;
6 static final int N = 1000000;
7
8 public static void main(String[] args){
9 double[] dist = new double[n+1];
10 for(int i = 0; i < N ; i++){
11 int x = numRedDown(n);
12 ++dist[x];
13 }
14 for(int i = 0; i <=n;i++){
15 System.out.printf("%4d%8.4f%n",i,dist[i]/N);
16 }
17 }
18
19 static boolean redDown(){
20 int m = RANDOM.nextInt(4);
21 return (m==0);
22 }
23
24 static int numRedDown(int n){
25 int numRed = 0;
26 for(int i = 0; i < n; i++){
27 if(redDown()){
28 ++numRed;
29 }
30 }
31 return numRed;
32 }
33 }
BinomialDistrabutionTester.java

1 import org.apache.commons.math3.distribution.BinomialDistribution;
2
3 public class BinomialDistributionTester {
4 static final int n = 5;
5 static final double p = 0.25;
6
7 public static void main(String[] args) {
8 BinomialDistribution bd = new BinomialDistribution(n, p);
9 for (int x = 0; x <= n; x++) {
10 System.out.printf("%4d%8.4f%n", x, bd.probability(x));
11 }
12 System.out.printf("mean = %6.4f%n", bd.getNumericalMean());
13 double variance = bd.getNumericalVariance();
14 double stdv = Math.sqrt(variance);
15 System.out.printf("standard deviation = %6.4f%n", stdv);
16 }
17 }
0 0.2381
1 0.3954
2 0.2629
3 0.0880
4 0.0145
5 0.0010
协方差
- 需求:生成1000个随机数对(x,y),并计算x和y的相关系数
- 实现:Apache Commons Math library 中相应方法

1 import java.util.Random;
2 import org.apache.commons.math3.stat.correlation.Covariance;
3 import org.apache.commons.math3.stat.descriptive.moment.Variance;
4
5 public class CorrelationExample {
6 static final Random RANDOM = new Random();
7 static double[][] data1 = random(1000);
8 static double[][] data2 = {{1, 2, 3, 4, 5}, {1, 3, 5, 7, 9}};
9 static double[][] data3 = {{1, 2, 3, 4, 5}, {9, 8, 7, 6, 5}};
10
11 public static void main(String[] args) {
12 System.out.printf("rho1 = %6.3f%n", rho(data1));
13 System.out.printf("rho2 = %6.3f%n", rho(data2));
14 System.out.printf("rho3 = %6.3f%n", rho(data3));
15 }
16
17 static double[][] random(int n) {
18 double[][] a = new double[2][n];
19 for (int i = 0; i < n; i++) {
20 a[0][i] = RANDOM.nextDouble();
21 a[1][i] = RANDOM.nextDouble();
22 }
23 return a;
24 }
25
26 static double rho(double[][] data) {
27 Variance v = new Variance();
28 double varX = v.evaluate(data[0]);
29 double sigX = Math.sqrt(varX);
30 double varY = v.evaluate(data[1]);
31 double sigY = Math.sqrt(varY);
32 Covariance c = new Covariance(data);
33 double sigXY = c.covariance(data[0], data[1]);
34 return sigXY/(sigX*sigY);
35 }
36 }
rho1 = -0.036
rho2 = 1.000
rho3 = -1.000
正态分布
- 需求:模拟均值16,标准差2.82的正态分布
- 实现:Apache Commons Math library 的 NomorDistribution类

1 import org.apache.commons.math3.distribution.NormalDistribution;
2
3 public class NormalDistributionTester {
4 static int n = 32;
5 static double p = 0.5;
6 static double mu = n*p;
7 static double sigma = Math.sqrt(n*p*(1-p));
8
9 public static void main(String[] args) {
10 NormalDistribution nd = new NormalDistribution(mu, sigma);
11
12 double a = 17.5, b = 21.5;
13 double Fa = nd.cumulativeProbability(a);
14 System.out.printf("F(a) = %6.4f%n", Fa);
15 double Fb = nd.cumulativeProbability(b);
16 System.out.printf("F(b) = %6.4f%n", Fb);
17 System.out.printf("F(b) - F(a) = %6.4f%n", Fb - Fa);
18 }
19 }
F(a) = 0.7021
F(b) = 0.9741
F(b) - F(a) = 0.2720
[Java] 数据分析--统计的更多相关文章
- 编写Java脚本统计工程代码总行数
在新公司工作将近一年了,一直独自一人负责服务端集群的运维和代码的编写.不知不觉从一个Project发展到了七八个Project. 看着越来越多的代码,今天突然想统计一下一共写了多少代码.[这里只统计完 ...
- 基于Hadoop的地震数据分析统计
源码下载地址:http://download.csdn.net/detail/huhui_bj/5645641 opencsv下载地址:http://download.csdn.net/detail/ ...
- 通过java api统计hive库下的所有表的文件个数、文件大小
更新hadoop fs 命令实现: [ss@db csv]$ hadoop fs -count /my_rc/my_hive_db/* 18/01/14 15:40:19 INFO hdfs.Peer ...
- Java 中统计文件中出现单词的次数练习
统计英文article.txt文件中出现hello这个单词的次数 这个是article.txt文件内容 { hello The Royal Navy is trying hello to play h ...
- Java中统计字符串中各个字符出现的次数
import java.util.Iterator; import java.util.Set; import java.util.TreeMap; public class TreeMapDemo ...
- Java实验--统计字母出现频率及其单词个数
本周的实验要求在之前实现统计单词的基础之上(可以见之前博客的统计单词的那个实验),对其进行修改成所需要的格式,统计字母出现频率的功能,并按照一定的格式把最终结果的用特定的格式在文本中显示出来 统计过程 ...
- JAVA实验--统计文章中单词的个数并排序
分析: 1)要统计单词的个数,就自己的对文章中单词出现的判断的理解来说是:当出现一个非字母的字符的时候,对前面的一部分字符串归结为单词 2)对于最后要判断字母出现的个数这个问题,我认为应该是要用到ma ...
- Java报表统计导出Word-xdocin方式
官网:http://www.xdocin.com Controller层: //创建对象 XDocService xdocService = new XDocService(); //封装参数 Map ...
- Java查找统计文中字母,单词
package io; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; imp ...
随机推荐
- linux安装nginx 并配置文件服务器和代理服务器
linux安装nginx搭建服务并实现文件服务器和代理服务器配置 1.课题的背景和意义 由于编码过程中需要进行文件上传服务,文件上传后 需要有http资源的路径需要访问.原则上可以通过Apache . ...
- python函数之有参装饰器
一.为什么要有有参装饰器? 来看之前的无参装饰器 # 无参装饰器 def outter(func): def wrapper(*args,**kwargs): start = time.time() ...
- C++并发与多线程学习笔记--线程之间调度
condition_variable wait() notify_one notify_all condition_variable 条件变量的实际用途: 比如有两个线程A和B,在线程A中等待一个条件 ...
- react项目运行安装依赖报错:Error: pngquant failed to build, make sure that libpng-dev is installed
安装报错之后.但是安装libpng-dev.发现找不到.通过多方查找.准备重新安装pngquant.命令如下: npm install --save-dev pngquant安装成功并运行成功
- IntelliJ IDEA/Android Studio插件开发指南
前言 目前在为安卓手机QQ做自动化的相关工作,包括UI自动化,逻辑层自动化等.使用到的uiautomator等框架,需要在Android Studio进行编码工作. 其中很多工作如果做到插件化的话,可 ...
- 设计模式学习笔记(二):UML与面向对象设计原则
1 UML 1.1 UML UML(Unified Modeling Language)是统一建模语言,1997年11月UML1.1版本提交给OMG并正式通过,成为建模语言的个那个也标准.2003年6 ...
- spring boot 通过feign调用api接口
目的:远程调用服务器api,直接上步骤: 1,添加maven依赖,这是必须的: <dependency> <groupId>org.springframework.cloud& ...
- Leecode第二题:两数相加
Leecode2 先看题目 : 给你两个 非空 的链表,表示两个非负的整数.它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字. 请你将两个数相加,并以相同形式返回一个表示和的 ...
- 04- 移动APP功能测试要点以及具体业务流程测试
5.离线测试: 离线是应用程序在本地的客户端会缓存一部分数据以供程序下次调用. 1.对于一些程序,需要在登录进来后,这是没有网络的情况下可以浏览本地数据. 2.对于无网络时,刷新获取新数据时,不能获取 ...
- Shell-日志按天切割
1.创建shell脚本: #!/bin/bash apphome=/apppath if [ ! -d $apphome ]; then exit 0 fi cp $apphome/app.log $ ...