Python相关矩阵教程(使用Pandas)

2023-10-12

在本博客中,我们将介绍一个重要的多变量数据描述性统计量,称为相关矩阵。我们将学习如何在 Python 中使用以下命令创建、绘制和操作相关矩阵Pandas.

我们将讨论以下主题:

 

 

什么是相关矩阵?

相关矩阵是表示给定数据中变量对之间的“相关性”的表格数据。

我们将在本博客结束时构建这个相关矩阵。

每一行和每一列代表一个变量,这个矩阵中的每个值都是相应行和列所代表的变量之间的相关系数。

相关矩阵是一个重要的数据分析指标,通过计算来汇总数据,以了解各种变量之间的关系并做出相应的决策。

这也是机器学习管道中重要的预处理步骤,用于计算和分析需要对高维数据进行降维的相关矩阵。

我们提到相关矩阵中的每个单元格都是“相关系数' 在对应于单元格的行和列的两个变量之间。

在我们继续之前,让我们先了解什么是相关系数。

什么是相关系数?

相关系数是表示两个变量之间关系强度的数字。

相关系数有多种类型,但其中最常见的是皮尔逊系数,用希腊字母 ρ (rho) 表示。

It is defined as the covariance between two variables divided by the product of the standard deviations of the two variables.

Where the covariance between X and Y COV(X, Y) is further defined as the ‘expected value of the product of the deviations of X and Y from their respective means’.
The formula for covariance would make it clearer.

So the formula for Pearson’s correlation would then become:

The value of ρ lies between -1 and +1.
Values nearing +1 indicate the presence of a strong positive relation between X and Y, whereas those nearing -1 indicate a strong negative relation between X and Y.
Values near to zero mean there is an absence of any relationship between X and Y.

求给定数据的相关矩阵

让我们生成两个变量的随机数据,然后为它们构建相关矩阵。


import numpy as np
np.random.seed(10)
# generating 10 random values for each of the two variables
X = np.random.randn(10)
Y = np.random.randn(10)
# computing the corrlation matrix
C = np.corrcoef(X,Y)
print(C)  

Output:

Since we compute the correlation matrix of 2 variables, its dimensions are 2 x 2.
The value 0.02 indicates there doesn’t exist a relationship between the two variables. This was expected since their values were generated randomly.

在这个例子中,我们使用了 NumPy 的`corrcoef`方法来生成相关矩阵。
然而,这种方法有一个局限性,它只能计算两个变量之间的相关矩阵。

因此,继续,我们将使用数据框存储数据并计算它们的相关矩阵。

绘制相关矩阵

为了进行解释,我们将使用一个不仅仅具有两个特征的数据集。

我们将使用乳腺癌数据,这是机器学习入门课程中使用的一种流行的二元分类数据。
我们将从 scikit-learn 加载此数据集dataset module.
它以 NumPy 数组的形式返回,但我们将将它们转换为 Pandas DataFrame.


from sklearn.datasets import load_breast_cancer
import pandas as pd
breast_cancer = load_breast_cancer()
data = breast_cancer.data
features = breast_cancer.feature_names
df = pd.DataFrame(data, columns = features)
print(df.shape)
print(features)  

Output:

There are 30 features in the data, all of which are listed in the output above.

我们现在的目标是确定每对列之间的关系。我们将通过绘制相关矩阵来实现这一点。

为了简单起见,我们将仅使用前六列并绘制它们的相关矩阵。
为了绘制矩阵,我们将使用一个流行的可视化库,称为海博恩,它是建立在 matplotlib 之上的。


import seaborn as sns
import matplotlib.pyplot as plt
# taking all rows but only 6 columns
df_small = df.iloc[:,:6]
correlation_mat = df_small.corr()
sns.heatmap(correlation_mat, annot = True)
plt.show()  

Output:

The plot shows a 6 x 6 matrix and color-fills each cell based on the correlation coefficient of the pair representing it.

