京公网安备 11010802034615号
经营许可证编号:京B2-20210330
前面的假设检验、方差分析基本上都是围绕差异性分析,不论是单个总体还是两个总体及以上,总之都是属于研究“区别”,从本节开始,我们关注“联系”,变量之间的关系分为 函数关系和相关关系。 本节这里重点探讨的是不同类型变量之间的相关性,千万记住一点相关性不代表因果性。除表中列出的常用方法外,还有Tetrachoric、相关系数等。
| 变量类型 | 变量类型 | 相关系数计算方法 | 示例 |
|---|---|---|---|
| 连续型变量 | 连续型变量 | Pearson(正态)/Spearman(非正态) | 商品曝光量和购买转化率 |
| 二分类变量(无序) | 连续型变量 | Point-biserial | 性别和疾病指数 |
| 无序分类变量 | 连续型变量 | 方差分析 | 不同教育水平的考试成绩 |
| 有序分类变量 | 连续型变量 | 连续指标离散化后当做有序分类 | 商品评分与购买转化率 |
| 二分类变量 | 二分类变量 | 数学公式: 检验 联合 Cramer's V | 性别和是否吸烟 |
| 二分类变量(有序) | 连续型变量 | Biserial | 乐器练习时间与考级是否通过 |
| 无序分类变量 | 无序分类变量 | 数学公式: 检验 / Fisher检验 | 手机品牌和年龄段 |
| 有序分类变量 | 无序分类变量 | 数学公式: 检验 | 满意度和手机品牌 |
| 有序分类变量 | 有序分类变量 | Spearman /Kendall Tau相关系数 | 用户等级和活跃程度等级 |
Pearson相关系数度量了两个连续变量之间的线性相关程度;
import random
import numpy as np
import pandas as pd
np.random.seed(10)
df = pd.DataFrame({'商品曝光量':[1233,1333,1330,1323,1323,1142,1231,1312,1233,1123],
'购买转化率':[0.033,0.034,0.035,0.033,0.034,0.029,0.032,0.034,0.033,0.031]})
df

pd.Series.corr(df['商品曝光量'], df['购买转化率'],method = 'pearson') # pearson相关系数
# 0.885789300493948
import scipy.stats as stats
# 假设有两个变量X和Y
X = df['商品曝光量']
Y = df['购买转化率']
# 使用spearmanr函数计算斯皮尔曼相关系数和p值
corr, p_value = stats.pearsonr(X, Y)
print("Pearson相关系数:", corr)
print("p值:", p_value)
# Pearson相关系数: 0.8857893004939478
# p值: 0.0006471519603654732
Spearman等级相关系数可以衡量非线性关系变量间的相关系数,是一种非参数的统计方法,可以用于定序变量或不满足正态分布假设的等间隔数据;
import random
import numpy as np
import pandas as pd
np.random.seed(10)
df = pd.DataFrame({'品牌知名度排位':[9,4,3,6,5,8,1,7,10,2],
'售后服务质量评价排位':[8,2,5,4,7,9,1,6,10,3]})
df

pd.Series.corr(df['品牌知名度排位'], df['售后服务质量评价排位'],method = 'spearman') # spearman秩相关
# 0.8787878787878788
import scipy.stats as stats
# 假设有两个变量X和Y
X = df['品牌知名度排位']
Y = df['售后服务质量评价排位']
# 使用spearmanr函数计算斯皮尔曼相关系数和p值
corr, p_value = stats.spearmanr(X, Y)
print("斯皮尔曼相关系数:", corr)
print("p值:", p_value)
# 斯皮尔曼相关系数: 0.8787878787878788
# p值: 0.0008138621117322101
结论:p = 0.0008<0.05,表明两变量之间的正向关系很显著。
假设我们想要研究性别对于某种疾病是否存在影响。我们有一个二元变量“性别”(男、女)和一个连续型变量“疾病指数”。我们想要计算性别与疾病指数之间的相关系数,就需要用到Point-biserial相关系数。
import scipy.stats as stats
# 创建一个列表来存储数据
gender = [0, 1, 0, 1, 1, 0]
disease_index = [3.2, 4.5, 2.8, 4.0, 3.9, 3.1]
# 使用pointbiserialr函数计算Point-biserial相关系数和p值
corr, p_value = stats.pointbiserialr(gender, disease_index)
print("Point-biserial相关系数:", corr)
print("p值:", p_value)
# Point-biserial相关系数: 0.9278305692406299
# p值: 0.007624695507848026
结论:p = 0.007<0.05,表明两变量之间的正向关系很显著。即性别与疾病指数正相关
假设我们想要比较不同教育水平的学生在CDA考试成绩上是否存在显著差异。我们有一个无序分类变量“教育水平”(高中、本科、研究生)和一个连续型变量“考试成绩”。
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
# 创建一个DataFrame来存储数据
data = pd.DataFrame({
'教育水平': ['高中', '本科', '本科', '研究生', '高中', '本科', '研究生'],
'考试成绩': [80, 90, 85, 95, 75, 88, 92]
})
# 使用ols函数创建一个线性模型
model = ols('考试成绩 ~ C(教育水平)', data=data).fit()
# 使用anova_lm函数进行方差分析
anova_table = sm.stats.anova_lm(model, typ=2)
anova_table

