【程序员眼中的统计学(1)】信息图形化:第一印象

1 饼图算法描述


1.1 饼图算法基本描述

在介绍饼图之前我们先来看一张表格:

上图是表示某公司在下半年中每月的利润情况。

就这张表格而言,我们只能知道各个月份的利润,却无法知道每个月份占总利润的比例,根据这张表格我们画出了两张图,如下:

我们从图中很容易可以得到两个信息:第一幅图看起来数据相差不大,第二幅图看起来数据相差非常大,对于同一张表所画出的两张图为什么会有两种截然不同的见解呢?

其实会发生上述不同的观点主要是因为这两张图的纵轴和标度不一样,第一张图纵轴的起点是0,标度是0.5,而第二张图的纵轴的起点是2.0,标度是0.1。那么什么是标度呢?

标度:标度是指图形纵轴上每段的大小。

数据:不添加任何修饰成分的原始事实与数字,比如说:对、错;1、2、3  。

信息:是指加入了某种修饰成分的数据,比如说:这个答案是对的;这个小孩3岁 。

前面的准备工作做完了,那么我们现在来看看什么叫饼图吧。

饼图为圆形,被分割为几个扇形块,每一块代表一个组(类),扇形块的大小表示这类数据占总体的比例即频数。

频数:一个特定组中的对象数目称为频数。

饼图将整个数据计划分为几个互不相干的组。这意味着,如果把每个扇形块的频数加起来,结果应为100%。

请根据饼图的定义将下面这张表格转化为饼图:

下面总结饼图的优缺点及应用场景:

优点:在进行比例比较的时候,可以一眼看出哪个组具有较高的频数。

缺点:当每种类型的比例大小相差不大时,我们很难根据扇形块的大小来比较频数的高低。

应用场景:根据扇形的优缺点我们可以知道,扇形只能适用于比例相差较大的情况下频数的比较。

该算法是在给定一些数据集的情况下绘制出符合该数据集的饼图。

  1. 定义:饼图是将圆形分割为几个扇形块,每一块代表一个组(类),扇形块的大小表示这类数据占总体的比例。
  2. 符号解释:无。
  3. 具体计算方法:该算法是利用JFreeChart里的jar包里的类和方法来绘制饼图的。

1.2算法的应用场景

在需要绘制饼图的时候使用该算法。

1.3算法的优缺点

  • 优点是可以很快速的建立一个饼图;
  • 缺点是无法直接从饼图中看出各部分所占的比例。

1.4算法的输入输出(Java代码实现)

输入:

* @param  Panel_Pictuer's name  string 表示面板名称  My Pie Chart

* @param  Pie_Pictuer's name  string 表示图形名称  Pie Chart

* @param  x_name  string 表示各类名称  One Two Three Four Five Six ##

* @param  y_size  double  表示各类的频数  23 34 25 31 30 28 0

java代码实现:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

<span style="color: #000000;">package pictuer;

import java.awt.Dimension;

import java.awt.font.TextAttribute;

import java.text.AttributedCharacterIterator;

import java.text.AttributedString;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

import javax.swing.JPanel;

import org.jfree.chart.*;

import org.jfree.chart.labels.PieSectionLabelGenerator;

import org.jfree.chart.plot.PiePlot;

import org.jfree.data.general.DefaultPieDataset;

import org.jfree.data.general.PieDataset;

import org.jfree.ui.ApplicationFrame;

import org.jfree.ui.RefineryUtilities;

public class PieChartDemo8 extends ApplicationFrame

{  

    /**

     * 设置饼图各小块的个数

     *  @return 饼图各小块的个数

     * @author bnc

     *

     */

    static class CustomLabelGenerator implements PieSectionLabelGenerator

    {

        public String generateSectionLabel(PieDataset piedataset, Comparable comparable)

        {

            String s = null;

            if (piedataset != null && !comparable.equals("Two"))

                s = comparable.toString();

            return s;

        }

        /**

         * @return 返回装载图片的图形构造

         */

        public AttributedString generateAttributedSectionLabel(PieDataset piedataset, Comparable comparable)

        {

            AttributedString attributedstring = null;

            String s = comparable.toString();

            String s1 = (new StringBuilder()).append(s).append(" : ").append(String.valueOf(piedataset.getValue(comparable))).toString();

            attributedstring = new AttributedString(s1);

            attributedstring.addAttribute(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD, 0, s.length() - 1);

            return attributedstring;

        }

 

        CustomLabelGenerator()

        {

        }

    }

    /*

     * 构造函数,创建面板用来存放图片

     * @parame s 表示面板的名称

     */

    public PieChartDemo8(String s)

    {

        super(s);

        JPanel jpanel = createDemoPanel();//jpanel  创建面板的名称

        jpanel.setPreferredSize(new Dimension(500, 270));

        setContentPane(jpanel);

    }

    /**

     * 获得绘制饼图所需的数据

     * @return 绘制饼图所需的数据集

     */

    private static PieDataset createDataset()

    {

        DefaultPieDataset defaultpiedataset = new DefaultPieDataset();//defaultpiedataset 装载饼图所需数据的数据集

        List<String> list_name=new ArrayList<String>();//list_name 装载直方图各小块区间的容器

        list_name.add("One");

        list_name.add("Two");

        list_name.add("Three");

        list_name.add("Four");

        list_name.add("Five");

        int n=5;

        List<String> li_name=list_name;//li_name 存放饼图各小块名称的容器

        List<Double> list_size=new ArrayList<Double>();//list_size 装载条形图各小块频数的容器

        list_size.add(23.0);

        list_size.add(13.0);

        list_size.add(25.0);

        list_size.add(12.0);

        list_size.add(18.0);

        List<Double> li_size=list_size;//li_size 存放饼图各小块频数的容器

        for(int i=0;i<n;i++){

            defaultpiedataset.setValue(li_name.get(i),new Double(li_size.get(i)));//存放数据

        }

        return defaultpiedataset;

    }

    /**

     * 创建饼图

     * @return 返回饼图

     */

    private static JFreeChart createChart(PieDataset piedataset,String Pie_Name)

