详解Python进行数据相关性分析的三种方式

目录
  • 相关性实现
    • NumPy 相关性计算
    • SciPy 相关性计算
    • Pandas 相关性计算
  • 线性相关实现
    • 线性回归:SciPy 实现
  • 等级相关
    • 排名:SciPy 实现
    • 等级相关性:NumPy 和 SciPy 实现
    • 等级相关性:Pandas 实现
  • 相关性的可视化
    • 带有回归线的 XY 图
    • 相关矩阵的热图 matplotlib
    • 相关矩阵的热图 seaborn

相关性实现

统计和数据科学通常关注数据集的两个或多个变量(或特征)之间的关系。数据集中的每个数据点都是一个观察值,特征是这些观察值的属性或属性。

这里主要介绍下面3种相关性的计算方式:

  • Pearson’s r
  • Spearman’s rho
  • Kendall’s tau

NumPy 相关性计算

np.corrcoef() 返回 Pearson 相关系数矩阵。

import numpy as np
x = np.arange(10, 20)
x
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])

y = np.array([2, 1, 4, 5, 8, 12, 18, 25, 96, 48])
y
array([ 2,  1,  4,  5,  8, 12, 18, 25, 96, 48])

r = np.corrcoef(x, y)
r
array([[1.        , 0.75864029],
       [0.75864029, 1.        ]])

SciPy 相关性计算

import numpy as np
import scipy.stats
x = np.arange(10, 20)
y = np.array([2, 1, 4, 5, 8, 12, 18, 25, 96, 48])

scipy.stats.pearsonr(x, y)    # Pearson's r
(0.7586402890911869, 0.010964341301680832)

scipy.stats.spearmanr(x, y)   # Spearman's rho
SpearmanrResult(correlation=0.9757575757575757, pvalue=1.4675461874042197e-06)

scipy.stats.kendalltau(x, y)  # Kendall's tau
KendalltauResult(correlation=0.911111111111111, pvalue=2.9761904761904762e-05)

在检验假设时,您可以在统计方法中使用p 值。p 值是一项重要的衡量标准,需要深入了解概率和统计数据才能进行解释。

scipy.stats.pearsonr(x, y)[0]    # Pearson's r
0.7586402890911869
scipy.stats.spearmanr(x, y)[0]   # Spearman's rho
0.9757575757575757
scipy.stats.kendalltau(x, y)[0]  # Kendall's tau
0.911111111111111

Pandas 相关性计算

相对于来说计算比较简单。

import pandas as pd
x = pd.Series(range(10, 20))
y = pd.Series([2, 1, 4, 5, 8, 12, 18, 25, 96, 48])

x.corr(y)                     # Pearson's r
0.7586402890911867
y.corr(x)
0.7586402890911869
x.corr(y, method='spearman')  # Spearman's rho
0.9757575757575757
x.corr(y, method='kendall')   # Kendall's tau
0.911111111111111

线性相关实现

线性相关性测量变量或数据集特征之间的数学关系与线性函数的接近程度。如果两个特征之间的关系更接近某个线性函数,那么它们的线性相关性更强,相关系数的绝对值也更高。

线性回归:SciPy 实现

线性回归是寻找尽可能接近特征之间实际关系的线性函数的过程。换句话说,您确定最能描述特征之间关联的线性函数,这种线性函数也称为回归线。

import pandas as pd
x = pd.Series(range(10, 20))
y = pd.Series([2, 1, 4, 5, 8, 12, 18, 25, 96, 48])

使用scipy.stats.linregress()对两个长度相同的数组执行线性回归。

result = scipy.stats.linregress(x, y)
scipy.stats.linregress(xy)
LinregressResult(slope=7.4363636363636365, intercept=-85.92727272727274, rvalue=0.7586402890911869, pvalue=0.010964341301680825, stderr=2.257878767543913)

result.slope # 回归线的斜率
7.4363636363636365

result.intercept # 回归线的截距
-85.92727272727274

result.rvalue # 相关系数
0.7586402890911869

result.pvalue #  p值
0.010964341301680825

result.stderr # 估计梯度的标准误差
2.257878767543913

未来更多内容参考机器学习专栏中的线性回归内容。

等级相关

