Pythonを使ってWordCloud(ワードクラウド)を作成する

Pythonを使ってWordCloud(ワードクラウド)を作成する プログラミング

PythonでWord Cloud(ワードクラウド)を作成できます。
それも次のような特徴あるWord Cloudが作成できるのです。

しかし、これを自力でやろうとすると大変です。
そこで、ライブラリの出番となります。

Pythonには、便利なライブラリがすでに用意されています。
それは、word_cloudライブラリです。

  • word_cloudとは?
  • word_cloudのシステム要件
  • word_cloudのインストール
  • word_cloudの動作確認
  • word_cloudの課題

それでは、上記に沿って解説していきます。

word_cloudとは?

Word Cloud(ワードクラウド)は、もう一般的な用語になっていますよね。
それだけで伝わる人には伝わります。
用語は知らなくても、見たらわかるぐらいに普及しているレベルです。

そのワードクラウドをPythonで作るためのライブラリが、存在しています。
それが、word_cloudとなります。

word_cloudの公式ページ
http://amueller.github.io/word_cloud/

word_cloudとは、PythonでWordCloud(ワードクラウド)を作成するためのライブラリです。

特徴としては、以下の4つが公式に記載されています。

  • 利用可能なスペースをすべて埋める
  • 任意のマスクを利用できる
  • 容易に変更可能な単純なアルゴリズムである
  • Pythonである

任意のマスクだけ説明が、必要かもしれません。
以下を見れば、その意味がわかるでしょう。

上記のようなマスク用の画像を用意するのです。
そうすれば、冒頭に載せたWord Cloudが出来上がります。
※マスクは、画像である必要はありません。

確かに、これは特筆すべきポイントでしょう。
では、こんな特徴のあるword_cloudはどのような環境で動くのでしょうか?
word_cloudのシステム要件を確認しましょう。

word_cloudのシステム要件

word_cloudのGitHubページ
https://github.com/amueller/word_cloud

word_cloudの最新バージョンは、1.8.1となります。
この最新バージョンは、2020年11月12日にリリースされています。

対応OSでは、注意が必要です。
word_cloudが対応しているOSは、以下。

  • Windows
  • Linux

macOSが対応していません。
もしかしたら、依存ライブラリの数が多いことが影響しているのかもしれません。
依存ライブラリに関しては、word_cloudのインストールのところで確認しましょう。

あと、Pythonのバージョンは以下がテスト済みとのこと。

  • Python 2.7
  • Python 3.4
  • Python 3.5
  • Python 3.6
  • Python 3.7

上記の実績があるなら、最新版でも問題ないでしょう。
ちなみに、私の環境は以下。

以上、word_cloudのシステム要件です。
次では、word_cloudをWindows環境でインストールしていきます。

>python -V
Python 3.9.1

word_cloudのインストール

最初に、現状のインストール済みパッケージを確認しておきます。

>pip list
Package    Version
---------- -------
pip        21.0
setuptools 52.0.0

次にするべきことは、pip自体の更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

pip install wordcloud

インストールは、そこそこ時間がかかります。
では、どんなパッケージがインストールされたのかを確認しましょう。

>pip list
Package         Version
--------------- -------
cycler          0.10.0
kiwisolver      1.3.1
matplotlib      3.3.3
numpy           1.19.5
Pillow          8.1.0
pip             21.0
pyparsing       2.4.7
python-dateutil 2.8.1
setuptools      52.0.0
six             1.15.0
wordcloud       1.8.1

これだけ依存するライブラリが多いのは、なかなか珍しいです。
word_cloudがmacOSをサポートできていない原因かもしれません。
あくまで、個人的な推測です。

以上、word_cloudのインストールでした。
最後に、word_cloudの動作確認を行います。

word_cloudの動作確認

word_cloudの動作確認用プログラムは、以下。

from wordcloud import WordCloud

# テキストファイル読み込み
text = open("constitution.txt", encoding="utf8").read()

# 画像作成
wordcloud = WordCloud(max_font_size=40).generate(text)

# 画像保存
wordcloud.to_file("result.png")

上記プログラムのスクリプトと同じ場所に「constitution.txt」を用意します。
このファイルは、以下のURLからダウンロードできます。

https://github.com/amueller/word_cloud/blob/master/examples/constitution.txt

「constitution.txt」を設置したら、プログラムを実行します。
実行した結果、同じ場所に「my.png」が作成されます。

簡単にワードクラウドが作成できました。
以上、word_cloudの動作確認は完了です。

確かに、動作はこれでOK。
しかし、このままでは肝心の日本語で使い物になりません。

そのことは、日本人の我々からしたら非常に大きな課題です。
この課題について、最後に説明しておきます。

word_cloudの課題

上記の動作確認用プログラムでは、ファイルを便宜上ファイルを読み込んでいます。

しかし、別にファイルを読み込む必要はありません。
変数「text」に文字列が入れば、それでOKです。

その文字列から単語を取得して、 word_cloudは頻出率を計算しています。
そして、その頻出率に応じて、 word_cloudはフォントの大きさを決定しているのでしょう。

「文字列から単語を取得」
このことは、英語なら何も問題はありません。

なぜなら、英語では文字列から単語を抽出できるからです。
「constitution.txt」より、一部を表示しています。

We the People of the United States

「We」と「People」の間には、スペースが区切りとなって存在しています。
だから、文字列から単語を抜き出すことができます。

しかし、日本語ではそれができません。
先ほどの例文を日本語に訳すと以下となります。

私たちはアメリカ人です

区切りとなるスペースが存在しません。
さて、困りました。

これが、word_cloudの課題となります。
この課題の解決方法は、別の記事で解説します。

追記 2021年1月29日
課題を解決する方法を次の記事でまとめています。

タイトルとURLをコピーしました