转载

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

信息图形化:第一印象

作者 白宁超
2015年10月13日23:23:13

摘要: 程序员眼中的统计学系列是作者和团队共同学习笔记的整理。首先提到统计学,很多人首先想到的是经济学或者会计学亦或是数学的专利。诚然在传统学科中,其在以上学科发挥作用很大。然而在大数据时代的今天,统计学在计算机科学技术和大数据中的作用越来越重要。本系统统计学的学习基于 《深入浅出统计学》 一书,又超越书本( 在知识理解深化,或者说更偏向于程序员学习的取舍与深化 )。对于每章节内容,有自己做的专门的ppt讲稿和对书中代码的实现,诸如: 箱线图、折线图、曲线图。饼状图等图形的java代码实现,也包括二项分布、几何分布、泊松分布等常见分布的java实现,当然针对抽样和检验和概率论等很多核心知识也是少不了的 。无论做传统的应用还是大数据 的开发,统计学知识的技术优势很凸显。诸如: 机器学习中数据分类,会用到里面异常值处理和对算法的抽样检验,聚类算法的异常值处理等。本系列博客适用于有一定数学基础并且应用数据分析、数据挖掘、机器学习、算法分析、架构设计方面基础入门资料, 另外bat公司数据分析笔试题也可作为参考 。最后感谢团队所有人的参与 。( 本文原创,转载注明出处:信息图形化:第一印象  )

目录

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

【程序员眼中的统计学(2)】 集中趋势度量:分散性、变异性、强大的距

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

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

【程序员眼中的统计学(5)】 排列组合:排序、排位、排

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

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

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

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

【程序员眼中的统计学(10)】 假设检验的运用:研究证据

【程序员眼中的统计学(11)】卡方分布的应用

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

0 引言

在大学时期我打了三年的暑假工,我的工作就是检测数码产品的屏幕的油墨厚度,每天都有好几万的数据报表,面对着这大量的待处理数据,我们就利用了图表来进行统计。

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

1 饼图算法描述

1.1  饼图算法基本描述

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  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代码实现:

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, false, true, false);//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);  } }

输出结果:

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

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.1  条形图算法基本描述

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

  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代码实现:

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, true, false, false);   //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);  } }

输出:

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

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.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代码实现:

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), true, false);//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, null, null, intervalxydataset, PlotOrientation.VERTICAL, true, true, false);   //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);  } }

输出:

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

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.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代码实现:

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, false, true, false);   //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);  } }

输出:

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

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.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代码实现:

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), true, false);//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, null, null, intervalxydataset, PlotOrientation.VERTICAL, true, true, false);   //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);  } }

输出:

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

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.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代码实现:

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, true, true, false);   //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);  } }

输出:

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

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 基本概念

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

7.2 各种图形优缺点

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

8 开源共享 

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

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

正文到此结束
Loading...