用python做频数分析_使用Python进行描述性统计

2 使用NumPy和SciPy进行数值分析

2.1 基本概念

copycode.gif

1 from numpy import array

2 from numpy.random import normal, randint

3 #使用List来创造一组数据

4 data = [1, 2, 3]

5 #使用ndarray来创造一组数据

6 data = array([1, 2, 3])

7 #创造一组服从正态分布的定量数据

8 data = normal(0, 10, size=10)

9 #创造一组服从均匀分布的定性数据

10 data = randint(0, 10, size=10)

copycode.gif

2.2 中心位置(均值、中位数、众数)

数据的中心位置是我们最容易想到的数据特征。借由中心位置,我们可以知道数据的一个平均情况,如果要对新数据进行预测,那么平均情况是非常直观地选择。数据的中心位置可分为均值(Mean),中位数(Median),众数(Mode)。其中均值和中位数用于定量的数据,众数用于定性的数据。

对于定量数据(Data)来说,均值是总和除以总量(N),中位数是数值大小位于中间(奇偶总量处理不同)的值:

927391-20160428155538564-1826064332.png

均值相对中位数来说,包含的信息量更大,但是容易受异常的影响。使用NumPy计算均值与中位数:

1 from numpy import mean, median

2

3 #计算均值

4 mean(data)

5 #计算中位数

6 median(data)

对于定性数据来说,众数是出现次数最多的值,使用SciPy计算众数:

1 from scipy.stats import mode

2

3 #计算众数

4 mode(data)

2.3 发散程度(极差、方差、标准差、变异系数)

对数据的中心位置有所了解以后,一般我们会想要知道数据以中心位置为标准有多发散。如果以中心位置来预测新数据,那么发散程度决定了预测的准确性。数据的发散程度可用极差(PTP)、方差(Variance)、标准差(STD)、变异系数(CV)来衡量,它们的计算方法如下:

927391-20160428155602408-1376438756.png

极差是只考虑了最大值和最小值的发散程度指标,相对来说,方差包含了更多的信息,标准差基于方差但是与原始数据同量级,变异系数基于标准差但是进行了无量纲处理。使用NumPy计算极差、方差、标准差和变异系数:

copycode.gif

1 from numpy import mean, ptp, var, std

2

3 #极差

4 ptp(data)

5 #方差

6 var(data)

7 #标准差

8 std(data)

9 #变异系数

10 mean(data) / std(data)

copycode.gif

2.4 偏差程度(z-分数)

之前提到均值容易受异常值影响,那么如何衡量偏差,偏差到多少算异常是两个必须要解决的问题。定义z-分数(Z-Score)为测量值距均值相差的标准差数目:

927391-20160428160610173-602551581.png

当标准差不为0且不为较接近于0的数时,z-分数是有意义的,使用NumPy计算z-分数:

1 from numpy import mean, std

2

3 #计算第一个值的z-分数

4 (data[0]-mean(data)) / std(data)

通常来说,z-分数的绝对值大于3将视为异常。

2.5 相关程度

有两组数据时,我们关心这两组数据是否相关,相关程度有多少。用协方差(COV)和相关系数(CORRCOEF)来衡量相关程度:

927391-20160428164241783-360115652.png

协方差的绝对值越大表示相关程度越大,协方差为正值表示正相关,负值为负相关,0为不相关。相关系数是基于协方差但进行了无量纲处理。使用NumPy计算协方差和相关系数:

copycode.gif

1 from numpy import array, cov, corrcoef

2

3 data = array([data1, data2])

4

5 #计算两组数的协方差

6 #参数bias=1表示结果需要除以N,否则只计算了分子部分

7 #返回结果为矩阵,第i行第j列的数据表示第i组数与第j组数的协方差。对角线为方差

8 cov(data, bias=1)

9

10 #计算两组数的相关系数

11 #返回结果为矩阵,第i行第j列的数据表示第i组数与第j组数的相关系数。对角线为1

12 corrcoef(data)

copycode.gif

2.6 回顾

方法

说明

numpy

array

创造一组数

numpy.random

normal

创造一组服从正态分布的定量数

numpy.random

randint

创造一组服从均匀分布的定性数

numpy

mean

计算均值

