Help us understand the problem. What is going on with this article?

Word Cloudで文章の単語出現頻度を可視化する。[Python]

More than 5 years have passed since last update.

amuellerさんの作成したpythonのWord Cloudライブラリを使って単語の出現頻度を可視化をしてみたいと思います。

こういうやつですね。
constitution-compressor.png

このライブラリの説明はこちらにあります。
http://amueller.github.io/word_cloud/index.html

1.各種ライブラリのインストール

1-1.word_cloudライブラリのインストール

gitからソースコードを入手するだけで簡単に導入できます。

git clone https://github.com/amueller/word_cloud
cd word_cloud
python setup.py install

1-2.各種pythonライブラリのインストール

日本語は英語と違って単語の区切りが明確ではないため、単語をバラすためにMeCabというソフトを使って単語に切り出します。Mecabのインストールについてはこのリンクで説明していましたので、こちらを参考にしてインストールができます。

その他、下記のライブラリも必要となりますので準備します。

pip install beautifulsoup4
pip install requests

2.Word Cloudの作成

準備もできたので、早速コードを書いていきます。
最初は必要ライブラリのインポートです。

# ライブラリのインポート
%matplotlib inline
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from bs4 import BeautifulSoup
import requests
import MeCab as mc

MeCabをつかって単語を切り出してリストに詰める関数です。
可視化して意味がありそうな単語を抽出するために品詞は名詞、動詞、形容詞、副詞に限定しています。

def mecab_analysis(text):
    t = mc.Tagger('-Ochasen -d /usr/local/Cellar/mecab/0.996/lib/mecab/dic/mecab-ipadic-neologd/')
    enc_text = text.encode('utf-8') 
    node = t.parseToNode(enc_text) 
    output = []
    while(node):
        if node.surface != "":  # ヘッダとフッタを除外
            word_type = node.feature.split(",")[0]
            if word_type in ["形容詞", "動詞","名詞", "副詞"]:
                output.append(node.surface)
        node = node.next
        if node is None:
            break
    return output

BeutifulSoupをつかってURLで指定したテキストを取り込みます。QiitaのHTML構造に応じて本文のみ抽出できるようにしています。

def get_wordlist_from_QiitaURL(url):
    res = requests.get(url)
    soup = BeautifulSoup(res.text)
    text = soup.body.section.get_text().replace('\n','').replace('\t','')
    return mecab_analysis(text)

ここからが本番、Word Cloudの生成です。あまり意味のない単語をストップワードとして指定することで除外することができますので、これを使います。
また、Macで実施する場合はフォントの指定が必要なため、font_pathを指定します。

def create_wordcloud(text):

    # 環境に合わせてフォントのパスを指定する。
    #fpath = "/System/Library/Fonts/HelveticaNeue-UltraLight.otf"
    fpath = "/Library/Fonts/ヒラギノ角ゴ Pro W3.otf"

    # ストップワードの設定
    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'']

    wordcloud = WordCloud(background_color="white",font_path=fpath, width=900, height=500, \
                          stopwords=set(stop_words)).generate(text)

    plt.figure(figsize=(15,12))
    plt.imshow(wordcloud)
    plt.axis("off")
    plt.show()

以上が必要な処理の関数定義でしたので、これらを使ってWord Cloudを作成します。
各単語を空白区切りにして1つの文字列にしてWord Cloud作成関数に渡します。

@t_saeko さんの記事「炎上案件に突如ディレクターとして投入されたときにやってみたこと」を題材にさせていただこうと思います。(最近読んで面白かったので)

url = "http://qiita.com/t_saeko/items/2b475b8657c826abc114"
wordlist = get_wordlist_from_QiitaURL(url)
create_wordcloud(" ".join(wordlist).decode('utf-8'))

なかなかいい感じです!
wordcloud-compressor.png

コードの全文はgistにアップしています。

kenmatsu4
会社員です。データ解析的なことや、統計学的なこと、機械学習などについて書いています。 【今まで書いた記事一覧】http://qiita.com/kenmatsu4/items/623514c61166e34283bb 【English Blog】 http://kenmatsu4.tumblr.com
https://www.kaggle.com/kenmatsu4
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした