如何将聚类算法应用于我的推特数据集?
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
聚类算法从 sklearn
到 date_unix
from sklearn.cluser import KMeans
km = KMeans(n_clusters=2)
这里,n_clusters 是一个参数,您可以根据自己的知识进行调整。
np.expand_dims
将 3
大小的数组转换为 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]
您可以看到该算法将第一个日期聚类到一个聚类中,将其他三个聚类到另一个聚类中。由于最后三个日期彼此更接近。
我对集群还是个新手。我使用 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
聚类算法从 sklearn
到 date_unix
from sklearn.cluser import KMeans
km = KMeans(n_clusters=2)
这里,n_clusters 是一个参数,您可以根据自己的知识进行调整。
np.expand_dims
将 3
大小的数组转换为 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]
您可以看到该算法将第一个日期聚类到一个聚类中,将其他三个聚类到另一个聚类中。由于最后三个日期彼此更接近。