当前位置: 首页 > news >正文

在Python中创建相关系数矩阵的6种方法

相关系数矩阵(Correlation matrix)是数据分析的基本工具。它们让我们了解不同的变量是如何相互关联的。在Python中,有很多个方法可以计算相关系数矩阵,今天我们来对这些方法进行一个总结

Pandas

Pandas的DataFrame对象可以使用corr方法直接创建相关矩阵。由于数据科学领域的大多数人都在使用Pandas来获取数据,因此这通常是检查数据相关性的最快、最简单的方法之一。

 import pandas as pdimport seaborn as snsdata = sns.load_dataset('mpg')correlation_matrix = data.corr(numeric_only=True)correlation_matrix

如果你是统计和分析相关工作的,你可能会问" p值在哪里?",在最后我们会有介绍

Numpy

Numpy也包含了相关系数矩阵的计算函数,我们可以直接调用,但是因为返回的是ndarray,所以看起来没有pandas那么清晰。

 import numpy as npfrom sklearn.datasets import load_irisiris = load_iris()np.corrcoef(iris["data"])

为了更好的可视化,我们可以直接将其传递给sns.heatmap()函数。

 import seaborn as snsdata = sns.load_dataset('mpg')correlation_matrix = data.corr()sns.heatmap(data.corr(), annot=True, cmap='coolwarm')

annot=True这个参数可以输出一些额外的有用信息。一个常见hack是使用sns.set_context(‘talk’)来获得额外的可读输出。

这个设置是为了生成幻灯片演示的图像,它能帮助我们更好地阅读(更大的字体)。

Statsmodels

Statsmodels这个统计分析库也是肯定可以的

 import statsmodels.api as smcorrelation_matrix = sm.graphics.plot_corr(data.corr(), xnames=data.columns.tolist())

plotly

默认情况下plotly这个结果是如何从左下到右上运行对角线1.0的。这种行为与大多数其他工具相反,所以如果你使用plotly需要特别注意

 import plotly.offline as pyopyo.init_notebook_mode(connected=True)import plotly.figure_factory as ffcorrelation_matrix = data.corr()fig = ff.create_annotated_heatmap(z=correlation_matrix.values, x=list(correlation_matrix.columns), y=list(correlation_matrix.index), colorscale='Blues')fig.show()

Pandas + Matplotlib更好的可视化

这个结果也可以直接使用用sns.pairplot(data),两种方法产生的图差不多,但是seaborn只需要一句话

 sns.pairplot(df[['mpg','weight','horsepower','acceleration']])

所以我们这里介绍如何使用Matplotlib来实现

 import matplotlib.pyplot as pltpd.plotting.scatter_matrix(data, alpha=0.2, figsize=(6, 6), diagonal='hist')plt.show()

相关性的p值

如果你正在寻找一个简单的矩阵(带有p值),这是许多其他工具(SPSS, Stata, R, SAS等)默认做的,那如何在Python中获得呢?

这里就要借助科学计算的scipy库了,以下是实现的函数

 from scipy.stats import pearsonrimport pandas as pdimport seaborn as snsdef corr_full(df, numeric_only=True, rows=['corr', 'p-value', 'obs']):"""Generates a correlation matrix with correlation coefficients, p-values, and observation count.Args:- df:                  Input dataframe- numeric_only (bool): Whether to consider only numeric columns for correlation. Default is True.- rows:                Determines the information to show. Default is ['corr', 'p-value', 'obs'].Returns:- formatted_table: The correlation matrix with the specified rows."""# Calculate Pearson correlation coefficientscorr_matrix = df.corr(numeric_only=numeric_only)# Calculate the p-values using scipy's pearsonrpvalue_matrix = df.corr(numeric_only=numeric_only, method=lambda x, y: pearsonr(x, y)[1])# Calculate the non-null observation count for each columnobs_count = df.apply(lambda x: x.notnull().sum())# Calculate observation count for each pair of columnsobs_matrix = pd.DataFrame(index=corr_matrix.columns, columns=corr_matrix.columns)for col1 in obs_count.index:for col2 in obs_count.index:obs_matrix.loc[col1, col2] = min(obs_count[col1], obs_count[col2])# Create a multi-index dataframe to store the formatted correlationsformatted_table = pd.DataFrame(index=pd.MultiIndex.from_product([corr_matrix.columns, rows]), columns=corr_matrix.columns)# Assign values to the appropriate cells in the formatted tablefor col1 in corr_matrix.columns:for col2 in corr_matrix.columns:if 'corr' in rows:formatted_table.loc[(col1, 'corr'), col2] = corr_matrix.loc[col1, col2]if 'p-value' in rows:# Avoid p-values for diagonal they correlate perfectlyif col1 != col2:formatted_table.loc[(col1, 'p-value'), col2] = f"({pvalue_matrix.loc[col1, col2]:.4f})"if 'obs' in rows:formatted_table.loc[(col1, 'obs'), col2] = obs_matrix.loc[col1, col2]return(formatted_table.fillna('').style.set_properties(**{'text-align': 'center'}))

