AnacondaとWordCloudを用いたテキストマイニング

Anacondaを用いて簡単に読み込んだ日本語のテキストを構文解析して、
単語の出現頻度を、グラフィカルに表示する方法を試してみましたので書きます。

PythonとPythonのライブラリで用意するもの。

  • Anaconda (https://www.anaconda.com/)
  • WordCloud (https://github.com/amueller/word_cloud)
  • Janome (形態素解析エンジン)

使用したプラットフォーム

  • GoogleCloudPlatform
  • Ubuntu
  • Dockerコンテナ

では手順を簡単にご紹介します。
1.GooglePlatForm上にUbuntuのVMを作成する。
下記からアカウントを取得する。

https://cloud.google.com/?hl=ja

コンソール画面の下記の画像の場所へ遷移する。インスタンスの作成をクリックしてUbuntuのインスタンスを作成する。

インスタンスの作成時に、コンテナ、ブートディスクの選択、ファイアウォールの設定に注意します。

「このVMインスタンスにコンテナをデプロイします」にチェックを入れると、DockerコンテナがVM作成時にインストールされた状態になります。
ブートディスクの選択では、デフォルトではDebianになっていますので変更をクリックして、自分の好きなディスクイメージ(今回はUbuntu)を選択し直してください。

 
2.Anacondaの設定

https://hub.docker.com/r/continuumio/anaconda3/
のコンテナイメージを用いて、AnacondaのコンテナをVM上に作成します。

上記のリンク先にも記載がありますが、以下のコマンドにてコンテナの作成を行います。

docker pull continuumio/anaconda3

Jupiter Notebook Serverとしてこのanacondaコンテナの内部にサーバーを起動しますので下記のコマンドを実行します。

docker run -i -t -p 8888:8888 continuumio/anaconda3 /bin/bash -c "/opt/conda/bin/conda install jupyter -y --quiet && mkdir /opt/notebooks && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser --allow-root"

推奨ではないのですが、–allow-rootをつけてJupiter Notebook Serverを起動しています。セキュリティ上推奨ではないですが初めて作業をおこなう際には簡単に起動できます。Jupiter Notebook ServerにアクセスするTCP/IPのポートとして、8888番をつかいます、Google Cloud Platformのファイアーウォールの設定で8888を許可するようにしてください。

手元のブラウザから下記のURLを入力すると
http://xxx.xxx.xxx.xx:8888

Jupiter Notebook Serverにアクセスできるようになります。
–allow-rootにて起動すると初めてブラウザからアクセスする際にはサーバ側で発行したキーをURLの後ろに付加してアクセスし認証を突破します。下記のような画面をが表示されたら期待値通りです。


3.AnacondaへのWordCloudとJanomeのインストール
Ubuntuのコンソールから下記のコマンドを実行して、
作成したコンテナの内部へ入ります。

docker exec -it コンテナID /bin/bash その後、コンテナ内部で下記のコマンドを実行してJanomeをインストールします。 pip install Janome

さらに、続けます。下記のコマンドを実行してWordCloudをインストールします。
pipコマンドでは上手くインストールできなかったためcondaコマンドを使ってインストールします。

conda install -c https://conda.anaconda.org/amueller wordcloud

4.Jupiterをもちいた解析部分のコーディング

JupiterのWeb画面から下記の場所を選択してPython3を選択します。

これでPythonのコードを入力し実行できる状態になります。
さあ、下記のようなコードを入力して実行してみましょう。


text_file = open("ファイルを置いた場所\\Yahooニュース.txt")
bindata = text_file.read()
lines = bindata.split("\r\n")

from janome.tokenizer import Tokenizer
t = Tokenizer()

from wordcloud import WordCloud
import matplotlib.pyplot as plt 

morphs = "" #結果を格納する変数を定義

for line in lines:
    text_c = t.tokenize(line) #形態素解析を実行
    #形態素解析の実行結果(単語数)分ループ
    for w in text_c:
        word = w.surface #形態素解析結果から元の単語を取得
        ps = w.part_of_speech #品詞、品詞細分類1、2、3を取得
        #名詞または動詞を持つか調査(もし持たなければ次の行に進む)
        if ps.find("名詞") < 0 and ps.find("動詞") < 0: continue        
        #出現した単語(名詞または動詞)を結果変数に追加する
        morphs += ' ' + word

stop_words = ['ため','ほか','こと','おり','する','いる','すみ','たい','たち']
fpath = "/Library/Fonts/ヒラギノ角ゴ Pro W3.otf"

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

#グラフ表示する処理
plt.figure(figsize=(15,12))
plt.imshow(wordcloud)
plt.axis("off")
plt.show()

fpathの部分は各自のインストールしているfontのパスを入力します。

5.完成
これで完成です。色々なテキストファイルを入力して分析を楽しみましょう。

Related posts