    {

        JFreeChart jfreechart = ChartFactory.createPieChart(Pie_Name, piedataset, falsetruefalse);//jfreechart  图形变量,用来装载图形

        PiePlot pieplot = (PiePlot)jfreechart.getPlot();

        pieplot.setLabelGenerator(new CustomLabelGenerator());

        return jfreechart;

    }

    /**

     * 创建饼图面板

     * @return 返回饼图面板

     */

    public static JPanel createDemoPanel()

    {

        String Pie_name;

        Pie_name="My Chart";

        JFreeChart jfreechart = createChart(createDataset(),Pie_name);//jfreechart 图形变量,通过图形数据和图形名称创建图形

        return new ChartPanel(jfreechart);

    }  

    public static void main(String args[])

    {

        /**

         * 绘制饼图

         * @author cuit

         * @return 返回饼图

         */

        String Panel_name;

        Panel_name="My Chart";

        PieChartDemo8 piechartdemo8 = new PieChartDemo8(Panel_name);//piechartdemo8   构造方法实例变量

        piechartdemo8.pack();

        RefineryUtilities.centerFrameOnScreen(piechartdemo8);

        piechartdemo8.setVisible(true);

    }

}

</span>

 输出结果:

 

1.5 导致算法异常

当y_size输入的个数大于x_name的个数会导致异常,系统会自动的将y_size多余的数值剔除掉

1.6 代码的算法参考

类源码:见源程序:Panel. src. All_Pictuer. PieChartDemo8

本算法是通过输入绘制饼图的数据集来绘制出饼图的具体实现。

类和方法调用接口

见源程序:Panel. src. All_Pictuer. PieChartDemo8

PieChartDemo8.java 下包含如下方法:

getN_name()   //得到饼图各小块的个数

setN_name(int n_name)  //设置饼图各小块的个数

Input_Name()   //输入饼图各小块的名称

Input_Size()    //输入饼图各小块的频数

generateAttributedSectionLabel(PieDataset piedataset, Comparable comparable)  //装载图片的图形构造

PieChartDemo8(String s)  //构造函数,创建面板用来存放图片

createDataset()   //获得绘制饼图所需的数据

createChart(PieDataset piedataset,String Pie_Name)   //创建饼图

createDemoPanel()   //创建饼图面板

回到顶部

2 条形图算法描述


2.1 条形图算法基本描述

条形图

通过前面我们知道了饼图的基本特征,那么请看看下面这张饼图有什么问题吧。

这个饼图的问题就在于很难一眼看出哪一类玩家的满意度最高。用于扇形块所占整体比例无关的百分数来标识饼图通常也会让人犯晕,例如,“体育”块标示着99%,但这一块在饼图中所占的比例仅为20%左右。另一个问题是,我们不知道每种游戏的反馈数目是否相等,因此也无法知道用这种方式对满意度进行比较是否公正。

饼图的作用是对不同组(或者类)所占的比例进行比较,但在这个例子中,各个组的比例相差无几,这就是饼图失效的地方,那么究竟什么图可以完成这种情况呢?那么我们就得引入条形图了。

条形图:条形图是用一个一个间隔的长方形来表示的,每一个长方形代表一个特定的类,长方形的长度代表某种数值。长方形越长,数值越大,所有长方形的宽都是相等的。

 垂直条形图

条形图分为垂直条形图和水平条形图两种,下面我们就来看看垂直条形图的具体画法:

水平条形图

同样是将上面的表格转换成水平条形图(水平条形图跟垂直条形图相比,只是坐标轴调换了一下而已)

在一般情况下,我们经常用垂直条形图,但在类名称太长的时候,水平条形图就有用了----你将有大量空白位置标示每个类的名称,不用横七竖八的进行摆布。

百分度标度:类的数目的大小是用百分数来表示的。

在使用百分度标度时,一定要设法指出频数-----或是将频数标在图形中间,或是标在图形旁边。

频数标度:类的数目的大小是用数字而非百分数表示的。

在使用频数标度时,一定要小心纵轴的起点,通常纵轴的起点是从0开始,不过当使用不以0为起点的纵轴可以让数据给人不同的第一印象。

堆积条形图

堆积条形图:将同一种类的不同的属性分别用两个相连的的长方形在一张条形图

下面总结堆积条形图的优缺点及应用场景: 优点:党比表同一种类的不同属性的频数的时候很简单明了。

缺点:很难看出某个类的比例和属性的比例。

应用场景:同一个类有多个属性而我们只需比较不同属性之间的频数

分段条形图

分段条形图:将同一种类的不同的属性分段在一个长方形上展示

 

下面总结分段条形图的优缺点及应用场景:

优点:可以很清晰的看出每个类的总和和各个属性的比例。

缺点:不容易看出各个属性的频数。

应用场景:同一个类有多个属性而我们需要比较各个类的比较或不同属性之间的比例。

该算法是在给定一些数据集的情况下绘制出符合该数据集的条形图。

  1. 定义:条形图是用一个一个间隔的长方形来表示的,每一个长方形代表一个特定的类,长方形的长度代表某种数值。
  2. 符号解释:无。
  3. 具体计算方法:该算法是利用JFreeChart里的jar包里的类和方法来绘制条形图的。

2.2算法的应用场景

在需要绘制条形图的时候使用该算法。

2.3算法的优缺点

  • 优点是可以很快速的建立一个条形图;
  • 缺点是所输入的各小块的名称时必须得转化成Year类型。

2.4算法的输入输出

输入量:

* @param  Panel's name  string 表示面板名称  My Chart

* @param  Pictuer's name  string 表示图形名称  Chart

* @param  x_name  double 表示各类名称  1 2 3 4 5 6 0

* @param  y_size  double  表示各类的频数 23 34 25 31 30 28 0

java代码实现:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

<span style="color: #000000;">package pictuer;

import java.awt.Dimension;

import java.awt.Font;

import java.io.PrintStream;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

import javax.swing.JPanel;

import org.jfree.chart.*;

import org.jfree.chart.axis.DateAxis;

import org.jfree.chart.axis.DateTickMarkPosition;

import org.jfree.chart.labels.StandardXYToolTipGenerator;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.chart.plot.XYPlot;

import org.jfree.chart.renderer.xy.XYBarRenderer;

