前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Seaborn和Pandas进行相关性检查

使用Seaborn和Pandas进行相关性检查

作者头像
磐创AI
发布2020-12-28 11:44:12
发布2020-12-28 11:44:12
2K00
代码可运行
举报
运行总次数:0
代码可运行


磐创AI分享

作者 | Jeremiah Lutes

编译 | VK

来源 | Towards Data Science

数据集可以讲许多故事。作为一个很好的开始,可以检查变量之间的相关性。

研究数据集以查看哪些变量具有相关性时,这是我首先执行的任务之一。这使我更好地了解我正在处理的数据。这也是培养对数据的兴趣并建立一些初步问题以尝试回答的好方法。

幸运的是,Python有一些库,这些库为我们提供了快速有效地查看相关性所需的工具。让我们简单看看什么是相关性,以及如何使用热图在数据集中找到强相关性。

什么是相关性

相关性是确定数据集中的两个变量是否以任何方式相关的一种方法。

相关有许多实际应用。我们可以看到使用某些搜索词是否与youtube上的浏览量相关。或者,我们可以看看广告是否与销售额相关。在建立机器学习模型时,相关性是决定特征的一个重要因素。这不仅可以帮助我们了解哪些特征是线性相关的,而且如果特征是强相关的,我们可以删除它们以防止重复信息。

如何衡量相关性

在数据科学中,我们可以使用r值,也称为皮尔逊相关系数。它测量两个数字序列(即列、列表、序列等)之间的相关程度。

r值是介于-1和1之间的数字。它告诉我们两列是正相关,不相关,还是负相关。越接近1,正相关越强。越接近-1,负相关越强(即列越“相反”)。越接近0,相关性越弱。

R值公式为:

我们不打算解释r值背后的数学原理,但如果你好奇的话,这段youtube视频做得很好。相反,让我们用一个简单的数据集来可视化相关性:https://youtu.be/lVOzlHx_15s

下面的数据集显示了七个子数据。它有以下列,体重,年龄(以月为单位),乳牙的数量,和眼睛的颜色。眼睛颜色列已经分类,其中1=蓝色,2=绿色,3=棕色。

让我们用上面的数据做三个散点图。我们来看看以下三种关系:年龄和体重,年龄和乳牙,年龄和眼睛颜色。

年龄和体重

当我们观察年龄和体重之间的关系时,绘图点开始形成一个正斜率。当我们计算r值时,我们得到0.954491。当r值接近1时,我们可以得出年龄和体重有很强的正相关的结论。直觉上应该看看。在一个成长中的孩子,随着年龄的增长,体重开始增加。

年龄和乳牙

反之,绘图点上的年龄和乳牙散点图开始形成负斜率。这种相关性的r值为-0.958188。这意味着强烈的负相关。直觉上,这也是有道理的。当孩子长大后,他们会失去乳牙。

年龄和眼睛颜色

在最后一个散点图上,我们看到一些没有明显坡度的点。这种相关性的r值为-0.126163。年龄与眼睛颜色无显著相关。这也应该是有道理的,因为眼睛的颜色不应该随着孩子年龄的增长而改变。如果这种关系显示出很强的相关性,我们需要检查数据以找出原因。

使用Python查找相关性

让我们看一个更大的数据集,看看使用Python查找相关性有多容易。

我们要看的数据来自Kaggle关于流媒体平台上电影的数据集:https://www.kaggle.com/ruchi798/movies-on-netflix-prime-video-hulu-and-disney。

这个数据集包含哪些电影是什么流媒体平台的数据。它还包括关于每部电影的一些不同的描述,例如名称、时长、IMDB 分数等。

导入和清理

我们将首先导入数据集并使用pandas将其转换为数据帧。

代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd
movies = pd.read_csv("MoviesOnStreamingPlatforms_updated.csv")

Rotten Tomatoes列是一个字符串,让我们将数据类型更改为float。

代码语言:javascript
代码运行次数:0
运行
复制
movies['Rotten Tomatoes'] = 
movies['Rotten Tomatoes'].str.replace("%" , "").astype(float)

Type列似乎没有正确输入,让我们删除它。

代码语言:javascript
代码运行次数:0
运行
复制
movies.drop("Type", inplace=True, axis=1)

好吧,现在开始有趣的事情吧!

使用core方法

使用Pandas 的core方法,我们可以看到数据帧中所有数值列的相关性。因为这是一个方法,我们所要做的就是在DataFrame上调用它。返回值将是一个显示相关性的新数据帧。

corr方法有一个参数,允许你选择计算相关系数的方法。Pearson方法是默认方法,但也可以选择Kendall或Spearman方法。

代码语言:javascript
代码运行次数:0
运行
复制
correlations = movies.corr()
print(correlations)

\\

