【Twitter】ダウンロードした(自分のアカウントの)過去ツイートを綺麗なCSVにしたい


Twitterでは、「設定」>「アカウント」>「Twiterデータ」>「アーカイブをダウンロード」
に、自分の過去のツイートを全てダウンロードする機能が用意してあることはご承知の通りです。

ダウンロードしたファイルには過去のツイート、RTしたツイート、いいねしたツイートの情報、ダイレクトメッセージなどが含まれています。(通常は一緒にダウンロードされるindex.htmlを開くことで閲覧できるようですが、自分の場合にはindex.htmlがダウンロードされませんでした。なんでだろう)


2019/12/15 追記
index.html はそもそもダウンロードされない仕様に変更になっている模様です。

BERTを理解しながら自分のツイートを可視化してみるハンズオン
↑こちらの記事を読んでて気付きました。
↓(参考)
【解決済】twitterの全ツイート履歴がダウンロードできない【方法】


テキストマイニングや何らかの分析を行いたい場合には tweet.json を読むことになると思います。本稿ではこちらのjsonファイルを、形態素解析などに使いやすいようなcsvに加工します。作成するcsvは「タイムスタンプ」と「テキスト本文」の2カラムです。

最終的にできるCSVのイメージ

環境
Python 3.6.5
Mac OS Mojave 10.14.4

pandas==0.23.0

ダウンロードしたjsonを開くとこんな感じになっているとおもいます。

赤いアンダーラインを引いた

window.YTD.tweet.part0 = 

は不要ですので消してください。そのうえで拡張子を .txt に変更し、作業するディレクトリに入れてください。

read_dl_tweet.py
import pandas as pd
import json

tweets_file = open("tweet.txt", "r")
tweet = json.load(tweets_file)

上のスクリプトでpandasのdataframeとしてjsonを開きます。
カラムはたくさんあるのですが、必要なカラムだけを抜き出します。

read_dl_tweet.py
df = tweet_data_frame.loc[:,["created_at","full_text"]]

csvにしていく際に改行やカンマなどの困った文字が入っているので、これらを除去します。
regex=Trueとしないとうまくいきませんでした。

read_dl_tweet.py
df = df.replace(['\n',',',' ','\r'],'',regex=True)

また、タイムスタンプの形式が、ソートに使えない形になっているので、これを読みやすい形に直します。pandasのto_datetimeメソッドで一発で変換できました。

read_dl_tweet.py
df_date = pd.to_datetime(df["created_at"])
df["date_form"] = df_date
df_sorted = df.sort_values("date_form") 
df_text_date = df_sorted.loc[:,["date_form","full_text"]]

新しく作ったタイムスタンプでソートしています。

read_dl_tweet.py
df_text_date.to_csv("df_text_date.csv", header=False, index=False,sep=',',encoding='utf-16')

csvを出力する際のオプションは適宜変更してください(区切りをタブにするなど)。

次記事では作成したcsvから期間ごとのツイート数をグラフに出してみます。

今回のコード: https://github.com/KanikaniYou/plot_tweet_graph