numpy

median

计算中位数

scipy.stats

mode

计算众数

numpy

ptp

计算极差

numpy

var

计算方差

numpy

std

计算标准差

numpy

cov

计算协方差

numpy

corrcoef

计算相关系数

3 使用Matplotlib进行图分析

3.1 基本概念

使用图分析可以更加直观地展示数据的分布(频数分析)和关系(关系分析)。柱状图和饼形图是对定性数据进行频数分析的常用工具,使用前需将每一类的频数计算出来。直方图和累积曲线是对定量数据进行频数分析的常用工具,直方图对应密度函数而累积曲线对应分布函数。散点图可用来对两组数据的关系进行描述。在没有分析目标时,需要对数据进行探索性的分析,箱形图将帮助我们完成这一任务。

在此,我们使用一组容量为10000的男学生身高,体重,成绩数据来讲解如何使用Matplotlib绘制以上图形,创建数据的代码如下:

ContractedBlock.gif View Code

3.2 频数分析

3.2.1 定性分析(柱状图、饼形图)

柱状图是以柱的高度来指代某种类型的频数,使用Matplotlib对成绩这一定性变量绘制柱状图的代码如下:

copycode.gif

1 from matplotlib import pyplot

2

3 #绘制柱状图

4 def drawBar(grades):

5 xticks = ['A', 'B', 'C', 'D', 'E']

6 gradeGroup = {}

7 #对每一类成绩进行频数统计

8 for grade in grades:

9 gradeGroup[grade] = gradeGroup.get(grade, 0) + 1

10 #创建柱状图

11 #第一个参数为柱的横坐标

12 #第二个参数为柱的高度

13 #参数align为柱的对齐方式,以第一个参数为参考标准

14 pyplot.bar(range(5), [gradeGroup.get(xtick, 0) for xtick in xticks], align='center')

15

16 #设置柱的文字说明

17 #第一个参数为文字说明的横坐标

18 #第二个参数为文字说明的内容

19 pyplot.xticks(range(5), xticks)

20

21 #设置横坐标的文字说明

22 pyplot.xlabel('Grade')

23 #设置纵坐标的文字说明

24 pyplot.ylabel('Frequency')

25 #设置标题

26 pyplot.title('Grades Of Male Students')

27 #绘图

28 pyplot.show()

29

30 drawBar(grades)

copycode.gif

绘制出来的柱状图的效果如下:

927391-20160429201237207-2030580209.png

而饼形图是以扇形的面积来指代某种类型的频率,使用Matplotlib对成绩这一定性变量绘制饼形图的代码如下:

copycode.gif

1 from matplotlib import pyplot

2

3 #绘制饼形图

4 def drawPie(grades):

5 labels = ['A', 'B', 'C', 'D', 'E']

6 gradeGroup = {}

7 for grade in grades:

8 gradeGroup[grade] = gradeGroup.get(grade, 0) + 1

9 #创建饼形图

10 #第一个参数为扇形的面积

11 #labels参数为扇形的说明文字

12 #autopct参数为扇形占比的显示格式

13 pyplot.pie([gradeGroup.get(label, 0) for label in labels], labels=labels, autopct='%1.1f%%')

14 pyplot.title('Grades Of Male Students')

15 pyplot.show()

16

17 drawPie(grades)

copycode.gif

绘制出来的饼形图效果如下:

927391-20160429201615660-1589885591.png

3.2.2 定量分析(直方图、累积曲线)

直方图类似于柱状图,是用柱的高度来指代频数,不同的是其将定量数据划分为若干连续的区间,在这些连续的区间上绘制柱。使用Matplotlib对身高这一定量变量绘制直方图的代码如下:

copycode.gif

1 from matplotlib import pyplot

2

3 #绘制直方图

4 def drawHist(heights):

5 #创建直方图

6 #第一个参数为待绘制的定量数据,不同于定性数据,这里并没有事先进行频数统计

7 #第二个参数为划分的区间个数

8 pyplot.hist(heights, 100)

9 pyplot.xlabel('Heights')

10 pyplot.ylabel('Frequency')

11 pyplot.title('Heights Of Male Students')

12 pyplot.show()

13

14 drawHist(heights)

copycode.gif

