Pythonを使ったワードクラウド作成!完全ガイド10ステップ

Pythonを使ったワードクラウド作成の完全ガイドPython
この記事は約13分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

皆さんは、テキストデータを可視化するための強力な手段として、「ワードクラウド」をご存知でしょうか?

ワードクラウドは、テキスト中の単語の出現頻度に応じて、それぞれの単語を大きさや色で表現するビジュアル表現の一つです。

これにより、一目でテキストのキーワードや傾向を把握することが可能となります。

そしてそのワードクラウドを作成するために最適な言語がPythonです。

今回は、Pythonを使ったワードクラウドの作成方法を10のステップに分けて、初心者目線で解説します。

●Pythonとは

Pythonは、簡潔で読みやすいコードを書くことができるプログラミング言語です。

そのため、初心者にも扱いやすく、世界中で非常に人気があります。

○Pythonの特徴

Pythonの最大の特徴は、そのコードの可読性と簡潔さです。

また、多くの強力なライブラリとフレームワークが用意されており、データ分析、ウェブ開発、機械学習など、多岐にわたる開発を手助けします。

●ワードクラウドとは

ワードクラウドは、テキスト内の単語の出現頻度に基づいて単語を視覚的に表現するもので、頻繁に出現する単語ほど大きく表示されます。

○ワードクラウドの利用例

ワードクラウドは、ブログの記事分析やソーシャルメディアの投稿分析、アンケート結果の分析など、テキストデータから傾向を見つけ出すために広く利用されています。

●Pythonでワードクラウドを作るための準備

Pythonを使ったワードクラウドの作成には、まずPythonのインストールと必要なライブラリのインストールが必要です。

○Pythonのインストール

Pythonの公式ウェブサイトからダウンロードし、インストーラーの指示に従ってインストールします。

○ライブラリのインストール

Pythonでワードクラウドを作成するためには、’wordcloud’というライブラリをインストールする必要があります。

ここでは、コマンドプロンプトまたはターミナルを開き、次のコマンドを実行します。

これにより、wordcloudライブラリがインストールされます。

pip install wordcloud

●Pythonでワードクラウドを作るステップ

では、Pythonを使ってワードクラウドを作成する手順を見ていきましょう。

○サンプルコード1:テキストデータの読み込み

まずは、ワードクラウドを作成するためのテキストデータを読み込みます。

ここではテキストファイルを読み込む例を紹介します。

この例では、’open’関数を使ってテキストファイルを開き、’read’メソッドでファイルの内容を読み込んでいます。

with open('sample.txt', 'r', encoding='utf-8') as f:
    text = f.read()

このコードを実行すると、テキストファイル’sample.txt’の内容が変数’text’に格納されます。

○サンプルコード2:テキストデータの前処理

ワードクラウドを作成するためには、まずテキストデータの前処理が必要です。

これには主に単語の分割、不要な文字の削除、単語の基本形への変換などが含まれます。

このプロセスは自然言語処理(NLP)の一部で、PythonではnltkやMeCabなどのライブラリがよく使われます。

下記のサンプルコードでは、テキストデータの前処理を行う関数を定義しています。

具体的には、テキストから不要な記号を削除し、全ての文字を小文字に変換した後、単語に分割しています。

また、スキップワード(出現頻度が高すぎるために特徴を捉えられない単語、例えば「の」「が」「は」など)も除去しています。

import re
from nltk.corpus import stopwords

def preprocess_text(text):
    text = re.sub(r'\W+', ' ', text.lower())
    words = text.split()
    words = [word for word in words if word not in stopwords.words('japanese')]
    return ' '.join(words)

このコードは、まずreモジュールを使って不要な記号を削除し、全ての文字を小文字に変換します。

その後、split関数で単語に分割し、リスト内包表記とstopwords.words('japanese')を使ってスキップワードを除去しています。

最後に、単語リストを空白でつなげて再びテキストデータに変換しています。

○サンプルコード3:ワードクラウドの作成

テキストデータの前処理が完了したら、次にワードクラウドを作成します。

Pythonではwordcloudライブラリを使って、手軽にワードクラウドを作成することができます。

下記のサンプルコードでは、前処理したテキストデータからワードクラウドを作成し、それをwordcloud変数に保存しています。

