Seyomi commited on
Commit
9c2cf21
Β·
verified Β·
1 Parent(s): 35951ad

Update data/collect_macro_indicators.py

Browse files
Files changed (1) hide show
  1. data/collect_macro_indicators.py +58 -0
data/collect_macro_indicators.py CHANGED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import requests
3
+ import pandas as pd
4
+ from datetime import datetime
5
+ from dateutil.relativedelta import relativedelta
6
+
7
+ FRED_API_KEY = "8d0106ceaf5312fe0743b13b06edfdd7"
8
+ OUTPUT_DIR = "data/raw/macro/"
9
+ os.makedirs(OUTPUT_DIR, exist_ok=True)
10
+
11
+ FRED_SERIES = {
12
+ "CPI": "CPIAUCSL",
13
+ "Unemployment": "UNRATE",
14
+ "InterestRate": "FEDFUNDS",
15
+ }
16
+
17
+ def fetch_fred_series(series_id, label, start_date="2015-01-01"):
18
+ url = f"https://api.stlouisfed.org/fred/series/observations"
19
+ params = {
20
+ "series_id": series_id,
21
+ "api_key": FRED_API_KEY,
22
+ "file_type": "json",
23
+ "observation_start": start_date,
24
+ }
25
+
26
+ print(f"πŸ“Š Fetching {label} data from FRED...")
27
+ r = requests.get(url, params=params)
28
+ data = r.json()
29
+
30
+ if "observations" not in data:
31
+ raise Exception(f"❌ Failed to fetch {label}: {data}")
32
+
33
+ df = pd.DataFrame(data["observations"])
34
+ df = df[["date", "value"]]
35
+ df.columns = ["Date", label]
36
+ df["Date"] = pd.to_datetime(df["Date"])
37
+ df[label] = pd.to_numeric(df[label], errors="coerce")
38
+
39
+ file_path = os.path.join(OUTPUT_DIR, f"{label}.csv")
40
+ df.to_csv(file_path, index=False)
41
+ print(f"βœ… Saved {label} data to {file_path}")
42
+ return df
43
+
44
+
45
+ if __name__ == "__main__":
46
+ all_data = []
47
+ for label, series_id in FRED_SERIES.items():
48
+ df = fetch_fred_series(series_id=series_id, label=label)
49
+ all_data.append(df)
50
+
51
+ print("πŸ”— Merging all indicators...")
52
+ merged = all_data[0]
53
+ for df in all_data[1:]:
54
+ merged = pd.merge(merged, df, on="Date", how="outer")
55
+
56
+ merged.sort_values("Date", inplace=True)
57
+ merged.to_csv(os.path.join(OUTPUT_DIR, "macro_combined.csv"), index=False)
58
+ print("βœ… Combined macro indicators saved.")