直方图对应数据的密度函数,由于身高变量是属于服从正态分布的,从绘制出来的直方图上也可以直观地看出来:

927391-20160429202401628-109601272.png

使用Matplotlib对身高这一定量变量绘制累积曲线的代码如下:

copycode.gif

1 from matplotlib import pyplot

2

3 #绘制累积曲线

4 def drawCumulativeHist(heights):

5 #创建累积曲线

6 #第一个参数为待绘制的定量数据

7 #第二个参数为划分的区间个数

8 #normed参数为是否无量纲化

9 #histtype参数为'step',绘制阶梯状的曲线

10 #cumulative参数为是否累积

11 pyplot.hist(heights, 20, normed=True, histtype='step', cumulative=True)

12 pyplot.xlabel('Heights')

13 pyplot.ylabel('Frequency')

14 pyplot.title('Heights Of Male Students')

15 pyplot.show()

16

17 drawCumulativeHist(heights)

copycode.gif

累积曲线对应数据的分布函数,由于身高变量是属于服从正态分布的,从绘制出来的累积曲线图上也可以直观地看出来:

927391-20160429202933988-442612842.png

3.3 关系分析(散点图)

在散点图中,分别以自变量和因变量作为横纵坐标。当自变量与因变量线性相关时,在散点图中,点近似分布在一条直线上。我们以身高作为自变量,体重作为因变量,讨论身高对体重的影响。使用Matplotlib绘制散点图的代码如下:

copycode.gif

from matplotlib import pyplot

#绘制散点图

def drawScatter(heights, weights):

#创建散点图

#第一个参数为点的横坐标

#第二个参数为点的纵坐标

pyplot.scatter(heights, weights)

pyplot.xlabel('Heights')

pyplot.ylabel('Weights')

pyplot.title('Heights & Weights Of Male Students')

pyplot.show()

drawScatter(heights, weights)

copycode.gif

我们在创建数据时,体重这一变量的确是由身高变量通过线性回归产生,绘制出来的散点图如下:

927391-20160429203601535-1129523393.png

3.4 探索分析(箱形图)

在不明确数据分析的目标时,我们对数据进行一些探索性的分析,通过我们可以知道数据的中心位置,发散程度以及偏差程度。使用Matplotlib绘制关于身高的箱形图的代码如下:

copycode.gif

1 from matplotlib import pyplot

2

3 #绘制箱形图

4 def drawBox(heights):

5 #创建箱形图

6 #第一个参数为待绘制的定量数据

7 #第二个参数为数据的文字说明

8 pyplot.boxplot([heights], labels=['Heights'])

9 pyplot.title('Heights Of Male Students')

10 pyplot.show()

11

12 drawBox(heights)

copycode.gif

绘制出来的箱形图中,包含3种信息:

Q2所指的红线为中位数

Q1所指的蓝框下侧为下四分位数,Q3所指的蓝框上侧为上四分位数,Q3-Q1为四分为差。四分位差也是衡量数据的发散程度的指标之一。

上界线和下界线是距离中位数1.5倍四分位差的线,高于上界线或者低于下界线的数据为异常值。

927391-20160429204534285-1040138484.png

3.5 对比分析

3.6 回顾

方法

说明

bar

柱状图

pie

饼形图

hist

直方图&累积曲线

scatter

散点图

boxplot

箱形图

xticks

设置柱的文字说明

xlabel

横坐标的文字说明

ylabel

纵坐标的文字说明

title

标题

show

绘图

4 总结

描述性统计是容易操作,直观简洁的数据分析手段。但是由于简单,对多元变量的关系难以描述。现实生活中,自变量通常是多元的:决定体重不仅有身高,还有饮食习惯,肥胖基因等等因素。通过一些高级的数据处理手段,我们可以对多元变量进行处理,例如特征工程中,可以使用互信息方法来选择多个对因变量有较强相关性的自变量作为特征,还可以使用主成分分析法来消除一些冗余的自变量来降低运算复杂度。

5 参考资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深圳计算机专业收入,深圳哪个行业收入最高?哪些行业最抢手?这份报告告诉你!...

