我有一个庞大的音乐标记数据在MySQL数据库中的数据集,我试图用大熊猫进行分析。我将它从MySQL导出到.tsv文件,然后将其作为数据框读入以供分析。平均在熊猫的不同级别
数据中的每一行都是一个元组,指示特定用户(由数字用户标识表示)在特定时间用特定标签(在此表示为数字ID)标记特定艺术家。因此,与没有索引的数据的样本是这样的:
uid artist tag date
0 2096963 559 46 2005-07-01
1 2096963 584 1053 2005-07-01
2 2096963 584 2044 2005-07-01
3 2096963 584 2713 2005-07-01
4 2096963 596 236 2005-07-01
...
uid artist tag date
99995 2656262 8095 57 2005-08-01
99996 2656262 8095 79 2005-08-01
99997 2656262 8095 4049 2005-08-01
99998 2656262 8095 8290 2005-08-01
99999 2610168 8095 1054 2005-08-01
为了便于分析,我已经收录的一切,并增加了虚拟变量的注释(在数据中的每一行代表一个标记实例,或批注) 。所以现在我们有:
data = pd.read_table(filename,header=None, names=('uid','artist','tag','date'), index_col=['date','uid','artist','tag'], parse_dates='date')
data['annotations'] = 1
In [41]: data.head()
Out[41]:
annotations
date uid artist tag
2005-07-01 2096963 559 46 1
584 1053 1
2044 1
2713 1
596 236 1
...
对于这样的数据格式,计算简单的频率分布是微不足道的。
data.sum(level='uid').sort('anno',ascending=False)
同样,我可以每个月确定注释的总数(跨越:举例来说,如果我想确定的时间每个用户标记的东西(降序频率指令)的数量,它是那样简单所有的用户和标签)与:
data.sum(level='date')
但我遇到了更复杂的计算问题。特别是,如果我想每个用户每个月的平均注释数量是多少?如果我称之为:
data.sum(level=['date','uid']).head()
我每个月拿到每用户注释的数量,即:
anno
date uid
2005-07-01 1040740 10
1067454 23
2096963 136
2115894 1
2163842 4
...
但什么是一个简单的方法,然后获取这些值的跨用户每月平均?也就是说,对于每个月,“anno”列的用户平均数是多少?我有我想要计算的各种指标,所以我希望解决方案能够推广。
我想从一开始就尝试重新采样,但它似乎不起作用(至少不是你如何描述)。以'date'作为索引,重新采样'mean'只是计算艺术家,标签和用户每个月的所有数字ID的算术平均值(这是没有意义的),而不是每个用户的平均注释数量。另一方面,'计数'给出了每个月的总行数,这也是错误的。我需要每个用户每个月的平均注释数(行)。 – moustachio
我一直在编辑这个,因为我最初误解了你的问题。请再读一遍。我想我现在已经明白了。 –
好得多,但唯一的问题是daily_annotations的定义需要抽出一个特定的列,否则你不能进行分割(如你所定义的那样,daily_annotations是一个数据框,但daily_users是一个系列。任意选择哪一列,据我所知,编辑并接受答案 – moustachio