2015-11-01 22 views
0

我有一個Twitter的數據幀像這樣,如何計算twitter的日常詞頻?

>>>twitdata=pd.read_csv('D:\\twit-data.csv') 
>>>twitdata 

    tweet_id user_id  user_name t_date  t_time  tweets 
    4.05323E+17 82142636 1nvestor 11/26/2013 8:12:00  Fidelity reports that $TSN stock gets called away. Position now closed. 
    2.53585E+17 22042454 Kiplinger 10/3/2012 15:57:00 Did you know that every $100 bump in avg. home prices lifts consumer spending by $5? http://t.co/zXRbWJzR 
    ... 

我想算一個特定字的每日頻率,說iphone,並獲得其日常的頻率一樣的結果,

 date frequency 
2011-01-01 530 
2011-01-02 550 
... 

我如何設計一個程序來實現這個?

+0

看看這個:http://stackoverflow.com/questions/6017948/word-counts-in-python-using-regular-expression。你需要也許一行一行地工作。使用'df [column] .apply()',並將計數存儲在DataFrame的另一列中。 – Kartik

回答

1

我創建一個基於隨機數據的數據框,但它應該給你一個關於如何從這裏走的想法。我有計數設爲D日曆天,你可以改變offset,因爲你需要

import pandas as pd 
import io # only needed to import sample data 

data = """ 
    date   tweet_id tweet 
    2015-10-31 50230  tweet_1 
    2015-10-31 48646  tweet_2 
    2015-10-31 48748  tweet_3 
    2015-10-31 46992  tweet_4 
    2015-11-01 46491  tweet_5 
    2015-11-01 45347  tweet_6 
    2015-11-01 45681  tweet_7 
    2015-11-01 46430  tweet_8 
    """ 

df = pd.read_csv(io.StringIO(data), delimiter='\s+', \ 
       index_col=False, parse_dates = ['date']) 

# Tweet count starts here 
df_count = df.set_index('date').resample('D', how='count') # 'D' for offset calendar day 
df_count = df_count.drop(df_count.columns[1:], axis=1) 
df_count.columns = ['count'] 

print(df) 

只是爲了檢查你的原始df樣子

 date tweet_id tweet 
0 2015-10-31  50230 tweet_1 
1 2015-10-31  48646 tweet_2 
2 2015-10-31  48748 tweet_3 
3 2015-10-31  46992 tweet_4 
4 2015-11-01  46491 tweet_5 
5 2015-11-01  45347 tweet_6 
6 2015-11-01  45681 tweet_7 
7 2015-11-01  46430 tweet_8 

我們使用後resample

print(df_count) 

       count 
date     
2015-10-31   4 
2015-11-01   4 
+0

這隻會記錄每天有多少推文,但我想要統計每天出現特定單詞的次數。我可以簡單地通過tweetdata [tweetdata.t_date == u'2012-10-03']來計算它。shape [0] – Pythoner

+0

但是,這只是讓我們計算每天的推文數量。提問者需要白天統計特定的詞。 – Kartik

+0

IMO是一個兩部分問題。但爲了讓你開始,你可以創建一個基於你的'tweets'字段的數據框,其中有'iphone'這個詞,然後使用我提供的數據來計算出現次數。要獲取特定關鍵字的新數據框,您可以使用'nltk'。這太寬泛了,沒有OP的任何嘗試,這個問題就變成了一個代碼請求,而不是這個代碼請求。 – Leb

-1

我自己解決了這個問題,這裏是我的解決方案。

import operator 
result = tweetdata.groupby('t_date').first(); 
    allFreq={} 
    for date in range(0,result.shape(0)): 
     df=tweetdata[tweetdata.t_date==result.index[date]].ix[:,['t_date','tweets']] 
     #type(tweetdata.loc[1,'t_date']) 
    A='' 
    for i in df.index: 
     A=A+' '+df.ix[i,1] 
    text_file = open("A.txt", "w+") 
    text_file.write("%s" % A) 
    text_file.close() 
    with open('A.txt') as f: 
     words = f.read() 
     wordfreq = {} 
     for word in words.replace(',', ' ').split(): 
      wordfreq[word] = wordfreq.setdefault(word, 0) + 1 

    x = wordfreq 
    sorted_x = sorted(x.items(), key=operator.itemgetter(1),reverse=True) 
    sorted_x 
    allFreq[result.index[date]]=sorted_x 
>>>allFreq['2012-06-01'] 
>>>  [('the', 248), 
     ('to', 201), 
     ('of', 143), 
     ('a', 137), 
     ('in', 127), 
     ('and', 107), 
     ('for', 100), 
     ('you', 95), 
     ('is', 93), 
     ('I', 81), 
...]