[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 ...
随机推荐
- canvas绘制图像轮廓效果
在2d图形可视化开发中,经常要绘制对象的选中效果. 一般来说,表达对象选中可以使用边框,轮廓或者发光的效果. 发光的效果,可以使用canvas的阴影功能,比较容易实现,此处不在赘述. 绘制边框 绘制 ...
- Web 前端 - 优雅地 Callback 转 Promise :aw
前言 当今 ES7 标准大行其道,使用 async + await 将异步逻辑同步书写已经普及,但是却有许多旧库或旧代码尚未完全 Promise 化,急需一个小工具去挖去这代码中藓疾. 设计和实现 由 ...
- iovec结构体使用说明
http://blog.163.com/lichuan0502@126/blog/static/9933534820111033228285/
- 单链表c语言实现的形式
包括初始化,创建,查询,长度,删除,清空,销毁等操作 代码如下: #include<stdio.h> #include<stdlib.h> //定义单链表的数据类型 typed ...
- Python fire库使用
1.前要fire是python中用于生成命令行界面(Command Line Interfaces, CLIs)的工具 不需要做任何额外的工作,只需要从主模块中调用fire.Fire() 它会自动将你 ...
- 跨域库herryPostMessage.js的一些优化,多iframe跨域
旧库见文章:https://www.cnblogs.com/wuhairui/p/14595893.html 新版库主要做了下多个iframe和父页面交互的优化.主要使用构造函数的方式将多个ifram ...
- 分库分表之后,id主键如何处理?
(1)数据库自增id 这个就是说你的系统里每次得到一个id,都是往一个库的一个表里插入一条没什么业务含义的数据,然后获取一个数据库自增的一个id.拿到这个id之后再往对应的分库分表里去写入. 这个方案 ...
- 简介TLS 1.3
0x00 前言 最近在阅读论文,其中阅读了 WWW2021的一篇文章"TLS 1.3 in Practice: How TLS 1.3 Contributes to the Internet ...
- 序列化 pickle模块
1. pickle 简介 2. pickle 核心函数 3. pickle 高级 -- 复杂对象 1. 持久化与 pickle 简介 1.1 什么是持久化? 持久化的基本思想很简单.假定有一个 Pyt ...
- D - The Frog's Games (二分)
The annual Games in frogs' kingdom started again. The most famous game is the Ironfrog Triathlon. On ...