具体的には、WordCloudクラスのインスタンスを作成し、generateメソッドを使ってワードクラウドを生成しています。

from wordcloud import WordCloud

def create_wordcloud(text):
    wordcloud = WordCloud(background_color='white', max_words=200).generate(text)
    return wordcloud

このコードでは、まずWordCloudクラスのインスタンスを作成しています。

その際に、background_color='white'という引数を指定して背景色を白にし、max_words=200という引数を指定して最大単語数を200に制限しています。

その後、generateメソッドを使ってワードクラウドを生成し、これをwordcloud変数に保存しています。

○サンプルコード4:ワードクラウドの表示と保存

ワードクラウドが作成できたら、これを表示し、必要に応じて画像ファイルとして保存します。

下記のサンプルコードでは、ワードクラウドを表示するための関数と、ワードクラウドを画像ファイルとして保存するための関数をそれぞれ定義しています。

import matplotlib.pyplot as plt

def display_wordcloud(wordcloud):
    plt.figure(figsize=(10, 8))
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis('off')
    plt.show()

def save_wordcloud(wordcloud, filename):
    wordcloud.to_file(filename)

display_wordcloud関数では、matplotlibのimshow関数を使ってワードクラウドを表示しています。

その際に、interpolation='bilinear'という引数を指定して画像の補間方法を設定し、axis('off')で軸を非表示にしています。

save_wordcloud関数では、WordCloudクラスのto_fileメソッドを使ってワードクラウドを画像ファイルとして保存しています。

このとき、保存先のファイル名は関数の引数から指定します。

●ワードクラウドのカスタマイズ方法

ワードクラウド作成の楽しさの一つは、カラーパレットの変更や特定の形(マスク)を利用するなど、自由にビジュアルをカスタマイズできる点です。

これからはそのカスタマイズ方法を具体的なコードとともに見ていきましょう。

○サンプルコード5:カラーパレットの変更

ワードクラウドのカラーパレットを変更するには、”color_func”引数を使用します。

ここではmatplotlibのcolormapを使用し、色調をカスタマイズします。

import matplotlib.pyplot as plt
from wordcloud import WordCloud
import matplotlib.colors as mcolors

# 文字列データの準備
text = "ここに分析したいテキストデータを入力します"

# カラーマップの設定
cmap = mcolors.LinearSegmentedColormap.from_list("n",["red", "white", "blue"])

# ワードクラウドの作成
wc = WordCloud(background_color="white", colormap=cmap, max_words=100, contour_color='black')
wc.generate(text)

# ワードクラウドの表示
plt.figure(figsize=(10,10))
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()

このコードでは、matplotlib.colorsのLinearSegmentedColormap.from_list関数を使用して、色のグラデーションを作成しています。

ここでは赤、白、青の3色を指定していますが、好きな色を指定できます。

このカラーマップをWordCloud関数のcolormap引数に渡すことで、ワードクラウドのカラーパレットを変更できます。

○サンプルコード6:マスクの適用

ワードクラウドは任意の形状にすることも可能です。

そのためにはマスクを使用します。マスクとは、形状を指定するための白黒の画像です。

白い部分に文字が配置され、黒い部分が文字の配置から除外されます。

このマスクを適用するには次のようなコードを記述します。

from PIL import Image
import numpy as np

# マスク画像の読み込み
mask = np.array(Image.open("mask.png"))

# ワードクラウドの作成
wc = WordCloud(background_color="white", mask=mask, contour_color='black')
wc.generate(text)

# ワードクラウドの表示
plt.figure(figsize=(10,10))
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()

このコードでは、PILライブラリのImageモジュールを使ってマスク画像を読み込み、それをnumpyのarrayに変換しています。

そのarrayをWordCloud関数のmask引数に渡すことで、ワードクラウドの形状をマスク画像に基づいて作成します。

●ワードクラウドの応用例

ワードクラウドの基本的な作成方法からカスタマイズ方法までを見てきました。

次に、さらなる応用例をいくつか見ていきましょう。

○サンプルコード7:複数の文書からのワードクラウド作成

単一の文書だけでなく、複数の文書からワードクラウドを作成することも可能です。

その場合、文書ごとにワードクラウドを作成し、その全体像を把握することで文書間の傾向を見ることができます。

