TOOLS_Seaborn相关性可视化分析示例
相关性应用场景
如要回答 推测 网站留存、观看时长、收藏次数、转发次数、关注数之间是否存在相关性,以及相关性有多大的问题;
对于更有关注的留存,可以尝试分析一个与其相关性比较大的因素,如收藏,那么在交互上就可以进一步引导用户去收藏;
类似的问题,也可以用多元线性回归方程,在标准化权重之后,对比得出各个变量的影响;
相关性分析示例
指对两个或多个具备相关性的变量元素进行分析,衡量变量间的相关密切程度;
相关性大小用相关系数r来描述:(-1~+1)
- 0.95以上 是显著性相关
- 0.8及以上 是高度相关
- 0.5~0.8 中度相关
- 0.3~0.5 低度相关
- 0.3以下 不相关
r=0 不代表没有关系,只是没有线性关系
import warnings
warnings.filterwarnings("ignore")
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
# 定义主题风格
sns.set(style="darkgrid")
# 加载tips
# tips = sns.load_dataset("tips")
tips = pd.read_excel("./tips.xlsx")
tips.head()
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
- total_bill: 总账单数
- tip: 小费数目
- sex: 性别 Female Male
- smoker: 是否是吸烟的群众
- day: 天气
- time: 晚餐 dinner, 午餐lunch
- size: 顾客数
# 最简单的相关性计算(会对全部数值型列间尽心相关系数矩阵的计算)
tips.corr()
total_bill | tip | size | |
---|---|---|---|
total_bill | 1.000000 | 0.791002 | 0.166315 |
tip | 0.791002 | 1.000000 | 0.475753 |
size | 0.166315 | 0.475753 | 1.000000 |
# 两列间相关性可视化(散点图)
sns.relplot(x="total_bill", y="tip", data=tips)
plt.show()
# 全部数值型列间相关性的可视化
sns.pairplot(tips)
<seaborn.axisgrid.PairGrid at 0x7f87d75e8dd8>
# 按照性别进行人群划分,查看total_bill和tip之间的关系
# 从而推断出 男性和女性在这个相关上所表现出的不同
sns.relplot(x="total_bill", y="tip", hue="sex", data=tips)
plt.show()
# 全部数值型列间相关性的可视化,也可以按照sex进行划分
sns.pairplot(tips, hue="sex")
plt.show()
# 使用热力图展示 相关系数矩阵
import matplotlib.pyplot as plt
import seaborn as sns
tips = pd.read_excel("./tips.xlsx")
# 去掉不参与计算相关性的列
tips = tips.drop(columns=['sex','smoker','day','time'])
plt.figure(figsize=(16,10), dpi= 80)
# 相关性大小计算(热力图)
sns.heatmap(tips.corr(), xticklabels=tips.corr().columns, yticklabels=tips.corr().columns, cmap='RdYlGn', center=0, annot=True)
# 可视化
plt.title('Correlogram of tips', fontsize=22)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()