如何将聚类算法应用于我的推特数据集?

How can I apply clustering algorithm to my twitter dataset?

我对集群还是个新手。我使用 tweepy 提取了一个包含许多行的推特数据集:

示例数据:

tweet ID date
NSW Demons - Watch Melbourne v Sydney tonight 1387339243786182657 2021-05-08 05:55:30
Brown in and Harmes returns, Melb v Rich match 1387332484715581440 2021-05-08 05:40:45
Kick-off is at 7:10 PM from the Docklands. 1385474911448096770 2021-05-08 05:35:21
"RT @melbournefc: Kicking with Choco. 1385474643541127168 2021-05-08 05:30:15

如何应用聚类算法根据日期和时间查找聚类。这样我就可以每小时检索 tweeting/retweeting activity 并生成一个模式。

例如:

如果用户 tweets/retweets 在凌晨 1 点到凌晨 2 点之间,那么 tweet/retweet 是集群 1

的一部分

如果用户 tweets/retweets 在凌晨 2 点到凌晨 3 点之间,那么 tweet/retweet 是集群 2 的一部分,依此类推。

如果你的规则是特定的,那么凌晨 1 点到凌晨 2 点之间的每条推文都应该聚集在一起,凌晨 2 点到凌晨 3 点之间的推文也是如此。那么,这里就不需要算法了。您只需使用条件分配来相应地分配集群,例如:

import pandas as pd
date = pd.Series(["2021-05-08 05:55:30", "2021-05-08 05:40:45", "2021-05-08 05:35:21", "2021-05-08 05:30:15"], name='date')
date = pd.to_datetime(date).to_frame()

# Assign cluster id accordingly
date['cluster'] = 0    # Default

# 1am - 2am
date.loc[(date['date'].dt.hour > 1) & (date['date'].dt.hour <= 2), 'cluster'] = 1

# 2am - 3am
date.loc[(date['date'].dt.hour > 2) & (date['date'].dt.hour <= 3), 'cluster'] = 2

否则如果你想应用聚类算法,例如kmeans,要自动学习聚类到日期列,我建议你将它们转换为unix时间戳秒,这样它们就变成了数值因此可以提供给模型:

import pandas as pd
date = pd.Series(["2021-05-08 05:55:30", "2021-05-08 05:40:45", "2021-05-08 05:35:21", "2021-05-08 05:30:15"])

date_unix = (pd.to_datetime(date) - pd.Timestamp("1970-01-01")) // pd.Timedelta("1s")
print(date_unix)

产出

0    1620453330
1    1620452445
2    1620452121
3    1620451815
Name: date, dtype: int64

然后你应用 KMeans 聚类算法从 sklearndate_unix

from sklearn.cluser import KMeans
km = KMeans(n_clusters=2)

这里,n_clusters 是一个参数,您可以根据自己的知识进行调整。 np.expand_dims3 大小的数组转换为 3 x 1 矩阵,因为模型通常需要矩阵而不是向量。 然后为您的数据拟合模型:

km.fit(np.expand_dims(date_unix, axis=1))

然后预测

cluster_id = km.predict(np.expand_dims(date_unix axis=1)
print(cluster_id)

产出


[1 0 0 0]

您可以看到该算法将第一个日期聚类到一个聚类中,将其他三个聚类到另一个聚类中。由于最后三个日期彼此更接近。