File size: 1,496 Bytes
51dde21
 
 
5fcca14
51dde21
 
 
 
 
 
 
 
 
 
 
213c9db
 
 
 
 
51dde21
 
213c9db
 
 
 
 
51dde21
213c9db
51dde21
213c9db
 
 
 
51dde21
213c9db
51dde21
 
 
213c9db
 
 
5fcca14
51dde21
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
"""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,
)