将带日期值的列表加载到pandas数据框并绘制活动随时间变化
我有一些Twitter的数据,想要根据推文的类型(推文/提及/转发)来绘制活动随时间变化的图表。
现在这些数据被加载到一个包含 日期
和 类型
的元组列表中:
time = [('2014-04-13', 'tweet'),
('2014-04-13', 'tweet'),
('2014-04-13', 'mention'),
('2014-04-13', 'retweet'),
('2014-04-13', 'mention'),
('2014-04-13', 'tweet'),
('2014-04-13', 'retweet'),
('2014-04-13', 'mention'),
('2014-04-13', 'tweet'),
('2014-04-13', 'retweet'),
('2014-04-13', 'retweet'),
('2014-04-13', 'mention'),
('2014-04-13', 'tweet'),
('2014-04-13', 'tweet'),
('2014-04-13', 'tweet'),
('2014-04-13', 'tweet'),
('2014-04-13', 'mention'),
('2014-04-13', 'retweet'),
('2014-04-13', 'mention'),
('2014-04-13', 'tweet')]
我已经把数据加载到一个pandas的DataFrame里:
time_df = pd.DataFrame(time, columns=['date','time'])
现在数据看起来是这样的:
date time
0 2014-04-13 tweet
1 2014-04-13 tweet
2 2014-04-13 mention
3 2014-04-13 retweet
4 2014-04-13 mention
...
...
...
不过,现在我在如何绘制这些数据随时间变化的图表时感到困惑。此外,我还想把每种类型(推文/提及/转发)用不同颜色的线表示出来。我还想提到,有时候我可能需要按天、周或月来汇总这些数据。
理想情况下,我希望我的图表看起来类似于下面这个图表,只不过是用推文、提及和转发来表示:
1 个回答
8
我觉得我明白你需要做什么,虽然你在问题中没有明确说出来。
让我给你举个例子,模拟一些数据:
import numpy as np
import pandas
import random
tweet_types = ['tweet', 'retweet', 'mention']
index = pandas.DatetimeIndex(freq='5min', start='2014-04-13', end='2014-05-13')
tweets = [random.choice(tweet_types) for _ in range(len(index))]
time_df = pandas.DataFrame(index=index, data=tweets, columns=['tweet type'])
time_df['day'] = time_df.index.date
time_df['count'] = 1
print(time_df.head())
现在前几行看起来是这样的:
tweet type day count
2014-04-13 00:00:00 mention 2014-04-13 1
2014-04-13 00:05:00 mention 2014-04-13 1
2014-04-13 00:10:00 tweet 2014-04-13 1
2014-04-13 00:15:00 tweet 2014-04-13 1
2014-04-13 00:20:00 retweet 2014-04-13 1
我加了一个 count
值,因为我们需要一些东西来计算每天的总和,这里就是这样做的:
daily_counts = time_df.groupby(by=['tweet type', 'day']).count()
daily_counts_xtab = daily_counts.unstack(level='tweet type')['count']
print(daily_counts_xtab.head())
这样我们就得到了……
tweet type mention retweet tweet
day
2014-04-13 89 101 98
2014-04-14 98 113 77
2014-04-15 87 103 98
2014-04-16 81 107 100
2014-04-17 96 92 100
接下来
daily_counts_xtab.plot()
给我带来了: