介绍相关系数,和Python实现。

定义

说到相关系数需要了解的 3 个概念:相关分析、数据期望、协方差。先分别说明这些概念。

相关分析
相关分析是用来说明两个变量之间的关系。这个关系包含:两个变量的方向和强度。

  • 按变量的多少划分: 单相关、复相关 ;
  • 按表现形态划分::直线相关、曲线相关;
  • 从变动的方向划分:正相关、负相关;
  • 按相关的程度不同分:完全相关、统计相关、完全无关。

image.png

数学期望
例子:某城市有 10 万个家庭,没有孩子的家庭有 1000 个,有一个孩子的家庭有 9 万个,有两个孩子的家庭有 6000 个,有 3 个孩子的家庭有 3000 个。则此城市中任一个家庭中孩子的数目是一个随机变量,记为 X。它可取值 0,1,2,3。其中,X 取 0 的概率为 0.01,取 1 的概率为 0.9,取 2 的概率为 0.06,取 3 的概率为 0.03。则它的数学期望:

即此城市一个家庭平均有小孩  1.11 个,当然人不可能用 1.11 个来算,约等于 2 个。

协方差
协方差可以看这篇文章,已经说得比较清楚。《如何通俗地理解协方差与相关系数?》

相关系数

  • Pearson 相关系数:一般用来计算两个连续型变量的相关系数。也是最常用的相关系数。公式这里就不写了,一些统计学的教程都有说明。当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:
    1. 两个变量之间是线性关系,都是连续数据。
    2. 两个变量的总体是正态分布,或接近正态的单峰分布。
    3. 两个变量的观测值是成对的,每对观测值之间相互独立。
  • Spearman 相关系数:两个变量无论连续还是分类都可以使用。
  • kendall 相关系数:一个连续一个分类。最好是定序变量。

相关系数是公式的不同。主要的 Pearson 相关系数在上面那篇《如何通俗地理解协方差与相关系数?》中也有,这里不多做介绍。

−1 ≤ 𝐶𝑜𝑟𝑌,𝑋 ≤ 1 代表的含义:

  1. 值: Y 和 X 之间线性关系的强度;
  2. 符号: Y 和 X 之间线性关系的方向。

关于相关系数 r 的取值说明:

  1. r 的取值范围为 -1 ≤ r ≤ + 1;
  2. |r| 越接近 1,表明相关关系越密切;越接近于0,相关关系就越不密切。r = 0,两变量无直线关系;
  3. r = +1 或 r = -1,表明两变量完全相关;
  4. r > 0 现象呈正直线关系;r < 0 现象呈负相关;
  5. 在说明两个变量之间线性关系的密切程度时,根据经验可将相关程度分为以下几种情况:当 |r|  ≥  0.8 时,视为高度相关;0.5 ≤ |r| < 0.8 时, 视为中度相关;0.3 ≤ |r| < 5时,视为低度相关; |r| < 0.3 时,说明两个变量之间的相关程度极弱,可视为不相关。但这种说明必须建立在相关系数通过显著性检验的基础之上。

Python 实现

1
2
3
4
5
6
7
8
9
10
11
12
# 导入包
import seaborn as sns
from pandas import Series,DataFrame
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

# 拿到titanic数据集
titanic = sns.load_dataset('titanic')

# 查看前5行数据
titanic.head()

image.png
参数说明:

  • method{‘pearson’, ‘kendall’, ‘spearman’} ,默认 Pearson 相关系数;
  • min_periods:int类型可选值。观察每对列所需的最小数,样本最少的数据量。仅适用于 Pearson 和Spearman。
1
2
corr = titanic.corr()
corr

image.png

相关系数可视化

1
2
plt.figure(figsize=(14,10))
sns.heatmap(corr,linewidths=0.2, cmap="YlGnBu",annot=True)

output_4_1.png