import org.jfree.chart.title.TextTitle;

import org.jfree.data.time.*;

import org.jfree.data.xy.IntervalXYDataset;

import org.jfree.ui.ApplicationFrame;

import org.jfree.ui.RefineryUtilities;

public class XYBarChartDemo1 extends ApplicationFrame

{

    /**

     * 构造函数,用来创建面板用来存放图片

     * @param s 表示面板的名称

     */

    public XYBarChartDemo1(String s)

    {

        super(s);

        JPanel jpanel = createDemoPanel();//jpanel  创建面板的名称

        jpanel.setPreferredSize(new Dimension(500, 270));

        setContentPane(jpanel);

    }

    /**

     * 创建条形图

     * @param intervalxydataset  数周数据生成变量,用来存放数轴数据

     * @return 返回条形图

     */

    private static JFreeChart createChart(IntervalXYDataset intervalxydataset,String Pictuer_name)

    {

        //System.out.println("请输入该图片的名称(类型是String):");

        //Scanner input = new Scanner(System.in);//input 输入流变量,存放从键盘输入的字符串

        //String Pictuer_name=input.nextLine();//Pictuer_name 字符串变量,用来存放条形图的名称

        JFreeChart jfreechart = ChartFactory.createXYBarChart(Pictuer_name, "Year"true"Number of People", intervalxydataset, PlotOrientation.VERTICAL, truefalsefalse);

        //jfreechart  图形变量,用来装载图形

        XYPlot xyplot = (XYPlot)jfreechart.getPlot();//xyplot  数轴变量,用来存放和设置数轴的信息

        XYBarRenderer xybarrenderer = (XYBarRenderer)xyplot.getRenderer();//xybarrenderer  图形方块变量

        StandardXYToolTipGenerator standardxytooltipgenerator = new StandardXYToolTipGenerator("{1} = {2}"new SimpleDateFormat("yyyy"), new DecimalFormat("0"));

        //standardxytooltipgenerator 数周数据生成变量,用来存放数轴数据

        xybarrenderer.setBaseToolTipGenerator(standardxytooltipgenerator);

        xybarrenderer.setMargin(0.10000000000000001D);

        DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis();//dateaxis 数值变量,用来设置数轴的数值的

        dateaxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);

        dateaxis.setLowerMargin(0.01D);

        dateaxis.setUpperMargin(0.01D);

        ChartUtilities.applyCurrentTheme(jfreechart);

        return jfreechart;

    }

    /**

     * 获得绘制条形图所需的数据

     * @return 绘制条形图所需的数据集

     */

    private static IntervalXYDataset createDataset()

    {

        List<Integer> list_name=new ArrayList<Integer>();//list_name 装载直方图各小块区间的容器

        list_name.add(1);

        list_name.add(2);

        list_name.add(3);

        list_name.add(4);

        list_name.add(5);

        int n=5;

        TimeSeries timeseries = new TimeSeries("Executions""Year""Count");//timeseries  时间变量,存放数据时间的

        List<Integer> li_name=list_name;//li_name 存放条形图各小块区间的容器

        List<Double> list_size=new ArrayList<Double>();//list_size 装载条形图各小块频数的容器

        list_size.add(23.0);

        list_size.add(13.0);

        list_size.add(25.0);

        list_size.add(12.0);

        list_size.add(18.0);

        List<Double> li_size=list_size;//li_size 存放条形图各区间频数的容器

        for(int i=0;i<n;i++){

        try

        {

            timeseries.add(new Year(li_name.get(i)), new Double(li_size.get(i)));

        }

        catch (Exception exception)

        {

            System.err.println(exception.getMessage());

        }//抛异常

        }

        TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(timeseries);//timeseriescollection  时间数集变量

        return timeseriescollection;

    }

    /**

     * 得到条形图各小块的个数

     * @return 直方图各小块的个数

     */

    /**

     * 设置条形图各小块的个数

     * @return 直方图各小块的个数

     */

    /**

     * 创建条形图面板

     * @param ChartPanel 图形面板变量

     * @return 返回直方图面板

     */

    public static JPanel createDemoPanel()

    {

        String Pictuer_name;

        Pictuer_name="Chart";

        return new ChartPanel(createChart(createDataset(),Pictuer_name));

    }

 

    public static void main(String args[])

    {

        /**

         * 绘制条形图

         * @author cuit

         * @return 返回直方图

         */

        String panel_name;

        panel_name="My Chart";

        XYBarChartDemo1 xybarchartdemo1 = new XYBarChartDemo1(panel_name);//xybarchartdemo1   构造方法实例变量

        xybarchartdemo1.pack();

        RefineryUtilities.centerFrameOnScreen(xybarchartdemo1);

        xybarchartdemo1.setVisible(true);

    }

}

</span>

 输出:

 

2.5导致算法异常

当y_size输入的个数大于x_name的个数会导致异常,系统会自动的将y_size多余的数值剔除掉

2.6代码的算法参考

类源码:见源程序:Panel. src. All_Pictuer. XYBarChartDemo1

本算法是通过输入绘制条形图的数据集来绘制出饼图的具体实现。

类和方法调用接口

见源程序:Panel. src. All_Pictuer. XYBarChartDemo1

XYBarChartDemo1.java 下包含如下方法:

getN_name()   //得到条形图各小块的个数

setN_name(int n_name)  //设置条形图各小块的个数

Input_Name()   //输入条形图各小块的名称

Input_Size()    //输入条形图各小块的频数

XYBarChartDemo1(String s)  //构造函数,创建面板用来存放图片

createDataset()  //获得绘制条形图所需的数据

createChart(IntervalXYDataset intervalxydataset)  //创建条形图

createDemoPanel()   //创建条形图面板

回到顶部

3 直方图算法描述


3.1 直方图算法基本描述

该算法是在给定一些数据集的情况下绘制出符合该数据集的直方图。

  1. 定义:直方图是用一个一个连续的长方形来表示的,每一个长方形代表一个特定的类,长方形的长度代表某种数值。
  2. 符号解释:无。
  3. 具体计算方法:该算法是利用JFreeChart里的jar包里的类和方法来绘制直方图的。

