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は連続実行ができるので、以下のような流れで処理を行うと、カテゴリ全体での検索ヴォリームは把握できそうに思いました。

  1. 基準キーワードを決める。
  2. 基準キーワードを含めて、5キーワードのGoogleトレンドの結果を取得する。基準キーワード以外を副キーワードと呼称する。
  3. 副キーワードを切り替えて、Google トレンドで検索し、結果を保持する。
  4. 3.保持した結果を基準キーワードの検索ヴォリュームを補正し、補正した結果をマージする。
  5. 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 PagesApache HTTP ServerArgs4jDjangopostgresqlDropwizardEasyBatchEclipseLinkElasticsearchFindBugs...securitysitespeed.iospring-bootwerckerデータ分析JavaScript書籍統計検定資格取得雑記
date
2013-10-200.000.020.00.130.580.000.00.010.020.03...1.2083330.00.00.00.1739133.8260873.6086960.1304350.4782610.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>

png


グラフから言えること

  • 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つのポイントになるかと思います。


参考

記事作成中に以下を参考にしました。

以上です。

コメント