LoginSignup
1
3

More than 3 years have passed since last update.

Python2.7 の Word Cloud で AWS Summit 2018 のトレンド分析(風なこと)してみた

Last updated at Posted at 2018-06-02

python2.7でwordcloudを作成する方法のメモ

AWS Summit 2018 の講演タイトルの頻出単語から、トレンド分析(風)なことをやってみた。

結果はこちら

wordcloud_sample2_title.png

キーワード的には
・セキュリティ
・機械学習
・IoT
・データ
あたりが上位。

金融やエッジというキーワードも気になるところ。

※結果はややチューニング次第なので、あくまで今回の試行結果です。

Word Cloudの作り方

参考)
https://qiita.com/kenmatsu4/items/9b6ac74f831443d29074
https://qiita.com/nekoumei/items/b1afca7cfb9e54303ab4

試した環境

・OS:Windows 10
・anaconda
・jupyter notebook
・python 2.7

全体の流れ

flow.png

AWSのWEBサイトからセッション情報をGETして、タイトル文のみパースする。
その後日本語文を形態素解析して単語で分離し、それを入力値としてWordCloudを作成する。
最後はその結果を出力する流れ。

使うツール/ライブラリ

・WordCloud(Python用WordCloud作成ライブラリ)
https://amueller.github.io/word_cloud/generated/wordcloud.WordCloud.html

・BeautifulSoup(Python用HTML/XMLパースライブラリ)
https://www.crummy.com/software/BeautifulSoup/bs4/doc/

・MeCab(オープンソース形態素解析エンジン)
http://taku910.github.io/mecab/

・Matplotlib(可視化ライブラリ)
https://matplotlib.org/

ソース


#coding: utf-8

import urllib2
from bs4 import BeautifulSoup
from wordcloud import WordCloud
import MeCab as mc
import matplotlib.pyplot as plt
%matplotlib inline

## WEBスクレイピング + Parse ############
# アクセスURL(AWSのセッションサイト)
url = "https://www.awssummit.tokyo/tokyo_session/session/"

# html取得
html = urllib2.urlopen(url)

# BeautifulSoupで扱う
soup = BeautifulSoup(html, "html.parser")

# タイトルを取得
text = ','.join([e.string for e in soup.find_all("h3")
                  if e.string!=None and e.name not in ('script','style')])

## 形態素解析 ###########################
# 形態素解析 実行関数
def mecab_analysis(text):
    t = mc.Tagger()
    enc_text = text.encode('utf-8') 
    node = t.parseToNode(enc_text) 
    output = []
    while(node):
            word_type = node.feature.split(",")[0]
            if word_type in ["名詞"]:
                output.append(node.surface)
            node = node.next
    return output


## Word Cloud作成 #######################
# 除外キーワード規定(トレンドと関係なさげな単語を指定。適宜チューニング)
stop_words = [ u'登壇', u'再演', u'同時', u'通訳', u'AWS', u'実現', u'クラウド', \
               u'ため', u'Amazon', u'on', u'事例', u'活用',  \
               u'Tech', u'入門', u'最新', u'利用', u'サービス', u'ベストプラクティス', \
               u'パネルディスカッション', u'管理', u'紹介', u'化', u'こと', u'技術', u'株式会社']

# Word Cloud生成
wordcloud = WordCloud(background_color="white",
    font_path="msgothic.ttc",
    width=1000,height=1000, 
    max_words=200,
    min_font_size=15,
    relative_scaling=0.9,
    stopwords=set(stop_words)).generate(",".join(mecab_analysis(text)).decode('utf-8'))

# 結果出力1(Matplotlib)
plt.figure(figsize=[20,20])
plt.imshow(wordcloud,interpolation='bilinear')
plt.axis("off")

# 結果出力2(ファイル)
wordcloud.to_file("./wordcloud_sample2_title.png")

Word Cloudに入力する単語の件数を見たい場合は

from collections import Counter

list = mecab_analysis(text)
ctlist = Counter(list).most_common()

for word in ctlist:
    print str(word).decode("string-escape")

を加えると、以下のように確認できる。


('事例', 68)
('登壇', 44)
('様', 44)
('活用', 36)
('クラウド', 30)
('入門', 28)

はまりどころ

主に、形態素解析(MeCab)で色々はまったメモ

[1] MeCabのインストール/環境設定

anaconda navigatorからターミナルを起動してpipで入れようとしても下記のエラーに。

>pip install mecab
Collecting mecab
  Could not find a version that satisfies the requirement mecab (from versions: )
No matching distribution found for mecab