3.2算法的应用场景

在需要绘制直方图的时候使用该算法。

3.3算法的优缺点

  • 优点是可以很快速的建立一个直方图
  • 缺点是无法自由设置纵轴的标度。

3.4算法的输入输出

输入:

* @param  panel's name  string 表示面板名称  My Chart

* @param  histograme's name  string 表示图形名称  Chart

* @param  x's name  string  表示x轴的名称  My X

* @param  x_QuJian  double 表示各类名称  1 2 3 4 5 6 0

* @param  y_size  double  表示各类的频数 23 34 25 31 30 28 0

java代码实现:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

<span style="color: #000000;">package pictuer;

import java.awt.Dimension;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

import javax.swing.JPanel;

import org.jfree.chart.*;

import org.jfree.chart.axis.NumberAxis;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.chart.plot.XYPlot;

import org.jfree.chart.renderer.xy.XYBarRenderer;

import org.jfree.data.statistics.SimpleHistogramBin;

import org.jfree.data.statistics.SimpleHistogramDataset;

import org.jfree.data.xy.IntervalXYDataset;

import org.jfree.ui.ApplicationFrame;

import org.jfree.ui.RefineryUtilities;

public class HistogramDemo2 extends ApplicationFrame

{

    /**

     * 构造函数,用来创建面板用来存放图片

     * @param s 表示面板的名称

     */

    public HistogramDemo2(String s)

    {

        super(s);

        JPanel jpanel = createDemoPanel();//jpanel  创建面板的名称

        jpanel.setPreferredSize(new Dimension(500, 270));

        setContentPane(jpanel);

    }

    /**

     * 得到直方图各小块的个数

     * @return 直方图各小块的个数

     */

    /**

     * 获得绘制直方图所需的数据

     * @return 绘制饼图所需的数据集

     */

    private static IntervalXYDataset createDataset()

    {

        String x_name;

        x_name="X_Name";

        SimpleHistogramDataset simplehistogramdataset = new SimpleHistogramDataset(x_name);//simplehistogramdataset 装载直方图所需数据的数据集

        List<Double> list_size=new ArrayList<Double>();//list_size 装载条形图各小块频数的容器

        list_size.add(9.0);

        list_size.add(10.0);

        list_size.add(11.0);

        list_size.add(12.0);

        list_size.add(13.0);

        int n=5;

        List<Double> l_qujian=list_size;//l_qujian 存放直方图各小块区间的容器

        List<Integer> list_name=new ArrayList<Integer>();//list_name 装载直方图各小块区间的容器

        list_name.add(23);

        list_name.add(12);

        list_name.add(56);

        list_name.add(32);

        list_name.add(22);

        List<Integer> l_size=list_name;//l_size 存放直方图各区间频数的容器

        for(int i=0;i<n-1;i++){

            SimpleHistogramBin simplehistogrambin = new SimpleHistogramBin(l_qujian.get(i),l_qujian.get(i+1), truefalse);//simplehistogrambin  图形变量

            simplehistogrambin.setItemCount(l_size.get(i));

            simplehistogramdataset.addBin(simplehistogrambin);

        }

        return simplehistogramdataset;

    }

    /**

     * 创建直方图

     * @param intervalxydataset 装载直方图所需数据的数据集

     * @return 返回直方图

     */

    private static JFreeChart createChart(IntervalXYDataset intervalxydataset)

    {

        String h_name;

        h_name="Y_Name";

        JFreeChart jfreechart = ChartFactory.createHistogram(h_name, nullnull, intervalxydataset, PlotOrientation.VERTICAL, truetruefalse);

        //jfreechart  图形变量,用来装载图形

        XYPlot xyplot = (XYPlot)jfreechart.getPlot();//xyplot  数轴变量,用来存放和设置数轴的信息

        xyplot.setForegroundAlpha(0.85F);

        xyplot.setDomainPannable(true);

        xyplot.setRangePannable(true);

        NumberAxis numberaxis = (NumberAxis)xyplot.getRangeAxis();//numberaxis 数值变量,用来设置数轴的数值的

        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

        XYBarRenderer xybarrenderer = (XYBarRenderer)xyplot.getRenderer();//xybarrenderer  图形方块变量

        xybarrenderer.setDrawBarOutline(false);

        return jfreechart;

    }

    /**

     * 创建直方图面板

     * @return 返回直方图面板

     */

    public static JPanel createDemoPanel()

    {

        JFreeChart jfreechart = createChart(createDataset());//jfreechart 图形变量,通过图形数据和图形名称创建图形

        ChartPanel chartpanel = new ChartPanel(jfreechart);//chartpanel 图形面板变量

        chartpanel.setMouseWheelEnabled(true);

        return chartpanel;

    }

    public static void main(String args[])

    {

        /**

         * 绘制直方图

         * @author cuit

         * @return 返回直方图

         */

        String panel_name;

        panel_name="My Chart";

        HistogramDemo2 histogramdemo2 = new HistogramDemo2(panel_name);//histogramdemo2   构造方法实例变量

        histogramdemo2.pack();

        RefineryUtilities.centerFrameOnScreen(histogramdemo2);

        histogramdemo2.setVisible(true);

    }

}

</span>

 

输出:

 

3.5导致算法异常

当y_size输入的个数大于x_QuJian的个数会导致异常,系统会自动的将y_size多余的数值剔除掉。

3.6代码的算法参考

类源码:见源程序:Panel. src. All_Pictuer. HistogramDemo2

本算法是通过输入绘制直方图的数据集来绘制出饼图的具体实现。

类和方法调用接口

见源程序:Panel. src. All_Pictuer. HistogramDemo2

HistogramDemo2.java 下包含如下方法:

getN_qujian()  //得到直方图各小块的个数

setN_qujian(int n_qujian)  //设置直方图各小块的个数

Input_QuJian()   //输入直方图各小块的区间

Input_Size()    //输入直方图各小块的频数

HistogramDemo2(String s)  //构造函数,创建面板用来存放图片

createDataset()  //获得绘制直方图所需的数据

createChart(IntervalXYDataset intervalxydataset)   //创建直方图

createDemoPanel()   //创建直方图面板

回到顶部

