2016-05-05 1 views
1

私はキーと値の頻度カウントを見つけることを試みているフィルタを作成しようとしています。コードブロックの1つを試している間、私は以下のエラーの難しさに直面しています。Key_Value count filters Dictionary

データは約twitterユーザーとそれぞれのキーワードです。私はユーザーのツイート数の頻度と各ユーザーが投稿したユニークなキーワードの数を取得しようとしています。データセットには約1000秒の行があり、Inputには20行しか表示されません。

入力

tweetcricscore 7.15E+17 3/30/2016 #wt20 
tweetcricscore 7.15E+17 3/30/2016 #sausvsvic 
tweetcricscore 7.15E+17 3/30/2016 #wt20 
tweetcricscore 7.15E+17 3/30/2016 #sausvsvic 
tweetcricscore 7.14E+17 3/28/2016 #wt20 
tweetcricscore 7.14E+17 3/28/2016 #sausvsvic 
tweetcricscore 7.14E+17 3/27/2016 #wt20 
tweetcricscore 7.14E+17 3/27/2016 #sausvsvic 
tweetcricscore 7.14E+17 3/27/2016 #wt20 
tweetcricscore 7.14E+17 3/27/2016 #sausvsvic 
tweetcricscore 7.14E+17 3/26/2016 #wt20 
tweetcricscore 7.14E+17 3/26/2016 #canvsnk 
tweetcricscore 7.14E+17 3/26/2016 #wt20 
tweetcricscore 7.14E+17 3/26/2016 #sausvsvic 
tweetcricscore 7.14E+17 3/26/2016 #wt20 
tweetcricscore 7.14E+17 3/26/2016 #sausvsvic 
tweetcricscore 7.14E+17 3/26/2016 #wt20 
tweetcricscore 7.14E+17 3/26/2016 #sausvsvic 
tweetcricscore 7.13E+17 3/23/2016 #wt20 
tweetcricscore 7.13E+17 3/23/2016 #indvsban 

コード:

with open('filter_1.csv', 'rb') as inp,open('filter_2.csv', 'wb') as out: 
    writer = csv.writer(out) 
    '''for row in csv.reader(inp): 
     l.append(row[0])''' 
    for row in csv.reader(inp): 
     try: 
      key_val = row[0],row[3] 
      d[key_val] +=1 
     except Exception as e: 
      pass 
    od = collections.OrderedDict(sorted(d.items())) 

    for key,values in od.iteritems(): 
     writer.writerow([key[0],l.count(key[0]),key[3],values]) 

予想される出力

tweetcricscore 234 #afgvssco 51 
tweetcricscore 234 #afgvszim 46 
tweetcricscore 234 #banvsire 12 
tweetcricscore 234 #banvsned 46 
tweetcricscore 234 #canvsnk 1 
tweetcricscore 234 #cricket 178 
tweetcricscore 234 #engvswi 46 
tweetcricscore 234 #hkvssco 23 
tweetcricscore 234 #indvsban 1 
tweetcricscore 234 #sausvsvic 8 
tweetcricscore 234 #wt20 56 

私は次のようになっていますエラー

28 
    29   for key,values in od.iteritems(): 
---> 30     writer.writerow([key[0],l.count(key[0]),key[3],values]) 
    32 

IndexError: tuple index out of range 

コードはプロセスプログラムの一部であり、この部分は入力をフィルタリングする際にエラーが表示されます。 何か提案がありがとうございます。おかげで事前

+1

'key_val = row [0]、row [3]'は2つの項目を含むタプルです。 'writer.writerow([key [0]、l.count(key [0])、key [3]、values])'は4番目の項目を指します。したがって、エラーが発生します。 – Quinn

+0

@ccf私はこの1つでいくつかの助けを使用することができますhttp://datascience.stackexchange.com/questions/11440/multi-model-data-set-visualization-python –

答えて

1

に私はあなたが提供した例を実行するが、あなたがキーはそれぞれ二つの要素持っているタプルですdict生成していると思われるコード読み取りに基づくことができませんでした:あなたが次に

key_val = row[0],row[3] 
d[key_val] +=1 

をあなたは同じキーを使用しているOrderedDictを生成し、その上にアイテムを反復:2行目に

for key,values in od.iteritems(): 
    writer.writerow([key[0],l.count(key[0]),key[3],values]) 

あなたは、それはそれだけで2つの要素を持っているので、自然に失敗したkeyからインデックス3の要素を取得しよう。 key[3]key[1]に変更すると、期待どおりに機能するはずです。

+0

ありがとう.. :)これは絶対に働いたが問題に直面したコードの次のブロック:( –

+0

私もこの1つでいくつかの助けを使用することができますhttp://datascience.stackexchange.com/questions/11440/multi-model-data-set-visualization-python –