PythonのWordCloudを使って、以下のような単語の頻出度を画像化してみました。
画像化するフローを紹介します!
大きい文字ほど、出現回数が多い単語です。
作ったプログラムの概要
Mysqlに保存した文章データを1件ほど読み込んで、形態素分析します。
形態素分析で分けた文字列の品詞は、「名詞」「形容詞」だけに限定しています。文書の中で、どんな単語を使っているか着目しているためです。
形態素分析で分解された文字列をwordcloud使って、頻出単語の出現状況を画像化してみました。出現回数が多い単語ほど、大きい文字列になります。
では、以下の文章で実験してみます。
ジェットコースター乗れない男性は、世界中にたくさんいる(はず)。僕も、ジェットコースターに乗ることができない。もしかしたら、観覧車すら乗れないかも。
ジェットコースターに乗れるか乗れないかで人生が狂うこともあるだろう。特に、デートのときジェットコースター乗れないと“へたれ”という汚名を着せられてしまう。
それは、男性にとって大変悲しいことである。しかし、ジェットコースターが苦手な男性にとって希望といえる記事「ジェットコースター生理学」を発見することができた。
ジェットコースター生理学によると男性は、生理的にジェットコースターが苦手であるという。
緊張する状況下に置かれたとき、男性は脳波が乱れてストレスを感じる。逆に、女性は緊張する状況下では冷静に観察でき、リラックスしながら状況を楽しめ、ストレス発散できるのだ。だから、男性がジェットコースター苦手なのは仕方ないことなのだ。友達にジェットコースター乗ることを誘われ、積極的に断わっても全く問題なし。
もしもあなたが、ジェットコースターに乗れるようになりたかったら「ジェットコースター生理学」を読んでみてください。ジェットコースター克服方法について記載されています。ここでは、その内容を触れません。
ジェットコースター苦手ばんざいーー!!
記事 ジェットコースター生理学
http://www.interq.or.jp/tokyo/ohata/yuuenchi/06data/60jet.htm
単語の回数をカウントしてみます。
その結果、以下のような結果になりました。
('ジェット', 15),
('コースター', 15),
('男性', 6),
('こと', 6),
('/', 5),
('苦手', 4),
('生理学', 4),
('.', 4),
('状況', 3),
('の', 3),
('とき', 2),
('記事', 2),
('的', 2),
('緊張', 2),
('下', 2),
('ストレス', 2),
('世界中', 1),
('たくさん', 1),
('はず', 1),
('僕', 1),
('観覧', 1),
('車', 1),
('人生', 1),
('デート', 1),
('汚名', 1),
出力された画像は以下の通り。
出現回数が多い「ジェット」「コースター」が一番大きい文字になっていることがわかります。次の多い文字が「男性」「こと」になっています。
分解された文字列の中に「/」などの記号のみ取り出されるケースもあるので、本来は精度を高めるには、前処理で雑音(記号など)を削除する必要があります。
今回は短い文章のため余白がたくさんありますが、
青空文庫にある文庫本を入れてみたら、文字がもっとぎっしりしたものになります。
実際に使ったプログラムを記載します。
'''
DB(Mysql)に保存した文章データから、形態素解析するサンプル。
取り出した語句についてWordCloudで可視化までする
'''
import re
import pickle
from janome.tokenizer import Tokenizer
import mysql.connector
from wordcloud import WordCloud
#文章データを読み込みます。
#この例では、mysqlから読み込み元のデータを持って来ています。
conn = mysql.connector.connect(
host = 'localhost',
port = 3306,
user = 'root',
password = "",
database = "BlogResearch",
)
cur = conn.cursor()
cur.execute('SELECT diary_data from t_diary_logs where id IN(124)')
datas = cur.fetchall()
#セパレータを「。」とする。
seperator = "。"
mixi_diary_origin = ""
for row in datas:
data = re.sub("[| 「」\n]", "", row[0]) # | と全角半角スペース、「」と改行の削除
mixi_diary_origin += data
mixi_diary_list = mixi_diary_origin.split(seperator) # セパレーターを使って文章をリストに分割する
mixi_diary_list = [x+seperator for x in mixi_diary_list] # 文章の最後に。を追加
#この時点でデータの準備が終わりです
#ここから形態素分析に入ります
t = Tokenizer()
mixi_diary_words = [] #形態素分析したあとに出てきた語句を格納するリスト(この例では、名詞、形容詞のみの語句を取っています)
for sentence in mixi_diary_list:
tokens = t.tokenize(sentence)
words = []
for token in tokens:
# 品詞を取り出し
partOfSpeech = token.part_of_speech.split(',')[0]
if partOfSpeech == u'名詞' or partOfSpeech == u'形容詞' :
#print (token.surface)
words.append(token.surface)
if len(words) > 0:
mixi_diary_words.extend(words)
# In[2]:
#ここからWordCloudの処理
#mixi_diary_wordsは、WordCloudで使えるように2次元の配列(行列)になっているので、1次元の配列(ベクトル)に変換する
text = ""
for x in mixi_diary_words:
text = text + x + " "
wordcloud = WordCloud(background_color="white",
font_path="/System/Library/Fonts/ヒラギノ明朝 ProN.ttc",
width=800,height=600).generate(text)
#画像ファイルに保存する
wordcloud.to_file("./wordcloud_sample.png")
#文字数をカウントする
# In[3]:
#折角なので文字数も求めてみる
from collections import Counter
c = Counter(mixi_diary_words)
c.most_common()
まとめ
wordcloudは、面白いですね。
今回は、過去に書いた日記に対して頻出単語の画像化をしましたが、
これをアンケートやチャット、Twitterのツイートに使ってみたら面白い発見ができるかもしれないですね。
\IT未経験者からのサポートあり!転職サービス3選!!/
サービス名 | |||
---|---|---|---|
未経験 | 未経験OK | 未経験の転職専用 | 経験者向け |
公開の求人数 | ITエンジニア全体で1万件以上 ITエンジニア未経験で600件以上 |
未公開 | 5,000件以上 |
利用対象 | 全職種 | IT特化 | IT特化 |
特徴 | ✓誰もが知る転職サービス ✓経歴を登録しておくとオファーが来る |
✓企業担当者と条件交渉 ✓スキルの身につく企業を紹介 |
✓IT専門のエージェントが対応 ✓転職成功すると年収200万円以上の大幅アップがある |
転職サポート内容 |
|
|
|
公式サイト | リクナビネクスト | テックゲート | レバテックキャリア |