文章目录
一、通过描述性统计进行数据探索
数据源:sndHsPr.csv 提取码:mxje
数据字段如下:
dist | roomnum | halls | AREA | floor | subway | school | price |
---|---|---|---|---|---|---|---|
城区(拼音) | 卧室数目 | 厅数 | 房屋面积 | 楼层 | 是否有地铁 | 是否学区房 | 单位面积房价 |
1.1 变量类型与数据分布类型
在数据分析前需要先了解数据都包含哪些度量类型:
变量 | 描述 |
---|---|
名义变量 | 指包含类别信息的变量,该类别没有大小、高低、次序之分,比如“性别”、“民族”、“地址” |
等级变量 | 即有序分类变量,该类别有大小、高低、次序之分,比如“年龄段”、“满意度” |
连续变量 | 指在规定范围区间可以取任意值,比如“人均收入”、“年龄” |
变量的分布类型其实是对实际变量分布的一个概括与抽象。我们经常会在某些地方听到,某某变量符合正态分布或卡方分布等等。其实这些分布的意义在于,我们一旦知道某变量服从哪个分布,就可以很快知道变量在相应取值的概率,并且结合业务场景做出相应解释。
如下图提供了常见的分布曲线,具体在这里不再赘述。
1.2 分类变量的统计量
名义变量和等级变量合称为分类变量。其中名义变量不能比较大小,是没有方向性的,比如“性别”,我们不能说男性高于女性,同样也不能说女性高于男性。等级变量有等级关系,是有方向的,比如教育程度(小学<中学<大学)。
变量 | 统计量 |
---|---|
名义变量 | 频次、百分比 |
等级变量 | 频次、百分比、累计频次、累计百分比 |
1.3 连续变量的分布与集中趋势
描述连续变量的统计量主要有四种,分别用于描述数据的集中趋势、离中趋势,偏态程度、与尖峰程度。
数据的集中水平:常见的指标有平均数、中位数与众数
接下来演示使用python计算变量的平均数、中位数、四分位数以及变量分布的直方图。
sndHsPr数据集是一份二手房价格的数据,在Pandas种导入并去除缺失值:
import pandas as pd
data = pd.read_csv('./sndHsPr.csv')
其中变量price表示价格:
求price的均值平均数:
print(data.price.agg(['mean','median','std']))
输出:
求price四分位数
data.price.quantile([0.25,0.5,0.75])
输出:
查看price变量的分布,这里bins参数表示直方图下的区间个数
data.price.hist(bins=20)
从直方图可以看出单位面积房价略微右偏。
1.4 连续变量的离散程度
只描述数据的集中趋势是不够的,以为这样会忽视数据的差异情况。这里需要引入另一个指标或统计量用以描述数据的离散程度。
描述数据离散程度的常见指标有极差、方差和平均绝对偏差。
三种指标都可以反应数据的离散程度,但方差和标准差更为优异。
求price的极差,可以通过max与min函数得到变量的最大值与最小值:
data.price.max()-data.price.min()
求price的标准差和方差
data.price.var()#求取方差
data.price.std()#求取标准差
1.5 数据分布的对称与高矮
在数据集中水平中,数据分布的对称会影响到平均数是否能够代表数据的集中水平,那么描述数据分布的对称与高矮时,需要引入偏度和峰度的概念。
偏度即数据的偏斜程度,峰度即数据分布的高矮程度。正态分布的偏度和峰度都为0。
左偏峰度时,众数>中位数>均值,偏值大于0。
右偏峰度时,均值>中位数>众数,峰值小于0.
峰度大于0,说明变量的分布相比正态分布更加密集,反之峰度小于0,则较为分散。
在pandas中,提供skew和kurtosis方法实现偏度与峰度。例如模拟1000个标准正态分布的随机数进行演示:
import numpy as np
normal = pd.Series(np.random.randn(1000),name='normal')
normal.skew()#求取偏度
normal.kurtosis()#求取峰度
二、制作报表与统计制图
制作报表就是根据数据类型,选取合适统计量并进行展现的过程。报表会展现数据的主要信息其中分为维度(分类变量)和度量(连续变量)。仅含有维度指标的报表称为频次表和交叉表,含有维度和度量两类指标的报表称为汇总表,其中度量指标总是以某个统计量的形式出现,最常见的是均值、总和、频次。
接下来还以(sndHsPr.csv)演示如何制作报表并进行可视化展现。
2.1 单因子频数
即分析单个分类变量的分布情况,提供每个水平的频次、百分比和累计值。
data.dist.value_counts()#统计每个城区出现的频次
用条形图展现这个频次
data.dist.value_counts().plot(kind='bar')
用柱形图展现:
data.dist.value_counts().plot(kind='pie')
2.2 表分析
也称交叉表,比如分析是否有地铁与是否是学区房之间的关系。
pd.crosstab(data.subway,data.school)#地铁与学校交叉统计
sub_sch = pd.crosstab(data.subway,data.school)#地铁与学校交叉统计
sub_sch = sub_sch.div(sub_sch.sum(1),axis=0)
sub_sch.plot(kind = 'bar',stacked = True)
2.3 汇总统计量
按照某个分类变量分组,对连续变量进行描述性统计。
统计每个城区单位面积房价的主要统计信息,可以使用pandas的groupby函数。
data.price.groupby(data.dist).agg(['mean','max','min'])
每个城区平均房屋价格的排序情况:
data.price.groupby(data.dist).mean().sort_values(ascending = True).plot(kind = 'barh')