WordCloudやってみた
  • 2021/09/27
  • テスト投稿 | moment

    WordCloudが簡単にできるらしい

    WordCloudがPythonで簡単にできるらしいのでやってみました.

    WordCloudとは最近流行り?の可視化方法で,単語の頻度の高いものが大きく表示される例のやつです.

    今回は日本語でwordcloudしてみましょう.

    早速,使ってみます.

    モジュールのインスコ方法は簡単.pipでインスコできます.

    pip install wordcloud

    ついでにMeCab(形態素解析器)操作モジュールもインスコ.同じくpipでインスコできます.(MeCab本体をインスコしていない人は使えないので,本体をインスコしましょう.)

    pip install mecab

    まずは,MeCabで分かち書き(単語のスペース区切り)をしてみましょう.

    import MeCab
    
    TEXT = "すもももももももものうち"
    tagger = MeCab.Tagger("-Owakati")  # MeCab
    wakati = tagger.parse(TEXT)  # 分かち書き
    print(wakati)

    次に,wordcloudインスタンスの設定をします.

    wc = wordcloud.WordCloud(font_path=FONT_FILE, 
                        background_color="white", 
                        width=WIDTH, 
                        height=HEIGHT, 
                        collocations=False, 
                        stopwords=STOP_WORDS,
                        max_words=MAX_WORDS,
                        regexp=r"[\w']+")  # WordCloud初期化
    wc.generate(parse)  # WordCloud作成
    wc.to_file("output.png")  # 画像ファイル出力

    パラメータは色々設定できます.

    widthやheightは出力画像のサイズ(px),stopwordsをlist型やset型で指定できます.詳細はリファレンスを参照してください.

    こんな感じで日本語のフォントを設定する必要があります.

    FONT_FILE = "C:\Windows\Fonts\MSGOTHIC.TTC"  # フォントファイル指定

    特にフォントのパスを弄ってなかったら,これでMSゴシック体になるはずです.

    wordcloudを実行して,画像を出力してみましょう.

    wc.generate(wakati)  # WordCloud作成
    wc.to_file("output.png")  # 画像ファイル出力

    generateメソッドに分かち書きした文章を入れる.to_fileメソッドに出力画像のファイルパスを入れるとOKです.

    実行例

    夏目漱石の『吾輩は猫である』の冒頭部分をwordcloudで可視化してみましょう.(サンプルプログラムではneko.txtから読み込むようにしています)

    Python
    import wordcloud
    import MeCab
    
    
    with open("neko.txt", "r", encoding="utf-8") as f:
        CONTENTS = f.read().splitlines()
        TEXT = "".join([content for content in CONTENTS if not content == ""])
    STOP_WORDS = []  # ストップワードを設定(今回は設定しない)
    
    MAX_WORDS = 2000  # 出力個数の上限
    WIDTH = 1000  # 出力画像の幅
    HEIGHT = 1000  # 出力画像の高さ
    FONT_FILE = "C:\Windows\Fonts\MSGOTHIC.TTC"  # フォントファイル指定
    
    tagger = MeCab.Tagger("-Owakati")  # MeCab
    wakati = tagger.parse(TEXT)  # 分かち書き
    
    wc = wordcloud.WordCloud(font_path=FONT_FILE,
                background_color="white",
                width=WIDTH,
                height=HEIGHT,
                collocations=False,
                stopwords=STOP_WORDS,
                max_words=MAX_WORDS,
                regexp=r"[\w']+")  # WordCloud初期化
    wc.generate(wakati)  # WordCloud作成
    wc.to_file("output.png")  # 画像ファイル出力

    出力結果はこんな感じです.

    wordcloud出力結果

    『て』や『が』等の助詞が多く出力されてしまっていることがわかります.

    いちいちストップワードに指定するのは面倒なので,形態素解析時点で不要な品詞を外す必要があります.まだまだ改良の余地がありますね.

    気が向いたら,改良するかも!

    参考

    めちゃくちゃ参考にさせていただきました!!

  • wordcloudモジュールのリファレンス, https://amueller.github.io/word_cloud/generated/wordcloud.WordCloud.html
  • PythonでWordCloudを作成してみました, https://mmtomitomimm.blogspot.com/2018/12/word-cloud.html
  • プロフィール

    新着記事

  • おすすめ記事