今回は、Twitterから抽出した投稿を使ってWordcloudを作成する方法について解説します。
Wordcloudというのは、データビジュアライズの方法の一つで、ある文の中に頻出する語句を大きさや形を変えて表示する手法です。
完成例は、下のツイートの画像みたいになります。
今日のお仕事は自由にプレゼンを作って良い日だったので、その資料として、形態素解析からのWordCloudにチャレンジしてみました!
結構簡単にできて面白かった!
形態素解析とかでほかにもいろいろ遊んでみたいなぁ。
ちなプレゼン未完成笑 pic.twitter.com/nvSks6otWi— かしわばゆき (@yuki_kashiwaba) 2019年7月10日
こちらのWordcloudですが、Pythonのライブラリで非常に簡単に作成することができました。
論文やレポートのちょっとした遊びとかにも使いやすいかもしれません。
ぜひ皆さんもやってみてください。
もくじWordcloud作成環境と手順
まずは使用したPythonのバージョンと、インストールしたライブラリからまとめておきます。
こちらのライブラリ一覧を requirements.txt というファイルに保存して、
pip3 install -r requirements.txt
というコマンドを打つと、必要なライブラリをいっぺんにインストールできます。
Pythonのバージョン Python 3.7.3 インストールした主なライブラリ certifi==2019.6.16 chardet==3.0.4 cycler==0.10.0 idna==2.8 kiwisolver==1.1.0 matplotlib==3.1.1 mecab-python3==0.996.2 numpy==1.16.4 oauthlib==3.0.2 Pillow==6.1.0 pyparsing==2.4.0 PySocks==1.7.0 python-dateutil==2.8.0 requests==2.22.0 requests-oauthlib==1.2.0 six==1.12.0 tweepy==3.8.0 urllib3==1.25.3 wordcloud==1.5.0
Wordcloudを作成するまでの大まかな手順は次の3ステップです。
1.TwitterAPIで投稿を抽出する
2.自然言語解析で名詞のみ取り出し、半角スペースで区切られたtxtファイルにする
3.作成したtxtファイルをWordcloudライブラリにつっこむ
では、次の項から各コードについて解説していきますね!
Twitterから特定のキーワードを含む投稿を抽出
まずは、TwitterからWordcloudを作成するための素材を集めましょう。
今回は自分の投稿を取得してWordcloud化します。
一応コードは貼っておきますが、TwitterAPIを使って自分の投稿を取得する方法については、もっと詳細にまとめた記事があります。
詳しくはこちらの記事を参考にしてみてください。
TwitterAPIでツイートを全件取得する方法【Python】
import tweepy Consumer_key = 'TwitterAPI登録申請して取得した API key' Consumer_secret = 'TwitterAPI登録申請して取得したConsumer_secret' Access_token = 'TwitterAPI登録申請して取得したAccess_token' Access_secret = 'TwitterAPI登録申請して取得したAccess_secret' # OAuth認証 auth = tweepy.OAuthHandler(Consumer_key, Consumer_secret) auth.set_access_token(Access_token, Access_secret) api = tweepy.API(auth) #ツイート取得 data = [] pages = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] for page in pages: results = api.user_timeline( screen_name="yuki_kashiwaba", count=200, page=page) for r in results: data.append(r.text) line = ''.join(data) with open("text.txt", 'wt') as f: f.write(line)
自然言語解析で名詞だけを取り出す
さて、前項で自分の投稿の内容を text.txt というファイルに抽出しました。
次は、こちらのテキストファイルに形態素解析をかけて、名詞だけを抽出していきます。
使うのはおなじみのMecabです。
import MeCab import re from collections import Counter # ファイル読み込み with open('text.txt') as f: data = f.read() # パース mecab = MeCab.Tagger() parse = mecab.parse(data) lines = parse.split('n') items = (re.split('[t,]', line) for line in lines) # 名詞をリストに格納 words = [item[0] for item in items if (item[0] not in ('EOS', '', 't', 'ー') and item[1] == '名詞' and item[2] == '一般')] line = ' '.join(words) with open("return.txt", 'wt') as f: f.write(line)
今回はMeCabの使い方については細かくは解説しません。
文字列の保存されたtxtファイルを読み取って、名詞だけを半角スペース区切りで並べた新しいtxtファイルを生成するプログラムです。
コピペで使えます。
Wordcloudを作成する
さてさてようやく本題。
いよいよ半角スペース区切りで単語が保存されたtxtファイルを使って、Wordcloudを作成します。
import numpy as np from wordcloud import WordCloud path = 'return.txt' with open(path, mode='r') as f: text = f.read() wordcloud = WordCloud(background_color="white", width=1000, height=600) wordcloud.generate(text) wordcloud.to_file('word.png')
とは言ってもコードはたったこれだけなんですよ。
すごいですよね。
では!コードを実行してWordcloudを作成!!

・・・文字化けしてね??
作成したWordcloudが文字化けする理由
どうやら、Wordcloudライブラリの標準のフォントは、日本語表示に対応していないそう。
解決法は、Wordcloudのフォントに、日本語対応のフォントを指定することです。
日本語に対応してればなんでもいいんですが、僕はここからipag.ttfというファイルをダウンロードしてきました。
ipag.ttfをPython実行ファイルと同じディレクトリに置いたら、先ほどのコードを以下のように修正しましょう。
wordcloud = WordCloud(background_color="white", width=1000, height=600, font_path="./ipag.ttf")
フォントを追記しました。
これでこんどこそWordcloudが作成できました。
まとめ
こんな感じでサクサクっとWordcloudが完成しました。
こういう遊びが簡単にできるのはPythonのいいところですねー。
ぜひ皆さんもやってみてください。