结论:p = 0.0102<0.05,拒绝原假设,表明两变量之间的正向关系很显著。教育水平与考试成绩正相关
将连续型变量离散化后当做有序分类,然后用 有序分类变量 VS 有序分类变量的方法
一项研究调查了不同性别的成年人对在公众场合吸烟的态度,结果如表所示。那么,性别与对待吸烟的态度之间的相关程度
| - | 赞同 | 反对 |
|---|---|---|
| 男 | 15 | 10 |
| 女 | 10 | 26 |
import numpy as np
from scipy.stats import chi2_contingency
observed = np.array([[15, 10],
[10, 26]])
observed
chi2, p, dof, expected = chi2_contingency(observed,correction =False) # correction =False
# 卡方值
# P值
# 自由度:
# 与原数据数组同维度的对应期望值
chi2, p
#(6.3334567901234555, 0.011848116168529757)
结论:p = 0.0118<0.05,拒绝原假设,表明两变量之间的正向关系很显著。
phi = np.sqrt(chi2/n)
print("phi's V:", phi)
# phi's V: 0.3222222222222222
这里只列出 指标 和 Cramer V指标 的计算,其他计算方式请读者自行研究。
# 计算Cramer's V
contingency_table = observed
n = contingency_table.sum().sum()
phi_corr = np.sqrt(chi2 / (n * min(contingency_table.shape) - 1))
v = phi_corr / np.sqrt(min(contingency_table.shape) - 1)
print("Cramer's V:", v)
# Cramer's V: 0.22878509151645754
import numpy as np
from scipy.stats import pearsonr
# 生成随机的二元变量
binary_variable = np.random.choice([0, 1], size=100)
# 生成随机的连续变量
continuous_variable = np.random.normal(loc=0, scale=1, size=100)
# 注:此处的代码未经严格考证,请谨慎使用
def biserial_correlation(binary_variable, continuous_variable):
binary_variable_bool = binary_variable.astype(bool)
binary_mean = np.mean(binary_variable_bool)
binary_std = np.std(binary_variable_bool)
binary_variable_norm = (binary_variable_bool - binary_mean) / binary_std
corr, _ = pearsonr(binary_variable_norm, continuous_variable)
biserial_corr = corr * (np.std(continuous_variable) / binary_std)
return biserial_corr
# 计算Biserial相关系数
biserial_corr = biserial_correlation(binary_variable, continuous_variable)
print("Biserial相关系数:", biserial_corr)
Biserial相关系数: -0.2061772328681707
参考 检验
参考 检验
Kendall秩相关系数也是一种非参数的等级相关度量,类似于Spearman等级相关系数。
import random
import numpy as np
import pandas as pd
np.random.seed(10)
df = pd.DataFrame({'品牌知名度排位':[9,4,3,6,5,8,1,7,10,2],
'售后服务质量评价排位':[8,2,5,4,7,9,1,6,10,3]})
df