直接调用这个函数,我们返回的结果如下:

 df = sns.load_dataset('mpg')result = corr_full(df, rows=['corr', 'p-value'])result

总结

我们介绍了Python创建相关系数矩阵的各种方法,这些方法可以随意选择(那个方便用哪个)。Python中大多数工具的标准默认输出将不包括p值或观察计数,所以如果你需要这方面的统计,可以使用我们子厚提供的函数,因为要进行全面和完整的相关性分析,有p值和观察计数作为参考是非常有帮助的。

https://avoid.overfit.cn/post/836b5590a96045faae2774bb3f23c9ef

相关文章:

在Python中创建相关系数矩阵的6种方法

相关系数矩阵(Correlation matrix)是数据分析的基本工具。它们让我们了解不同的变量是如何相互关联的。在Python中,有很多个方法可以计算相关系数矩阵,今天我们来对这些方法进行一个总结 Pandas Pandas的DataFrame对象可以使用c…...

物联网、工业大数据平台 TDengine 与苍穹地理信息平台完成兼容互认证

当前,在政府、军事、城市规划、自然资源管理等领域,企业对地理信息的需求迅速增加,人们需要更有效地管理和分析地理数据,以进行决策和规划。在此背景下,“GIS 基础平台”应运而生,它通常指的是一个地理信息…...

this.$nextTick()的使用场景

事件循环机制: 同步代码执行->查找异步队列,推入执行栈,执行Vue.nextTick[事件循环1]->查找异步队列,推入执行栈,执行Vue.nextTick[事件循环2]->查找异步队列,推入执行栈,执行Vue.nex…...

idea(第一次)启动项目,端口变成了8080

先上配置 server:port: 9569 spring:profiles:active: dev 该排查的问题也都没问题,重启idea也试过了,还是8080 解决办法:点击右侧的maven ,左上角的重新导入 reimport all maven projects 我又没有改动pom文件,居然还要点这…...

brpc 学习(一)M1 MacOS构建方法

tags: brpc categories: brpc 写在前面 实习阶段初次接触到 RPC 这样一种协议, 以及 brpc 这样一个很棒的框架, 但是当时没时间认真深入学习, 就是围绕使用 demo 开发, 还是有点不知其所以然的, 最近抽空来学习一下 brpc, 首要的一点就是在开发机上构建项目, 并且能够跑起来,…...

Python 与 Qt c++ 程序共享内存,传递图片

