三、数据探索方法及函数汇总(Python描述)

1 描述性统计

  • 四个方面:数据的中心趋势、相对位置、离散度、相关性;
  • 两种方式:统计量和统计图
    ![描述性统计内容大纲[1]](http://upload-images.jianshu.io/upload_images/5688124-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. 数值分析

均值、中位数、众数、均值的差值(两个样本之间)、偏度

  1. 偏度
    在右偏分布中,度量数据中心趋势的三个量关系如下:众数 < 中位数 < 均值

2.2 图形分析

  1. 直方图,可以观测到偏度

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()
三、数据探索方法及函数汇总(Python描述)_第1张图片
第一类直方图

第二类直方图,将两个样本的第一类直方图合并显示

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()
三、数据探索方法及函数汇总(Python描述)_第2张图片
第二类直方图

3 相对位置

3.1 数值分析

  1. 分位数
  2. IQR(Interquartile range):25%和75%所对应的四分位数之间的差值,样本变异性的度量
  3. 最大值和最小值
  4. 样本中不同值的个数

3.2 图形分析

  1. ECDF图
    均值和直方图,这两者其实都是对数据信息的压缩。均值将信息压缩到一个数值,而丢弃了大部分信息量;相比之下直方图则保留了更多的信息量,只是将数据压缩到一个个连续的区间中。这也就是为什么之前我们在比较两类人的直方图时,总有看不真切的感觉。那么有没有什么方法能显示所有的数据点呢?这就是下面所示的经验累积分布函数图:ECDF(Empirical Cumulative Distribution Function)。
  2. 箱图 (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()
三、数据探索方法及函数汇总(Python描述)_第3张图片
ECDF图
  • 箱图
import seaborn as sns
sns.boxplot(x='income_level', y='bmi', data=bmi_income, palette="Set3")
plt.show()
三、数据探索方法及函数汇总(Python描述)_第4张图片
箱图

4 离散度

4.1 数值分析

  1. 方差和标准差


    标准差公式

    注意:这里分母中使用N-1而非N,是因为当使用样本数据推测总体的标准差时,需进行Bessel修正。

  2. Cohen's d
    当考虑了样本数据的离散度后,就能够更精准的衡量两类样本的差异,即使用一个新的量: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 数值分析

  1. 协方差:协方差(Covariance)是衡量两个变量的总体误差,方差可以看做是两个变量相同时的特殊情况。其公式如下:
协方差公式
  1. 相关系数:了解了协方差的概念后,就可以使用Pearson相关系数来衡量两个变量的相关性,它的定义是协方差除以两个变量各自的标准差,公式如下:
image.png

Pearson相关系数的取值范围在-1到1之间,0代表无相关性,正数代表正相关,负数代表负相关,绝对值越大,相关性越高。

5.2 图形分析

  1. 散点图,判断相关性

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()


  1. 发掘数据中的信息 -- 数据探索之描述性统计(http://www.jianshu.com/p/8982ad63eb85) ↩

  2. Lending Club贷款数据分析(上)(http://www.jianshu.com/p/a8037a38e219) ↩

你可能感兴趣的:(三、数据探索方法及函数汇总(Python描述))