4 折线图算法描述


4.1 折线图算法基本描述

当我们在处理存在负增长的数据时我们就不能用累计频数图了,因为累计频数图永远都是增长的,那么这个时候我们就该用到折线图了。

折线图:用来体现数据型数据的发展趋势的。

那么我们现在来看一下根据下面的这张表转换成折线图的画法吧。

该算法是在给定一些数据集的情况下绘制出符合该数据集的折线图。

  1. 定义:折线图用来体现数据型数据的发展趋势的。
  2. 符号解释:无。
  3. 具体计算方法:该算法是利用JFreeChart里的jar包里的类和方法来绘制折线图的。

4.2算法的应用场景

在需要绘制折线图的时候使用该算法。

4.3算法的优缺点

  • 优点是可以很快速的建立一个折线图
  • 缺点是所输入的各小块的名称时必须得转化成Year类型。

4.4算法的输入输出

输入:

* @param  Panel's name  string 表示面板名称  My Chart

* @param  Classes's name  string 表示类名称  Chart

* @param  pictuer's name  string  表示图形名称  Pictuer Chart

* @param  y's name  string  表示y轴的名称  Chart Y

* @param  x's name  string  表示x轴的名称  My X

* @param  x_name  string 表示各类名称  1 2 3 4 5 6 ##

* @param  y_size  double  表示各类的频数 23 34 25 31 30 28 0

java代码实现:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

<span style="color: #000000;">package pictuer;

import java.awt.*;

import java.awt.geom.Ellipse2D;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

import javax.swing.ImageIcon;

import javax.swing.JPanel;

import org.jfree.chart.*;

import org.jfree.chart.axis.NumberAxis;

import org.jfree.chart.plot.CategoryPlot;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.chart.renderer.category.LineAndShapeRenderer;

import org.jfree.chart.title.TextTitle;

import org.jfree.data.category.CategoryDataset;

import org.jfree.data.category.DefaultCategoryDataset;

import org.jfree.ui.*;

public class LineChartDemo1 extends ApplicationFrame

{

    /**

     * 构造函数,用来创建面板用来存放图片

     * @param s 表示面板的名称

     */

    public LineChartDemo1(String s)

    {

        super(s);

        JPanel jpanel = createDemoPanel();//jpanel  创建面板的名称

        jpanel.setPreferredSize(new Dimension(500, 270));

        setContentPane(jpanel);

    }

    /**

     * 获得绘制折线图所需的数据

     * @return 绘制饼图所需的数据集

     */

    private static CategoryDataset createDataset()

    {

        DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();//defaultcategorydataset 装载折线图所需数据的数据集

        List<String> list_name=new ArrayList<String>();//list_name 装载直方图各小块区间的容器

        list_name.add("One");

        list_name.add("Two");

        list_name.add("Three");

        list_name.add("Four");

        list_name.add("Five");

        int n=5;

        List<String> li_name=list_name;//li_name 存放折线图各点的容器

        List<Double> list_size=new ArrayList<Double>();//list_size 装载条形图各小块频数的容器

        list_size.add(23.0);

        list_size.add(13.0);

        list_size.add(25.0);

        list_size.add(12.0);

        list_size.add(18.0);

        List<Double> li_size=list_size;//li_size 存放折线图各点频数的容器

        String Classess_name;

        Classess_name="Class";

        for(int i=0;i<n;i++){

            defaultcategorydataset.addValue(new Double(li_size.get(i)),Classess_name,li_name.get(i));//存放数据

        }

        return defaultcategorydataset;

    }

    /**

     * 创建折线图

     * @param categorydataset 装载折线图所需数据的数据集

     * @return 返回直方图

     */

    private static JFreeChart createChart(CategoryDataset categorydataset)

    {

        String Pictuer_name;

        Pictuer_name="My Chart";

        String y_name;

        y_name="Chart";

        JFreeChart jfreechart = ChartFactory.createLineChart(Pictuer_name, null,y_name, categorydataset, PlotOrientation.VERTICAL, falsetruefalse);

        //jfreechart  图形变量,用来装载图形

        CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();//categoryplot  数轴变量,用来存放和设置数轴的信息

        categoryplot.setRangePannable(true);

        categoryplot.setRangeGridlinesVisible(false);

        NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();//numberaxis 数值变量,用来设置数轴的数值的

        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

        ChartUtilities.applyCurrentTheme(jfreechart);

        LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();//lineandshaperenderer  图形方块变量

        lineandshaperenderer.setBaseShapesVisible(true);

        lineandshaperenderer.setDrawOutlines(true);

        lineandshaperenderer.setUseFillPaint(true);

        lineandshaperenderer.setBaseFillPaint(Color.white);

        lineandshaperenderer.setSeriesStroke(0, new BasicStroke(3F));

        lineandshaperenderer.setSeriesOutlineStroke(0, new BasicStroke(2.0F));

        lineandshaperenderer.setSeriesShape(0, new java.awt.geom.Ellipse2D.Double(-5D, -5D, 10D, 10D));

        return jfreechart;

    }

    /**

     * 创建折线图面板

     * @return 返回折线图面板

     */

    public static JPanel createDemoPanel()

    {

        JFreeChart jfreechart = createChart(createDataset());//jfreechart 图形变量,通过图形数据和图形名称创建图形

        ChartPanel chartpanel = new ChartPanel(jfreechart);//chartpanel 图形面板变量

        chartpanel.setMouseWheelEnabled(true);

        return chartpanel;

    }

    public static void main(String args[])

    {

        /**

         * 绘制折线图

         * @author cuit

         * @return 返回直方图

         */

        String Panel_name;

        Panel_name="Chart";

        LineChartDemo1 linechartdemo1 = new LineChartDemo1(Panel_name);//linechartdemo1   构造方法实例变量

        linechartdemo1.pack();

        RefineryUtilities.centerFrameOnScreen(linechartdemo1);

        linechartdemo1.setVisible(true);

    }

}

</span>

 输出:

 

4.5导致算法异常

当y_size输入的个数大于x_name的个数会导致异常,系统会自动的将y_size多余的数值剔除掉

4.6代码的算法参考

