2017-10-19 21 views
0

私の問題は、棒グラフを作成しようとしていますが、正しく出力されていないことです。辞書のリストからPandasとMatplotlib.pyplotを使って正しい棒グラフを作成する方法

私は辞書のリストを持っています。

各辞書には、Twitterからの数千のつぶやきに関連するすべてのデータと属性が含まれています。各辞書には、ツイートの内容、ツイートの人物のスクリーン名、ツイートの言語、ツイートの出身国などのキーの値の組み合わせとしての属性が含まれています。

言語属性の棒グラフを作成するには、リスト内でパンダのデータフレームとして読み込み、最もよく使用される上位5つのそれぞれについて5つの周波数棒を持つ棒グラフとしてデータを出力しようとするリスト理解がありますつぶやきの私のリストの言語。

tweets_df = pd.DataFrame() 

tweets_df['lang'] = map(lambda tweet: tweet['lang'], tweets_data) 

tweets_by_lang = tweets_df['lang'].value_counts() 

fig, ax = plt.subplots() 
ax.tick_params(axis='x', labelsize=15) 
ax.tick_params(axis='y', labelsize=10) 
ax.set_xlabel('Languages', fontsize=15) 
ax.set_ylabel('Number of tweets' , fontsize=15) 
ax.set_title('Top 5 languages', fontsize=15, fontweight='bold') 
tweets_by_lang[:5].plot(ax=ax, kind='bar', color='red') 

私が言ったように、私は5バール、のための1つを取得する必要があります。ここでは

はを(各つぶやきを含む辞書の私のリストがtweets_dataと呼ばれていることに注意してください)言語バープロット のための私のコードです私のデータの上位5つの言語のそれぞれ。代わりに、私は下のグラフを表示しています。 enter image description here

+2

問題はここにあります: 'tweets_df ['lang'] = map(...)' 'tweets_data'はどのように見えますか?どのような種類のオブジェクトですか?それがデータフレームなら、なぜ 'tweets_data ['lang']。value_counts()'を使うのではなく、それをマッピングしていますか? – ASGM

+0

tweets_dataはリストであり、リストの各項目は辞書です。各辞書には、1つのツイートのすべてのデータが含まれています。そして、私はtweets_data ['lang']のあなたの提案を試してみてください。value_counts() - エラーが出ます。 "TypeError:リストインデックスは、strではなく整数またはスライスでなければなりません。 – TJE

+1

'print tweets_df ['lang']'の出力はどのように見えますか? – ASGM

答えて

1

あなたの問題はここにある:あなたのコメントが示唆するように

tweets_df['lang'] = map(lambda tweet: tweet['lang'], tweets_data) 

問題は、リストを返しますmap()のPython 2、3.へのPython 2からの変更にダウンしています。しかし、Python 3では、map() returns an iteratorです。ヒントは、tweets_df['lang'].value_counts()の値が1つだけあり、それは<map ... >イテレータオブジェクトです)。 Pythonの2または3のいずれかに

、あなたの代わりに、リストの内包表記を使用することができます。

tweet_by_lang = pd.Series([tweet['lang'] for tweet in tweets_data]).value_counts() 

やPython 3に、あなたは上記のリンクの答えからトリプティクのアドバイス@従うとlist()map()をラップすることができます。

tweets_df['lang'] = list(map(lambda tweet: tweet['lang'], tweets_data)) 
関連する問題