2017-10-26 10 views
1

私はTwitterからデータを収集していて、各ツイートは辞書形式です。値が文字列のリストの場合、辞書の値を参照する方法は?

私の完全なデータセットは、何千ものツイート(辞書のリスト)のリストです。

各ツイート内にハッシュタグを参照したいが、これを行う方法を理解するのに役立つ必要がある。 「実体」キーはその値二辞書として持っていることを

twitter_tweets = 
[{'created_at': 'Wed Oct 18 22:20:30 +0000 2017', 'id': 920776631102214144, 'entities': {'hashtags': ['#dataanalyst#', '#politics']} 'user': {'id': 119116331, 'statuses_count': 32796, 'verified': False, 'lang': 'en-'}, 'retweet_count': 0, 'favorite_count': 0} 
{'created_at': 'Wed Oct 17 12:20:36 +0000 2017', 'id': 920776631106514144, 'entities': {'hashtags': ['#california', '#nationalparks']} 'user': {'id': 119159331, 'statuses_count': 32796, 'verified': False, 'lang': 'en-gb'}, 'retweet_count': 1, 'favorite_count': 2}] 

お知らせ:

は、ここで関連するデータを持つ2件の部分ツイートのリストの例です。その2番目の辞書では、 "hashtags"がキーであり、値はハッシュタグのリストです。

def make_tweets_series(input_list, first_key, second_key): 
    final_keys_list = [] 
    for line in input_list: 
     tweets_by_key = line[first_key][second_key] 
     final_keys_list.append(tweets_by_key) 
     series_key_values = pd.Series(final_keys_list).value_counts() 

    return series_key_values 


hashtag_distribution_series = make_tweets_series(twitter_tweets, 'entities', 'hashtags') 

「ハッシュタグ」の値が文字列だった場合、このコードは、私が思うに、動作します:ここで

は、私は、周波数のシリーズを作成するために、これらのハッシュタグのすべてのリストを収集しようとしているコードです"hashtags"は文字列のリストなので、うまくいきません。

これらのリストの各ハッシュタグをどのように参照してシリーズに入れることができますか?次のように

私の完全なエラーメッセージは、トレースバックと、次のとおりです。

Traceback (most recent call last): 

    File "<ipython-input-60-7623feb35c84>", line 13, in <module> 
    hashtag_distribution_series = make_tweets_series(twitter_tweets, 'entities', 'hashtags') 

    File "<ipython-input-60-7623feb35c84>", line 6, in make_tweets_series 
    series_key_values = pd.Series(final_keys_list).value_counts() 

    File "/home/tommy/anaconda3/lib/python3.6/site-packages/pandas/core/base.py", line 938, in value_counts 
    normalize=normalize, bins=bins, dropna=dropna) 

    File "/home/tommy/anaconda3/lib/python3.6/site-packages/pandas/core/algorithms.py", line 640, in value_counts 
    keys, counts = _value_counts_arraylike(values, dropna) 

    File "/home/tommy/anaconda3/lib/python3.6/site-packages/pandas/core/algorithms.py", line 685, in _value_counts_arraylike 
    keys, counts = f(values, dropna) 

    File "pandas/_libs/hashtable_func_helper.pxi", line 356, in pandas._libs.hashtable.value_count_object (pandas/_libs/hashtable.c:29440) 

    File "pandas/_libs/hashtable_func_helper.pxi", line 367, in pandas._libs.hashtable.value_count_object (pandas/_libs/hashtable.c:29189) 

TypeError: unhashable type: 'list' 
+1

エラーを投稿するたびに、全体のトレースを投稿してください – 0TTT0

+1

ハッシュタグはキーとして使用すると文字列である必要があることを認識していますか?あなたの入力には当てはまりません。そのタイプミスかエラーかはわかりません。 – utengr

+0

@utengrはい、それはタイプミスでした。私はそれを修正します。 – TJE

答えて

2

listは、それが何を意味するのか文字通り非ハッシュ

です。 listオブジェクトをハッシュすることはできません。 dict sオブジェクトのハッシュ値を使用してkey - > valueを検索します。そのように速いです。

代わりにtupleを使用してください。文字列のリストが返される場合は、tuple(...)を呼び出してください。タプルは不変の順序付けられたコレクションであり、不変でハッシュ可能であることを除いてリストと同様に動作します。

+0

ありがとうございます。私はtuple()を使う方法を知らない。私のコードでどこに行くの? – TJE

+1

@ThomasErnste 'series_key_values = pd.Series(タプル(final_keys_list))。value_counts()' – HyperNeutrino

+0

コードを意図したとおりに変更したかどうかはわかりません。私の行の代わりに "series_key_values = pd.Series(tuple(final_keys_list))。value_counts()"という行を代入しようとしました。 "series_key_values = pd.Series(final_keys_list).value_counts()"同じエラーメッセージが表示されます - - "TypeError:unhashableタイプ: 'list'" – TJE

関連する問題