ID      Year      IMDb  Rotten Tomatoes   Netflix  \
ID               1.000000 -0.254391 -0.399953        -0.201452 -0.708680   
Year            -0.254391  1.000000 -0.021181        -0.057137  0.258533   
IMDb            -0.399953 -0.021181  1.000000         0.616320  0.135105   
Rotten Tomatoes -0.201452 -0.057137  0.616320         1.000000  0.017842   
Netflix         -0.708680  0.258533  0.135105         0.017842  1.000000   
Hulu            -0.219737  0.098009  0.042191         0.020373 -0.107911   
Prime Video      0.554120 -0.253377 -0.163447        -0.049916 -0.757215   
Disney+          0.287011 -0.046819  0.075895        -0.011805 -0.088927   
Runtime         -0.206003  0.081984  0.088987         0.003791  0.099526

Hulu  Prime Video   Disney+   Runtime  
ID              -0.219737     0.554120  0.287011 -0.206003  
Year             0.098009    -0.253377 -0.046819  0.081984  
IMDb             0.042191    -0.163447  0.075895  0.088987  
Rotten Tomatoes  0.020373    -0.049916 -0.011805  0.003791  
Netflix         -0.107911    -0.757215 -0.088927  0.099526  
Hulu             1.000000    -0.255641 -0.034317  0.033985  
Prime Video     -0.255641     1.000000 -0.298900 -0.067378  
Disney+         -0.034317    -0.298900  1.000000 -0.019976  
Runtime          0.033985    -0.067378 -0.019976  1.000000

哎呀!这是很多数字。输出的列太多,很难读取。这仅仅是9个变量的相关性,结果是一个9x9网格。你能想象20到30列的样子吗?这将是非常困难的。

用Jupyter Notebook输出

我们调用print,让Jupyter Notebook格式化返回值,情况会好一点。

代码语言:javascript
代码运行次数:0
运行
复制
movies.corr()
检查一个变量

我们还可以通过使用列名进行切片来单独检查每个变量。

代码语言:javascript
代码运行次数:0
运行
复制
print(correlations["Year"])
//
ID                -0.254391
Year               1.000000
IMDb              -0.021181
Rotten Tomatoes   -0.057137
Netflix            0.258533
Hulu               0.098009
Prime Video       -0.253377
Disney+           -0.046819
Runtime            0.081984

如果只看1个变量的相关性,这就更容易理解了。但必须有一种更容易查看整个数据集的方法。

Seaborn为拯救而生

幸运的是,seaborn给了我们快速生成热图的能力。

我们只需导入seaborn和matplotlib并使用seaborn的heatmap函数。

代码语言:javascript
代码运行次数:0
运行
复制
# 如果使用Jupyter,请始终记住这一行
%matplotlib inline

import seaborn as sns
import matplotlib.pyplot as plt

sns.heatmap(correlations)
plt.show()

哇!很酷

我们发现的相关性

现在我们可以很快看到一些相关性;

  1. IMDb与Rotten Tomatoes呈强正相关。以及Prime Video和ID之间有很强的正相关。
  2. Netflix和Year之间有轻微的正相关。
  3. Netflix与ID、Netflix和Prime Video之间存在强负相关
  4. Year与Prime Video、Disney Plus与Prime Video、Hulu与Prime Video、Netflix与ID之间存在轻微负相关。
  5. runtime和任何流媒体平台之间没有相关。Netflix和Year之间没有相关
一些观察

有了这些信息,我们可以做一些观察。

  1. ID和它出现的两个平台之间存在很强的正相关和负相关,因此数据是按顺序添加的,先添加Netflix,最后添加Prime Video。如果我们打算使用这些数据来建立一个模型,那么最好在将其分解为测试和训练数据之前对其进行随机化。
  2. 看起来Netflix有更新的电影。这可能是一个有待探索的假设。
  3. 与其他流媒体平台相比,Netflix和Amazon似乎拥有最多的电影。这是另一个有待探索的假设。
  4. 不同的平台似乎不会根据评论家或运行时的评分来选择电影。这是我们可以探索的另一个很酷的假设。

在几秒钟内,我们就可以看到输入数据的相关性,并得到至少3个想法来探索。

结论

相关性有助于探索新的数据集。通过使用seaborn的热图,我们很容易看到最强的相关性在哪里。现在你可以去Kaggle看看更多的数据集,看看还有什么相关可以激发你的兴趣!

代码语言:javascript
代码运行次数:0
运行
复制
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磐创AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是相关性
  • 如何衡量相关性
    • 年龄和体重
    • 年龄和乳牙
    • 年龄和眼睛颜色
  • 使用Python查找相关性
    • 导入和清理
    • 使用core方法
    • 用Jupyter Notebook输出
    • 检查一个变量
  • Seaborn为拯救而生
    • 我们发现的相关性
    • 一些观察
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档