Pandas 数据框corr()方法用于计算矩阵。默认情况下,它计算皮尔逊相关系数。
我们还可以通过向参数传递适当的值来使用其他方法,例如 Spearman 系数或 Kendall Tau 相关系数'method'.

我们用过seaborn的heatmap()绘制矩阵的方法。参数‘annot=True' 显示每个单元格中相关系数的值。

现在让我们了解如何解释绘制的相关系数矩阵。

 

解释相关矩阵

Let’s first reproduce the matrix generated in the earlier section and then discuss it.

You must keep the following points in mind with regards to the correlation matrices such as the one shown above:

  1. 网格中的每个单元格代表两个变量之间的相关系数的值。
  2. (a,b)位置的值表示a行和b列的特征之间的相关系数。这将等于位置 (b, a) 处的值
  3. It is a square矩阵——每一行代表一个变量,所有列代表与行相同的变量,因此行数 = 列数。
  4. It is a 对称的矩阵——这是有道理的,因为 a,b 之间的相关性与 b, a 之间的相关性相同。
  5. All 对角线元素为 1。由于对角线元素表示每个变量与其自身的相关性,因此它始终等于 1。
  6. 轴刻度表示每个轴代表的特征。
  7. 较大的正值(接近 1.0)表示强正相关,即,如果其中一个变量的值增加,另一个变量的值也会增加。
  8. 较大的负值(接近 -1.0)表示很强的负相关性,即一个变量的值随着另一个变量的增加而减小,反之亦然。
  9. 接近 0 的值(正值或负值)表示两个变量之间不存在任何相关性,因此这些变量彼此独立。
  10. 上述矩阵中的每个单元格也由颜色的深浅表示。这里颜色较深的阴影表示较小的值,而较亮的阴影对应较大的值(接近 1)。
    该比例是在图右侧的颜色条的帮助下给出的。

 

向绘图添加标题和标签

我们可以调整生成的相关矩阵,就像任何其他 Matplotlib 图一样。让我们看看如何向矩阵添加标题并向轴添加标签。


correlation_mat = df_small.corr()
sns.heatmap(correlation_mat, annot = True)
plt.title("Correlation matrix of Breast Cancer data")
plt.xlabel("cell nucleus features")
plt.ylabel("cell nucleus features")
plt.show()  

Output:

If we want, we could also change the position of the title to bottom by specifying the y position.


correlation_mat = df_small.corr()
sns.heatmap(correlation_mat, annot = True)
plt.title("Correlation matrix of Breast Cancer data", y=-0.75)
plt.xlabel("cell nucleus features")
plt.ylabel("cell nucleus features")
plt.show()  

Output:

对相关矩阵进行排序

如果给定的数据具有大量特征,相关矩阵可能会变得非常大,因此难以解释。

有时我们可能想要对矩阵中的值进行排序,并以升序或降序查看各个特征对之间的相关性强度。
让我们看看如何实现这一目标。

首先,我们将给定的矩阵转换为一维系列值。


correlation_mat = df_small.corr()
corr_pairs = correlation_mat.unstack()
print(corr_pairs)  

Output:

The unstack method on the Pandas DataFrame returns a Series with MultiIndex.That is, each value in the Series is represented by more than one indices, which in this case are the row and column indices that happen to be the feature names.

现在让我们使用以下命令对这些值进行排序sort_values()Pandas 系列的方法。


sorted_pairs = corr_pairs.sort_values(kind="quicksort")
print(sorted_pairs)  

Output:

We can see each value is repeated twice in the sorted output. This is because our correlation matrix was a symmetric matrix, and each pair of features occurred twice in it.

尽管如此,我们现在已经拥有所有特征对的排序相关系数值,并且可以相应地做出决策。

 

选择负相关对

我们可能想要选择具有特定范围的相关系数值的特征对。
让我们看看如何从上一节中生成的排序对中选择具有负相关性的对。


negative_pairs = sorted_pairs[sorted_pairs < 0]
print(negative_pairs)  

Output:

