描述性统计分析概述
- python原始的数据类型:字符型、逻辑型、数值型、复数型。
- 从统计方面来看,数据分为三种类型:名义型、等级型、连续型
- 名义变量:性别、民族等,没有顺序之分,名义变量不一定是字符类型
- 等级变量:有顺序之分,可以是字符也可是数值型,差值没有意义。
- 连续变量:只能是数值型,连续变量的差值是有意义的。
注:连续变量可以当作等级变量用,等级变量也可以当成连续变量,连续变量会产生很多噪音,分组换为等级变量会消除噪音。
- 在统计学中,名义变量只有两个统计量:频次和百分比
- 在统计学中,连续变量的统计量:
- 集中趋势(位置):均值、中位数、众数
- 离散程度(分散程度):方差、标准差、极差、四分位差等。
- 偏离程度:右偏函数、对称函数、左偏函数(少见)
注:离散程度即离开均值的程度,可以通过观察图像得知。 5. 分布函数 - 正态分布:对称函数,如人的身高等。 - 泊松分布:如网页点击量、队伍长度。 - 伽码分布:如灾难对我们造成的经济损失。 - 对数正态分布:是右偏最严重的函数,如收入、利润等。
- | 描述性统计 | 建模、预测 |
---|
右偏严重的函数(对数正态分布、伽马分布) | 选用中位数为统计量 | 对原始数据取对数,使其成为对数正态分布 | 右偏不严重的函数(正态分布、泊松分布) | 选用均值为统计量 | 选用正态分布函数 |
- 判断函数是否右偏:
(1)利用数据画直方图,中位数<均值则右偏 (2)计算偏度,偏度大于1的右偏严重。
示例
查看北京和上海的收入分布情况
步骤一:判断是否右偏严重。 做描述性统计分析的话,右偏函数选用中位数作为集中水平,右偏不严重的函数选用均值作为集中水平。 步骤二:看离散程度,一般是标准差。
描述统计总结
- 分类变量:(维度指标)指时间、年度等,分类变量又包括名义变量和等级变量。
- 连续变量:(度量指标)利润、收入、利润率
- | 分析 | 可视化 |
---|
一个分类变量 | value_counts() | 柱形图 | 两个分类变量 | pd.crosstab(snd.districts,snd.school) | 标准化堆叠柱形图 | 一个连续变量 | agg(['mean','std','skew']) | 直方图 | 一个分类+一个连续 | snd.price.groupby(snd.district).sum() | 柱形图、条形图、盒须图 | 两个分类+一个连续 | snd.pivot_table(values='',index='',columns=',aggfunc=np.mean) | 分类柱形图 |
一个分类变量
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os
import matplotlib
os.chdir(r'E:\数据与脚本\4describe')
snd = pd.read_csv('SndHsPr.csv')
snd
![在这里插入图片描述](https://img-blog.csdnimg.cn/4db772eb724242a7a00b9e21a714ca95.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pel5bi45pWy5Luj56CB,size_20,color_FFFFFF,t_70,g_se,x_16)
district = {'fengtai':'丰台区','haidian':'海淀区','chaoyang':'朝阳区','dongcheng':'东城区','xicheng':'西城区','shijingshan':'石景山区'}
snd['district'] = snd.dist.map(district)
snd.district.value_counts()
![在这里插入图片描述](https://img-blog.csdnimg.cn/f7fc39a7bd494d2baa25908ce247f8a7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pel5bi45pWy5Luj56CB,size_20,color_FFFFFF,t_70,g_se,x_16) ![在这里插入图片描述](https://img-blog.csdnimg.cn/0ce57765ca354986901568989102491a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pel5bi45pWy5Luj56CB,size_14,color_FFFFFF,t_70,g_se,x_16)
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['Simhei']
mpl.rcParams['axes.unicode_minus'] = False
snd.district.value_counts().plot(kind='bar')
![在这里插入图片描述](https://img-blog.csdnimg.cn/8568aa226817413abf5cbf36ec573233.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pel5bi45pWy5Luj56CB,size_20,color_FFFFFF,t_70,g_se,x_16)
一个连续变量
snd.price.mean()
snd.price.median()
snd.price.std()
snd.price.skew()
snd.price.quantile([0.01,0.5,0.99])
snd.price.agg(['mean','median','sum','std','skew'])
snd.price.hist(bins=40)
![在这里插入图片描述](https://img-blog.csdnimg.cn/e8b4702c012b4f0aa01854705df7c182.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pel5bi45pWy5Luj56CB,size_20,color_FFFFFF,t_70,g_se,x_16)
两个分类变量
sub_sch = pd.crosstab(snd.district,snd.school)
sub_sch
![在这里插入图片描述](https://img-blog.csdnimg.cn/a7774c27fe854699a5608ecf2f29c52c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pel5bi45pWy5Luj56CB,size_9,color_FFFFFF,t_70,g_se,x_16)
- 堆叠柱形图:只能看出样本量,不能对比样本占比情况。
sub_sch.plot(kind='bar',stacked=True)
![在这里插入图片描述](https://img-blog.csdnimg.cn/100d62fc53bb4a1b8d684621877f29cb.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pel5bi45pWy5Luj56CB,size_20,color_FFFFFF,t_70,g_se,x_16)
- 标准化堆叠柱形图:标准化堆叠柱形图可以看出占比情况,样本量的大小用柱子的胖瘦代替。
sub_sch["sum1"]=sub_sch.sum(1)
sub_sch = sub_sch.div(sub_sch.sum1,axis = 0)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a203fc914c83473087cb24bf6ac4f226.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pel5bi45pWy5Luj56CB,size_15,color_FFFFFF,t_70,g_se,x_16)
from stack2dim import *
stack2dim(snd,i='district',j='school')
![在这里插入图片描述](https://img-blog.csdnimg.cn/e3480fd4c2204a5ba5677603d67b8e53.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pel5bi45pWy5Luj56CB,size_20,color_FFFFFF,t_70,g_se,x_16)
分类变量和连续变量
按照分类变量分组对连续变量求统计量
snd.price.groupby(snd.district),mean().plot(kind='bar')
snd.price.groupby(snd.district).mean().sort_values(ascending=True).plot(kind='barh')
![在这里插入图片描述](https://img-blog.csdnimg.cn/50f486919e7e4761b1f641592698308b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pel5bi45pWy5Luj56CB,size_20,color_FFFFFF,t_70,g_se,x_16)
- 分类盒须图:比较不同分类水平上的连续变量变化情况(比较中位数)
sns.boxplot(x = 'district', y = 'price', data = snd)
![在这里插入图片描述](https://img-blog.csdnimg.cn/27e66e508c7a42e7a0e9aa2b4312b58e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pel5bi45pWy5Luj56CB,size_20,color_FFFFFF,t_70,g_se,x_16)
汇总表:两个分类变量+一个连续变量
snd.pivot_table(values='price', index='district', columns='school', aggfunc=np.mean)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d8fb5e3a559144548c5ef0870f579645.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pel5bi45pWy5Luj56CB,size_15,color_FFFFFF,t_70,g_se,x_16)
snd.pivot_table(values='price', index='district', columns='school', aggfunc=np.mean).plot(kind = 'bar')
![在这里插入图片描述](https://img-blog.csdnimg.cn/9fb6ce9a291e40b083febf15d43bb9c5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pel5bi45pWy5Luj56CB,size_20,color_FFFFFF,t_70,g_se,x_16)
|