类源码:见源程序:Panel. src. All_Pictuer. LineChartDemo1

本算法是通过输入绘制折线图的数据集来绘制出饼图的具体实现。

类和方法调用接口

见源程序:Panel. src. All_Pictuer. LineChartDemo1

LineChartDemo1.java 下包含如下方法:

getN_name()  //得到折线图点的个数

setN_name(int n_name)  //设置直折线图点的个数

Input_Name()   //输入折线图各点的区间

Input_Size()    //输入折线图各点的频数

LineChartDemo1(String s)  //构造函数,创建面板用来存放图片

createDataset()  //获得绘制折线图所需的数据

createChart(CategoryDataset categorydataset)   //创建折线图

createDemoPanel()   //创建折线图面板

回到顶部

5 箱线图算法描述


5.1 箱线图算法基本描述

该算法是在给定一些数据集的情况下绘制出符合该数据集的箱线图。

  1. 定义:箱线图是用来显示数据的全距、四分位距以及中位数的图形。
  2. 符号解释:无。
  3. 具体计算方法:该算法是利用JFreeChart里的jar包里的类和方法来绘制箱线图的。

5.2算法的应用场景

在需要绘制箱线图的时候使用该算法。

5.3算法的优缺点

优点是可以很快速的建立一个箱线图。

5.4算法的输入输出

输入:

* @param  panel's name  string 表示面板名称 My Chart

* @param  x's name  string 表示x轴名称  My X

* @param  y's name  string 表示y轴名称  My Y

* @param  the max  double  表示最大值  1

* @param  the min  double  表示最小值  33

* @param  the under_four  double  表示下四分位数  10

* @param  the over_four   double  表示上四分位数  15

* @param  Pictuer's name  string 表示图片名称  Chart

java代码实现:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

<span style="color: #000000;">package pictuer;

import java.awt.Dimension;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

import javax.swing.JPanel;

import org.jfree.chart.*;

import org.jfree.chart.axis.NumberAxis;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.chart.plot.XYPlot;

import org.jfree.chart.renderer.xy.XYBarRenderer;

import org.jfree.data.statistics.SimpleHistogramBin;

import org.jfree.data.statistics.SimpleHistogramDataset;

import org.jfree.data.xy.IntervalXYDataset;

import org.jfree.ui.ApplicationFrame;

import org.jfree.ui.RefineryUtilities;

public class HistogramDemo2 extends ApplicationFrame

{

    /**

     * 构造函数,用来创建面板用来存放图片

     * @param s 表示面板的名称

     */

    public HistogramDemo2(String s)

    {

        super(s);

        JPanel jpanel = createDemoPanel();//jpanel  创建面板的名称

        jpanel.setPreferredSize(new Dimension(500, 270));

        setContentPane(jpanel);

    }

    /**

     * 得到直方图各小块的个数

     * @return 直方图各小块的个数

     */

    /**

     * 获得绘制直方图所需的数据

     * @return 绘制饼图所需的数据集

     */

    private static IntervalXYDataset createDataset()

    {

        String x_name;

        x_name="X_Name";

        SimpleHistogramDataset simplehistogramdataset = new SimpleHistogramDataset(x_name);//simplehistogramdataset 装载直方图所需数据的数据集

        List<Double> list_size=new ArrayList<Double>();//list_size 装载条形图各小块频数的容器

        list_size.add(9.0);

        list_size.add(10.0);

        list_size.add(11.0);

        list_size.add(12.0);

        list_size.add(13.0);

        int n=5;

        List<Double> l_qujian=list_size;//l_qujian 存放直方图各小块区间的容器

        List<Integer> list_name=new ArrayList<Integer>();//list_name 装载直方图各小块区间的容器

        list_name.add(23);

        list_name.add(12);

        list_name.add(56);

        list_name.add(32);

        list_name.add(22);

        List<Integer> l_size=list_name;//l_size 存放直方图各区间频数的容器

        for(int i=0;i<n-1;i++){

            SimpleHistogramBin simplehistogrambin = new SimpleHistogramBin(l_qujian.get(i),l_qujian.get(i+1), truefalse);//simplehistogrambin  图形变量

            simplehistogrambin.setItemCount(l_size.get(i));

            simplehistogramdataset.addBin(simplehistogrambin);

        }

        return simplehistogramdataset;

    }

    /**

     * 创建直方图

     * @param intervalxydataset 装载直方图所需数据的数据集

     * @return 返回直方图

     */

    private static JFreeChart createChart(IntervalXYDataset intervalxydataset)

    {

        String h_name;

        h_name="Y_Name";

        JFreeChart jfreechart = ChartFactory.createHistogram(h_name, nullnull, intervalxydataset, PlotOrientation.VERTICAL, truetruefalse);

        //jfreechart  图形变量,用来装载图形

        XYPlot xyplot = (XYPlot)jfreechart.getPlot();//xyplot  数轴变量,用来存放和设置数轴的信息

        xyplot.setForegroundAlpha(0.85F);

        xyplot.setDomainPannable(true);

        xyplot.setRangePannable(true);

        NumberAxis numberaxis = (NumberAxis)xyplot.getRangeAxis();//numberaxis 数值变量,用来设置数轴的数值的

        numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

        XYBarRenderer xybarrenderer = (XYBarRenderer)xyplot.getRenderer();//xybarrenderer  图形方块变量

        xybarrenderer.setDrawBarOutline(false);

        return jfreechart;

    }

    /**

     * 创建直方图面板

     * @return 返回直方图面板

     */

    public static JPanel createDemoPanel()

    {

        JFreeChart jfreechart = createChart(createDataset());//jfreechart 图形变量,通过图形数据和图形名称创建图形

        ChartPanel chartpanel = new ChartPanel(jfreechart);//chartpanel 图形面板变量

        chartpanel.setMouseWheelEnabled(true);

        return chartpanel;

    }

    public static void main(String args[])

    {

        /**

         * 绘制直方图

         * @author cuit

         * @return 返回直方图

         */

        String panel_name;

        panel_name="My Chart";

        HistogramDemo2 histogramdemo2 = new HistogramDemo2(panel_name);//histogramdemo2   构造方法实例变量

        histogramdemo2.pack();

        RefineryUtilities.centerFrameOnScreen(histogramdemo2);

        histogramdemo2.setVisible(true);

    }

}