选择强相关对(幅度大于 0.5)

让我们使用相同的方法来选择强相关的特征。也就是说,我们将尝试过滤掉那些相关系数值大于0.5或小于-0.5的特征对。


strong_pairs = sorted_pairs[abs(sorted_pairs) > 0.5]
print(strong_pairs)  

Output:

将协方差矩阵转换为相关矩阵

We have seen the relationship between the covariance and correlation between a pair of variables in the introductory sections of this blog.

Let us understand how we can compute the covariance matrix of a given data in Python and then convert it into a correlation matrix. We’ll compare it with the correlation matrix we had generated using a direct method call.

首先,Pandas 没有提供计算所有变量对之间协方差的方法,因此我们将使用 NumPy 的cov() method.


cov = np.cov(df_small.T)
print(cov)  

Output:

We’re passing the transpose of the matrix because the method expects a matrix in which each of the features is represented by a row rather than a column.

所以我们的分子是正确的。
现在我们需要计算一个 6×6 矩阵,其中 i、j 处的值是位置 i 和 j 处特征的标准差的乘积。

然后,我们将协方差矩阵除以该标准差矩阵来计算相关矩阵。

让我们首先构建标准差矩阵。


#compute standard deviations of each of the 6 features
stds = np.std(df_small, axis = 0) #shape = (6,)
stds_matrix = np.array([[stds[i]*stds[j] for j in range(6)] for i in range(6)])
print("standard deviations matrix of shape:",stds_matrix.shape)  

Output:

Now that we have the covariance matrix of shape (6,6) for the 6 features, and the pairwise product of features matrix of shape (6,6), we can divide the two and see if we get the desired resultant correlation matrix.


new_corr = cov/std_matrix  

我们已将新的相关矩阵(从协方差矩阵导出)存储在变量中new_corr.

让我们通过绘制相关矩阵并将其与使用 Pandas 方法直接生成的早期矩阵并置来检查是否正确corr().


plt.figure(figsize=(18,4))
plt.subplot(1,2,1)
sns.heatmap(correlation_mat, annot = True)
plt.title("Earlier correlation matrix (from Pandas)")
plt.xlabel("cell nucleus features")
plt.ylabel("cell nucleus features")
plt.subplot(1,2,2)
sns.heatmap(correlation_mat, annot = True)
plt.title("Newer correlation matrix (from Covariance mat)")
plt.xlabel("cell nucleus features")
plt.ylabel("cell nucleus features")
plt.show()  

Output:

We can compare the two matrices and notice that they are identical.

 

将相关矩阵导出到图像

在 Python 脚本中绘制相关矩阵是不够的。我们可能想保存它以供以后使用。
我们可以使用以下命令将生成的绘图保存为磁盘上的图像文件plt.savefig() method.


correlation_mat = df_small.corr()
sns.heatmap(correlation_mat, annot = True)
plt.title("Correlation matrix of Breast Cancer data")
plt.xlabel("cell nucleus features")
plt.ylabel("cell nucleus features")
plt.savefig("breast_cancer_correlation.png")  

运行此代码后,您可以在同一工作目录中看到名为“breast_cancer_correlation.png”的图像文件。

 

结论

在本教程中,我们学习了相关矩阵是什么以及如何在 Python 中生成它们。我们首先关注相关矩阵和相关系数的概念。

然后我们将相关矩阵生成为 NumPy 数组,然后生成 Pandas DataFrame。接下来,我们学习了如何绘制相关矩阵并操作绘图标签、标题等。我们还讨论了用于解释输出相关矩阵的各种属性。

我们还了解了如何对相关矩阵执行某些操作,例如对矩阵进行排序、查找负相关对、查找强相关对等。

