Pytrendsで Google Trends データを収集する
目次
Google Trends のWebサイトで毎回手動でデータを確認するのは非効率的です。コードを通じて自動化された方式でトレンドデータを収集する方がはるかに効率的ですね。今日はPytrendsライブラリを使用してGoogle Trends APIを活用する方法をまとめてみます。
Pytrendsとは?
Googleが公式のトレンドAPIを提供していないため作られた非公式ライブラリです。しかし安定的で使いやすいため、多くの開発者が活用しています。Webクローリングよりもはるかに簡便で信頼性が高いです。
環境設定
インストール
pip install pytrends
Python 3.3以上で動作し、requests、lxml、pandasが依存関係として一緒にインストールされます。
基本設定
from pytrends.request import TrendReq
# 日本語、日本時間帯で設定
pytrends = TrendReq(hl='ja', tz=540)
Payload構成
# 分析するキーワードリスト
kw_list = ["Python", "JavaScript", "React", "Vue", "Angular"]
# リクエストオブジェクト構築
pytrends.build_payload(
kw_list,
cat=0, # カテゴリ (0: 全カテゴリ)
timeframe='2023-01-01 2023-12-31', # 検索期間
geo='JP', # 地域コード
gprop='' # 検索属性 (デフォルト: Web検索)
)
主要機能
1. 時系列トレンドデータ
# 期間別トレンド変化データ
df = pytrends.interest_over_time()
print(df.head())
# isPartial列を削除 (データ完成度フラグ)
df = df.drop('isPartial', axis=1)
2. 時間別詳細データ
# 時間単位での詳細分析
historical = pytrends.get_historical_interest(
kw_list,
year_start=2023, month_start=12, day_start=1, hour_start=0,
year_end=2023, month_end=12, day_end=31, hour_end=23,
cat=0, geo='JP', gprop='', sleep=1 # リクエスト間隔調整
)
3. 地域別関心度分析
# 地域別検索関心度
region_df = pytrends.interest_by_region(
resolution='COUNTRY', # 国別分析
inc_low_vol=True, # 検索量が少ない地域も含む
inc_geo_code=True # 地域コード表示
)
print(region_df.sort_values('Python', ascending=False).head())
4. 関連検索語分析
# 関連キーワード辞書
related = pytrends.related_queries()
# 特定キーワードの関連検索語
print("Python関連人気検索語:")
print(related['Python']['top'])
print("
Python関連急上昇検索語:")
print(related['Python']['rising'])
5. リアルタイムトレンド
# 日本の急上昇検索語上位20個
trending = pytrends.trending_searches(pn='japan')
print("現在の急上昇検索語:")
print(trending.head(10))
# リアルタイムトレンド (アメリカのみ対応)
# realtime = pytrends.realtime_trending_searches(pn='US')
6. 年間人気キーワード
# 特定年度の人気キーワード
yearly_trends = pytrends.top_charts(2023, hl='ja', tz=540, geo='JP')
print(yearly_trends.head())
実戦活用例:フロントエンドフレームワークトレンド分析
import matplotlib.pyplot as plt
import seaborn as sns
from pytrends.request import TrendReq
# 初期設定
pytrends = TrendReq(hl='ja', tz=540)
# フロントエンドフレームワーク比較
frameworks = ["React", "Vue.js", "Angular", "Svelte"]
pytrends.build_payload(frameworks, timeframe='2020-01-01 2024-01-01', geo='')
# トレンドデータ収集
trend_data = pytrends.interest_over_time().drop('isPartial', axis=1)
# データ可視化
plt.figure(figsize=(15, 8))
sns.lineplot(data=trend_data, linewidth=2.5)
plt.title('Frontend Framework Trends (2020-2024)', fontsize=16, fontweight='bold')
plt.xlabel('Date')
plt.ylabel('Search Interest')
plt.legend(title='Framework')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# 最近6ヶ月平均関心度分析
recent_avg = trend_data.tail(180).mean().sort_values(ascending=False)
print("最近6ヶ月平均検索関心度:")
print(recent_avg)
高級活用方法
1. バッチ処理による複数キーワード分析
import time
def analyze_keyword_groups(keyword_groups, timeframe='today 12-m'):
"""複数キーワードグループをバッチで処理する関数"""
results = {}
for group_name, keywords in keyword_groups.items():
try:
pytrends.build_payload(keywords, timeframe=timeframe, geo='JP')
data = pytrends.interest_over_time()
if not data.empty:
results[group_name] = data.drop('isPartial', axis=1)
except Exception as e:
print(f"Error processing {group_name}: {e}")
time.sleep(1) # Rate limit防止
return results
# 使用例
keyword_groups = {
'programming_languages': ['Python', 'JavaScript', 'Java', 'C++'],
'web_frameworks': ['React', 'Vue', 'Angular', 'Svelte'],
'databases': ['MySQL', 'PostgreSQL', 'MongoDB', 'Redis']
}
results = analyze_keyword_groups(keyword_groups)
2. キーワード提案機能
# キーワード推薦を受ける
suggestions = pytrends.suggestions('machine learning')
print("推薦キーワード:")
for i, suggestion in enumerate(suggestions[:5]):
print(f"{i+1}. {suggestion['title']} (type: {suggestion['type']})")
3. 安全なリクエスト処理
import time
from requests.exceptions import RequestException
def safe_trend_request(keywords, max_retries=3):
"""再試行ロジックが含まれた安全なトレンドリクエスト"""
for attempt in range(max_retries):
try:
pytrends.build_payload(keywords, timeframe='today 12-m', geo='JP')
return pytrends.interest_over_time()
except RequestException as e:
print(f"リクエスト失敗 (試行 {attempt + 1}/{max_retries}): {e}")
if attempt < max_retries - 1:
time.sleep(2 ** attempt) # 指数バックオフ
else:
raise
except Exception as e:
print(f"予想外のエラー: {e}")
return None
4. 自動化されたトレンド監視
from datetime import datetime
import pandas as pd
def create_trend_report(keywords, output_file=None):
"""トレンドレポート自動生成"""
pytrends.build_payload(keywords, timeframe='today 12-m', geo='JP')
# 基本トレンドデータ
trend_data = pytrends.interest_over_time()
# 地域別データ
region_data = pytrends.interest_by_region()
# 関連検索語
related_queries = pytrends.related_queries()
# レポート生成
report = {
'generated_at': datetime.now(),
'keywords': keywords,
'trend_data': trend_data,
'top_regions': region_data.head(10),
'related_queries': related_queries
}
if output_file:
pd.to_pickle(report, output_file)
return report
実務活用のコツ
Rate Limiting管理: Googleはリクエスト頻度を制限するため、time.sleep()
を活用して適切な間隔を置くことが重要です。
キーワード最適化: 曖昧なキーワードよりも具体的なキーワードを使用する方がより正確な結果を得ることができます。get_suggestions()
メソッドを活用してみてください。
データ解釈: トレンドスコアは0-100範囲の相対的な値です。絶対的な検索量ではないことに注意する必要があります。
地域コード: ISO国コード('JP', 'US', 'KR'など)を正確に使用する必要があります。正しいデータを得るためには必須です。
エラーハンドリング: ネットワーク問題やAPI制限によるエラーに備えて適切な例外処理を実装することが良いでしょう。
まとめ
Pytrendsは Google Trends データをプログラミング方式で収集できるようにしてくれる実用的なツールです。手動作業を自動化し、定期的なトレンド監視システムを構築するのに非常に有用です。
SEO分析、マーケティングリサーチ、またはデータ基盤の意思決定が必要なプロジェクトでこのライブラリを活用すれば効率性を大幅に向上させることができるでしょう。
# トレンド分析自動化の始まり
print("Pytrendsでデータ基盤インサイトを発見しよう")