如何在Python或R中进行两个字符串之间的相关性分析?

z31licg0  于 2023-05-21  发布在  Python
关注(0)|答案(1)|浏览(148)

我想对两个名义列做相关性分析,“拥护者”列和“公司”列,在这个例子中拥护者处理的是公司,数据看起来像这样
| 鼓吹|公司简介|
| --------------|--------------|
| Adv 1|比较例A|
| Adv 1|比较例A|
| Adv 2|比较例C|
| Adv 3|比较例B|
| Adv 3|比较例B|
| Adv 2|化合物D|
| Adv 3|比较例E|
| Adv 1|比较例A|
所以,我想做一个基于微积分的分析,来显示每一对中,倡导者X和公司Y之间是否有很强的相关性。
我试着使用克莱默的V方法,但我不能使它正常工作。
我想要实现的结果类似于倡导者与公司的相关矩阵。
感谢您的任何帮助!

egmofgnx

egmofgnx1#

以下是计算数据中“Advocate”和“Company”列的Cramer V统计量的Python代码:

import pandas as pd
import numpy as np
from scipy.stats import chi2_contingency

# Function to calculate Cramer's V statistic
def calculate_cramers_v(df, col1, col2):
    # Create a contingency table
    contingency_table = pd.crosstab(df[col1], df[col2])

    # Perform a Chi-square test
    chi2, _, _, _ = chi2_contingency(contingency_table)

    # Calculate Cramer's V statistic
    n = contingency_table.sum().sum()
    phi2 = chi2 / n
    r, k = contingency_table.shape
    phi2corr = max(0, phi2 - ((k-1)*(r-1))/(n-1))    
    rcorr = r - ((r-1)**2)/(n-1)
    kcorr = k - ((k-1)**2)/(n-1)
    cramers_v = np.sqrt(phi2corr / min((kcorr-1), (rcorr-1)))

    return cramers_v

# Function to create a Cramer's V correlation matrix for all categorical variables
def cramers_v_matrix(df):
    cols = df.select_dtypes(include=['object', 'category']).columns
    corr_matrix = pd.DataFrame(index=cols, columns=cols)
    for col1 in cols:
        for col2 in cols:
            corr_matrix.at[col1, col2] = calculate_cramers_v(df, col1, col2)
    return corr_matrix

# Your data
data = {
    'Advocate': ['Adv 1', 'Adv 1', 'Adv 2', 'Adv 3', 'Adv 3', 'Adv 2', 'Adv 3', 'Adv 1'],
    'Company': ['Comp A', 'Comp A', 'Comp C', 'Comp B', 'Comp B', 'Comp D', 'Comp E', 'Comp A']
}

df = pd.DataFrame(data)

# Calculate and print the Cramer's V correlation matrix
print(cramers_v_matrix(df))

请注意,虽然Cramer's V可以提供两个分类变量之间关联强度的度量,但它不提供有关该关联性质的任何信息。高值可能意味着强正关联、强负关联或更复杂的关联。要完全理解变量之间的关系,您需要更仔细地检查数据。
我希望这对你有帮助!

相关问题