然后我们讨论了如何使用数据的协方差矩阵,并通过将其除以各个特征的标准差的乘积来生成相关矩阵。
最后,我们看到了如何将生成的绘图保存为图像文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python相关矩阵教程(使用Pandas) 的相关文章

  • 类型错误:initial_value 必须是 unicode 或 None,而不是 str,

    我正在使用 SOAPpy 来提供 SOAP wsdl 服务 我正在关注这个toturail http www diveintopython net soap web services introspection html 我的代码如下 fr
  • 内部错误:当前事务被中止,命令被忽略直到事务块结束

    使用多处理库在子进程中执行数据库调用时出现此错误 Visit Pastie http pastie org 811424 内部错误 当前事务被中止 命令被忽略直到 交易块结束 这是一个 Postgresql 数据库 使用psycopg2司机
  • 计算 scikit-learn 逻辑回归模型的残差偏差

    有没有办法计算残差scikit learn 逻辑回归模型 http scikit learn org stable modules generated sklearn linear model LogisticRegression html
  • ./manage.py 使用 https 运行服务器

    manage py 运行服务器 0 0 0 0 8000 我使用上面的行作为我从 github 借用的代码的一部分 https github com ribeiroit boh puppet https github com ribeiro
  • 图像从部署到heroku的django web应用程序中消失

    我正在开发一个 django 项目 使用 django Rest 框架编写 REST API 以在 Android 应用程序中使用它们 我的主要想法是在 Django 中开发后端 在 Android 中开发前端 项目部署在 Heroku 上
  • 如何创建 sqlalchemy 到 json

    我有一个 sqlalchemy 结果 labels session query LabelsData LabelsData id LabelsData name LabelsData color filter LabelsData dele
  • 如何从 TKinter 和 SQLite3 中的列表框中删除行

    我试图弄清楚如何从列表框和 sqlite3 中删除一行 我的底部有一个 delButton 函数 我需要从列表框和sql中删除该行吗 我不确定我在这里做什么 就删除部分而言 我通过复制和粘贴各种示例将该功能放在一起 from Tkinter
  • 合并 Pandas Dataframe:如何添加列和替换值

    我有一个数据帧 df1 并想要合并其他 许多 数据帧 df2 以便 合并发生在匹配的 多 索引上 如果缺失 将创建新列 如果列已存在 则替换值 正确的 pandas 操作是什么以及使用什么参数 我查看了 concat join merge
  • 在Python中的自定义类中实现“with object() as f”的使用

    我必须在 python 中打开一个类似文件的对象 它是通过 dev 的串行连接 然后关闭它 在我的班级的几种方法中 这已经完成了好几次 我的做法是在构造函数中打开文件 然后在析构函数中关闭它 不过 我遇到了奇怪的错误 我认为这与垃圾收集器有
  • 如何在 Django 中设置和获取会话?

    当用户登录时 我需要在会话上设置一个变量 我怎样才能做到这一点 if request user is authenticated profile request user get profile request session idempr
  • Python:从区间到值的映射

    我正在重构一个函数 给定一系列隐式定义间隔的端点 检查间隔中是否包含数字 然后返回相应的值 不以任何可计算的方式相关 现在处理这项工作的代码是 if p lt 100 return 0 elif p gt 100 and p lt 300
  • 如何在python中修改html树?

    假设有一些可变片段html代码 p span class code string 1 span class code string 2 span class code string 3 span span span p p span cla
  • 隐藏控制台窗口

    problem 我开始使用 Python 和 Tkinter 设计 GUI 应用程序 当我使用 cxFreeze 冻结脚本时 然后当我在计算机上运行该 EXE 文件时 然后首先打开控制台窗口 在 Windows XP 中为黑色 DOS sh
  • matplotlib 中的低对比度图像(对比度拉伸)问题

    当读取低对比度图像时 它会自动采用以下示例 In 1 from PIL import Image In 2 import numpy as np In 3 import matplotlib pyplot as plt In 4 img I
  • 使用 Jinja2 模板在 HTML 文本区域中显示 FastAPI 响应(元组)

    这是我的 FastAPI 后端 main py from typing import Optional from fastapi import FastAPI Request Form from fastapi templating imp
  • 使用 Python API 2.0.0.1 运行 Ansible Playbook

    安塞布尔版本 2 0 0 1 我现在已经四处寻找了很多 我发现的大多数文档要么不完整 要么已弃用 这篇文章适用于1 8 4版本 即 https stackoverflow com questions 27590039 running ans
  • 从查找文件中批量重命名部分文件名

    edit 请参阅底部以了解我的最终解决方案 我有一个包含约 12 700 个文本文件的目录 他们的名字是这样的 1 Re Report Novenator 公开呼吁埋葬 Lizbett 星期四 2009 年 9 月 10 日 txt 其中前
  • 带有 unicode 键的字典

    Python 中是否可以使用 Unicode 字符作为字典的键 我使用 Unicode 中的西里尔字母作为键 当尝试通过键获取值时 我得到以下回溯 Traceback most recent call last File baseCreat
  • Python 终端菜单?终端着色?终端进度显示?

    我有一个广泛使用 Python 2 风格 的项目 我想知道是否有终端菜单库或类似的东西 我希望通过使用箭头键突出显示选项 一些颜色等简化一些选项 为我的脚本注入一些风味和活力 我隐约记得有一种方法可以制作 bash shell 终端菜单 但
  • 加载视频数据集(Keras)

    我正在尝试实现 LRCN C LSTM RNN 来对视频中的情绪进行分类 我的数据集结构分为两个文件夹 train set 和 valid set 当你打开其中任何一个时 你可以找到3个文件夹 积极 消极 和 惊喜 最后 这 3 个文件夹中

