小さなエンドウ豆

まだまだいろいろ勉強中

Pythonでワードクラウド

前回のブログ

こんにちは
前回のブログを今週のPython記事で取り上げてもらいました!
そこでpythonにワードクラウドのパッケージが存在することを教えて頂いてたのでそれを使ってワードクラウドを作ってみた。

f:id:h-piiice16:20160220170703p:plain

できたのものはこんな感じです。ただ作るだけだとつまらないのでアリスの画像でマスク処理をしてみました。

python-wordcloud
ここのexampleを参考に書いてみた。

#coding: utf-8

import pandas as pd
import MeCab
import re
import numpy as np
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
from os import path
from PIL import Image

stop_words = [ u'てる', u'いる', u'なる', u'れる', u'する', u'ある', u'こと', u'これ', u'さん', u'して', \
             u'くれる', u'やる', u'くださる', u'そう', u'せる', u'した',  u'思う',  \
             u'それ', u'ここ', u'ちゃん', u'くん', u'', u'て',u'に',u'を',u'は',u'の', u'が', u'と', u'た', u'し', u'で', \
             u'ない', u'も', u'な', u'い', u'か', u'ので', u'よう', u'']

pattern = re.compile('[!-~]')

fpath = "/usr/share/fonts/truetype/fonts-japanese-gothic.ttf"

def text_parse(text):
    words = []
    mt = MeCab.Tagger('-Ochasen')
    res = mt.parseToNode(text)

    while res:
        if res.feature.split(",")[0] in ["形容詞", "動詞","名詞", "副詞"]:
            if res.surface != "" and (not pattern.match(res.surface)):
                words.append(res.surface)
        res = res.next
    return words

d = path.dirname(__file__)
tweets = pd.read_csv('tweets.csv')
texts = " ".join(tweets.text.values)
#print texts
word = text_parse(texts)
#print word


okayama = np.array(Image.open(path.join(d, "alice_mask.png")))
wc = WordCloud(background_color="white", font_path=fpath, mask=okayama, 
                            stopwords=set(stop_words))
wc.generate(" ".join(word).decode('utf-8'))


wc.to_file(path.join(d, "pycloud.png"))

plt.imshow(wc)
plt.axis("off")
plt.figure()

stopwordに何を設定していいかわからなかったのでWord Cloudで文章の単語出現頻度を可視化する。[Python]を参考にさせてもらいました。
あとフォントの指定を行わないと文字化けしてしまうので注意が必要である。
マスク処理を使うとワードクラウドを好きな形で描画することができる!

ツイート分析()

元はといえばこれを使って自己分析をする予定だったので分析してみると自分がよく口語で使う口癖がツイートにそのまま現れいているように思える。またサッカーに関する単語が多いのは自覚している。
まあ自己PRや性格、長所、短所などESや面接で聞かれるようなことに対する答えを考える手がかりになるのではないかなー