python - 如何使交易号有序号?
问题描述
我希望在包含银行交易的数据集上使用 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 编码或进行序数编码。
- 如果我对其进行一次热编码,则会生成
130649
新列,每个列都有427632
行。这可能会破坏 k-means 和层次聚类。我的笔记本电脑上只有 8GB 的 RAM。 - 如果我将其设为序数(使用
pandas.to_numeric()
),那么聚类算法会产生不好的结果,因为它们会误判事务数之间的距离(接近度)。 - 我可能会使用
OrdinalEncoder()
,但我不确定它是否比pandas.to_numeric()
上面的简单有任何好处。
df.transaction
那么问题是如何在应用 k-means 或层次聚类之前最好地处理分类变量。
解决方案
推荐阅读
- php - 带有 Bootstrap 网格的 Wordpress 循环。如何优化这段代码?
- flutter - Flutter 如何计算屏幕宽度
- android - 无法获取资源“https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.2.1/gradle-3.2.1.pom”
- c# - 如何实现身份验证和授权 WEBAPI 2 .NET 应用程序?尝试 JWT 库
- javascript - 通过jquery更改html视频播放器css
- python - 根据之前的值循环一个函数?
- c++ - 使用子类从 std::priority_queue 获取容器时编译错误
- java - Wiremock 错误 - 此 WireMock 实例中没有存根映射
- python - 无法连接到 mysql db withh python - 握手错误
- javascript - 如何从随机 uint8array 渲染图像