随机推荐

  • 在 Python 中使用 lru_cache 进行缓存

    有很多方法可以实现快速响应的应用程序 缓存是一种方法 如果使用得当 可以使事情变得更快 同时减少计算资源的负载 蟒蛇的功能工具模块附带 lru cache 装饰器 这使您能够使用以下命令缓存函数的结果最近最少使用 LRU 策略 这是一种简单
  • 拼写错误、缺失或误用 Python 关键字

    以下是有关 Python 关键字的更多信息的资源 Python 关键字 简介 真正的 Python 文章 Python 3 8 关键字 Python 文档
  • Python 标准 REPL:快速尝试代码和想法

    目录 Getting to Know the Python Standard REPL 什么是 Python 的交互式 Shell 或 REPL 为什么使用 Python REPL Starting and Ending REPL Inte
  • 使用 Fabric 和 Ansible 自动化 Django 部署

    目录 设置和配置 Fabric Setup 设置 SSH 密钥 强化用户密码 安装 Ansible 依赖项 将 SELinux 设置为宽容模式 升级服务器 完整性检查 Ansible Primer 剧本 示例手册 Playbook Setu
  • 第 27 集:准备面试 Python 练习题

    第 27 集 准备面试 Python 练习题 真正的 Python 播客 2020 年 9 月 18 日47m RSS Apple Podcasts Google Podcasts Spotify More 播客瘾君子 灰蒙蒙 袖珍铸件 投
  • Python 基础知识:函数和循环(摘要)

    在本视频课程中 您了解了两个最基本的概念 在编程中 函数和循环 首先 您学习了如何定义自己的自定义函数 你看到了 该函数由两部分组成 这函数签名 这开始于def关键字并包括函数名称和函数参数 这函数体 其中包含每当调用该函数时运行的代码 函
  • Python 的 urllib.request 用于 HTTP 请求

    目录 使用 urllib request 的基本 HTTP GET 请求 The Nuts and Bolts of HTTP Messages 了解什么是 HTTP 消息 了解 urllib request 如何表示 HTTP 消息 关闭
  • Django Ninja 的隐蔽 REST API(摘要)

    在本课程中 您已经了解了 Django Ninja REST API 库的所有内容 使用 Ninja 您可以 使用装饰器快速包装 Django 视图创建 REST API 端点 使用类型注释定义变量和参数 写Schema和ModelSche
  • Python 中的 Dijkstra 算法(查找最短路径)

    Dijkstra算法的工作原理是通过迭代找到节点的最短距离值 直到达到实际的最短距离 Dijkstra 算法的一个关键方面是它使用优先队列从尚未处理的节点集中选择具有最小暂定距离的顶点 当前节点被标记为已访问 并检查其所有邻居节点是否有更优
  • 使用 Pandas read_excel 读取 Excel 文件

    Pandas read excel是一个函数蟒蛇熊猫库允许我们在 Python 中读取 Excel 文件并将其转换为数据框 object read excel函数可以导入具有不同扩展名的Excel文件 例如 xls xlsx xlsm和 o
  • Pandas where() 方法:带条件过滤

    The where中的方法Pandas允许您根据条件过滤 DataFrame 或 Series 类似于 SQL 的 WHERE 子句 您是否曾经发现自己需要根据特定条件替换 DataFrame 中的某些值 或者可能想要屏蔽不符合某些条件的数
  • Linux find 命令:综合指南

    The findLinux 中的命令是一个功能强大的实用程序 用于根据您指定的条件搜索和定位文件和目录 它可以按名称 大小 类型 权限 日期和许多其他标准快速定位文件 目录 hide 1 基本语法 2 Finding Files by Na
  • 了解 Linux Sed 命令中的保持缓冲区

    保持缓冲区在sed允许您临时存储和检索输入行 将其视为辅助存储器 您可以在使用主模式空间时放置数据 当您需要一次执行涉及多行的操作时 保持缓冲区特别有用 保留缓冲区不是立即处理和打印每一行 而是让您保存一行 处理其他行 然后在需要时返回保存
  • Python zip 函数教程(简单示例)

    The zip function 是一个内置的 Python 函数 它接受两个或多个序列或集合 如列表或字符串 并创建一个并行聚合每个集合中的元素的迭代器 这种组合这些值的过程称为 压缩 它源于将两个单独的项目集合压缩在一起的想法 目录 h
  • Linux 测试命令:Bash 中的比较

    The testLinux 中的命令是一个命令行实用程序 用于检查和评估条件 它经常被用在bash 脚本测试文件属性 比较字符串和数字 并支持 AND OR 和 NOT 运算的复杂逻辑评估 目录 hide 1 语法和返回值 2 File T
  • Python 中的无穷大万无一失的指南

    数字是编程不可或缺的一部分 因此 编程语言支持各种数据类型来表示不同类型的数字 并提供各种使用它们的方法 这些数据类型中的每一种都对其可以表示的数字范围有一定的限制 有些可以代表小范围的数字 而另一些则支持很大的数字范围 根据我们的用例 我
  • Linux 中的 Grep 命令(附示例)

    在本教程中 您将学习如何使用非常重要的grepLinux 中的命令 我们将讨论为什么掌握这个命令很重要 以及如何在命令行的日常任务中使用它 让我们通过一些解释和示例来深入探讨 目录 hide 1 为什么我们使用 grep 2 查找字符串 3
  • 如何一步步安装Linux

    如何安装Linux 当您选择了最佳 Linux 发行版 现在是时候了解如何安装 Linux 了 如果你想安装Linux 有两种方法可以实现 第一种方式就是下载您想要的 Linux 发行版并将其刻录到 DVD 或 USB 记忆棒中 然后用它启
  • Python 字符串插值(制作动态字符串)

    字符串插值是将变量值替换为字符串中占位符的过程 这是 Python 中的一项强大功能 使您能够通过在运行时将变量的值嵌入或替换到字符串中来创建动态字符串 Python支持多种格式化字符串和执行字符串插值的方式 使得格式字符串更容易维护 也更
  • Python相关矩阵教程(使用Pandas)

    在本博客中 我们将介绍一个重要的多变量数据描述性统计量 称为相关矩阵 我们将学习如何在 Python 中使用以下命令创建 绘制和操作相关矩阵Pandas 我们将讨论以下主题 目录 hide 1 What is the correlation