1 描述性统计
- 四个方面:数据的中心趋势、相对位置、离散度、相关性;
- 两种方式:统计量和统计图
![描述性统计内容大纲[1]](https://img.haomeiwen.com/i5688124/63b3c1a8b53ae546.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
常用函数:粗略了解数据整体
- pandas.DataFrame: head(), tail(), info(), describe()
- pandas.DataFrame(Series).count():在Python里count是一个内置函数,同于统计非空值的样本的个数,直接在DataFrame和Series对象后加.count()即可使用
- 筛选pandas.DataFrame中某类变量的对应信息,并对非空值数量、unique数量,最大频数变量,最大频数,以及新添加一列特征变量missing_pct(表示值缺失的比重)等进行分析
lendData.select_dtypes(include=['O']).describe().T\
.assign(missing_pct=lendData.apply(lambda x : (len(x)-x.count())/len(x)))
代码[2]
2 中心趋势
2.1. 数值分析
均值、中位数、众数、均值的差值(两个样本之间)、偏度
- 偏度
在右偏分布中,度量数据中心趋势的三个量关系如下:众数 < 中位数 < 均值
2.2 图形分析
- 直方图,可以观测到偏度
2.? 常用函数
- pandas.DataFrame: mean(), median(), mode(), skew()
- 直方图: matplotlib.pyplot.hist(),示例2.1
第一类直方图
fig = plt.figure(figsize=(14,4))
p1 = fig.add_subplot(121)
plt.hist(bmi_rich, bins=50, rwidth=0.9)
p2 = fig.add_subplot(122)
plt.hist(bmi_ord, bins=50, rwidth=0.9)
plt.show()

第二类直方图,将两个样本的第一类直方图合并显示
plt.hist(bmi_rich, bins=50, range=(10,60), normed=True, label='rich', alpha=0.4, color='red')
plt.hist(bmi_ord, bins=50, range=(10,60), normed=True, label='ordinary', alpha=0.4, color='blue')
plt.show()

3 相对位置
3.1 数值分析
- 分位数
- IQR(Interquartile range):25%和75%所对应的四分位数之间的差值,样本变异性的度量
- 最大值和最小值
- 样本中不同值的个数
3.2 图形分析
- ECDF图
均值和直方图,这两者其实都是对数据信息的压缩。均值将信息压缩到一个数值,而丢弃了大部分信息量;相比之下直方图则保留了更多的信息量,只是将数据压缩到一个个连续的区间中。这也就是为什么之前我们在比较两类人的直方图时,总有看不真切的感觉。那么有没有什么方法能显示所有的数据点呢?这就是下面所示的经验累积分布函数图:ECDF(Empirical Cumulative Distribution Function)。 - 箱图 (boxplot)
更直观反映分位数的是箱图,图中直接画出了中位数、四分位数和IQR,并且从中还能发现离群值,它们是数据中异常大或异常小的数值。在箱图的上下两侧分别有两道篱笆,它们的数值分别是Q1-1.5IQR和Q3+1.5IQR,其中Q1,Q3是四分位数。而处于这两道篱笆之外的数值可以看做异常值。
3.3 常用函数及代码
- ECDF图
def ecdf(data): # 计算数据的ECDF值
x = np.sort(data)
y = np.arange(1, len(x)+1) / len(x)
return (x,y)
def plot_ecdf(data, xlabel=None , ylabel='ECDF', label=None): # 绘制ECDF图
x, y = ecdf(data)
_ = plt.plot(x, y, marker='.', markersize=3, linestyle='none', label=label)
_ = plt.legend(markerscale=4)
_ = plt.xlabel(xlabel)
_ = plt.ylabel(ylabel)
plt.margins(0.02)
plot_ecdf(bmi_rich,label='rich')
plot_ecdf(bmi_ord, xlabel='BMI',label='ordinary')
plt.show()

- 箱图
import seaborn as sns
sns.boxplot(x='income_level', y='bmi', data=bmi_income, palette="Set3")
plt.show()

4 离散度
4.1 数值分析
-
方差和标准差
标准差公式
注意:这里分母中使用N-1而非N,是因为当使用样本数据推测总体的标准差时,需进行Bessel修正。
- Cohen's d
当考虑了样本数据的离散度后,就能够更精准的衡量两类样本的差异,即使用一个新的量:Cohen's d,它可以简单看做是均值的差值除以两个样本综合的标准差。其公式定义如下:

首先我们需要对Cohen's d有一个大概的数值范围概念,当它的值为0.8代表有较大的差异,0.5位列中等,0.2较小,0.01则非常之小。
4.3 常用函数
- 方差和标准差:pandas.DataFrame: var(), std()
- Cohen's d
def cohen_d(data1, data2):
n1 = len(data1)
n2 = len(data2)
x1 = np.mean(data1)
x2 = np.mean(data2)
var1 = np.var(data1, ddof=1)
var2 = np.var(data2, ddof=1)
sp = np.sqrt(((n1-1)*var1+(n2-1)*var2)/(n1+n2-2))
return (x1-x2)/sp
print("Cohen's d: %.3f" %cohen_d(bmi_rich, bmi_ord))
5 相关性
前面观察的都是单个变量(主要是BMI指数)的统计学性质,接下来我们考察下两个变量之间的关系。
5.1 数值分析
- 协方差:协方差(Covariance)是衡量两个变量的总体误差,方差可以看做是两个变量相同时的特殊情况。其公式如下:

- 相关系数:了解了协方差的概念后,就可以使用Pearson相关系数来衡量两个变量的相关性,它的定义是协方差除以两个变量各自的标准差,公式如下:

Pearson相关系数的取值范围在-1到1之间,0代表无相关性,正数代表正相关,负数代表负相关,绝对值越大,相关性越高。
5.2 图形分析
- 散点图,判断相关性
5.3 常用函数
- numpy: cov(), corrcoef()
np.cov(height,weight)[0,1]
np.corrcoef(height, weight)[0,1]
- 散点图
# 绘制身高、体重的散点图
plt.plot(height,weight, marker='.', linestyle='none', alpha = 0.05)
plt.show()
6 分组统计
6.3 常用函数
pandas.DataFrame.groupby()
-
发掘数据中的信息 -- 数据探索之描述性统计(http://www.jianshu.com/p/8982ad63eb85) ↩
-
Lending Club贷款数据分析(上)(http://www.jianshu.com/p/a8037a38e219) ↩
网友评论