博客
关于我
Python轻松实现统计学中重要的相关性分析
阅读量:799 次
发布时间:2023-03-06

本文共 2565 字,大约阅读时间需要 8 分钟。

在日常工作中,我们常常面临处理大量数据的问题,这些数据之间可能存在某种关联性。这些关联性可能是正相关、负相关,或者完全不相关。在需要做决策时,能够量化地分析数据间的关联性显然是非常有帮助的。本文将介绍如何使用 Python 进行数据相关性分析。

数据准备

为了演示如何进行数据相关性分析,我们首先需要准备数据。在这里,我们将使用 Python 的随机数生成函数 random 生成两个包含 20 个数据的数组,这些数据都在 [0, 100] 区间内随机生成。

import random
a = [random.randint(0, 100) for _ in range(20)]
b = [random.randint(0, 100) for _ in range(20)]
print(a) # 输出结果类似:[35, 2, 75, 72, 55, 77, 69, 83, 3, 46, 31, 91, 72, 12, 15, 20, 39, 18, 57, 49]
print(b) # 输出结果类似:[25, 24, 72, 91, 27, 44, 85, 21, 0, 64, 44, 31, 6, 91, 1, 61, 5, 39, 24, 43]

离散度分析

在进行相关性分析之前,我们需要了解数据的基本特性。对于离散变量,期望值(平均数)是最简单的度量指标。我们可以编写一个函数来计算离散变量的期望值。

def mean(x):
return sum(x) / len(x)
print(mean(a)) # 输出结果类似:46.05
print(mean(b)) # 输出结果类似:39.9

接下来,我们需要了解数据的离散程度。方差和标准差是衡量数据离散程度的重要指标。对于离散变量,方差的计算公式如下:

def de_mean(x):
x_bar = mean(x)
return [x_i - x_bar for x_i in x]
def dot(v, w):
return sum(v_i * w_i for v_i, w_i in zip(v, w))
def sum_of_squares(v):
return dot(v, v)
def variance(x):
n = len(x)
deviations = de_mean(x)
return sum_of_squares(deviations) / (n - 1)
def standard_deviation(x):
return math.sqrt(variance(x))
import math
print(variance(a)) # 输出结果类似:791.8394736842105
print(variance(b)) # 输出结果类似:850.5157894736841

协方差与相关系数

接下来,我们需要计算两组数据的协方差和相关系数。协方差的计算公式如下:

def covariance(x, y):
n = len(x)
deviations_x = de_mean(x)
deviations_y = de_mean(y)
return dot(deviations_x, deviations_y) / (n - 1)
def correlation(x, y):
stdev_x = standard_deviation(x)
stdev_y = standard_deviation(y)
if stdev_x > 0 and stdev_y > 0:
return covariance(x, y) / stdev_x / stdev_y
else:
return 0
print(covariance(a, b)) # 输出结果类似:150.95263157894735
print(correlation(a, b)) # 输出结果类似:0.18394200852440826

使用 numpy 计算

除了手动编写函数,我们可以使用 numpy 来简化计算。以下是使用 numpy 计算协方差矩阵和相关系数的示例:

import numpy as np
ab = np.array([a, b])
cov_matrix = np.cov(ab)
print(cov_matrix) # 输出结果类似:
# array([[ 791.83947368, 150.95263158],
# [150.95263158, 850.51578947]])
corr_coeff = np.corrcoef(ab)
print(corr_coeff) # 输出结果类似:
# array([[ 1. , 0.18394201],
# [ 0.18394201, 1. ]])

使用 pandas 计算

我们还可以使用 pandas 库来简化计算。以下是使用 pandas 计算协方差和相关系数的示例:

import pandas as pd
df = pd.DataFrame({
'A': a,
'B': b
})
print(df.cov()) # 输出结果类似:
# A B
# 791.83947368 150.95263158
# B 150.95263158 850.51578947
print(df.corr()) # 输出结果类似:
# A B
# 1.00000000 0.18394201
# B 0.18394201 1.00000000

小结

通过以上步骤,我们可以清晰地看到,两组数据之间存在一定的正相关性,相关系数约为 0.18。这意味着这两组数据之间存在弱正相关关系。虽然数据是随机生成的,但通过统计方法我们可以量化地描述数据间的关系。在实际工作中,了解数据的相关性有助于我们做出更科学的决策。

转载地址:http://qqafk.baihongyu.com/

你可能感兴趣的文章
Python WebSocket自动化测试:构建高效接口测试框架
查看>>
Python Web开发
查看>>
Redis 配置文件杂项。
查看>>
Python web自动化测试 —— 文件上传
查看>>
Python web自动化测试 —— 文件上传!
查看>>
Python Web自动化测试开发环境搭建(附安装包与虚拟机环境)
查看>>
python win32api键盘_Python win32api.keybd_event模拟键盘输入
查看>>
python Windows显示当前鼠标坐标
查看>>
python Workbook 表格宽度
查看>>
python write报错a byte-like object is required.not str
查看>>
PYTHON调用大模型实现图片生成
查看>>
python yaml.dump 缩进错误
查看>>
Python yield generator
查看>>
Python yield 使用浅析
查看>>
Python yield解析:深入理解生成器的魔力
查看>>
Python You are using pip version 10.0.1, however version 19.3.1 is available.
查看>>
python zipfile模块学习笔记(一)
查看>>
Python zip函数 详解(全)
查看>>
Python \r\n与\n的转换
查看>>
python __new__中单例的作用
查看>>