使用Python进行数据分析——描述性统计分析

大家好,描述性统计分析主要是指求一组数据的平均值、中位数、众数、极差、方差和标准差等指标,通过这些指标来发现这组数据的分布状态、数字特征等内在规律。在Python中进行描述性统计分析,可以借助Numpy、Pandas、SciPy等科学计算模块计算出指标,然后用绘图模块Matplotlib绘制出数据的分布状态和频率及频数直方图,以更直观的方式展示数据分析的结果。

一、描述性统计指标计算

用describe()函数可以计算出以下值,代码如下:

import pandas as pd
data= pd.read_excel('D:/shujufenxi/jjj.xlsx',index_col='序号')
data1=data.describe()
print(data1)

除了此函数计算范围此外,还可以计算以下值,代码演示如下:

import pandas as pd
from numpy import mean,median,ptp,var,std
from scipy.stats import mode
data= pd.read_excel('D:/shujufenxi/jjj.xlsx',index_col='序号')
median=median(data['月薪(元)'])# 计算中位数
mode= mode(data['月薪(元)'])[0][0]#计算众数
ptp=ptp(data['月薪(元)'])#极差
var=var(data['月薪(元)'])#方差
std=std(data['月薪(元)'])#标准差
print('中位数:'+str(median))
print('众数:'+str(mode))
print('极差:'+str(ptp))
print('方差:'+str(var))
print('标准差:'+str(std))

二、数据的分布

根据数据的分布是否对称,数据的分布状态可分为正态分布与偏态分布。偏态分布又分为正偏态分布与负偏态分布;若众数<中位数<均值则为正偏态分布;若均值<中位数<众数,则为负偏态分布;由此可见,根据上面我们所得出的结果,属于正偏态分布。接下来引申两个概念:

  • 偏度--是指数据分布的偏斜方向和程度的度量,常用于衡量随机分布的不均衡性。如果数据对称分布,如标准正态分布,则偏度为0;如数据偏左分布,则偏度<0;如果数据右偏分布,则偏度>0

  • 峰度--是用来描述数据分布陡峭情况或平滑的情况,可以理解为数据分布的高矮程度。我们来绘制标准正态分布图和月薪分布图,我们将Matolotlib模块和Seaborn模块结合使用,代码如下:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
data= pd.read_excel('D:/shujufenxi/jjj.xlsx')
standard_normal=pd.Series(np.random.normal(0,1,size=1000000))
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
sns.kdeplot(standard_normal,fill=True,label='标准正态分布')
sns.kdeplot(data['月薪(元)'],label='月薪分布')
plt.show()

三、数据的频数与频率分析

频数是指数据中的类别变量的每种取值出现的次数。频率是指每个类别变量的频数与总次数的比值,通常用百分比表示。

演示如下:

import pandas as pd
data= pd.read_excel('D:/shujufenxi/jjj.xlsx')
frequency=data['月薪(元)'].value_counts()#value_counts()函数用来计算数据的频数
percentage=frequency/len(data['月薪(元)'])# len()函数用来计算所选数据列的长度
print(frequency.head())
print(percentage.head())

接下来,使用Matplotlib模块中的hist()函数绘制频数分布直方图,演示代码如下:

import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
data= pd.read_excel('D:/shujufenxi/jjj.xlsx')
plt.hist(data['月薪(元)'],bins=8,density=False,color='g',edgecolor='k',alpha=0.75)#bins参数用于指定绘制直方图柱子的个数,density参数为False时表示绘制频数直方图,反之则为频率直方图,alph用于设置柱子透明度
plt.xlabel('月薪')
plt.ylabel('频数')
plt.title('月薪频数分布直方图')
plt.show()

从直方图中可以很清晰地看出所实验数据中,月薪在6000-7000元区间内的人数最多,从之前的分析中也可以看出月薪均值、中位数、众数分别约为7564、6340、4646。大家亦可找实例进行练习。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>