【问题标题】:Correlation between categorical and numerical variables: TypeError分类变量和数值变量之间的相关性:TypeError
【发布时间】:2021-01-19 11:49:45
【问题描述】:

我在计算分类变量和数值变量之间的相关性时遇到了一些问题。 我有一个数据集(head(5) 如下所示):

    A     C   Label
0   a1  gt2016  0
1   a2  gt2016  0
2   b13 gt2016  0
3   a5  gt2016  1
4   b12 gt2016  1

我想找到 C 和 Label 之间的相关性。由于 C 包含分类变量,因此我使用了一个虚拟变量,如下所示:

df_dummies = pd.get_dummies(df['C'])
del df_dummies[df_dummies.columns[-1]]
df_new = pd.concat([df, df_dummies], axis=1)
del df_new['C]

但是,当我按如下方式计算相关性时

x = df_new.values
correlation_matrix = np.corrcoef(x.T)
print(correlation_matrix)

我收到此错误:

TypeError: unsupported operand type(s) for /: 'str' and 'int'

如果我错过了计算相关性以解决问题的步骤,您能告诉我吗?

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    回想一下,相关性被定义为

    r = cov(X,Y) / sqrt(var(X) var(Y))

    所以你不能与一个常数有相关性,因为它的方差是 0,而 C 总是 gt2016。但是假设有变化,下面的代码将用于获取 Label 和 C 的每个值之间的相关性:

    df = pd.DataFrame({'A': ['a1', 'a2', 'b13', 'a5', 'b12'], 'C': ['gt2016']*4 + ['hi'], 'Label': [0,0,0,1,1]})
    
    df_dummies = pd.get_dummies(df['C'])
    df_new = pd.concat([df.drop('C', axis=1), df_dummies], axis=1)
    df_new.corr()
    

    【讨论】:

    • 谢谢卡梅伦。是的,你完全正确。实际上它们是前 5 个变量,我的 C 列只包含两个可能的值,gt2016 和 l2016。
    猜你喜欢
    • 2022-10-04
    • 2015-06-12
    • 2017-11-25
    • 1970-01-01
    • 2019-03-26
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    相关资源
    最近更新 更多