用python重温统计学基础:描述性统计分析

朱小五 凹凸数据

描述性统计分析(Description Statistics)是通过图表或数学方法,对数据资料进行整理、分析,并对数据的分布状态、数字特征和随机变量之间的关系进行估计和描述的方法。描述性统计分析分为集中趋势分析和离中趋势分析。

提到用python来进行描述性统计分析,第一反应就是用:dataframe.describe(), 我们不妨用一组数据来展示:

# 读取数据df = pd.read_csv('sanguo_data.csv',header = 0,encoding="utf-8")df.head()

这是一组三国人物的数据,有姓名、性别、统御、武力等字段(数据下载地址见文末)。

下面我们用python当中的dataframe.describe()来进行描述性统计分析:

#描述性分析df.describe()

运行可得到上图,可以看到最大值、最小值、平均数、标准差、中位数等基本的描述性统计指标都有,但是为了更好深地掌握知识,下面还是继续用python挨个指标复习一下。

集中趋势分析

  • 平均数
    1. 简单算数平均数,这里没什么好说的
    2. 加权平均数,应用最广泛。这里举个栗子:武力值高不代表带领军队时的战力,不然关羽岂不是无敌,所以这时候用统御能力加权平均更合适。
    3. 几何平均数,多用于流程转化中的平均,比如多步骤的转化率求平均值
data = df['武力']#简单算数平均数np.average(data)#加权平均数np.average(data,weights=df['统御'])#几何平均数pow(np.prod(data),1/len(data)) 
  • 众数

    是一组数据中出现次数最多的数值,可能没有,也有可能有多个。

counts = np.bincount(data)np.argmax(counts)
  • 分位数

    分位数是指用分割点将一个随机变量的概率分布范围分为几个具有相同概率的连续区间。

# 中位数np.median(data)# 四分位数np.percentile(data, (25, 50, 75), interpolation='midpoint')

箱线图是分位数的直接应用:主要包含六个数据节点,将一组数据从大到小排列,分别计算出他的上边缘,上四分位数Q3,中位数,下四分位数Q1,下边缘,还有一个异常值。

我平时喜欢用的小提琴图(violin plot)用于显示数据分布及其概率密度。它结合了箱形图和密度图的特征,主要用来显示数据的分布形状。中间的黑色粗条表示四分位数范围,从其延伸的幼细黑线代表 95% 置信区间,而白点则为中位数。

离中趋势分析

  • 极差
    极差又被称为全距,是指数据集合中最大值与最小值的差值
# 极差np.max(df['武力'])-np.min(df['武力'])
  • 方差、标准差
    方差是度量随机变量和其数学期望(即均值)之间的偏离程度。
    标准差:方差的开方
# 方差np.var(df['武力'])# 标准差np.std(df['武力'])
  • 平均差
    各个变量值同平均数的离差绝对值的算术平均数。

  • 异众比率
    是总体中非众数次数与总体全部次数之比。

  • 偏态系数
    以平均值与中位数之差对标准差之比率来衡量偏斜的程度。偏态系数小于 0,因为平均数在众数之左,是一种左偏的分布,又称为负偏。偏态系数大于 0,因为均值在众数之右,是一种右偏的分布,又称为正偏。

  • 峰态系数
    是对数据分布平峰或尖峰程度的测度:峰态系数与众数概率的高低有直接关系,众数概率越高,峰态系数越大。

正态分布的峰态系数是 3,常常计算出来的峰态系数会跟 3 作比较,如果小于 3 则具有不足的峰度,如果大于 3 则具有过度的峰度。

#偏度、峰度from scipy import statsx = df_wu['武力']skew = stats.skew(x)kurtosis = stats.kurtosis(x)

实战演练

现在我们再将这组数据按国家区分,来看看描述性统计分析能得出什么样的结论?

df_wei = df.loc[(df['国家'] == '魏国')]df_shu = df.loc[(df['国家'] == '蜀国')]df_wu  = df.loc[(df['国家'] == '吴国')]data = df_wu['武力']plt.hist(data,20,normed=True,facecolor='g',alpha=0.9)plt.show()

做出三国人物的武力值分布图,以及利用前文的python代码计算各种描述性统计分析指标,如下图所示:

  1. 从平均值看,蜀国武将的平均武力在三个国家之上
  2. 从标准差看,吴>蜀>魏,这说明吴国人物间武力差距更大一些,而魏国人物武力分布较为均匀。
  3. 从偏度上看:三国偏态系数均小于0,平均数在众数之左,是一种左偏的分布,又称为负偏。 从上面三个图中也可以看出:其中蜀国的武力分布众数偏在右侧更明显一点,长尾拖在左边。 从峰度上看:三国偏态系数均小于0,均是低峰态,相对来说蜀国人物武力分布较另外两国人物武将武力分布更窄一些。
    PS:大家可能注意到求出的偏态系数为负数,这是因为在实际应用中,通常将峰度值做减3处理。

数据代码分享:
[1]点击左下角原文链接,直接进入知识星球(免费)原贴获取文中涉及的三国数据和ipynb格式的python代码。
[2]或者微信后台回复“统计分析”,也可同样获取。

参考资料:
[1]《数据茶水间》-木东居士
[2]《从零进阶!数据分析的统计基础》
[3]《深入浅出统计学》

©著作权归作者所有:来自51CTO博客作者mb5fe18e5a55d8d的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 44万条数据揭秘:如何成为网易云音乐评论区的网红段子手?
  2. 2000万条直播数据,揭秘斗鱼主播生存现状
  3. 破解X眼电影字体动态加密|凹凸玩数据
  4. Python爬取上万条大众点评数据,解读一线快餐品牌背后的秘密
  5. 放大招!耗时一个月,早起做了一个Python数据可视化APP?
  6. 收藏这些API,获取网易云音乐数据超轻松
  7. 如何用python进行数据分析——00环境配置
  8. Python爬取近十年TIOBE编程语言热度数据并可视化可视化
  9. 手把手教你用Selenium爬取拉勾网数据!

随机推荐

  1. xml学习(7) .net 获取xml节点或者属性最大
  2. XML文件导入EXCEL
  3. XML—XPATH语法介绍
  4. xml学习(6) 在c#Xpath实例
  5. xml学习(5)xml配置gridview列
  6. XML—XML解析之DOM4J
  7. XML标记的语义
  8. xml学习(4) 创建xml 文件
  9. XML—DOM解析案例
  10. XML的解析