months / src /data.py
Malode's picture
Sync from GitHub via hub-sync
5fcca14 verified
Raw
History Blame Contribute Delete
1.5 kB
"""Data loading, lazy frame, and data-derived input constants."""
from pathlib import Path
from string import Template
import polars as pl
BASE_DIR = Path(__file__).resolve().parent.parent
INTRO_MD: str = (BASE_DIR / "md_files" / "intro.md").read_text(encoding="utf-8")
_ABOUT_TEMPLATE: str = (BASE_DIR / "md_files" / "about.md").read_text(encoding="utf-8")
DATA_PATH = BASE_DIR / "data" / "scb_months_lvl1.parquet"
lf = (
pl.read_parquet(DATA_PATH)
.rename({"sex": "gender"})
.with_columns(pl.col("month").str.strptime(pl.Date, "%Y-%b").alias("month_date"))
.lazy()
)
# Query metadata in parallel using collect_all
lf_occs = lf.select(pl.col("occupation").unique().sort())
lf_genders = lf.select(pl.col("gender").unique().sort())
lf_years = lf.select(pl.col("year").unique().sort())
lf_months = lf.select(["month", "month_date"]).unique().sort("month_date")
_meta_dfs = pl.collect_all([lf_occs, lf_genders, lf_years, lf_months])
OCCS: list[str] = _meta_dfs[0].to_series().to_list()
OCC_CHOICES: dict[str, str] = {o: o for o in OCCS}
GENDERS: list[str] = _meta_dfs[1].to_series().to_list()
YEARS: list[int] = _meta_dfs[2].to_series().to_list()
_months_sorted = _meta_dfs[3]
MONTH_EARLIEST: str = _months_sorted.head(1)["month"][0]
MONTH_LATEST: str = _months_sorted.tail(1)["month"][0]
YEAR_MIN: int = min(YEARS)
YEAR_MAX: int = max(YEARS)
ABOUT_MD: str = Template(_ABOUT_TEMPLATE).safe_substitute(
MONTH_EARLIEST=MONTH_EARLIEST,
MONTH_LATEST=MONTH_LATEST,
)