</span>

 

输出:

 

5.5导致算法异常

当所输入的上四分位数比下四分位数大或者最小值比最大值大的时候画出的图形将不再是箱线图了。

5.6代码的算法参考

类源码:见源程序:Panel. src. All_Pictuer. BoxAndWhiskerChartDemo2

本算法是通过输入绘制箱线图的数据集来绘制出饼图的具体实现。

类和方法调用接口

见源程序:Panel. src. All_Pictuer. BoxAndWhiskerChartDemo2

BoxAndWhiskerChartDemo2.java 下包含如下方法:

BoxAndWhiskerChartDemo2(String s)  //构造函数,创建面板用来存放图片

createDataset()  //获得绘制箱线图所需的数据

createChart(BoxAndWhiskerXYDataset boxandwhiskerxydataset)  //创建箱线图

createDemoPanel()   //创建箱线图面板

回到顶部

6 正态分布图算法描述


6.1 正态分布图算法基本描述

该算法是在给定一些数据集的情况下绘制出符合该数据集的正态分布图。

  1. 定义:正态分布具有钟型曲线,曲线对称,中央部位的概率密度最大。
  2. 符号解释:无。
  3. 具体计算方法:该算法是利用JFreeChart里的jar包里的类和方法来绘制正态分布图的。

6.2算法的应用场景

在需要绘制正态分布图的时候使用该算法。

6.3算法的优缺点

  • 优点是可以很快速的建立一个正态分布图
  • 缺点是无法直接读出方差。

6.4算法的输入输出

输入:

* @param  Pie's name  string 表示面板名称 My Chart

* @param  u  double  表示均值  2

* @param  squal_t  double  表示方差  0.25

* @param  Line's name  string 表示线条名称  Chart

* @param  Pictuer's name  string 表示图片名称 Pictuer Chart

java代码实现:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

<span style="color: #000000;">package pictuer;

import java.awt.Dimension;

import java.util.Scanner;

import javax.swing.JPanel;

import org.jfree.chart.*;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.data.function.NormalDistributionFunction2D;

import org.jfree.data.general.DatasetUtilities;

import org.jfree.data.xy.XYDataset;

import org.jfree.ui.ApplicationFrame;

import org.jfree.ui.RefineryUtilities;

public class NormalDistributionDemo1 extends ApplicationFrame

{

    /**

     * 构造函数,用来创建面板用来存放图片

     * @param s 表示面板的名称

     */

    public NormalDistributionDemo1(String s)

    {

        super(s);

        JPanel jpanel = createDemoPanel();//jpanel  创建面板的名称

        jpanel.setPreferredSize(new Dimension(500, 270));

        setContentPane(jpanel);

    }

    /**

     * 创建正态分布图面板

     * @return 返回正态分布图面板

     */

    public static JPanel createDemoPanel()

    {

        JFreeChart jfreechart = createChart(createDataset());//jfreechart 图形变量,通过图形数据和图形名称创建图形

        return new ChartPanel(jfreechart);//ChartPanel 图形面板变量

    }

    /**

     * 获得绘制正态分布图所需的数据

     * @return 返回正态分布图所需的数据

     */

    public static XYDataset createDataset()

    {

        Double u=2.0;

        Double squal_t=0.25;

        NormalDistributionFunction2D normaldistributionfunction2d = new NormalDistributionFunction2D(u, squal_t);

        //normaldistributionfunction2d  数据变量,用来存放数轴的数据

        String Line_name;

        Line_name="Chart";

        XYDataset xydataset = DatasetUtilities.sampleFunction2D(normaldistributionfunction2d, -5D, 5D, 100, Line_name);

        //xydataset  数据变量,用来存放和设置数轴的数据

        return xydataset;

    }

    /**

     * 创建正态分布图

     * @param xydataset  数据变量,用来存放和设置数轴的数据

     * @return 返回正态分布图

     */

    public static JFreeChart createChart(XYDataset xydataset)

    {

        String Pictuer_name;

        Pictuer_name="Chart";

        JFreeChart jfreechart = ChartFactory.createXYLineChart(Pictuer_name, "X""Y", xydataset, PlotOrientation.VERTICAL, truetruefalse);

        //jfreechart  图形变量,用来装载图形

        return jfreechart;

    }

    public static void main(String args[])

    {

        /**

         * 绘制正态分布图

         * @author cuit

         * @return 返回正态分布图

         */

        String Pie_name;

        Pie_name="My Chart";

        NormalDistributionDemo1 normaldistributiondemo1 = new NormalDistributionDemo1(Pie_name);

        //normaldistributiondemo1   构造方法实例变量

        normaldistributiondemo1.pack();

        RefineryUtilities.centerFrameOnScreen(normaldistributiondemo1);

        normaldistributiondemo1.setVisible(true);

    }

}

</span>

 输出:

6.5导致算法异常

无。

6.6代码的算法参考

类源码:见源程序:Panel. src. All_Pictuer. NormalDistributionDemo1

本算法是通过输入正态分布图的数据集来绘制出饼图的具体实现。

类和方法调用接口

见源程序:Panel. src. All_Pictuer. NormalDistributionDemo1

NormalDistributionDemo1.java 下包含如下方法:

NormalDistributionDemo1(String s)  //构造函数,创建面板用来存放图片

createDataset()  //获得绘制正态分布图所需的数据

createChart(XYDataset xydataset)   //创建正态分布图

createDemoPanel()   //创建正态分布图面板

回到顶部

7 本章总结


 7.1 基本概念

7.2 各种图形优缺点

 

回到顶部

8 开源共享 


 PPT:http://yunpan.cn/cFJWt8MBFduhX  访问密码 ad2e

开源代码:http://yunpan.cn/cFJW5EazGX5mz  访问密码 9304

时间: 2024-08-03 03:44:52

【程序员眼中的统计学(1)】信息图形化:第一印象的相关文章

【程序员眼中的统计学(12)】相关与回归:我的线条如何? (转)