python 代码 这里Python 使用 shared_memory QT 使用 QSharedMemory 简单协议: 前面4个字节是 图片with,height,0,0 后面是图片数据 import sys import struct def is_little_endian():x0x12345678y struct.pack(I,x)return y[0]0x78print(f"is_little_end…...

【2023年中国研究生数学建模竞赛华为杯】E题 出血性脑卒中临床智能诊疗建模 问题分析、数学模型及代码实现

【2023年中国研究生数学建模竞赛华为杯】E题 出血性脑卒中临床智能诊疗建模 1 题目 1.1 背景介绍 出血性脑卒中指非外伤性脑实质内血管破裂引起的脑出血,占全部脑卒中发病率的10-15%。其病因复杂,通常因脑动脉瘤破裂、脑动脉异常等因素,导致…...

2024字节跳动校招面试真题汇总及其解答(五)

17.TCP的拥塞控制 TCP 的拥塞控制是指在 TCP 连接中,发送端和接收端通过协作来控制网络中数据包的流量,避免网络拥塞。TCP 的拥塞控制是 TCP 协议的重要组成部分,它可以确保 TCP 连接的稳定性和可靠性。 TCP 的拥塞控制主要有以下几个目的: 防止网络拥塞:当网络中的数据…...

如何撤销某个已经git add的文件以及如何撤销所有git add提交的文件?

如果你想撤销已经添加&#xff08;git add&#xff09;到暂存区的单个文件&#xff0c;可以使用 git reset 命令。以下是具体的命令格式&#xff1a; git reset <file>在这里&#xff0c;<file> 是你想要从暂存区中移除的文件名。比如&#xff0c;如果你想要撤销已…...

JVM高级性能调试

标准的JVM是配置为了高吞吐量&#xff0c;吞吐量是为了科学计算和后台运行使用&#xff0c;而互联网商业应用&#xff0c;更多是为追求更短的响应时间&#xff0c;更低的延迟Latency&#xff08;说白了就是更快速度&#xff09;&#xff0c;当用户打开网页没有快速响应&#xf…...

APK的反编译,签名,对齐

APK的反编译&#xff0c;签名&#xff0c;对齐 – WhiteNights Site 2023年9月22日 标签&#xff1a;Android, 应用开发 记录下相关的命令行参数。 APK的打包与解包 java -jar apktool.jar 首先&#xff0c;需要一个jar包&#xff0c;以我在用的为例&#xff1a;apktool_2.8.…...

Django(20):信号机制

目录 信号的工作机制信号的应用场景两个简单例子Django常用内置信号如何放置信号监听函数代码自定义信号第一步&#xff1a;自定义信号第二步&#xff1a;触发信号第三步&#xff1a;将监听函数与信号相关联 信号的工作机制 Django 框架包含了一个信号机制&#xff0c;它允许若…...

31.链表练习题(2)(王道2023数据结构2.3.7节16-25题)

【前面使用的所有链表的定义在第29节】 试题16&#xff1a;两个整数序列A&#xff0c;B存在两个单链表中&#xff0c;设计算法判断B是否是A的连续子序列。 bool Pattern(LinkList L1,LinkList L2){ //此函数实现比较L1的子串中是否有L2LNode *p, *q; //工作在L1,p记录L1子串…...

排序算法之归并排序

一、归并排序的形象理解 原题链接 示例代码 void merge_sort(int q[], int l, int r) {if (l > r) return;int mid l r >> 1;merge_sort(q, l, mid), merge_sort(q, mid 1, r);int k 0, i l, j mid 1;while (i < mid && j < r) //第一处if (q[i]…...

macOS 下 Termius 中文显示为乱码

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…...

Apifox接口测试工具详细解析

最近发现一款接口测试工具--apifox&#xff0c;我我们很难将它描述为一款接口管理工具 或 接口自测试工具。 官方给了一个简单的公式&#xff0c;更能说明apifox可以做什么。 Apifox Postman Swagger Mock JMeter Apifox的特点&#xff1a; 接口文档定义&#xff1a; Api…...

Python 实现 PDF 文件转换为图片 / PaddleOCR

文章用于学习记录 文章目录 前言一、PDF 文件转换为图片二、OCR 图片文字识别提取三、服务器端下载运行 PaddleOCR四、下载权重文件总结 前言 文字识别&#xff08;Optical Character Recognition&#xff0c;简称OCR&#xff09;是指将图片、扫描件或PDF、OFD文档中的打印字符…...

【Java基础夯实】变量声明选择包装类还是基本类型有哪些讲究?

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…...

获取唯一的短邀请码

/*** 获取唯一的邀请码** return the string*/private String generateUserUniqueShareCode() {Set<String> arr getSetArr();String code;do {code generateCode(arr);} while (isCodeUserExists(code));return code;}/*** Gets set arr.** return the set arr*/NotNu…...

大词表语言模型在续写任务上的一个问题及对策

©PaperWeekly 原创 作者 | 苏剑林 单位 | 科学空间 研究方向 | NLP、神经网络 对于 LLM 来说&#xff0c;通过增大 Tokenizer 的词表来提高压缩率&#xff0c;从而缩短序列长度、降低解码成本&#xff0c;是大家都喜闻乐见的事情。毕竟增大词表只需要增大 Embedding 层和…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...