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

python中的Cramer V相关性,但不是使用频率和权重?,python,statistics,Python,Statistics,所以Cramer V correlation的数据集在列中有多个分类变量,但也有一列告诉我们这些值出现的频率。与下表类似: Season Age Weather Sales Spring New Cold 100 Fall Old Warm 50 Summer New Hot 200 我想弄清楚如何计算季节/年龄/天气和重量销售之间的Cramer V相关性?如果可行的话,人

所以Cramer V correlation的数据集在列中有多个分类变量,但也有一列告诉我们这些值出现的频率。与下表类似:

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
将该表转换为列联表,用于测量
季节
年龄
之间的关联,并将其保存为二维数组:

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

cont_arr = cont.values
现在,你可以计算卡方统计量,然后根据卡方统计量计算克莱默的V,可以找到克莱默的V的公式


谢谢,我会玩这个,看看我是否可以做这项工作,但似乎它应该工作的基础上,我所看到的!谢谢亚历克斯!
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...