根据日期计算嵌套循环中的帖子

Posted

技术标签:

【中文标题】根据日期计算嵌套循环中的帖子【英文标题】:Counting posts in a nested loop based on a date 【发布时间】:2018-07-05 23:33:33 【问题描述】:

我需要计算今天/昨天/一周前/一个月前发布的帖子数量,从 json-dict 中提取 unix 格式的日期。通过 id 计算总和并从中制作一个表格。

但是,我花了很多时间弄清楚。

这是目前为止的代码:

posts_today = []

posts_yesterday = []
posts_week = []
posts_month = []
user_posted = []


today = pd.Timestamp('today')
yesterday = (pd.Timestamp('today')- pd.Timedelta(days=1))
week_ago = (pd.Timestamp('today') - pd.Timedelta(weeks=1))
month_ago = (pd.Timestamp('today') - pd.Timedelta(weeks=4))

一个月的循环本身:

for user_id in list(wall_pickle.keys())[0:100]:
    for i in wall_pickle[user_id]['items']:

        if ((pd.to_datetime(i['date']*10e8)) >= month_ago):
            user_posted.append(user_id)
            posts_month.append(1)

    print(user_id,len(posts_month))

产生

产生:

6932 6<br>
6984 6<br>
7074 6<br>
7141 6<br>
13456 6<br>
13467 6<br>
19226 6<br>
30365 11<br>
43713 31<br>
44611 31<br>
58972 42<br>
73013 43<br>
74905 44<br>
75089 45<br>
84090 47<br>
86882 47<br>
125789 47<br>
128317 47<br>
137443 66<br>
147006 85<br>
164366 85<br>
165490 95<br>
...

左列是 id,左列是计数,但是它会以某种方式累积。

JSON 方案如下所示:wall_pickle.keys() 是用户 ID,每个 ID 都有一个列表 ['items'] 和一个键 ['date']

请大家帮帮我!

【问题讨论】:

【参考方案1】:

其实我自己找到了答案。不是pythonic,也不是很酷,但它在大约 41K uid 上运行得很快,帖子深度为 20。

posts_today = []
posts_3_days = []
posts_week = []
posts_month = []

today = pd.Timestamp(2018,1,26,0,0,0) 
three_days_ago = (pd.Timestamp(2018,1,26,0,0,0)- pd.Timedelta(days=3))
week_ago = (pd.Timestamp(2018,1,26,0,0,0) - pd.Timedelta(weeks=1))
month_ago = (pd.Timestamp(2018,1,26,0,0,0) - pd.Timedelta(weeks=4))

for user_id in list(wall_pickle.keys()):
    for i in wall_pickle[user_id]['items']:

        if ((pd.to_datetime(i['date']*10e8)) >= today):
            posts_today.append(user_id)
        if ((pd.to_datetime(i['date']*10e8)) >= three_days_ago):
            posts_3_days.append(user_id)
        if ((pd.to_datetime(i['date']*10e8)) >= week_ago):
            posts_week.append(user_id)
        if ((pd.to_datetime(i['date']*10e8)) >= month_ago):
            posts_month.append(user_id)

它会生成匹配期间出现的 uid 列表 - 如果 X uid 在一周内有 3 个帖子,则循环将添加 X uid 3 次。 它看起来很糟糕,但是从那时起您可以使用.value_counts() 并获得一个dict,您可以将其映射到dataframe,这非常方便。

类似这样的:

# make a proper dataframe and save
posts_today = pd.DataFrame(pd.Series(posts_today).value_counts())
posts_today.reset_index(inplace=True)
posts_today.columns=['user_id','daily_posts']
posts_today.to_csv(RAW+'posts_today.csv', index=False)
# the dict itself
posts_today_dict = pd.Series(posts_today['daily_posts'].values,
                             index=posts_today['user_id']).to_dict()

...等等

【讨论】:

以上是关于根据日期计算嵌套循环中的帖子的主要内容,如果未能解决你的问题,请参考以下文章

iOS不得姐项目--精华模块上拉下拉的注意事项,日期显示,重构子控制器,计算cell的高度(只计算一次),图片帖子的显示

如何加速R中的循环计算循环

根据 SQL 中的日期计算百分位数

使用 NSDate 根据一周中的一般日期计算时间

根据包含日期范围的观察数量按日期计算

如何根据日期计算查询中的总数?