识别数据框中的ID列

时间:2018-03-14 09:24:56

标签: python machine-learning data-science

有没有办法在数据框中自动识别诸如Account_Number,Employee_ID,Transaction_ID等列的列,这些列通常不包含在模型构建中? 请注意,不同日期的同一员工可能有多条记录。简而言之,当它们不是唯一的时候如何识别无用的列?

1 个答案:

答案 0 :(得分:0)

有几种方法可以识别数据集中的租约重要列/类/功能。相关性就是其中之一。请按照以下示例首先从Kaggle下载this电影数据集。

df = pd.read_csv("tmdb_5000_movies.csv")
df = df[["id", "budget", "popularity", "vote_average"]]
df.head()

这是数据框的外观:

    id       budget     popularity  vote_average
0   19995   237000000   150.437577  7.2
1   285     300000000   139.082615  6.9
2   206647  245000000   107.376788  6.3
3   49026   250000000   112.312950  7.6
4   49529   260000000   43.926995   6.1

我们正在寻找一种自动检测“id”是无用列的方法。

让我们找到每一列与另一列之间的相关性:

corr_df = pd.DataFrame(columns=list(df.columns))
for col_from in df.columns:
    for col_to in df.columns:
        corr_df.loc[col_from, col_to] = df[col_from].corr(df[col_to])
print(corr_df.head())

相关性只是介于-1和1之间的度量,接近零的数字表示两个类不相关,从零开始越远(即使在负方向)也表示两个参数耦合在一起某种意义。 观察idbudgetpopularity

的相关性非常小的方式
                     id     budget popularity vote_average
id                    1 -0.0893767   0.031202    -0.270595
budget       -0.0893767          1   0.505414    0.0931457
popularity     0.031202   0.505414          1     0.273952
vote_average  -0.270595  0.0931457   0.273952            1

让我们更进一步获得绝对值并总结所有相关性,具有最小相关性得分的类被认为是最无用的:

corr_df = corr_df.abs()
corr_df["sum"] = corr_df.sum(axis=0) - 1
print(corr_df.head())

结果:

                     id     budget popularity vote_average       sum
id                    1  0.0893767   0.031202     0.270595  0.391173
budget        0.0893767          1   0.505414    0.0931457  0.687936
popularity     0.031202   0.505414          1     0.273952  0.810568
vote_average   0.270595  0.0931457   0.273952            1  0.637692

并不是说这种方法存在很多问题,例如:如果id从0增加到N,并且在具有恒定速率的行中有一个值也在增加,它们的相关性会很高;此外,某些列 X Y 和id之间的相关性可能与 Y 列产生较小的相关性;尽管如此,绝大多数的结果在大多数情况下都足够好了。