【问题标题】:How can I apply clustering algorithm to my twitter dataset?如何将聚类算法应用于我的 twitter 数据集?
【发布时间】:2021-07-31 03:46:52
【问题描述】:

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

样本数据:

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

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

例如:

如果用户在凌晨 1 点至凌晨 2 点之间发布推文/转发,则推文/转发是集群 1 的一部分

如果用户在凌晨 2 点至凌晨 3 点之间发推/转推,则推特/转推是集群 2 的一部分,依此类推。

【问题讨论】:

    标签: python machine-learning cluster-analysis data-analysis unsupervised-learning


    【解决方案1】:

    如果您的规则明确规定,凌晨 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_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]
    

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

    【讨论】:

      猜你喜欢
      • 2020-03-18
      • 2012-05-03
      • 2017-04-01
      • 1970-01-01
      • 2021-04-04
      • 2020-05-27
      • 2011-08-06
      • 2011-05-18
      • 2020-12-13
      相关资源
      最近更新 更多