pytrends で Google トレンドのデータを取得する | Monotalk の続きです。
Blogのカテゴリをキーワードとして、Google トレンドで検索し、どのカテゴリが一般的に検索されるのか調べてみました。
結果を以下に記載します。
ブログ記事のカテゴリ一覧
現在、紆余曲折を経て以下のカテゴリを登録しています。
- カテゴリの一覧
Accelerated Mobile Pages Apache HTTP Server Args4j Django Dropwizard EasyBatch EclipseLink Elasticsearch FindBugs Frontend QA(Quality Assurance) Google Analytics Google Apps Script Google Data Studio Google Search Console Google Spread Sheet Google Tag Manager IntelliJ IDEA Java JavaScript Jupyter Notebook Mezzanine Mixpanel MongoDB PWA Page Speed Insights Python React RedPen SEO Sonar SonarQube SonarQube squid Wagtail CMS Web API Web Performance Test & Tips Wicket aXe brew gatsby guice jackson linux maven memcached msites pmd postgresql rundeck security sitespeed.io spring-boot wercker データ分析 書籍 統計検定 資格取得 雑記
Google トレンドの比較は5キーワードまで
Google トレンドの比較は5キーワードまでです。カテゴリを並べて比較することはできません。
ただ、APIは連続実行ができるので、以下のような流れで処理を行うと、カテゴリ全体での検索ヴォリームは把握できそうに思いました。
- 基準キーワードを決める。
- 基準キーワードを含めて、5キーワードのGoogleトレンドの結果を取得する。基準キーワード以外を副キーワードと呼称する。
- 副キーワードを切り替えて、Google トレンドで検索し、結果を保持する。
3.
で保持した結果を基準キーワードの検索ヴォリュームを補正し、補正した結果をマージする。4.
でマージしたデータを可視化する。
前提
以下の環境で動作確認を実施しています。
* OS
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.13.6
BuildVersion: 17G65
- PythonのVersion
% python3 -V Python 3.6.5
インストール方法等は文章冒頭のリンク先の記事に記載していますので、そちらをご確認ください。
検索、検索結果のマージ、可視化
インストール方法、基本的な使い方は前回の記事をご確認ください。
以下、実行したスクリプトの記載をします。
- pytrends を複数回実行して、結果を1つのdataframe にする
# 初期化
from pytrends.request import TrendReq
from itertools import zip_longest
from itertools import filterfalse
import pandas as pd
pytrends = TrendReq(hl='ja-JP', tz=360)
# キーワードリスト
kw_list = ['Accelerated Mobile Pages','Apache HTTP Server','Args4j','Django','Dropwizard','EasyBatch','EclipseLink','Elasticsearch','FindBugs','Frontend QA(Quality Assurance)','Google Analytics','Google Apps Script','Google Data Studio','Google Search Console','Google Spread Sheet','Google Tag Manager','IntelliJ IDEA','Java','Jupyter Notebook','Mezzanine','Mixpanel','MongoDB','PWA','Page Speed Insights','Python','React','RedPen','SEO','Sonar','SonarQube','SonarQube squid','Wagtail CMS','Web API','Web Performance Test & Tips','Wicket','aXe','brew','gatsby','guice','jackson','linux','maven','memcached','msites','pmd','rundeck','security','sitespeed.io','spring-boot','wercker','データ分析','JavaScript','書籍','統計検定','資格取得','雑記']
# 主キーワード
primary_kw = 'postgresql'
group_by = 4
chunks = zip_longest(*[iter(kw_list)]*group_by)
p = lambda x: x is None
merged_df = None
for elems in list(chunks):
elems = list(filterfalse(p, elems))
elems.append(primary_kw)
pytrends.build_payload(elems, cat=0, timeframe='today 5-y', geo='JP', gprop='')
df = pytrends.interest_over_time()
# 取得結果のスコアは String になる。 float 変換したいので、True/False が設定されている `isPartial` を削除して float に変換する。
del df['isPartial']
df = df.astype('float64')
# dataframe を primary_kw で最大値で正規化する
scaled_dataframe = df.div(df[primary_kw].max(), axis=0)
if merged_df is None:
merged_df = scaled_dataframe
else:
# ValueError: columns overlap but no suffix specified が発生するので、やむなく、'postgresql' を削除
del scaled_dataframe[primary_kw]
merged_df = merged_df.join(scaled_dataframe)
# Dataframe を表示
merged_df
Accelerated Mobile Pages | Apache HTTP Server | Args4j | Django | postgresql | Dropwizard | EasyBatch | EclipseLink | Elasticsearch | FindBugs | ... | security | sitespeed.io | spring-boot | wercker | データ分析 | JavaScript | 書籍 | 統計検定 | 資格取得 | 雑記 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
date | |||||||||||||||||||||
2013-10-20 | 0.00 | 0.02 | 0.0 | 0.13 | 0.58 | 0.00 | 0.0 | 0.01 | 0.02 | 0.03 | ... | 1.208333 | 0.0 | 0.0 | 0.0 | 0.173913 | 3.826087 | 3.608696 | 0.130435 | 0.478261 | 0.130435 |
260 rows × 57 columns
実行時に気にするポイント
基準にするキーワードですが、だいたい指定しているカテゴリの中で、中央値、平均値をとるようなキーワードを指定したほうがいい感じになります。
これは、Google トレンドのスコアが整数値をとるため、あまりに大きすぎるキーワードや、小さすぎるキーワードの場合に四捨五入されてスコアがなかったことになるためです。
グラフに描画する
取得結果をdf.plot()
でグラフ出力します。
検索スコアの大きさに幅があるので、対数グラフでの出力をします。
%matplotlib inline
import matplotlib as mpl
mpl.rcParams['font.family'] = 'IPAPGothic'
# 数が多すぎるので出力対象を絞りこむ
keyword_list = ['Java','Apache HTTP Server','Dropwizard','Google Analytics','Mezzanine','postgresql','React','JavaScript','Python']
#keyword_list = ['Mezzanine','postgresql','React','JavaScript','Python']
merged_df[keyword_list].plot(logy=True, figsize=(15, 6))
<matplotlib.axes._subplots.AxesSubplot at 0x112642898>
グラフから言えること
- Java はよく検索されている。
- Python が Java に追いついた。
- Mezzanine はほぼ0。。。
- Dropwizard よりも、Apache HTTP Server のほうがわずかに検索ヴォリームが大きい。Apache は
Apache
と呼ばれることが多いと思うのでほとんどそっちで検索されているように思う。 - React の伸びが凄まじいが、postgresql のほうが React よりもまだ検索ヴォリュームが大きい。
結果のcsv出力
to_csv
で結果をcsv出力することができます。
この他、df2gspread
で Google スプレッドシートへ書き出したり、to_sql
で SQLite 、to_gbq
で BigQuery へデータを登録できます。
merged_df.to_csv("google_trend.csv")
その他考えられるpytrends の使用用途
-
トピックを1つに絞り、急上昇ワードを深く取得する。
キーワードに対する、急上昇ワードが取得できます。この関連語で再度検索を行えば、再帰的にワードが拾えます。
直近でのコンテンツの方向性決めに使えたりするのかと思います。 -
キーワードボリュームの実測値を知る。
掲載順位が1位になる Google Search Console の検索クエリを比較ワードとして、その他のキーワードとの比較を繰り返します。
この比較結果から、その他のキーワードの表示回数、クリック数の推測ができるかと思います。 -
同義語 の調整
同義語の比較を繰り返して、どちらの検索ヴォリームが多いか(一般的な言葉)がわかります。
文章の揺れや望ましい表現 を選択する際の、1つのポイントになるかと思います。
参考
記事作成中に以下を参考にしました。
-
python - Pandas join issue: columns overlap but no suffix specified - Stack Overflow
ValueError: columns overlap but no suffix specified
で検索するとヒットする。 -
Pandasのplotの全引数を解説 | 自調自考の旅
対数グラフを出力する。 -
pandas-APIマラソン-41(pandas.DataFrame.div())
Pandas の割り算。
以上です。
コメント