質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

5395閲覧

日時とツイート数のグラフをPythonで描画する方法について

yomogian

総合スコア8

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/11/13 09:20

###前提・実現したいこと
はじめまして,Pythonを触り始めたばかりのものです。
最近TwitterAPIを使ってツイート情報の収集を覚えたのですが、
特定のワードを含むツイートの数とその時系列を2次元のグラフにする方法が知りたいです。
検索したツイートは
tweet, date
0, ツイート本文,2017/11/11 10:10:10
1, ~~~~~~~~~~~~~~~~,~~~~~~~~~~~~~
といった形式のCSVファイルで保存しています。
これを以下のサイトの「時系列ツイート数推移」のようなグラフにするにはどうしたらよいでしょうか?
サイト:リスタバのTwitterデータをpythonで大量に取得し、データ分析を試みる その2

どうかお力添えいただけると幸いです。
よろしくお願いします。

###補足情報(言語/FW/ツール等のバージョンなど)
Python3.6 Windows10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Tweet数の集計は、日付ごとでよろしいのでしょうか? それとも時間毎でしょうか?

いずれにしても、pandas にて CSVファイルを読み込み、GroupBy.count() にて期間ごとのTweet数の集計して、その結果をmatplotlib にて描画するのでよいかと思います。

とりあえず、日付毎に集計して棒グラフで描くサンプルを書きましたので、参考にしてみてください。

Python

1import pandas as pd 2import matplotlib.pyplot as plt 3import matplotlib.dates as mpd 4 5# CSVファイルを読み込み 6df = pd.read_csv('tweet.csv', parse_dates=['date'], index_col=0) 7 8# 日毎のTweet数を集計 9count_data = df.groupby(df['date'].dt.date)['date'].count() 10print(count_data) 11 12# グラフを描画(Bar graph) 13ax = plt.subplot() 14ax.bar(count_data.index, count_data) 15ax.xaxis.set_major_locator(mpd.DayLocator()) 16ax.xaxis.set_major_formatter(mpd.DateFormatter('%d-%b')) 17plt.show()

CSVデータは

,tweet,date 0,ほげー,2017/11/11 10:10:10 1,ふがー,2017/11/11 11:15:32

といった形式を想定しております

投稿2017/11/13 11:28

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yomogian

2017/11/13 13:55

回答ありがとうございます。長時間の試行錯誤が嘘のように成功しました。 pandasに触れること自体が初めてでgroupby()やcount()など存じておりませんでした。 今回いただいたサンプルコードではdt.dateで日付毎に集計していますが、 これを日時+時間でグラフにしたいと思っています。(棒グラフを11日1時、11日2時、、、というように) 少し調べてみたところ、 count_data = df.groupby([df["date'].dt.day,df["date"].dt.hour])['time'].count() とすることで日+時間毎のツイート数をカウントすることができたのですが、これをグラフにしようとすると、"unsupported operand type(s) for -: 'tuple' and 'float'"とのエラーがでます。 またdf["date"].dt.hourにすると1日のうちどの時間帯にツイートがされているかのグラフになってしまいます。どのようにすれば正確に描写できるのでしょうか?
magichan

2017/11/14 00:00

毎時での集計の方法ですが、 count_data = df.groupby([df["date'].dt.day,df["date"].dt.hour])['time'].count() で問題ないかと思います。 ただ、この場合 結果データのIndexが "time"と"hour" のMultiIndexとなっておりますので、このままグラフに描く(matplotlibに渡す)ことはできません。 count_data = df.groupby([df['date'].dt.date,df['date'].dt.hour])['date'].count() の後に count_data.index = count_data.index.map(lambda d: pd.datetime.combine(d[0], datetime.time(d[1]))) などとして 'date'と'hour'から作成した datetime にてIndexを振りなおすとよいかと思います。 ここで count_data.index.map() は各Indexに関数適用するためのAPI pd.datetime.combine() は date型とtime型を結合してdatetime型を生成するAPI です
yomogian

2017/11/14 07:41

丁寧な回答本当にありがとうございます。 たしかにMultiIndexとなってしました。 しかし上記のコードを修正時実行したところ 「combine() argument 1 must be datetime.date, not int」 というエラーがでましたので datetime.date(2017,11,d[0])としたところ、 「DatetimeIndex(['2017-11-03 15:00:00', '2017-11-03 16:00:00', '2017-11-03 17:00:00', '2017-11-03 18:00:00’, ...'], dtype='datetime64[ns]', length=xxx, freq=None)] なり結合はできたのですが、今度はax.bar(count_data,count_data.index)にて 「TypeError: ufunc subtract cannot use operands with types dtype('<M8[ns]') and dtype('float64')」 となってしまいエラーがでてしまいました。 解決方法をご存知でしたらどうか教えていただけないでしょうか。
magichan

2017/11/14 07:46

おー申し訳ない count_data = df.groupby([df["date'].dt.day,df["date"].dt.hour])['time'].count() で問題ないと書きましたが、 × dt.daydt.date でした。 dayは int型 dateはdate型です。(年も含ようにdateで指定することになります) で、上のように指定するとエラーがが消えると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問