経済指標カレンダーの作成とsqlite へ取り込み
メルマガから
■■■7月21日(月)■■■ ・日本は祝日で休場 ・日本の参議院選挙明け ・週明け ・米国の主要企業の決算発表(本格化) 07:45 NZ)第2四半期消費者物価指数 23:00 ★米)景気先行指数 ■■■7月22日(火)■■■ ・米国の主要企業の決算発表(本格化) 07:45 NZ)貿易収支 10:30 豪)RBA議事録公表(7月8日開催分) 18:15 ★米)ベイリーBOE総裁の発言 21:30 ★米)パウエルFRB議長の発言(ブラックアウト期間中で金融政策に関する発言はない予定) 23:00 ★米)リッチモンド連銀製造業指数 26:00 ★米)ボウマンFRB副議長の発言(ブラックアウト期間中で金融政策に関する発言はない予定) - ★米)注目度の高い経済指標の発表はない ■■■7月23日(水)■■■ ・米国の主要企業の決算発表(本格化)→テスラ、アルファベット、その他 10:30 日)内田日銀副総裁の発言(あいさつ) 未定 日)40年利付国債入札 未定 日)内田日銀副総裁の発言(記者会見) 20:00 ★米)MBA住宅ローン申請指数 23:00 ★米)中古住宅販売件数 23:30 ★米)週間原油在庫 26:00 ★米)20年債入札 米株引後 ★米)テスラ決算 米株引後 ★米)アルファベット決算 ■■■7月24日(木)■■■ ・米国の主要企業の決算発表(本格化) 12:05 豪)ブロックRBA総裁の発言 16:15 仏)製造業PMI【速報値】 16:15 仏)非製造業PMI【速報値】 16:30 独)製造業PMI【速報値】 16:30 独)非製造業PMI【速報値】 17:00 欧)製造業PMI【速報値】 17:00 欧)非製造業PMI【速報値】 17:30 英)製造業PMI【速報値】 17:30 英)非製造業PMI【速報値】 20:00 ト)TCMB政策金利&声明発表 21:15 欧)ECB政策金利&声明発表 21:30 加)小売売上高&【除自動車】 21:45 欧)ラガルドECB総裁の記者会見 21:30 ★米)新規失業保険申請件数 21:30 ★米)シカゴ連銀全米活動指数 22:45 ★米)製造業PMI【速報値】 22:45 ★米)非製造業PMI【速報値】 23:00 ★米)新築住宅販売件数 23:30 ★米)週間天然ガス貯蔵量 24:00 ★米)カンザスシティ連銀製造業活動指数 ■■■7月25日(金)■■■ ・週末 ・五十日(25日) ・米国の主要企業の決算発表(本格化) 08:30 日)東京都区部消費者物価指数&【除生鮮】 15:00 英)小売売上高&【除自動車】 17:00 独)IFO景況指数 21:30 ★米)耐久財受注&【除輸送用機器】
の部分をコピペして
chatGPTで
これらをcsvファイルにして
とするとcsvが作成できる
これを既に作成ずみのDBへ追加する
✅ ポイント
引数 内容
if_exists=’append’ 既存テーブルがあれば追記(削除せず)
index=False DataFrameの行番号をDBに書き込まないようにする
とすればOKらしい
✅ ステップ概要
1. SQLiteテーブルに一意制約(UNIQUE)を追加
2. to_sql() ではなく 手動でUPSERT処理 を行う(INSERT OR IGNORE)
で
SQLiteに CSV を追加する際に重複をチェックし、すでに登録済みのレコードはスキップ(UPSERT) する処理を組み込む
✅ 特徴
処理内容 説明
CREATE TABLE IF NOT EXISTS 初回だけテーブルを作成
UNIQUE(date, time, country, event) 主な識別要素による重複防止
ON CONFLICT IGNORE 重複レコードがある場合は無視してスキップ
INSERT OR IGNORE 既存レコードと重複するものは挿入されない
これらを元に
vim add_calendarDB.py
内容を
import pandas as pd
import sqlite3
# 新しいCSVを読み込み
csv_path = "economic_events_20250721_25.csv"
df_new = pd.read_csv(csv_path)
# SQLiteに接続
conn = sqlite3.connect("economic_events.db")
cursor = conn.cursor()
# ① テーブルがまだ存在しない場合は一意制約付きで作成
cursor.execute("""
CREATE TABLE IF NOT EXISTS events (
date TEXT,
time TEXT,
country TEXT,
event TEXT,
importance TEXT,
type TEXT,
UNIQUE(date, time, country, event) ON CONFLICT IGNORE
)
""")
# ② 各レコードを1件ずつINSERT OR IGNOREで追加
for _, row in df_new.iterrows():
cursor.execute("""
INSERT OR IGNORE INTO events (date, time, country, event, importance, type)
VALUES (?, ?, ?, ?, ?, ?)
""", (
row["date"],
row["time"],
row["country"],
row["event"],
row["importance"],
row["type"]
))
# コミット & 終了
conn.commit()
# レコード数を確認
cursor.execute("SELECT COUNT(*) FROM events")
print(f"現在のeventsテーブルの件数: {cursor.fetchone()[0]}")
conn.close()
として保存
実行すると
python add_calendarDB.py 現在のeventsテーブルの件数: 90
となる
これで再度、今日のイベント情報を取得してみる
python today_events.py
date time country event importance type
0 2025-07-25 08:30 日 東京都区部消費者物価指数&【除生鮮】 None 経済指標
1 2025-07-25 15:00 英 小売売上高&【除自動車】 None 経済指標
2 2025-07-25 17:00 独 IFO景況指数 None 経済指標
3 2025-07-25 21:30 米 耐久財受注&【除輸送用機器】 ★ 経済指標
問題なく実行できた
次に金の価格などの過去データだが
これは investing.com へ無料登録すれば過去データの取得が可能
一気にダウンロードしようとしたけど
20年ぐらいが限界なので分けて取得する