原标题:深圳哪个行业收入最高?哪些行业最抢手?这份报告告诉你!原标题:深圳哪个行业收入最高?哪些行业最抢手?这份报告告诉你!南方网2019年7月5日讯 日前,智联招聘发布《2…

串行口实验 编写程序利用串口调试助手通过串口给实验板发送数据(数据范围0x00-0xfe),单片机将接受到的数据加1后再发送给PC机。

编写程序利用串口调试助手通过串口给实验板发送数据&#xff08;数据范围0x00-0xfe&#xff09;&#xff0c;单片机将接受到的数据加1后再发送给PC机。 程序&#xff1a; #include<reg51.h> #define uchar unsigned char #define uint unsigned int uchar temp; int main…

中学生 学python_中小学生为什么要学Python编程

中小学生为什么要学Python编程&#xff1f;未来是人工智能的时代&#xff0c;有理由相信Python将发挥更大的作用。教育部下发的《2018年度普通高等学校本科专业备案和审批结果的通知》显示&#xff0c;新增备案本科专业79个、新增审批本科专业19个。 呼声极高的人工智能专业被列…

串行口实验 编写程序利用PC机控制单片机实验板上的数码管设备工作

编写程序利用PC机控制单片机实验板上的数码管设备工作 在pc上输入fe&#xff0c;第一个数码管显示1. 在pc上输入fa第五个数码管显示5 程序&#xff1a; #include<reg51.h> #define uchar unsigned char #define uint unsigned int uchar temp; uchar led[]{0xc0,0xf9,0x…

webview传递参数给html,uniapp与webview之间的相互传值

1.uni-app 如何发送数据到 H5&#xff1f; 其实很接单、在 web-view 中只需要通过 URL 就可以向 H5 进行传参 例如在 uni-app 中&#xff1a;export default {data() {return {url:‘/hybrid/html/local.html?data‘};},onLoad(data) {//这里对要传入到webview中的参数进行enc…

I/0口输入输出实验 流水灯程序 P0、P1、P2、P3口作为输出口,连接八只发光二极管,编写程序,使发光二极管从左至右循环点亮。

P0、P1、P2、P3口作为输出口&#xff0c;连接八只发光二极管&#xff0c;编写程序&#xff0c;使发光二极管从左至右循环点亮。流水灯程序 程序&#xff1a; #include<reg51.h> //包含单片机定义寄存器的头文件 sbit led P1^0; //将led定义为P1.0位 void delay(void) //…

python3.6库参考手册_python3.5.2官方帮助文档参考手册(CHM版)

python3.5.2官方帮助文档 参考手册&#xff08;CHM版&#xff09; python3.5.2官方帮助文档 参考手册&#xff08;CHM版&#xff09;&#xff0c;欢迎下载&#xff01; 新语法特性&#xff1a; PEP 492,具有async和await语法的协同程序。 PEP 465, 新矩阵乘法运算符&#xff1a…

html css模仿实例,HTML+CSS模仿大学网站主页

【实例简介】用HTMLCSS模仿的大学主页 无JS 无FLASH 没有添加超链接【实例截图】【核心代码】pp5740492_4445056├── images│ ├── 01_hover.jpg│ ├── 02_hover.jpg│ ├── bg_link.jpg│ ├── bg_mainr.jpg│ ├── bg_search.jpg│ ├── bg_titl…

I/0口输入输出实验 将P1口的某一位作为输入使用,连接一个按键,当按键按下时使发光二极管亮,否则发光二极管熄灭

将P1口的某一位作为输入使用&#xff0c;连接一个按键&#xff0c;当按键按下时使发光二极管亮&#xff0c;否则发光二极管熄灭。 程序&#xff1a; #include<reg51.h> sbit KEYP1^1; sbit LEDP1^2; int main(void){ LED1; KEY1; if(KEY0) LED~LED; else{ LEDLED; } }

html5情人节贺卡,Web工程师的情人节卡片

CSS语言&#xff1a;CSSSCSS确定import url(https://fonts.googleapis.com/css?familyOpenSans:700);body {background: url(http://www.howie23.org/pics/seamless-wood-grain-texture.jpg);background-size: cover;font-family: Open Sans;font-size: 16px;}.bottom,.paper …