# 文書データの準備
docs = ["文書1のテキストデータ", "文書2のテキストデータ", "文書3のテキストデータ"]

# 文書ごとにワードクラウドの作成と表示
for i, doc in enumerate(docs):
    wc = WordCloud(background_color="white").generate(doc)
    plt.figure(figsize=(10,10))
    plt.imshow(wc, interpolation='bilinear')
    plt.axis("off")
    plt.title(f"文書{i+1}のワードクラウド")
    plt.show()

このコードでは、複数の文書データを一つずつ取り出し、それぞれのワードクラウドを作成して表示しています。

これにより、文書間でどの単語が多く出現しているかを視覚的に比較することが可能です。

○サンプルコード8:条件による単語のフィルタリング

ワードクラウドを作成する際に、特定の条件に基づいて単語をフィルタリングすることも可能です。

そのためには、WordCloudの引数に関数を指定します。

# 単語をフィルタリングする関数
def filter_func(word, *args):
    return not word.isdigit()

# フィルタリング関数を指定してワードクラウドの作成
wc = WordCloud(background_color="white", filter_func=filter_func).generate(text)

# ワードクラウドの表示
plt.figure(figsize=(10,10))
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()

このコードでは、フィルタリングする関数filter_funcを定義し、その関数をWordCloudのfilter_func引数に指定しています。

filter_funcは単語が数値(isdigitメソッドで確認)である場合にFalseを返し、その結果、数値を含む単語がワードクラウドから除外されます。

○サンプルコード9:単語の頻度データの利用

ワードクラウドを作成する際に、テキストデータから直接生成する代わりに、単語の頻度データを使用することも可能です。

このような頻度データは、一般に辞書形式で表され、単語をキー、その出現頻度を値とします。

# 頻度データの準備
freqs = {"単語1": 50, "単語2": 30, "単語3": 20, "単語4": 10}

# 頻度データを使ってワードクラウドの作成
wc = WordCloud(background_color="white").generate_from_frequencies(freqs)

# ワードクラウドの表示
plt.figure(figsize=(10,10))
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.show()

このコードでは、頻度データを基にワードクラウドを作成しています。

WordCloudのgenerate_from_frequenciesメソッドを使って、頻度データを元にワードクラウドを生成しています。

○サンプルコード10:複数のワードクラウドの一括表示

複数のワードクラウドを一度に表示することも可能です。

この機能は、比較対象が多い場合や、全体の傾向を把握したい場合に便利です。

# 複数のテキストデータの準備
texts = ["テキスト1", "テキスト2", "テキスト3"]

# 複数のワードクラウドの一括表示
fig

, axs = plt.subplots(1, len(texts), figsize=(10*len(texts),10))
for i, text in enumerate(texts):
    wc = WordCloud(background_color="white").generate(text)
    axs[i].imshow(wc, interpolation='bilinear')
    axs[i].axis("off")
    axs[i].set_title(f"テキスト{i+1}のワードクラウド")
plt.show()

このコードでは、複数のテキストデータを元にワードクラウドを作成し、それぞれを一つの図にまとめて表示しています。

これにより、複数のテキスト間での単語の出現頻度の違いを一覧で比較することができます。

●ワードクラウド作成時の注意点と対処法

ワードクラウドの作成は簡単に行えますが、注意すべき点もあります。

まず、テキストデータの前処理が十分でないと、望ましくない単語が表示されることがあります。

これには、一般的なテキスト解析で用いられる前処理技術、例えばストップワードの除去、ステミング、レンマ化などが有効です。

また、単語の頻度が同じ場合、その表示順序はランダムになります。

これにより、同じデータでも異なる表示が得られることがあります。これは、ワードクラウドの特性として理解しておく必要があります。

さらに、ワードクラウドの見た目は引き立て役ですが、具体的な数値データを提供するものではありません。

そのため、詳細なテキスト解析を行いたい場合には、他の手法と組み合わせることをおすすめします。

まとめ

以上、Pythonを使ったワードクラウド作成の方法を10のステップに分けて詳細に解説しました。

初心者から経験者まで、多くの方にとって有用なガイドになったことを願っています。

これからもPythonの世界でさらなるデータビジュアライゼーションを楽しんでください。