今回はPythonのWordCloudライブラリに関するテーマでお届けします。仕事がそれほど忙しくない時に、思いつきで「トレンドビューアー」というプロトタイプツールを作成してみました。これは、Google Trendsから特定キーワードの関連キーワードを取得して、WordCloud画像を生成して表示するという簡易ツールです。
機能はそれだけといえばそれだけなのですが、Googleで検索されているキーワードは、世相や人々の関心を如実に反映しており、色々なキーワードでWordCloud画像を作成するシンプルな行為が思いのほか面白かったので、当ブログでも紹介しようと思い立ちました。もしよかったら試してみてください。
制作のきっかけは、WordCloud画像を出力する方法を仕事の案件の事前調査として学習したかっただけなのですが、WordCloud画像を出力するための何か面白いデータが転がってないかなと探したところ、TrendReqライブラリでGoogle Trendsのデータを手軽に取得できることが分かったので、そのデータを使ったら面白いんじゃないか?と思い立ったのがきっかけです。というわけで、今回はPythonのシンプルなマッシュアップ事例としてサンプルコード付きでお届けします。
目次
- TrendReqライブラリについて
- WordCloudライブラリについて
- まとめ
2.TrendReqライブラリについて
Google Trendsは世界中で検索されている検索キーワードの中から急上昇中のトレンドを確認できるツールです。SEOとかマーケティングにも役立てている人も少なくないと思うのですが、残念なことに公式のAPIが存在しません。
ところがPythonの「pytrends」というライブラリを利用するだけで、簡単にその情報がリストとして取得できてしまうのです。世の中には便利なものを作ってくれる人が沢山いるのですね!
導入はpipを使えば簡単です。
※この記事を書いた時点のPythonのバージョンは3.7.4です。
$ pip3 install pytrends
導入が完了したら、早速コードを書いてみましょう。
# -*- coding: utf-8 -*-
from pytrends.request import TrendReq
# ---------- 設定 ----------
#抽出キーワード
KEYWORD = 'プログラミング'
# ---------- 処理開始 ----------
# キーワードリスト
kw_list = [KEYWORD]
# GoogleTrandsのリスト
google_trend_list = []
"""
期間の指定例:
timeframe='now 1-d' -> 過去1日間(あるいは7-dで指定)
timeframe='today 1-m' -> 過去1ヶ月間(あるいは3-mで指定)
timeframe='today 5-y' -> 過去5年間(5-yしか指定できない)
"""
pytrends = TrendReq(hl='ja-JP', tz=360)
pytrends.build_payload(kw_list, cat=0, timeframe='today 5-y', geo='JP', gprop='')
trends = pytrends.related_queries()
trends_values = trends[KEYWORD]['top'].values.tolist()
for value in trends_values:
item = str(value[0]).strip(KEYWORD)
item = item.replace(' ', '')
item = item.replace(' ', '')
google_trend_list.append(item)
print('google_trend_list = ' + str(google_trend_list))
たったこれだけの記述で、検索トレンドのリストを取得できます。ただ、取得したリストには、今回やろうとしていることには不要なデータも含まれていますので、多少加工する必要があります。
今回は特定キーワードの関連キーワードを取得したいので、特定キーワード自体を取得したデータから消す必要があります。それを28行目のforループ内で行なっています。また関連キーワードはスペースで区切って検索されるものなので、スペースも取り除く必要がありますが、それを30、31行目で行なっているわけです。32行目で不要なデータを除いたテキストから新たなリストに追加しています。
対象期間についてですが、予め決められた期間しか取得できないようなので注意が必要です。
コードを書き終わったら実行してみましょう。
$ python3 pytrends.py
google_trend_list = [‘言語’, ‘教室’, ‘スクラッチ’, ‘スクラッチ’, ‘ゲーム’, ‘ム’, ‘入門’, ‘java’, ‘java’, ‘python’, ‘教育’, ‘python’, ‘スクール’, ‘アプリ’, ‘c言語’, ‘c言語’, ‘学習’, ‘大学’, ‘パソコン’, ‘子供’, ‘小学生’, ‘英語’, ‘初心者’, ‘ボット’, ‘ボット’]
2.WordCloudライブラリについて
WordCloudといえば、言わずと知れたPythonで有名なライブラリです。この記事のアイキャッチでも使っているようなクラウド画像が簡単に生成できます。
では、こちらもpipで導入してみましょう。
$ pip3 install wordcloud
導入が完了したら、コードを書いてみましょう。
# -*- coding: utf-8 -*-
from collections import Counter
from wordcloud import WordCloud
# ---------- 設定 ----------
# wordcloud用のフォントパス
WORDCLOUD_FONT_PATH = '_____お好みのTTFフォントをフルパスで指定_____'
# wordcloud用の幅
WORDCLOUD_WIDTH = 600
# wordcloud用の高さ
WORDCLOUD_HEIGHT = 600
# wordcloud用の背景色
WORDCLOUD_BG_COLOR = 'white'
# wordcloud出力先
WORDCLOUD_OUTPUT_FILE = './wordcloud.png'
# ---------- 処理開始 ----------
# GoogleTrandsのリスト
google_trend_list = ['言語', '教室', 'スクラッチ', 'スクラッチ', 'ゲーム', 'ム', '入門', 'java', 'java', 'python', '教育', 'python', 'スクール', 'アプリ', 'c言語', 'c言語', '学習', '大学', 'パソコン', '子供', '小学生', '英語', '初心者', 'ボット', 'ボット']
word_counter = Counter(google_trend_list)
wordcloud = WordCloud(
font_path = WORDCLOUD_FONT_PATH,
width = WORDCLOUD_WIDTH,
height = WORDCLOUD_HEIGHT,
background_color = WORDCLOUD_BG_COLOR).generate_from_frequencies(word_counter)
wordcloud.to_file(WORDCLOUD_OUTPUT_FILE)
$ python3 _wordcloud.py
下記のようなpng画像が出力されたでしょうか?

サンプルコード内27行目の「Counter()」ですが、これはPython標準ライブラリcollectionsのCounterクラスのメソッドで、出現回数が多い順に要素を取得するためのものです。このようにリストを整形してから28行目の「WordCloud()」に渡しています。
4.まとめ
上記の2つのコードを一つのコードにまとめれば、キーワードを変更するだけで、Google Trendsから取得したキーワードのWordCloud画像を生成できるはずです。pytrendsで必要な対象期間を変えるだけで結果が異なってくるため、色々試してみれば、興味深い結果が得られるはずです。
是非、いろいろと試してみてください!