>pip install mecab-python
Collecting mecab-python
  Using cached https://files.pythonhosted.org/packages/86/e7/bfeba61fb1c5d1ddcd92bc9b9502f99f80bf71a03429a2b31218fc2d4da2/mecab-python-0.996.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "c:\users\optim\appdata\local\temp\pip-install-hmqt9j\mecab-python\setup.py", line 13, in <module>
        version = cmd1("mecab-config --version"),
      File "c:\users\optim\appdata\local\temp\pip-install-hmqt9j\mecab-python\setup.py", line 7, in cmd1
        return os.popen(str).readlines()[0][:-1]
    IndexError: list index out of range

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in c:\users\optim\appdata\local\temp\pip-install-hmqt9j\mecab-python\

色々試行錯誤し、以下の辞書データを含むインストーラ実行で成功した(気がする)
https://github.com/ikegami-yukino/mecab/releases/tag/v0.996

また、Windows側の環境変数でPathの設定も必要

例)
C:\Program Files\MeCab\bin

[2] ユーザ辞書の追加

「EC2」が ECと2で別れたり、IoTを名詞として含めなかったりしたので、ユーザ辞書を追加して補完。

参考)
http://fqz7c3.hatenablog.jp/entry/2013/07/27/193232

手順)

①C:\Program Files\MeCab\dic\ipadic\user.csv を作成

例えばこんな感じ

データサイエンティスト,-1,-1,1000,名詞,一般,*,*,*,*,データサイエンティスト,データサイエンティスト,データサイエンティスト
機械学習,-1,-1,1000,名詞,一般,*,*,*,*,機械学習,キカイガクシュウ,キカイガクシュウ
EC2,-1,-1,1000,名詞,一般,*,*,*,*,EC2,イーシーツー,イーシーツー
可視化,-1,-1,1000,名詞,一般,*,*,*,*,可視化,カシカ,カシカ
クラウド,-1,-1,1000,名詞,一般,*,*,*,*,クラウド,クラウド,クラウド
ベストプラクティス,-1,-1,1000,名詞,一般,*,*,*,*,ベストプラクティス,ベストプラクティス,ベストプラクティス
パネルディスカッション,-1,-1,1000,名詞,一般,*,*,*,*,パネルディスカッション,パネルディスカッション,パネルディスカッション
Deep Dive,-1,-1,1000,名詞,一般,*,*,*,*,Deep Dive,ディープダイブ,ディープダイブ
生産性,-1,-1,1000,名詞,一般,*,*,*,*,生産性,クラウド,クラウド
バックエンド,-1,-1,1000,名詞,一般,*,*,*,*,バックエンド,バックエンド,バックエンド
コンタクトセンター,-1,-1,1000,名詞,一般,*,*,*,*,コンタクトセンター,コンタクトセンター,コンタクトセンター
コンサル,-1,-1,1000,名詞,一般,*,*,*,*,コンサル,コンサル,コンサル
IoT,-1,-1,1000,名詞,一般,*,*,*,*,IoT,アイオーティー,アイオーティー
Alexa,-1,-1,1000,名詞,一般,*,*,*,*,Alexa,アレクサ,アレクサ
Serverless,-1,-1,1000,名詞,一般,*,*,*,*,Serverless,サーバーレス,サーバーレス
DevOps,-1,-1,1000,名詞,一般,*,*,*,*,DevOps,デブオプス,デブオプス
ワークロード,-1,-1,1000,名詞,一般,*,*,*,*,ワークロード,ワークロード,ワークロード

②コマンドプロンプトで以下実行


>cd C:\Program Files\MeCab\dic\ipadic
>mecab-dict-index -f utf-8 -t utf-8  -u user.dic user.csv

以下となればOK

reading user.csv ... 17
emitting double-array: 100% |###########################################|

done!

[3] 記号が名詞扱いに(ゴミを除去)

「【 」とか記号が名詞としてカウントされてしまう問題対策

参考)
http://nymemo.com/mecab/564/

C:\Program Files\MeCab\dic\ipadic\unk.def

を以下の通り編集する。

before)

SYMBOL,1283,1283,17585,名詞,サ変接続,*,*,*,*,*

after)

SYMBOL,1283,1283,17585,記号,一般,*,*,*,*,*

最後に辞書を再読み込み

>cd C:\Program Files\MeCab\dic\ipadic
>mecab-dict-index

[4] python文字エンコード

utf-8 と string などのエンコードで出力が文字化けするケースが多い。

標準出力する際は、ケースバイケースだが以下対処で解消。

str(word).decode("string-escape")
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3