I/0口输入输出实验 学习IO口的位操作方法,分别选择P0、P1、P2、P3端口中的某一位,该位作为输出使用,连接一只发光二极管,控制器闪烁。

学习IO口的位操作方法&#xff0c;分别选择P0、P1、P2、P3端口中的某一位&#xff0c;该位作为输出使用&#xff0c;连接一只发光二极管&#xff0c;控制器闪烁。 程序&#xff1a; #include<reg51.h> sbit KEYP1^1; sbit LEDP1^2; int main(void){ LED1; KEY1; if(KEY0)…

域控服务器取消验证_记一次域控服务器应急

搜索公众号&#xff1a;暗网黑客可领全套网络安全课程、配套攻防靶场一介小白是如何成长为黑客大佬的一、背景介绍这是去年11月份的应急事件&#xff0c;反复到客户现场多次才找到原因&#xff0c;最后得到的结论也极为简单。解决问题过程中&#xff0c;由于客户给的压力较大&a…

html5难点,学习HTML5的难点是什么?

2012-02-05html5为什么要学html5&#xff1f;HTML5 是继 HTML4。01, XHTML 1。0 和 DOM 2 HTML 后的又一个重要版本&#xff0c;旨在消除富 Internet 程序(RIA)对 Flash&#xff0c; Silverlight&#xff0c; JavaFX 一类浏览器插件的依赖。HTML5 带来很多新功能&#xff0c;以…

AD转换实验 编写程序利用ADC0804 AD转换器采集电位器的模拟电压,将采集到的数字量在程序中换算成实际采集的模拟电压,并用数码管显示所采集的实际模拟电压值。(如:AD转换后的数字量为128,则

编写程序利用ADC0804 AD转换器采集电位器的模拟电压&#xff0c;将采集到的数字量在程序中换算成实际采集的模拟电压&#xff0c;并用数码管显示所采集的实际模拟电压值。&#xff08;如&#xff1a;AD转换后的数字量为128&#xff0c;则数码管应该显示2.5&#xff09; 程序&am…

python做词典_Python实现创建字典

Python编写一个名为 make_album() 的函数&#xff0c;它创建一个描述音乐专辑的字典。 1、这个函数应接受歌手的名字和专辑名&#xff0c;并返回一个包含这两项信息的字典。使用这个函数创建三个表示不同专辑的字典&#xff0c;并打印每个返回的值&#xff0c;以核实字典正确地…

8255总线实验 编写程序利用8255扩展单片机的IO口,控制8位数码管显示1-8。

8255总线实验 编写程序利用8255扩展单片机的IO口&#xff0c;控制8位数码管显示1-8。 程序&#xff1a; #include<reg51.h> #include<absacc.h> #define PORT_A XBYTE[0X7FFC] #define PORT_B XBYTE[0X7FFD] #define PORT_C XBYTE[0X7FFE] #define PORT_CTL XBYTE[…

计算机硬件组成 pdf,计算机硬件的组成..pdf

计算机硬件的组成计算机硬件( Computer hardware )是指计算机系统中由电子&#xff0c;机械和光电元件等组成的各种物理装置的总称。 这些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。 简言之&#xff0c;计算机硬件的功能是输入并存储程序和数据&…

JAVA入门第一天

今天是入门JAVA的第一天 日期&#xff1a;2021.3.29 18:38

看门狗性能软件测试,《看门狗:军团》PC版性能测试 不建议光追,优化极差

原标题&#xff1a;《看门狗&#xff1a;军团》PC版性能测试 不建议光追&#xff0c;优化极差作为育碧今年“三板斧”的首作&#xff0c;《看门狗&#xff1a;军团》已于上个月底正式发售&#xff0c;外媒DSOGaming也首发体验了游戏&#xff0c;并为玩家们带来了PC版游戏性能测…

以下不属于python特点的是什么_以下哪一个不属于python语言的特点-Python语言的特点有哪些...

Python语言的特点有哪些 Python 是目前最流行的语言之一&#xff0c;从云计算、大数据到人工智能&#xff0c;Python 无处不在&#xff0c;Python 人才需求量也在逐年攀升&#xff0c;Python 为何能发展如此的迅猛&#xff0c;究竟有什么特点呢&#xff1f; Python 语言主要有以…