【Pytrends】Google Trendsで6つ以上のワードを比較する方法
Google Trendsは、現状最大5つまでのワードしか比較できません。
例えばですが、プログラミング言語で何の言語が一番人気(検索されている)があるのかを知りたくても、それを叶えることができません。
今回の方法を使えば、その願いを叶えることができます。
基本コピペでOKですので、例えば、「人気のアニメ」だったり「特定の住所」だったり、「PCパーツ」「株」など、沢山のワードを推移として比較し、新たな発見をしよう!
※Python(AnacondaのSpyder)を使用しています。
利用したい方は下記記事を参考にインストールしてください。
Anaconda
「インストールがめんどくさい!」方は、Google Colabでもできます。(グラフ文字化けするので、df = pd.concat ~ plt.show()を消してください)
次にPytrendsをインストールします。
Anaconda Promptでインストールできます。
pip install pytrends
そして、Spyderを開き下記のコードをコピペしてください。
from pytrends.request import TrendReq
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
plt.rc("font", family="BIZ UDGothic")
# API
pytrends = TrendReq(hl='ja-JP', tz=360)
# 比較したいキーワードを入力(最大5つまで)※list1/list2ともに1つ目のワードは合わせる
kw_list1 = ["りんご","みかん","オレンジ","ぶどう","レモン"]
kw_list2 = ["りんご","桃","スイカ","キウイ","バナナ"]
# 比較したい期間を入力 geoで地域の選択→https://self-development.info/wp-content/uploads/2020/05/658284efb8322e99a76c79bb3e2f3b0f.png
pytrends.build_payload(kw_list1, timeframe='2019-04-01 2019-04-30', geo='JP')
df1 = pytrends.interest_over_time()
pytrends.build_payload(kw_list2, timeframe='2019-04-01 2019-04-30', geo='JP')
df2 = pytrends.interest_over_time()
averageList1 = []
averageList2 = []
for item in kw_list1:
averageList1.append(df1[item].mean())
for item in kw_list2:
averageList2.append(df2[item].mean())
normalizationFactor = averageList1[0] / averageList2[0]
for i in range (len(averageList2)):
normalizedVal = normalizationFactor*averageList2[i]
averageList2[i] = normalizedVal
averageList2.pop(0)
kw_list2.pop(0)
fruitlist = kw_list1 + kw_list2
finalaveragelist = averageList1 + averageList2
df = pd.concat([df1,df2], axis=1)
y_pos = np.arange(len(fruitlist))
plt.barh(y_pos,finalaveragelist,align="center",alpha = 1)
plt.yticks(y_pos,fruitlist)
plt.xlim(0, 100)
# ラベル名
plt.xlabel("2019年/4月//検索数指数(人気ワード)")
plt.show()
print(fruitlist,finalaveragelist)
['りんご', 'みかん', 'オレンジ', 'ぶどう', 'レモン', '桃', 'スイカ', 'キウイ', 'バナナ'] [45.5, 22.4, 76.93333333333334, 19.766666666666666, 72.66666666666667, 90.20639534883722, 26.32122093023256, 6.414970930232559, 52.64244186046512]
このような結果が出ました。4月は桃が人気です。
参考記事
10個以上の比較を行うには
下記をコピペでOKです。
from pytrends.request import TrendReq
# API Connection
pytrends = TrendReq(hl='ja-JP', tz=360)
# 比較したいキーワードを入力(最大5つまで)※list1/list2/list3ともに1つ目のワードは合わせる
kw_list1 = ["りんご","みかん","オレンジ","ぶどう","レモン"]
kw_list2 = ["りんご","桃","スイカ","キウイ","バナナ"]
kw_list3 = ["りんご","メロン","柿","梨","パイナップル"]
#比較したい期間を入力
pytrends.build_payload(kw_list1, timeframe='2019-04-01 2019-04-30', geo='JP')
df1 = pytrends.interest_over_time()
pytrends.build_payload(kw_list2, timeframe='2019-04-01 2019-04-30', geo='JP')
df2 = pytrends.interest_over_time()
pytrends.build_payload(kw_list3, timeframe='2019-04-01 2019-04-30', geo='JP')
df3 = pytrends.interest_over_time()
averageList1 = []
averageList2 = []
averageList3 = []
for item in kw_list1:
averageList1.append(df1[item].mean())
for item in kw_list2:
averageList2.append(df2[item].mean())
for item in kw_list3:
averageList3.append(df3[item].mean())
averageList1 = [*map(float, averageList1)]
averageList2 = [*map(float, averageList2)]
averageList3 = [*map(float, averageList3)]
#共通ワードを入力
keyword = "りんご"
base = averageList1[kw_list1.index(keyword)]
ratio = [base/v[l.index(keyword)] for l, v in zip((kw_list1, kw_list2, kw_list3),
(averageList1, averageList2, averageList3))]
averageList1, averageList2, averageList3 = [[str(ratio[i]*v) for v in l] for i,
l in enumerate((averageList1, averageList2, averageList3,))]
averageList2.pop(0)
kw_list2.pop(0)
averageList3.pop(0)
kw_list3.pop(0)
fruitlist = kw_list1 + kw_list2 + kw_list3
finalaveragelist = averageList1 + averageList2 + averageList3
print(fruitlist)
print(finalaveragelist)
['りんご', 'みかん', 'オレンジ', 'ぶどう', 'レモン', '桃', 'スイカ', 'キウイ', 'バナナ', 'メロン', '柿', '梨', 'パイナップル']
['45.53333333333333', '22.5', '77.03333333333333', '19.8', '72.76666666666667', '90.40388161086852', '26.37884522076662', '6.429015041242116', '52.75769044153324', '17.599010041012587', '16.20808937915429', '17.25127987554801', '11.88078065337293']
13個の比較ができました。桃が人気ですね。
これをさらに増やしたいのであれば、kw_list4を追加し、その下のリストも同様に増やしていけばOKです。
数値の出し方として、共通ワードを基準に計算しています。参考記事にも書いていますが、共通ワード/一つのリストを基準として正規化を行います。
推移としてみるには
以上だと単月の比較しか見ることができません。
以下では推移としてみる方法をお伝えします。(コードができていない為エクセルです)
①結果をエクセルに保存→期間を一月づつ変更する→繰り返し
※Spyderでは、検索と置換のショートカットは「Ctrl + F」「Ctrl + R」です。(便利)
②共通ワードを1とし、他ワード/共通ワードで計算する。
③Google Trends(Pytrends)で共通ワードを検索→期間に合った数値を②に掛ける
これを繰り返すことで最大2004年からの推移を作ることができます。
また、Pytrendsは大量のリクエストを行うと制限を食らいます。
その場合、10分~1日は待たないといけません。大量のワードの場合は、1日の制限を食らいます。
これの抜け穴としてプロキシの記事が多々見られますが、私はうまくいきませんでした。
なので、別のPCを使ったり、スマホのデザリングなどを使って延命?していました(いちいちAnacondaをインストールしないといけませんが)
誰かいい方法があれば、教えてください笑
以上です。まだ未完成の部分もあるので、追記するかもしれないです。
ご覧いただきありがとうございました。
Compare more than 5 keywords in Google Trends
これを使ってこんな動画を作ってみました。
この記事が気に入ったらサポートをしてみませんか?