计算每天的推文

Posted

技术标签:

【中文标题】计算每天的推文【英文标题】:Calculate Tweets Per day 【发布时间】:2020-11-16 01:20:52 【问题描述】:

我需要编写一个函数来计算每天发布的推文数量。

功能规格:

它应该采用 pandas 数据框作为输入。 它应该返回一个按天分组的新数据框,其中包含当天的推文数量。 新数据框的索引应命名为日期,新数据框的列应为“推文”,分别对应推文的日期和数量。 日期的格式应为 yyyy-mm-dd,并且应为日期时间对象。

我的代码是:


def number_of_tweets_per_day(df):
    
    df = pd.DataFrame(twitter_df['Date','Tweets'], columns =['Date', 'Tweets'])
    
    df['Date'] = pd.to_datetime(df['Date'], format = '%Y%m%d')
    df['Tweets'] = df['Tweets'].astype(str)
    
    grouped = pd.df.groupby(['Date'],['Tweets'])
    final = pd.df.count()
    
    
    
    return final

但是,当我尝试运行命令“number_of_tweets_per_day(twitter_df.copy())”时,我收到一条错误消息,提示未定义 twitter_df。

DF

预期输出

附加到输入数据帧图像和预期输出图像的链接。

我做错了什么?

【问题讨论】:

应该twitter_dfdef 中的参数吗? 【参考方案1】:

您可以在此处使用DataFrame.groupbypd.Series.dt.date 进行分组并使用GroupBy.count

def tweets_per_day(df):
    df['Date'] = pd.to_datetime(df['Date'], format='%Y%m%d')
    return df[['Tweets']].groupby(df['Date'].dt.date).count()
  # return df['Tweets'].groupby(df['Date'].dt.date).count() 
  # if you want output to be `Series`

tweets_per_day(twitter_df)

虚拟 df 上的输出:

d = pd.to_datetime(['2019-11-29', '2019-11-30']).repeat(10)
df = pd.DataFrame('Tweets':'anything', 'Date':d)
df
#      Tweets       Date
#0   anything 2019-11-29
#1   anything 2019-11-30
#2   anything 2019-11-29
#3   anything 2019-11-30
#4   anything 2019-11-29
#5   anything 2019-11-30
#6   anything 2019-11-29
#7   anything 2019-11-30
#8   anything 2019-11-29
#9   anything 2019-11-30
#10  anything 2019-11-29
#11  anything 2019-11-30
#12  anything 2019-11-29
#13  anything 2019-11-30
#14  anything 2019-11-29
#15  anything 2019-11-30
#16  anything 2019-11-29
#17  anything 2019-11-30
#18  anything 2019-11-29
#19  anything 2019-11-30

tweets_per_day(df)

            Tweets
Date
2019-11-29      10
2019-11-30      10

【讨论】:

【参考方案2】:

@Ch3steR 演示的groupby() 技术确实有效。这里有另外两种方法,使用value_counts()resample()

创建数据框(并设置数据类型):

import pandas as pd

df = pd.DataFrame('Date':  ['2019-11-30'] * 5 + ['2019-11-29'] * 6,
                   'Tweets': 'x'
                 )
df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d')

value_counts() 方法:

def tweets_per_day_2(df):
    return df['Date'].value_counts().sort_index()

result = tweets_per_day_2(df)
print(result)

2019-11-29    6
2019-11-30    5
Name: Date, dtype: int64

还有resample() 方法:

def tweets_per_day_3(df):
    return df.set_index('Date').resample('D').count().sort_index()

result = tweets_per_day_3(df)
print(result)

            Tweets
Date              
2019-11-29       6
2019-11-30       5

【讨论】:

以上是关于计算每天的推文的主要内容,如果未能解决你的问题,请参考以下文章

将 Twitter 时间转换为特定格式的日期时间,以计算一天的推文频率

试图读取存储在csv文件中的R中的推文

如何获取喜欢我的推文的用户列表和引用转发我的推文的用户列表?

获取推文作者对特定推文的推文回复

从特定用户那里获取对特定推文的推文回复

使用 tweepy 流式传输用户的时间线和过滤的推文