龙空技术网

Python 数据分析实例——描述统计

昌华量化 236

前言:

此时大家对“python做统计描述”可能比较注重,各位老铁们都需要学习一些“python做统计描述”的相关文章。那么小编同时在网络上网罗了一些有关“python做统计描述””的相关文章,希望你们能喜欢,你们一起来学习一下吧!

统计学分为描述统计学和推断统计学。描述统计学是使用特定的数字或图表来体现数据的集中程度或离散程度,如平均数、中位数、众数、方差、标准差;推断统计学是根据样本数据来推断总体特征,如产品检查,一般采用抽检,根据所抽样本的质量合格率作为总体质量合格率的一个估计。

在数值分析的过程中,我们往往要计算出数据的统计特征,用来做科学计算的NumPy和SciPy工具可以满足我们的需求。Matpotlib工具可用来绘制图形,满足图分析的需求。

1.基本概念

与Python中原生的List类型不同,NumPy中用ndarray类型来描述一组数据:

from numpy import arrayfrom numpy.random import normal, randint#使用List来创造一组数据data = [1, 2, 3]#使用ndarray来创造一组数据data = array([1, 2, 3])#创造一组服从正态分布的定量数据data = normal(0, 10, size=10)#创造一组服从均匀分布的定性数据data = randint(0, 10, size=10)
2.中心位置(均值、中位数、众数)

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

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

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

from numpy import mean, median#计算均值mean(data)#计算中位数median(data)

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

from scipy.stats import mode#计算众数mode(data)
3.发散程度(极差、方差、标准差、变异系数)

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

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

from numpy import mean, ptp, var, std#极差ptp(data)#方差var(data)#标准差std(data)#变异系数mean(data) / std(data)
4.偏差程度(z-分数)

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

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

from numpy import mean, std#计算第一个值的z-分数(data[0]-mean(data)) / std(data)
5.相关程度

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

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

from numpy import array, cov, corrcoefdata = array([data1, data2])#计算两组数的协方差#参数bias=1表示结果需要除以N,否则只计算了分子部分#返回结果为矩阵,第i行第j列的数据表示第i组数与第j组数的协方差。对角线为方差cov(data, bias=1)#计算两组数的相关系数#返回结果为矩阵,第i行第j列的数据表示第i组数与第j组数的相关系数。对角线为1corrcoef(data)
6.利用Matplotlib画图举例

利用Python画图需要使用Matplotlib库。

【例1】

import matplotlib.pyplot as plt

创建一组数据,该数据为30个中国CBA球员的体重,其中“\”表示换行接着写。

(1)直方图画法

· 找出最大值与最小值,确定数据的范围。

· 整理数据,将数据分为几组(尽量使每组都有数据),计算频数分布表。

· 根据频数分布表画出频数直方图。频数为纵坐标,分组类别为横坐标。通过直方图可以对数据分布有一个直观的了解。

· 除了频数直方图,还有频率直方图外。频率直方图的纵坐标为频率/组距。频率=频数/总数,组距是分组的极差。

from pylab import mpl #显示中文设置mpl.rcParams['font.sans-serif'] = ['SimHei']#显示中文设置#创建频数分布直方图#weight为待绘制的定量数据,bins=5表示将数据划分为5个区间#normed=False时为频数分布直方图plt.hist(weight,bins=5,normed=False)#x轴区间范围plt.xlabel('weight')plt.ylabel('frequency')plt.title('CHINA CBA Histogram of weight frequency distribution of players')plt.show()

图1所示为频数分布直方图。

图1 频数分布直方图

(2)箱线图画法

· 下四分位数Q1:将数据按升序排序,位于25%处的数据。

· 上四分位数Q3:将数据按升序排序,位于75%处的数据。

· 四分位距IQR=Q3-Q1,是描述数据离散程度的一个统计量。

· 异常点是小于Q1-1.5IQR或大于Q3+1.5IQR的值。

· 下边缘是除异常点以外的数据中的最小值。

· 上边缘是除异常点以外的数据中的最大值。

#箱线图plt.boxplot(weight,labels=['体重'])plt.title('中国CBA球员体重箱线图')plt.show()

图2所示为箱线图。

图2 箱线图

标签: #python做统计描述