微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python中的Cramer V相关性而不是使用权重使用频率?

如何解决python中的Cramer V相关性而不是使用权重使用频率?

因此 Cramer V 相关性的数据集在列中有多个分类变量,但还有一列告诉我们这些值出现的频率。类似于下表:

Season     Age      Weather    Sales
Spring     New      Cold       100
Fall       Old      Warm       50 
Summer     New      Hot        200

我想弄清楚如何计算季节/年龄/天气之间的 Cramer V 相关性和权重是销售额?如果可行,如何写一些东西来计算它?或者有没有一种不同的方法可以用来找出相关性?谢谢!

解决方法

您可能知道,Cramer 的 V 测量两个名义变量之间的关联。因此,您可以将当前表转换为变量的每个成对组合的单独列联表,然后计算成对统计数据。

用于创建类似于您的表格的代码:

from itertools import product
import numpy as np
import pandas as pd
import scipy.stats as stats

np.random.seed(42)

all_combs = product(
    ['Spring','Summer','Fall','Winter'],['New','Old'],['Cold','Warm','Hot']
)

df = pd.DataFrame(all_combs,columns=['Season','Age','Weather'])
df['Sales'] = np.random.randint(25,200,len(df))
df.head()

#     Season    Age    Weather    Sales
# 0   Spring    New      Cold       127
# 1   Spring    New      Warm       117
# 2   Spring    New       Hot        39
# 3   Spring    Old      Cold       131
# 4   Spring    Old      Warm        96

将表转换为列联表,用于度量SeasonAge之间的关联,并保存为二维数组:

cont = df.pivot_table('Sales','Season','sum')
cont
#    Age    New Old
# Season        
# Fall      459 277
# Spring    283 272
# Summer    372 377
# Winter    356 384

cont_arr = cont.values

现在,您可以计算卡方统计量并从中计算 Cramer's V。可以找到 Cramer's V 的公式here

chi2 = stats.chi2_contingency(cont_arr,correction=False)[0]
sample_size = np.sum(cont_arr)
min_dim = min(cont_arr.shape) - 1

cramer_v = np.sqrt((chi2 / sample_size) / min_dim)

cramer_v
# 0.1157257...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。