【问题标题】:Why does corr() give me results with only int, uint or float type and not with object type?为什么 corr() 给我的结果只有 int、uint 或 float 类型而不是 object 类型?
【发布时间】:2019-08-27 05:51:04
【问题描述】:

澄清一下,我在 Jupyter Notebook 中使用 Python

我想提高我在数据科学方面的技能,所以我接手了一个上周结束的项目。

在这个项目中,我的目的是建立一个逻辑回归。 我做了我的数据准备等等,我做了一个特征选择,毕竟,为了改进我的模型,我做了一个 corr() 并取出最后一个相关的特征。

但我认为这不是完成这项工作的最佳方式。我认为 corr() 需要在特征选择之前进行。所以我尝试在特征选择前做 corr() 看看,但是遇到了问题。

让我们看看我第一次是怎么做的(这是我所有的数据准备等等):

  • 我用我的分类列做了假人
df1=pd.get_dummies(df[[cat_cols]])

  • 我连接了我的定量列
df2=df[[cols]]

df_c=pd.concat([df1,df2],axis=1)

我尝试了逻辑回归、auc 等,我做了一个低方差的特征选择


Features = np.array(T)
Labels = np.array(z)

#T and z are my X and y

sel = fs.VarianceThreshold(threshold=(.8 * (1 - .8)))
Features_reduced = sel.fit_transform(Features)

利用我剩余的特征,我观察了相关性以做出最终选择

T.corr()


corr = T.corr()
fig = plt.figure(figsize=(12, 12))
ax = fig.add_subplot(111)
cax = ax.matshow(corr,cmap='coolwarm', vmin=-1, vmax=1)
fig.colorbar(cax)
ticks = np.arange(0,len(T.columns),1)
ax.set_xticks(ticks)
plt.xticks(rotation=90)
ax.set_yticks(ticks)
ax.set_xticklabels(T.columns)
ax.set_yticklabels(T.columns)
plt.show()

我得到了这样的东西:

https://image.noelshack.com/fichiers/2019/14/5/1554459054-stack.png

到目前为止一切顺利,我的变量是“uint”或“int”或float”类型,所以一切正常。

但我认为最好在建模之前查看相关性。尽快拒绝变量。

所以我尝试在数据准备之后但在我的特征选择之前执行这段代码:

T.corr()


corr = T.corr()
fig = plt.figure(figsize=(12, 12))
ax = fig.add_subplot(111)
cax = ax.matshow(corr,cmap='coolwarm', vmin=-1, vmax=1)
fig.colorbar(cax)
ticks = np.arange(0,len(T.columns),1)
ax.set_xticks(ticks)
plt.xticks(rotation=90)
ax.set_yticks(ticks)
ax.set_xticklabels(T.columns)
ax.set_yticklabels(T.columns)
plt.show()

但是我的一些变量(分类变量)在“str”中,而不是 int“uint”,因为我没有对它们进行虚拟化。所以 corr() 对他们不起作用,它只适用于“int”和“float”类型。

我尝试将我的分类变量转换为“类别”,但 corr() 也不适用于它们。

我尝试将它们转换为“int”或“float”,但它无法正常工作,因为我的分类列是由“Front_Website”等字符串组成的。

所以我将它们转换为 dummy 但现在我的 corr() 中有很多功能,因为它在我的功能选择之前。

所以我的问题是:如何查看我的数据库的相关性,而无需在之前将它们转换为 dummy ?

我只想从一开始就看到我的变量之间的相关性。而不仅仅是“int”或“float”类型。

我希望我的帖子很清楚。

谢谢。

编辑:

我试过了

table = pd.crosstab(df['Club Member'], df['Profil Price Club'])

from scipy.stats import chi2_contingency

chi2, p, dof, expected = chi2_contingency(table.values)

print(chi2, p)

但是为我所有的分类列获取这个是非常乏味的。

有没有办法一次为我的所有分类列获取这个?

【问题讨论】:

    标签: python object types correlation


    【解决方案1】:

    尝试将分类变量转换为虚拟变量或立即转换为 int 或 float 是徒劳的,并且会引发错误。此外,寻找分类变量之间的相关性也没有任何意义。

    您可以使用卡方分析来查找分类变量之间的关联,使用此模块:

    from scipy.stats import chisquare
    

    【讨论】:

    • 我不明白。 Python 告诉我,当我运行 chisquare 时:TypeError: unsupported operand type(s) for /: 'str' and 'int'
    • 这是因为卡方仅用于分类(字符串)变量,而不用于数字变量。
    猜你喜欢
    • 2021-11-28
    • 2019-05-23
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    相关资源
    最近更新 更多