首页 > 解决方案 > 如何使交易号有序号?

问题描述

我希望在包含银行交易的数据集上使用 k-means 或层次聚类。

header_list = ["date", "recipient", "amount", "sender"]
df = pd.read_csv('data_for_applicants.txt', sep='\t', engine='python', names = header_list, parse_dates=[0])
df['transaction'] = df['recipient'].astype(str) + df['sender'].astype(str)
df.drop(columns=['recipient', 'sender'], inplace=True)

df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day
df.drop(columns=['date'], inplace=True)
df.dtypes
amount          int64
transaction    object
month           int64
day             int64
dtype: object
df.shape
(427632, 4)
df.transaction.nunique()
130649

如您所见,该列transaction是分类的。因此,我应该使用 one-hot 编码或进行序数编码。

  1. 如果我对其进行一次热编码,则会生成130649新列,每个列都有427632行。这可能会破坏 k-means 和层次聚类。我的笔记本电脑上只有 8GB 的​​ RAM。
  2. 如果我将其设为序数(使用pandas.to_numeric()),那么聚类算法会产生不好的结果,因为它们会误判事务数之间的距离(接近度)。
  3. 我可能会使用OrdinalEncoder(),但我不确定它是否比pandas.to_numeric()上面的简单有任何好处。

df.transaction那么问题是如何在应用 k-means 或层次聚类之前最好地处理分类变量。

标签: pythonpandascluster-analysisk-meansone-hot-encoding

解决方案


推荐阅读