見出し画像

【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)で共通ワードを検索→期間に合った数値を②に掛ける

Ctrl + H で[ ] 'を削除し、区切り位置でコンマ区切りにする
②共通ワードを1とし、他ワード/共通ワードで計算
Google Trends(Pytrends)で共通ワードを検索 CSV保存
期間に合った数値を掛ける

これを繰り返すことで最大2004年からの推移を作ることができます。

また、Pytrendsは大量のリクエストを行うと制限を食らいます。
その場合、10分~1日は待たないといけません。大量のワードの場合は、1日の制限を食らいます。

これの抜け穴としてプロキシの記事が多々見られますが、私はうまくいきませんでした。

なので、別のPCを使ったり、スマホのデザリングなどを使って延命?していました(いちいちAnacondaをインストールしないといけませんが)
誰かいい方法があれば、教えてください笑

以上です。まだ未完成の部分もあるので、追記するかもしれないです。

ご覧いただきありがとうございました。
Compare more than 5 keywords in Google Trends

これを使ってこんな動画を作ってみました。


この記事が気に入ったらサポートをしてみませんか?