Python

Pythonで自分のツイートを分析して、WordCloudをつくる方法

今回は、Twitterから抽出した投稿を使ってWordcloudを作成する方法について解説します。
Wordcloudというのは、データビジュアライズの方法の一つで、ある文の中に頻出する語句を大きさや形を変えて表示する手法です。

完成例は、下のツイートの画像みたいになります。

こちらのWordcloudですが、Pythonのライブラリで非常に簡単に作成することができました。
論文やレポートのちょっとした遊びとかにも使いやすいかもしれません。

ぜひ皆さんもやってみてください。

もくじ

  1. Wordcloud作成環境と手順
  2. Twitterから特定のキーワードを含む投稿を抽出
  3. 自然言語解析で名詞だけを取り出す
  4. Wordcloudを作成する
  5. 作成したWordcloudが文字化けする理由
  6. まとめ

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のいいところですねー。

ぜひ皆さんもやってみてください。

COMMENT

メールアドレスが公開されることはありません。