2013-08-01 7 views
3

我已经下载了我的Twitter归档文件,并且正在尝试对我最常说的那些人进行一些分析。将熊猫'findall'结果列表拆分为多个项目,以独特方式进行分组

鸣叫CSV列是这样的:

tweet_id,in_reply_to_status_id,in_reply_to_user_id,retweeted_status_id,retweeted_status_user_id,timestamp,source 

我用read_csv()导入tweets.csv文件到一个名为 “INDATA” 数据帧。

然后,为了获取在微博中提到的所有@handles的名单,我用了以下内容:

handles = indata['text'].str.findall('@[a-zA-Z0-9_-]*') 

结果:

timestamp 
... 
2013-04-12 11:24:27        [@danbarker] 
2013-04-12 11:22:32         [@SeekTom] 
2013-04-12 10:50:45 [@33Digital, @HotwirePR, @kobygeddes, @] 
2013-04-12 08:00:03        [@mccandelish] 
2013-04-12 07:59:01        [@Mumbrella] 
... 
Name: text, dtype: object 

我想怎么能够做到是由个人处理和日期组成的,以显示我多年来最多与谁交谈过的人数。

有什么建议吗?

回答

2

纯粹熊猫的方式可能是应用Series构造函数将其放入一个DataFrame中并堆栈到一个Series中(因此您可以使用value_counts)...如果您不关心可以使用的索引/时间戳集合(其中可以更快):

In [11]: df = pd.DataFrame([['@a @b'], ['@a'], ['@c']], columns=['tweets']) 

In [12]: df 
Out[12]: 
    tweets 
0 @a @b 
1  @a 
2  @c 

In [13]: at_mentions = df['tweets'].str.findall('@[a-zA-Z0-9_]+') 

注:我会用+而不是*在这里,因为我不认为@本身应该包括做。

In [14]: at_mentions 
Out[14]: 
0 [@a, @b] 
1  [@a] 
2  [@c] 
Name: tweets, dtype: object 

使用collections' Counter这是很容易的:

In [21]: from collections import Counter 

In [22]: Counter(at_mentions.sum()) 
Out[22]: Counter({'@a': 2, '@b': 1, '@c': 1}) 

大熊猫的方式将保持指数(时间)的信息。

Apply系列构造函数来得到一个数据帧和stack成一个系列:

In [31]: all_mentions = at_mentions.apply(pd.Series) 

In [32]: all_mentions 
Out[33]: 
    0 1 
0 @a @b 
1 @a NaN 
2 @c NaN 

我们可以在这里整理的名字是更具描述性约是怎么回事:

In [33]: all_mentions.columns.name = 'at_number' 

In [34]: all_mentions.index.name = 'tweet' # this is timestamp in your example 

现在,我们什么时候我们看到这些关卡的名称:

In [35]: all_mentions = all_mentions.stack() 

In [36]: all_mentions 
Out[36]: 
tweet at_number 
1  0   @a 
     1   @b 
2  0   @a 
3  0   @c 
dtype: object 

我们可以做很多其他的分析这里,例如value_counts

In [37]: all_mentions.value_counts() 
Out[37]: 
@a 2 
@c 1 
@b 1 
dtype: int64 

最后的结果是相当于pd.Series(Counter(at_mentions.sum()))

+0

非常全面的回答,谢谢Andy。熊猫原生的方式适用于我 - 我喜欢保留时间戳的想法,这样我就可以按日期分组 - 但感谢您向我介绍collection.Counter。 –