比较与两个变量或数据集特征相关的数据的排名或排序。如果排序相似则相关性强、正且高。但是如果顺序接近反转,则相关性为强、负和低。换句话说等级相关性仅与值的顺序有关,而不与数据集中的特定值有关。

图1和图2显示了较大的 x 值始终对应于较大的 y 值的观察结果,这是完美的正等级相关。图3说明了相反的情况即完美的负等级相关。

排名:SciPy 实现

使用 scipy.stats.rankdata() 来确定数组中每个值的排名。

import numpy as np
import scipy.stats
x = np.arange(10, 20)
y = np.array([2, 1, 4, 5, 8, 12, 18, 25, 96, 48])
z = np.array([5, 3, 2, 1, 0, -2, -8, -11, -15, -16])

# 获取排名序
scipy.stats.rankdata(x)  # 单调递增
array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
scipy.stats.rankdata(y)
array([ 2.,  1.,  3.,  4.,  5.,  6.,  7.,  8., 10.,  9.])
scipy.stats.rankdata(z) # 单调递减
array([10.,  9.,  8.,  7.,  6.,  5.,  4.,  3.,  2.,  1.])

rankdata() 将nan值视为极大。

scipy.stats.rankdata([8, np.nan, 0, 2])
array([3., 4., 1., 2.])

等级相关性:NumPy 和 SciPy 实现

使用 scipy.stats.spearmanr() 计算 Spearman 相关系数。

result = scipy.stats.spearmanr(x, y)
result
SpearmanrResult(correlation=0.9757575757575757, pvalue=1.4675461874042197e-06)

result.correlation
0.9757575757575757

result.pvalue
1.4675461874042197e-06

rho, p = scipy.stats.spearmanr(x, y)
rho
0.9757575757575757

p
1.4675461874042197e-06

等级相关性:Pandas 实现

使用 Pandas 计算 Spearman 和 Kendall 相关系数。

import numpy as np
import scipy.stats
x = np.arange(10, 20)
y = np.array([2, 1, 4, 5, 8, 12, 18, 25, 96, 48])
z = np.array([5, 3, 2, 1, 0, -2, -8, -11, -15, -16])

x, y, z = pd.Series(x), pd.Series(y), pd.Series(z)
xy = pd.DataFrame({'x-values': x, 'y-values': y})
xyz = pd.DataFrame({'x-values': x, 'y-values': y, 'z-values': z})

计算 Spearman 的 rho,method=spearman。

x.corr(y, method='spearman')
0.9757575757575757

xy.corr(method='spearman')
          x-values  y-values
x-values  1.000000  0.975758
y-values  0.975758  1.000000

xyz.corr(method='spearman')
          x-values  y-values  z-values
x-values  1.000000  0.975758 -1.000000
y-values  0.975758  1.000000 -0.975758
z-values -1.000000 -0.975758  1.000000

xy.corrwith(z, method='spearman')
x-values   -1.000000
y-values   -0.975758
dtype: float64

计算 Kendall 的 tau, method=kendall。

x.corr(y, method='kendall')
0.911111111111111

xy.corr(method='kendall')
          x-values  y-values
x-values  1.000000  0.911111
y-values  0.911111  1.000000

xyz.corr(method='kendall')
          x-values  y-values  z-values
x-values  1.000000  0.911111 -1.000000
y-values  0.911111  1.000000 -0.911111
z-values -1.000000 -0.911111  1.000000

xy.corrwith(z, method='kendall')
x-values   -1.000000
y-values   -0.911111
dtype: float64

相关性的可视化

数据可视化在统计学和数据科学中非常重要。可以帮助更好地理解的数据,并更好地了解特征之间的关系。

这里使用 matplotlib 来进行数据可视化。

import matplotlib.pyplot as plt
plt.style.use('ggplot')

