こんにちは。TATです。
今日のテーマは「【コード解説】Pythonでワードクラウドを作成してみる【MeCabとwordcloudで簡単実装】」です。
Pythonを使ってワードクラウドを作成してみます。
例として、岸田首相の所信表明をワードクラウド化してみます。
PythonのMeCabとwordcloudというライブラリを使えば簡単にワードクラウドを作ることができます。
基本的に、テキストデータはであればどんなものでも応用できますので是非ともお試しください。
目次
【コード解説】Pythonでワードクラウドを作成してみる【MeCabとwordcloudで簡単実装】
本記事では、まずはPythonでワードクラウドを作る流れについて確認していきます。
その後に、例として岸田首相の所信表明のテキストデータを使って実際にワードクラウドを実装してみます。
必要なPythonコードは全て公開するので、ご自由にご利用いただければと思います。
Pythonでワードクラウドを作る流れ
まずはPythonでワードクラウドを作る流れについて確認していきます。
ワードクラウドを作るには、ざっくりと次の手順で行います。
ワードクラウドを作る流れ
- テキストデータを用意する
- 形態素解析をして単語レベルに分割する(MeCabを使用)
- 必要な単語のみ(名詞だけとか)に絞ってリスト化する
- (必要に応じて)不要な単語を排除する
- ワードクラウド化する(wordcloudを使用)
順番にみていきます。
テキストデータを用意する
まずはテキストデータの用意です。
ワードクラウドを作りたい対象のテキストデータを用意します。
テキスト形式のものであればなんでもOKです。
今回は例として岸田首相の所信表明をテキストデータで用意して利用していきます。
形態素解析をして単語レベルに分割する(MeCabを使用)
テキストデータを用意したら、まずやるべきことはテキストデータを単語レベルに分割することです。
ワードクラウドを作るには、単語のリストが必要です。
単語のリストを作るには、テキストデータを単語レベルに分解して、必要な単語を抽出してリスト化する必要があります。
この際行うのが形態素解析です。
形態素解析は文章を単語レベルに分解して、それぞれの品詞などの情報を解析することです。
日本語は、英語のようにスペースで区切られているような言語ではないのでここが少し厄介なところです。
一見、難しそうに聞こえるかもしれませんが、PythonにはMeCabという形態素解析用のライブラリーがあるので楽ちんです。
数行のコードで簡単に実装できます。
必要な単語のみ(名詞だけとか)に絞ってリスト化する
形態素解析が完了したら、必要な単語を抽出してリスト化します。
ここでは、単体ではあまり意味をなさない助詞とか接続詞とか接頭語とかを排除してあげる必要があります。
単体で意味をなす名詞とか動詞とかに絞ることが必要です。
この作業を行うことで、ワードクラウドを作る際に不要となる単語の大部分を排除することができます。
(必要に応じて)不要な単語を排除する
単語のリストができたら、必要に応じて不要な単語を排除する必要があります。
名詞とかに絞ってリストを作成したとしても、まだまだ不要な単語が含まれる可能性があります。
もしワードクラウドを作って不要な単語が目立つ場合には、あらかじめ排除しておく必要が出てきます。
このやり方は後ほど解説します。
ワードクラウド化する(wordcloudを使用)
単語のリストが完成したらいよいよワードクラウドの作成です。
ワードクラウドを使うと、文字の頻出度に応じて文字の大きさを変えて、どの単語がよく使われたのかが一目でわかるように可視化できます。
Pythonには、wordcloudという名前の通りのライブラリが用意されていて、これを使うと簡単にワードクラウドを作成することができます。
非表示にしたい単語も指定できるので、もし不要な単語があればここで指定すれば隠すことができます。
これもライブラリのおかげで数行のコードで実装可能です。
岸田首相の所信表明でワードクラウドを作ってみる
ワードクラウドを作る流れを確認したところで、ここからは実際にPythonで実装していきます。
冒頭でも触れました通り、ここでは例として岸田首相の所信表明のテキストデータをワードクラウド化してみます。
国会会議録検索システムからテキストデータを拝借
まずはテキストデータの用意です。
岸田首相の所信表明については、国会会議録検索システムというサイトから入手できます。
ここには国会の議事録が全てまとめられているので、いつどの会議で誰がどんな発言をしたのかが一発でわかります。
データを検索すると、2021年10月8日に衆議院と参議院で所信表明をおこなっていることがわかりました。
今回は衆議院においての所信表明を拝借します。
こちらのリンクからご確認いただけます。
リンク先から一番下までスクロールすると所信表明を見ることができます。
今回はこれをガバッとコピペしちゃいます。
一部のみですが、こんな感じです。
マジで貼り付けただけですw
ちなみに今回かコピペで済ませましたが、過去記事では国会会議録検索システムをSeleniumでスクレイピングしてデータを収集する方法についても解説しています。
もしご興味あればご覧ください。
【Pythonコード解説】Seleniumで国会会議録検索システムをスクレイピングしてみる
続きを見る
Mecabで形態素解析を実装する
テキストデータの用意が完了したら次に行うのは、形態素解析によるテキストの分解です。
これには、MeCabというライブラリを使います。
pip install mecab-python3でインストールできます。
MeCabを使うのはとても簡単です。
Classを呼び出して用意したテキストデータを読み込ませてあげれば完成です。
import MeCab m = MeCab.Tagger() node = m.parse(text)
ちょっと簡単すぎて拍子抜けしてしまいそうですが、これでうまくいきます。
nodeを確認してみると、単語レベルに分解されてそれぞれの品詞とかが表示されていることが確認できます。
漢数字が1つずつ分解されていたり、ちょっと変な部分はありますが、まあOKとします。
必要な単語(ここでは名詞だけ)を抽出してリスト化する
形態素解析が完了したら、この結果から必要な単語を抽出していきます。
不要な助詞とかは排除して必要なものだけを抽出していきます。
ここでは名詞だけに絞って抽出していきます。
抽出した単語はリストに追加していきます。
word_list = [] for line in node.splitlines(): word = line.split("\t")[0] criteria =line.split("\t")[-1] if criteria.split(",")[0] in ["名詞"]: word_list.append(word)
シンプルですね。
splitlinesで1行ずつ抽出していきます。
単語と解析情報に分解して、名詞であればリストに追加していきます。
適当に1行取り出して中身を見てみるとこんな感じになっています。
\tで単語と解析情報に区切られていて、解析情報は,で区切られています。
これを利用すれば単語の品詞を抜き出すことができるので、名詞に該当するものだけをリストに追加していけばOKです
名詞以外にも動詞とかも追加したいという場合には、if文のリストに追加すればOKです。
こんな感じで名詞だけをリスト化することができました。
とりあえずワードクラウドにしてみる
単語のリスト化ができたので、とりあえずワードクラウドを作ってみます。
これには、前述の通りwordcloudというライブラリを使います。
コードはとてもシンプルで、数行で完了します。
from wordcloud import WordCloud import matplotlib.pyplot as plt %matplotlib inline wc = WordCloud().generate(' '.join(word_list)) plt.imshow(wc)
完成したワードクラウドがこちらです。
残念この上ないですねw
ご覧の通り、修正すべき点がたくさんあります。
ここでは次に対応を行います。
修正ポイント
- 画像のサイズを大きくする
- 軸のラベルを消す
- 日本語を表示する
- 背景色を白にする
上記に対応したコードがこちらになります。
from wordcloud import WordCloud import matplotlib.pyplot as plt %matplotlib inline fpath = "/Library/Fonts/ipaexm.ttf" wc = WordCloud(background_color="white",width=900, height=500, font_path=fpath).generate(' '.join(word_list)) plt.figure(figsize=(18,10)) plt.axis("off") plt.imshow(wc)
表示されるワードクラウドがこちらです。
いい感じになりました。
まず、日本語フォントを使うには、font_pathで使用するフォントを指定してあげる必要があります。
さらにbackground_colorで背景色を指定して、widthとheightで大きさ(解像度)を指定します。
plt.figure(figsize=(18,10))で画像サイズを指定しますが、これはwidthとheightの比と合わせるときれいに表示できます。
最後にplt.axis("off")でラベルを非表示にすればOKです。
不要な単語を排除してワードクラウドを作成する
上記の結果を見ると、いい感じにワードクラウドになっていますが、一部不要な単語が含まれていることがわかります。
「ため」とか「こと」とかいらないですね。
こういった単語を排除してあげると、よりきれいなワードクラウドになります。
そして不要な単語を排除するための機能がwordcloudには備わっています。
いろいろ試しながら、僕の方で不要と判断した単語を消した上でワードクラウドを再度生成しました。
from wordcloud import WordCloud import matplotlib.pyplot as plt %matplotlib inline fpath = "/Library/Fonts/ipaexm.ttf" stop_word_list = ["こと", "ため", "これ", "よう", "皆さん", "我が国"] wc = WordCloud(background_color="white",width=900, height=500, font_path=fpath, stopwords=stop_word_list).generate(' '.join(word_list)) plt.figure(figsize=(18,10)) plt.axis("off") plt.imshow(wc)
完成したワードクラウドがこちらです。
だいぶいい感じになりました。
stopwordsを指定すると、不要な単語を排除することができます。
MeCabを使って品詞を限定しても不要な単語が含まれてしまうことはおおいにあるので、結果を見ながら不要な単語をあぶり出してstopwordsで排除するといい感じのワードクラウドになります。
データの分析・可視化にはPythonが最適!
本記事で紹介したコードは、全てPythonを使って書いています。
Pythonはデータの分析や可視化を得意とするプログラミング言語で、さらにAI関連のライブラリーも豊富で昨今のAIブームで需要が急拡大しています。
→ 【いますぐ始められます】データ分析をするならPythonが最適です。
また、Pythonは比較的学びやすい言語でもあります。
実際、僕は社会人になってからPythonを独学で習得して転職にも成功し、Python独学をきっかけに人生が大きく変わりました。
→ 【実体験】ゼロからのPython独学を決意してから転職を掴み取るまでのお話。
Pythonの学習方法についてはいろいろな方法があります。
僕はUdemyを選びましたが、書籍やプログラミングスクールも選択肢になります。
→ 【決定版】Python独学ロードマップ【完全初心者からでもOKです】
→ 【まとめ】Pythonが学べるおすすめプログラミングスクール
→ プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】
まとめ
いかがでしたでしょうか。
ここでは「【コード解説】Pythonで岸田首相の所信表明をワードクラウド化してみる」というテーマで、Pythonを使ってワードクラウドを作る方法について解説しました。
ワードクラウドを使うと、重要な単語がパッと見ただけでわかるようになるので、テキストを可視化する方法として利用できます。
ワードクラウドを作るには、形態素解析などの処理が必要になったり、必要な単語を抽出してリスト化したり、不要な単語を排除したり、いろいろな作業が必要になってきます。
Pythonであれば、必要なライブラリが揃っているので、こういった複雑な作業でも数行のコードで実装することができます。
ここでは例として岸田首相の所信表明をワードクラウド化してみましたが、テキストデータさえ用意できればどんなものでもワードクラウドにすることが可能です。
本記事でご紹介したコードを参考にして是非とも作ってみてください。
ここまで読んでくださり、ありがとうございました。