pd.Series.corr(df['品牌知名度排位'], df['售后服务质量评价排位'],method = 'kendall') # Kendall Tau相关系数
# 0.7333333333333333
from scipy.stats import kendalltau
# 两个样本数据
x = df['品牌知名度排位']
y = df['售后服务质量评价排位']
# 计算Kendall Tau相关系数
correlation, p_value = kendalltau(x, y)
print("Kendall Tau相关系数:", correlation)
print("p值:", p_value)
# Kendall Tau相关系数: 0.7333333333333333
# p值: 0.002212852733686067
浮生皆纵,恍如一梦,让我们只争朝夕,不负韶华!
下期将为大家带来《统计学极简入门》之 再看t检验、F检验、检验
《CDA一级教材》适合CDA一级考生备考,也适合业务及数据分析岗位的从业者提升自我。完整电子版已上线CDA网校,累计已有10万+在读~

免费加入阅读:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA数据分析师 出品 作者:李诗怡 一、数据分析四大思维 1. 对比思维:没有对比就没有分析 核心观点:单独一个数字没有意义,有 ...
2026-10-05Kimball 是方法,星型模型是它产出的形状。 很多人把"Kimball vs 星型模型"当成一道选择题——这本身就是个误会:Kimball 是动词 ...
2026-10-05写在开头 老板在微信上甩来一句: "帮我看下为什么销量跌了。" ” 你回工位,打开 SQL,开始写。查订单表、拉近三个月、按 ...
2026-10-03CDA数据分析师 出品 作者:李诗怡 1. 事实表 vs 维度表 对比维度 事实表 维度表 核心问题 记录“业务发生了什么事” 描述 ...
2026-10-02做数据聚合时,PySpark的groupBy()确实能完成统计,这也是它的本职工作。但它有一个根本性局限:每一组数据,最终只能返回一行 ...
2026-10-01热力地图是数据可视化中极具辨识度与实用性的空间分析图表,结合地理空间维度与数据密度特征,通过颜色深浅、色阶渐变直观展示数 ...
2026-09-30 很多数据分析师做过按月份的销售额趋势图,画过按天的流量折线图,但当被问到“时间序列和普通数据有什么本质区别”“季节性 ...
2026-09-30同样是“银行数据岗”,在国有大行总行数据中心、在一家城商行的零售部、在银行系金融科技子公司、在保险公司,工作内容、成长节 ...
2026-09-29在数据分析与统计学研究中,数据往往不是独立存在的,不同变量之间普遍存在相互关联、相互影响的关系。相关性统计分析是挖掘变量 ...
2026-09-29 导读:大多数人只把 dataclasses 当成偷懒工具,用来少写 __init__、__repr__ 这类魔法方法。但它的能力远不止于此。本文带 ...
2026-09-29 很多数据分析师能熟练地计算指标、搭建标签体系,但当被问到“画像到底在解决什么问题”“画像和标签是什么关系”“画像如何 ...
2026-09-29在MySQL数据库运维与业务开发中,行业普遍存在“数据达到千万级就必须分表”的说法。但在实际生产环境中,千万条数据并不是强制 ...
2026-09-28CDA数据分析师 出品 作者:李诗怡 1. 5W1H 分析法 定义:经典系统性思维框架,通过六个核心维度对问题进行全方位拆解与剖析,确 ...
2026-09-28 很多分析师在设计标签时思路清晰,但真到落地环节却面临“数据在手,不知如何转化为可用标签”的困境:或因加工方式选择不当 ...
2026-09-28CDA数据分析师 出品 作者:李诗怡 1. 用户标签体系 定义: 通过一系列高度精炼的特征标识,对用户属性、行为与偏好进行量化刻画 ...
2026-09-24Pandas是Python生态中用于表格数据处理的核心库,广泛应用于数据清洗、统计运算、报表输出、数据分析建模等场景。在处理极大数值 ...
2026-09-24随着数字经济快速发展,数据已成为核心生产要素,各行各业的业务沉淀、用户行为、设备运行、市场交易均产生海量数据。数据处理作 ...
2026-09-24 很多分析师每天和数据打交道,但当被问到“标签是什么”“标签和指标有什么区别”“标签体系如何设计”时,却常常答不上来。 ...
2026-09-24在时序数据分析中,大部分业务数据并非持续平稳变化,而是会在某些时间节点出现突然抬升、断崖下跌、趋势反转、波动异变等现象, ...
2026-09-23在统计学与数据分析中,研究多组数据差异最常用的方法为单因素方差分析与事后多重比较。很多数据分析初学者容易混淆两者功能,认 ...
2026-09-23