丸の内で働く外資コンサルタントのブログ

デジタル/アナリティクスが専門です


Word Cloudでニュースのキーワードを可視化

Word Cloudとは文章中で出現頻度が高い単語を複数選び出し、その頻度に応じた大きさでビジュアライゼーションしたものです、こんな感じで。 f:id:ukichang:20180916120512j:plain

Pythonだとライブラリがあって、こちら使うとさくっと描画できます。pipでインストール可能です。

pip install wordcloud

適当なニュース記事で試してみる

今回は適当にYahooニュースで拾ってきたドワンゴN中等部の記事で試します。
WordCloudを使うには単語ベースのインプットにする必要があるため、MeCabという形態素解析ライブラリをつかってわかち書きします。
と同時に、”です”、”ます”などの不用語(ストップワード)をリストにして渡してあげると、WordCloudからそれらの単語を除外してくれます。
コードは以下。

# coding: utf-8


import pandas as pd

from wordcloud import WordCloud

import MeCab
from sklearn.feature_extraction.text import TfidfVectorizer



text = "角川ドワンゴ学園は9月13日、2019年4月に「N中等部」を開校すると発表した。 N中等部は、新しい教育コンセプト「プログレッシブスクール」を採用したキャンパス通学型のスクール。 週1回、週3回、週5回の3つの通学コースを設定。学校教育法第1条に定められた中学校ではないため、従来の中学校に在籍しながら通学することとなる。 キャンパスは、新宿代々木付近に開設。初年度となる2019年度の定員は、40人を予定する。"



stop_words = [u'する', u'ある',u'なる',u'ながら',u'ない',u'こと',u'ため',u'られ']



# MeCabを使ってわかち書きをする
# Initial settings
vectorizer = TfidfVectorizer(use_idf=True, token_pattern=u'(?u)\\b\\w+\\b')

# Global variables
docs = [] # Vectors for Tfidf scores

def wakati(target_text):
    t = MeCab.Tagger("-Owakati")
    result = t.parse(target_text)
    return result



# WordCloudの描画
wordcloud = WordCloud(background_color="white",
    font_path="dlfont.otf",
    width=800,height=600,stopwords=stop_words).generate(wakati(text))

wordcloud.to_file("./wordcloud_sample.png")

その他気をつけることとして、フォントの問題があるかと思います。フォントをWordCloudで指定していますが、こちらがないと日本語の描画はできないかと思います。.otfか.ttf拡張子で日本語フォントファイルをダウンロード、指定してください。 フリーのフォントを探せばすぐに見つかるかと。

実行結果

pngで保存した結果です。
ニュースを端的にあらわしているかどうかは、形態素解析のデキによりそうですね。

f:id:ukichang:20180916212727p:plain

参考

Word Cloudで文章の単語出現頻度を可視化する。[Python]
Pythonでテキストマイニング ②Word Cloudで可視化
「N高校」に続き「N中等部」が誕生--通信制ではなく通学制(CNET Japan) - Yahoo!ニュース
python-mecab+sklearnを用いて、文章を分かち書きしてTF-IDFでベクトル化する - u++の備忘録