import numpy as np
import scipy.stats
x = np.arange(10, 20)
y = np.array([2, 1, 4, 5, 8, 12, 18, 25, 96, 48])
z = np.array([5, 3, 2, 1, 0, -2, -8, -11, -15, -16])
xyz = np.array([[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
                [2, 1, 4, 5, 8, 12, 18, 25, 96, 48],
                [5, 3, 2, 1, 0, -2, -8, -11, -15, -16]])

带有回归线的 XY 图

使用 linregress() 获得回归线的斜率和截距,以及相关系数。

slope, intercept, r, p, stderr = scipy.stats.linregress(x, y)

构建线性回归公式。

line = f' y={intercept:.2f}+{slope:.2f}x, r={r:.2f}'
line
'y=-85.93+7.44x, r=0.76'

.plot() 绘图

fig, ax = plt.subplots()
ax.plot(x, y, linewidth=0, marker='s', label='Data points')
ax.plot(x, intercept + slope * x, label=line)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend(facecolor='white')
plt.show()

相关矩阵的热图 matplotlib

处理特征较多的相关矩阵用热图方式比较理想。

corr_matrix = np.corrcoef(xyz).round(decimals=2)
corr_matrix
array([[ 1.  ,  0.76, -0.97],
       [ 0.76,  1.  , -0.83],
       [-0.97, -0.83,  1.  ]])

其中为了表示方便将相关的数据四舍五入后用 .imshow() 绘制。

fig, ax = plt.subplots()
im = ax.imshow(corr_matrix)
im.set_clim(-1, 1)
ax.grid(False)
ax.xaxis.set(ticks=(0, 1, 2), ticklabels=('x', 'y', 'z'))
ax.yaxis.set(ticks=(0, 1, 2), ticklabels=('x', 'y', 'z'))
ax.set_ylim(2.5, -0.5)
for i in range(3):
    for j in range(3):
        ax.text(j, i, corr_matrix[i, j], ha='center', va='center',
                color='r')
cbar = ax.figure.colorbar(im, ax=ax, format='% .2f')
plt.show()

相关矩阵的热图 seaborn

import seaborn as sns

plt.figure(figsize=(11, 9),dpi=100)
sns.heatmap(data=corr_matrix,
            annot_kws={'size':8,'weight':'normal', 'color':'#253D24'},#数字属性设置,例如字号、磅值、颜色        
           )

以上就是详解Python进行数据相关性分析的三种方式的详细内容,更多关于Python数据相关性分析的资料请关注我们其它相关文章!

(0)

相关推荐

  • python可视化数据分析pyecharts初步尝试

    目录 整体说明 例子 Boxplot Bar HeatMap 有一个web+flask项目需要可视化数据分析结果,检索后发现,pyecharts工具包非常对口. Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可.而 Python 是一门富有表达力的语言,很适合用于数据处理.当数据分析遇上数据可视化时,pyecharts 诞生了. pyecharts中文文档有详细的说明,这里记录了个人更感兴趣的部分和对应的使用结果. 整体说明 pyechar

  • python进行相关性分析并绘制散点图详解

    目录 需要用到的库 数据读取 总结 近期,有小伙伴问我关于怎么使用python进行散点图的绘制,这个东西很简单,但是怎么讲相关性的值标注在图形上略显麻烦,因此,在这里记录一下,将整个流程展示一下. 需要用到的库 在本篇博客中,主要用到的库是pandas.numpy.matplotlib.seaborn等,想要使用seaborn库必须要引入matplotlib库,seaborn是作为它的外挂库. #1 load pakeage import pandas as pd#读写表格以及表格处理 impo

  • Python Pandas数据分析之iloc和loc的用法详解

    Pandas 是一套用于 Python 的快速.高效的数据分析工具.它可以用于数据挖掘和数据分析,同时也提供数据清洗功能.本篇目录如下: 一.iloc 1.定义 iloc索引器用于按位置进行基于整数位置的索引或者选择. 2.语法 df.iloc [row selection, column selection] 3.代码示例 (1)导入数据 (2)选择单行或单列 (3)选择多行或多列 (4)注意 iloc选择一行时返回Series,选择多行返回DataFrame,通过传递列表可转为DataFra

  • python数据分析Numpy库的常用操作

    numpy库的引入: import numpy as np 1.numpy对象基础属性的查询 lst = [[1, 2, 3], [4, 5, 6]] def numpy_type(): print(type(lst)) data = np.array(lst, dtype=np.float64) # array将数组转为numpy的数组 # bool,int,int8,int16,int32,int64,int128,uint8,uint32, # uint64,uint128,float16

  • 详解Python进行数据相关性分析的三种方式

    目录 相关性实现 NumPy 相关性计算 SciPy 相关性计算 Pandas 相关性计算 线性相关实现 线性回归:SciPy 实现 等级相关 排名:SciPy 实现 等级相关性:NumPy 和 SciPy 实现 等级相关性:Pandas 实现 相关性的可视化 带有回归线的 XY 图 相关矩阵的热图 matplotlib 相关矩阵的热图 seaborn 相关性实现 统计和数据科学通常关注数据集的两个或多个变量(或特征)之间的关系.数据集中的每个数据点都是一个观察值,特征是这些观察值的属性或属性.

  • 详解Python获取线程返回值的三种方式

    目录 方法一 方法二 方法三 最后的话 提到线程,你的大脑应该有这样的印象:我们可以控制它何时开始,却无法控制它何时结束,那么如何获取线程的返回值呢?今天就分享一下自己的一些做法. 方法一 使用全局变量的列表,来保存返回值 ret_values = [] def thread_func(*args):     ...     value = ...     ret_values.append(value) 选择列表的一个原因是:列表的 append() 方法是线程安全的,CPython 中,GI

  • 详解Python修复遥感影像条带的两种方式

    GDAL修复Landsat ETM+影像条带 Landsat7 ETM+卫星影像由于卫星传感器故障,导致此后获取的影像出现了条带.如下图所示, 影像中均匀的布满条带. 使用GDAL修复影像条带的代码如下: def gdal_repair(tif_name, out_name, bands): """ tif_name(string): 源影像名 out_name(string): 输出影像名 bands(integer): 影像波段数 """ #

  • 详解Python+opencv裁剪/截取图片的几种方式

    前言 在计算机视觉任务中,如图像分类,图像数据集必不可少.自己采集的图片往往存在很多噪声或无用信息会影响模型训练.因此,需要对图片进行裁剪处理,以防止图片边缘无用信息对模型造成影响.本文介绍几种图片裁剪的方式,供大家参考. 一.手动单张裁剪/截取 selectROI:选择感兴趣区域,边界框框选x,y,w,h selectROI(windowName, img, showCrosshair=None, fromCenter=None): . 参数windowName:选择的区域被显示在的窗口的名字

  • 详解python连接telnet和ssh的两种方式

    目录 Telnet 连接方式 ssh连接方式 Telnet 连接方式 #!/usr/bin/env python # coding=utf-8 import time import telnetlib import logging __author__ = 'Evan' save_log_path = 'result.txt' file_mode = 'a+' format_info = '%(asctime)s - %(filename)s[line:%(lineno)d] - %(level

  • 详解React中共享组件逻辑的三种方式

    废话少说,这三种方式分别是:render props.高阶组件和自定义Hook.下面依次演示 假设有一个TimeOnPage组件专门用来记录用户在当前页面停留时间,像这样: const TimeOnPage = () => { const [second, setSecond] = useState(0); useEffect(() => { setTimeout(() => { setSecond(second + 1); }, 1000); }, [second]); return

  • 详解springboot解决CORS跨域的三种方式

    目录 一.实现WebMvcConfigurer接口 二.实现filter过滤器方式 三.注解@CrossOrigin 四.实战 五.cookie的跨域 一.实现WebMvcConfigurer接口 @Configuration public class WebConfig implements WebMvcConfigurer { /** * 添加跨域支持 */ @Override public void addCorsMappings(CorsRegistry registry) { // 允

  • 详解Android提交数据到服务器的两种方式四种方法

    Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方式向服务器提交数据的方法. 代码比较简单,这里不去过多的阐述,直接看代码. /** * @author Dylan * 本类封装了Android中向web服务器提交数据的两种方式四种方法 */ public class SubmitDataByHttpClientAndOrdinaryWay { /** * 使用get请求以普通方式提交数据 * @param map 传

  • 详解Python判定IP地址合法性的三种方法

    IP合法性校验是开发中非常常用的,看起来很简单的判断,作用确很大,写起来比较容易出错,今天我们来总结一下,看一下3种常用的IP地址合法性校验的方法. IPv4的ip地址格式:(1~255).(0~255).(0~255).(0~255) 方法1: 正则表达式判定法 最简单的实现方法是构造一个正则表达式.判断用户的输入与正则表达式是否匹配.若匹配则是正确的IP地址,否则不是正确的IP地址. 复制代码 代码如下: ^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(

  • 详解Quartz 与 Spring框架集成的三种方式

    XML+ Spring MVC 版本 POM文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd

随机推荐