3

我正在处理一个聊天日志,我的数据由时间戳、用户名和消息组成。我的目标是绘制多个用户每月的消息数量,以便我可以比较用户何时活跃。

问题是x 轴。在那里,我想根据频率(在这种情况下是几个月)来确定日期。相反,似乎在那里输出了分组数据的 Multiindex。此外,数据似乎被正确分组,但图中每个月都有三个数据点。

我包含了一些代码来生成随机数据。(我正在使用 Python 3.2)

这是当前的输出:数字

import numpy as np
import time
import datetime
import pandas as pd
import matplotlib.pyplot as plt
from pandas.util.testing import rands

a=datetime.datetime(2012,12,3)
b=datetime.datetime(2013,12,3)
a_tstamp=time.mktime(a.timetuple())
b_tstamp=time.mktime(b.timetuple())

message_number=400
tstamps=np.random.random_integers(a_tstamp,b_tstamp,message_number)
tstamps.sort()

dates=[datetime.datetime.fromtimestamp(x) for x in tstamps]

usernames=[rands(4) for x in range(10)]
usernames=usernames*40
values=np.random.random_integers(0,45,message_number)

df=pd.DataFrame({'tstamps':dates,'usernames':usernames,'messages':[rands(5) for x in range(message_number)]})
df=df.set_index(df.tstamps)


grouped=df.groupby(df.usernames)


# trying to plot a trend to see how active user were over several months
plt.figure()
for k,g in grouped:
    g=g.resample('m',how='count')
    g.plot(style='*-',label=k )

    plt.show()
plt.legend(loc='best')
plt.show()
4

1 回答 1

3

问题:您的结果是按日期和按列(消息、用户名、tstamps)索引的。

2013-07-31  messages     3
            tstamps      3
            usernames    3
2013-08-31  messages     4
            tstamps      4
            usernames    4

而不是重新采样整个组,只取消息列,然后重新采样,

plt.figure()
for k, g in grouped:
    messages = g.messages.resample('m', how='count')
    messages.plot(style='*-', label=k)
plt.show()

现在正在绘制的系列是

2012-12-31    3
2013-01-31    3
2013-02-28    3
2013-03-31    4
...

输出看起来像

在此处输入图像描述

于 2013-05-23T13:51:54.943 回答