阅读目录 目录 1 算法的基本描述 2 算法的应用场景. 3算法的优点和缺点 4 算法的输入数据.中间结果以及输出结果 5 算法的代码参考 6 共享 相关与回归:我的线条如何? 作者 白宁超 2015年10月25日22:16:07 摘要:程序员眼中的统计学系列是作者和团队共同学习笔记的整理.首先提到统计学,很多人认为是经济学或者数学的专利,与计算机并没有交集.诚然在传统学科中,其在以上学科发挥作用很大.然而随着科学技术的发展和机器智能的普及,统计学在机器智能中的作用越来越重要.本系列统计学的学习

【程序员眼中的统计学(7)】正态分布的运用:正态之美

正态分布的运用:正态之美 1正态分布描述 正态分布是最重要的一种概率分布.正态分布概念是由德国的数学家和天文学家Moivre(棣莫弗)于1733年受次提出的,但由于德国数学家Gauss(高斯)率先将其应用于天文学家研究,故正态分布又叫高斯分布.正态分布起源于误差分析,早期的天文学家通过长期对一些天体的观测收集到了大量数据,并利用这些数据天体运动的物理模型,其中第谷与开 普勒在建模中提出了一条原则-"模型选择的最终标准是其与观测数据的符合程度",这个"符合程度"实质上

【程序员眼中的统计学(6.2)】原创实现二项分布算法以及应用

 二项分布算法 1 算法的基本描述,包括:定义.符号解释.具体的计算方法. 1.1 算法描述 在进行一系列相互独立实验,每次既有成功,又有失败的可能,且单次实验成功概率相等.在一系列试验中求成功的次数.这种情况下适用于本算法. 本算法中在n次伯努利试验中:试验n次得到r次成功的概率.二项分布的期望.二项分布方差的具体实现. 1.2 定义 在相互独立事件中,每道题答对概率为p,答错概率为q.在n个问题中答对r个问题的概率为:  这类问题称之为二项分布.表达式为:X~B(n,p) 1.3 符号解释

【程序员眼中的统计学(6.1)】原创实现几何分布算法以及应用

 几何分布算法 1 算法的基本描述,包括:定义.符号解释.具体的计算方法. 1.1 算法描述 在进行一系列相互独立实验,每次既有成功,又有失败的可能,且单次实验成功概率相等.为了取得第一次成功需要进行多少次实验.这种情况下适用于本算法. 本算法中在n次伯努利试验中:试验r次得到第一次成功的概率.试验r次以上才第一次成功的概率.试验r次或者不到r次才第一次成功.几何分布的期望.几何分布方差的具体实现. 1.2 定义 如果p代表成功概率,则1-p即q代表失败概率使用以下 公式叫做概率的几何分布. 1

【程序员眼中的统计学(8)】统计抽样的运用:抽取样本

统计抽样的运用:抽取样本 1总体和样本 1.1总体和样本及相关概念 总体(population):统计学上指的是准备进行测量.研究或分析的整个群体.可以是人.得分,也可以是糖果 - 关键在于总体指的是所有对象.总体可分为有限总体和无限总体. 个体:组成总体的每一个考查对象. 样本(Sample):从总体中选取的一部分对象,是总体的一个子集.样本具有代表性,能在一定程度上反映总体特性. 抽样(Sampling):从总体中抽取部分个体的过程成为抽样,强调的是过程. 样本容量(Sample Size)

【程序员眼中的统计学(9)】总体和样本的估计:进行预测

总体和样本的估计:进行预测 1样本均值描述 1.1样本均值的定义 样本均值是我们能为总体均值做出的最好估计.在我们根据现有信息得到的数值中,样本均值是最有可能被作为总体均值的数值.另外样本均值被称为总体均值的点估计量.也就是说,作为一个基于样本数据的计算结果,它给出了总体均值的良好估计. 1.2样本均值符号定义和公式 这张图显示了样本的分布情况以及可以基于样本而期望的总体分布情况.根据已知的情况,样本均值是我们能为总体均值做出的最好估计,所以在这我们把样本均值称为总体均值的点估计量. 符号(读作

【程序员眼中的统计学(6)】几何分布、二项分布及泊松分布:坚持离散

几何分布.二项分布及泊松分布:坚持离散 1 回顾题引 1 问题? 小明滑雪: 每次(独立事件)试滑成功的概率0.2,不成功的概率0.8.则 成功 失败 0.2 0.8 1.试滑两次成功的概率?2.试滑一次或两次猜中的概率?3.试滑10000次,首次成功的概率?4.试滑第10000次以上成功的概率? 2 概率树: 3 解答: 1.概率树求概率 设X最终试滑成功次数,则:P(X=1)=P(第1次试滑成功)=0.2 [注:试滑一次成功的概率]P(X=2)=P(第1次试滑失败AND第2试滑成功)=0.2

【程序员眼中的统计学(4)】离散概率分布的运用:善用期望

离散概率分布的运用:善用期望  1 离散概率分布 1  定义 设离散型随机变量X所有可能得取值 Xi (i=1,2,3--.n),且事件{X=xi }的概率为P{X=xi }= pi ,此称为离散型随机变量的概率分布或分布列,即离散概率分布.用表格可表示: 作为一个离散概率分布,应满足以下两个性质: 在日常生活中此类例子不胜枚举,比如,扔一枚或多枚硬币,出现正面朝上的次数. 2    基本概念 离散随机变量 若一个随机变量X的所有可能的取值为有限个或无限可数个, 则称它为离散型随机变量.例如,玩

程序员眼中的统计学(3)】概率计算:把握机会

概率计算:把握机会 1 随机试验 1 随机试验的定义 我们将对自然现象的一次观察或进行一次科学试验称为试验. 2 随机试验的举例 举例1:硬币试验 E1: 抛一枚硬币,观察正(H)反(T) 面的情况. E2: 将一枚硬币抛三次,观察正反面出现的情况. E3: 将一枚硬币抛三次,观察出现正面的情况. E4: 电话交换台一分钟内接到的呼唤次数. E5: 在一批灯泡中任取一只, 测试它的寿命. 举例2:数学家去赌场 新闻:数学家3年赌赢156亿人民币,数学家在赌场里有什么优势? 令19名数学家惊喜的是