summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/app/services/data_service.py17
1 files changed, 12 insertions, 5 deletions
diff --git a/backend/app/services/data_service.py b/backend/app/services/data_service.py
index 31bdb05..95650ad 100644
--- a/backend/app/services/data_service.py
+++ b/backend/app/services/data_service.py
@@ -58,7 +58,10 @@ def _json_value(value: Any) -> Any:
return None
if isinstance(value, pd.Timestamp):
return value.isoformat()
- if pd.isna(value):
+ try:
+ if pd.isna(value):
+ return None
+ except (TypeError, ValueError):
return None
if hasattr(value, "item"):
return _json_value(value.item())
@@ -653,10 +656,14 @@ def compute_beta(symbol: str) -> float | None:
try:
ticker_closes = {row["date"]: row["close"] for row in ticker_history if row.get("close") is not None}
spy_closes = {row["date"]: row["close"] for row in spy_history if row.get("close") is not None}
- ticker_series = pd.Series(ticker_closes).sort_index()
- spy_series = pd.Series(spy_closes).sort_index()
- ticker_weekly = ticker_series.resample("W").last().pct_change().dropna()
- spy_weekly = spy_series.resample("W").last().pct_change().dropna()
+ ticker_series = pd.Series(ticker_closes, dtype=float)
+ ticker_series.index = pd.to_datetime(ticker_series.index)
+ ticker_series = ticker_series.sort_index()
+ spy_series = pd.Series(spy_closes, dtype=float)
+ spy_series.index = pd.to_datetime(spy_series.index)
+ spy_series = spy_series.sort_index()
+ ticker_weekly = ticker_series.resample("W").last().pct_change(fill_method=None).dropna()
+ spy_weekly = spy_series.resample("W").last().pct_change(fill_method=None).dropna()
aligned = pd.concat([ticker_weekly, spy_weekly], axis=1, join="inner").dropna()
aligned.columns = ["ticker", "spy"]
if len(aligned) < 52: