Contents
GDELT Project(Global Database of Events, Language, and Tone)は、世界中のメディアをリアルタイムで分析し、そのデータを大規模なデータベースに集約するプロジェクトです。
このプロジェクトは、政治学者カレブ・エルフェルト(Kalev H. Leetaru)によって2011年に立ち上げられました。
彼については最後で経歴などを紹介しています!
GDELTの主な目的は、世界中のニュース記事やブログ投稿、放送メディアなどから得られる情報を利用して、地政学的な出来事、社会的・文化的動向、感情的なトーンなどを分析し、グローバルな視野での理解を深めることです。
このプロジェクトは、ジャーナリズム、学術研究、政策立案など、さまざまな分野での分析や意思決定に役立てられています。
GDELT Projectの基本的な使い方
GDELT Projectは、Pythonなどのプログラミング言語を通じてアクセス可能です。
Pythonを使用してGDELT Projectからデータを取得する基本的な手順を理解しておきましょう。
必要なライブラリのインポート
PythonでGDELTデータにアクセスするには、requests
ライブラリが必要です。
このライブラリはHTTPリクエストを簡単に行うことができます。
import requests
import json
GDELT APIエンドポイントの設定
GDELT ProjectのAPIエンドポイントを設定します。
例えば、GDELT 2.0 APIを使用する場合のエンドポイントは以下の通りです。
gdelt_api_endpoint = 'http://api.gdeltproject.org/api/v2/doc/doc'
クエリパラメータの設定
取得したいデータに応じてクエリパラメータを設定します。
例えば、特定のキーワードや期間、言語などを指定できます。
parameters = {
'query': 'example keyword',
'mode': 'ArtList',
'format': 'json',
'maxrecords': 10,
'sort': 'date'
}
APIリクエストの実行とレスポンスの取得
設定したパラメータを用いてGDELT APIにリクエストを送信し、レスポンスを取得します。
response = requests.get(gdelt_api_endpoint, params=parameters)
data = response.json()
データの処理
取得したデータを必要に応じて処理します。例えば、ニュース記事のタイトルやURL、発行日などを抽出することができます。
for article in data.get('articles', []):
title = article.get('title')
url = article.get('url')
# ここでデータを処理
このようにして、GDELT Projectの豊富なデータを活用して、世界中の出来事やトレンドを解析することができます。
実行アイディア
以前プロデュースなどで関わっていたアルゼンチンタンゴの旅行情報サイトがあります。
これは現在は運営が少し鈍っており、コタツ記事状態になっていました。
アクセス自体は増えていっているのもあり読者に申し訳ない気持ちがあったのでアルゼンチンに関するニュースを毎日投稿しようと思った次第です。
構成と投稿自体はWordPress REST APIを使います。
例によって、複数のPythonコードを都度HTML出力して、変数として格納し、各セクションに変数を渡す方法です。
見出し1:世界中からタンゴに関係するニュースを日本語訳と原題(元ニュースのリンク付き)で10個出力したもの。
見出し2:世界中からブエノスアイレスに関するニュースを日本語訳と原題(元ニュースのリンク付き)で10個出力したもの。
見出し3:ブエノスアイレスの記事投稿時時点での天気を表したもの。
これで、プログラムをherokuなどにデプロイすれば、毎日の米国マーケット情報とタンゴに関する情報のサイト二つは一切タッチすることなく全自動で毎日投稿されていくことになります。
【保存版】PYTHONプロジェクトをデプロイするための環境10選
気になっていたサイト運営を自動化することができて、他のことに時間を使うことができました。
今回ニュースを取得するのに使ったのがNews APIじゃなくて、GDELT Projectだったのが、アルゼンチンという特殊地域性でした。
News APIはUSAなどの情報には強いけど、南米などのエリアになるとGoogleの記事をとってくるだけでいまいちインパクトが足りませんでした。
BeautifulSoupを使ったスクレイピングも可能でしたが、ソース元のサイトデザインなどが変更になると、要素も変更になりエラーになります。
そのため、メンテナンスコストがかかってくるところが、BeautifulSoupのデメリットであると言えます。
一応BeautifulSoupを使った取得方法もシェアしています。
BEAUTIFULSOUPでスクレイピング〜ニュースサイトから最新10件のタイトルを取得
GDELT Projectはその点APIでの利用ですので安定しています。
GDELT Projectは応用すればセンチメント分析にも使えそうなので、マーケットの感情を指数にして、株価がどう動くかの機械学習にも使えそう。
可能性は無限大であると言えます。
過去7日間の話題
サンプルコードとして過去7日間の「Argentina」に関連するニュースイベントの数を日付ごとに集計し、時系列グラフとしてプロットしています。
import requests import json import pandas as pd import matplotlib.pyplot as plt from datetime import datetime, timedelta # GDELT APIエンドポイント gdelt_api_endpoint = 'http://api.gdeltproject.org/api/v2/doc/doc' # 過去7日間のデータを取得する end_date = datetime.today() start_date = end_date - timedelta(days=7) date_range = pd.date_range(start=start_date, end=end_date) # データフレームの初期化 df = pd.DataFrame(0, index=date_range, columns=['Event Count']) # 日付ごとにデータを取得 for date in date_range: # 日付フォーマットを修正 (YYYYMMDDHHMMSS形式) start_datetime = date.strftime('%Y%m%d') + '000000' end_datetime = (date + timedelta(days=1)).strftime('%Y%m%d') + '000000' parameters = { 'query': 'Argentina AND Tango', 'mode': 'ArtList', 'format': 'json', 'maxrecords': 200, 'startdatetime': start_datetime, 'enddatetime': end_datetime } response = requests.get(gdelt_api_endpoint, params=parameters) # レスポンスのJSON解析 if response.status_code == 200: data = response.json() df.at[date, 'Event Count'] = len(data.get('articles', [])) else: print(f"Error fetching data for date {date}: {response.status_code}") # プロットの作成 plt.figure(figsize=(10, 6)) plt.plot(df.index, df['Event Count'], marker='o') plt.title('Daily News Event Count Related to Argentina (Past 7 Days)') plt.xlabel('Date') plt.ylabel('Number of Events') plt.grid(True) plt.show()
アイディア次第ですね。
カレブ・エルフェルト(Kalev H. Leetaru)
![](https://kotaroasahina.com/wp-content/uploads/2023/12/Kalev_H._Leetaru_in_TEDxTallinn-1024x683.jpg)
画像引用:Wikipedia
政治学、コンピュータサイエンス、データサイエンスの分野で活動するアメリカの学者です。
彼は特にビッグデータの分析や、メディアと政治に関する大規模なデータベースの開発において顕著な業績を持っています。
主な業績と貢献
- GDELT Projectの創設者: エルフェルトは、GDELT Project(Global Database of Events, Language, and Tone)の創設者です。このプロジェクトは、世界中のニュース報道を収集し、イベント、感情、人物、場所などに関するデータを分析しています。GDELTは、ジャーナリズム、社会科学、データ分析の分野で広く使用されています。
- データサイエンスとビッグデータの専門家: エルフェルトは、ビッグデータとデータサイエンスの分野における専門家として知られており、特にメディアコンテンツの大規模分析において顕著な貢献をしています。
- 著作と講演活動: 彼はデータサイエンスとその応用に関する多くの著作を持ち、国際的な会議やイベントでの講演者としても活躍しています。