diff --git a/docs/source/workbook/track_d_lab_ta_notes.rst b/docs/source/workbook/track_d_lab_ta_notes.rst index da5bfbb..ebe9e3a 100644 --- a/docs/source/workbook/track_d_lab_ta_notes.rst +++ b/docs/source/workbook/track_d_lab_ta_notes.rst @@ -132,7 +132,7 @@ location. You now have a ready-to-run lab workspace.” Students should see a message like: -- “✅ Track D workbook starter created at …” +- “[OK] Track D workbook starter created at …” - “Datasets are pre-installed under ``data/synthetic/``, seed=123.” 4.2 Why seed=123 matters diff --git a/docs/source/workbook/windows11_setup.rst b/docs/source/workbook/windows11_setup.rst index b2e5815..fceb7b8 100644 --- a/docs/source/workbook/windows11_setup.rst +++ b/docs/source/workbook/windows11_setup.rst @@ -209,7 +209,7 @@ The ``[workbook]`` part is important: it means "include the workbook extras". ``pystatsv1 doctor`` runs a quick health check. If you see:: - ✅ Environment looks good. + [OK] Environment looks good. then your install is working. diff --git a/scripts/business_ch13_correlation_causation_controlled_comparisons.py b/scripts/business_ch13_correlation_causation_controlled_comparisons.py index 471d1fc..f452b51 100644 --- a/scripts/business_ch13_correlation_causation_controlled_comparisons.py +++ b/scripts/business_ch13_correlation_causation_controlled_comparisons.py @@ -185,8 +185,8 @@ def analyze_ch13(*, datadir: Path, outdir: Path, seed: int) -> Outputs: The controlled comparison (partial correlation) helps avoid a misleading story: “Revenue causes payroll taxes.” ## What we can and cannot claim -✅ We can say: Revenue and payroll taxes move together in this dataset, and payroll explains much of that relationship. -❌ We cannot say: Increasing revenue causes payroll taxes to rise (causal claim). +- OK: Revenue and payroll taxes move together in this dataset, and payroll explains much of that relationship. +- NOT OK: Increasing revenue causes payroll taxes to rise (a causal claim). ## Sensitivity check Leave-one-out naive correlation range: {loo_min:.3f} to {loo_max:.3f} diff --git a/scripts/d00_peek_data.py b/scripts/d00_peek_data.py index aca760a..9a360ef 100644 --- a/scripts/d00_peek_data.py +++ b/scripts/d00_peek_data.py @@ -40,7 +40,7 @@ def _preview_csv(path: Path, n: int = 5) -> str: def _peek_dataset(name: str, folder: Path, preview_rows: int) -> tuple[str, list[str]]: if not folder.exists(): msg = ( - f"⚠️ Missing dataset folder: {folder}\n" + f"[WARN] Missing dataset folder: {folder}\n" "If you just created this workbook, you may be on an older PyStatsV1 version.\n" "Update, then re-run workbook init:\n\n" " python -m pip install -U pystatsv1\n" @@ -51,7 +51,7 @@ def _peek_dataset(name: str, folder: Path, preview_rows: int) -> tuple[str, list csvs = sorted(folder.glob("*.csv")) if not csvs: msg = ( - f"⚠️ No CSV files found in: {folder}\n" + f"[WARN] No CSV files found in: {folder}\n" "This workbook expects canonical datasets to exist under data/synthetic/.\n" ) return msg, [msg] @@ -113,7 +113,7 @@ def main(argv: list[str] | None = None) -> int: report = outdir / "d00_peek_data_summary.md" report.write_text("\n".join(sections).rstrip() + "\n", encoding="utf-8") - print(f"\n✅ Wrote summary: {report}") + print(f"\n[OK] Wrote summary: {report}") print("Tip: If you edited data/synthetic, run: pystatsv1 workbook run d00_setup_data --force") return 0 diff --git a/scripts/d00_setup_data.py b/scripts/d00_setup_data.py index c7a9c25..2a805cd 100644 --- a/scripts/d00_setup_data.py +++ b/scripts/d00_setup_data.py @@ -92,7 +92,8 @@ def main(argv: list[str] | None = None) -> int: ], ) - print("\n✅ Datasets ready under:", root) + # ASCII-only status marker for Windows consoles that default to cp1252. + print("\n[OK] Datasets ready under:", root) print(" -", ledger_dir) print(" -", nso_dir) return 0 diff --git a/scripts/my_data_01_explore.py b/scripts/my_data_01_explore.py index 6ca3eae..2d016e9 100644 --- a/scripts/my_data_01_explore.py +++ b/scripts/my_data_01_explore.py @@ -171,7 +171,7 @@ def print_quick_report(df: pd.DataFrame) -> None: if ID_COL in df.columns: dup = df[ID_COL].duplicated().sum() if dup: - print(f"\n⚠️ Duplicate {ID_COL} values: {dup}") + print(f"\n[WARN] Duplicate {ID_COL} values: {dup}") if GROUP_COL in df.columns: k = df[GROUP_COL].nunique(dropna=False) @@ -182,7 +182,9 @@ def print_quick_report(df: pd.DataFrame) -> None: numeric = df.select_dtypes(include=["number"]).columns if len(numeric) == 0: - print("\n⚠️ No numeric columns detected. If numbers are stored as text, fix your CSV or edit the script.") + print( + "\n[WARN] No numeric columns detected. If numbers are stored as text, fix your CSV or edit the script." + ) else: print("\nnumeric columns:") for c in numeric: diff --git a/src/pystatsv1/assets/workbook_track_d.zip b/src/pystatsv1/assets/workbook_track_d.zip index 9c72423..560a866 100644 Binary files a/src/pystatsv1/assets/workbook_track_d.zip and b/src/pystatsv1/assets/workbook_track_d.zip differ diff --git a/workbooks/track_d_template/scripts/business_ch13_correlation_causation_controlled_comparisons.py b/workbooks/track_d_template/scripts/business_ch13_correlation_causation_controlled_comparisons.py index e0eecd8..f762ec7 100644 --- a/workbooks/track_d_template/scripts/business_ch13_correlation_causation_controlled_comparisons.py +++ b/workbooks/track_d_template/scripts/business_ch13_correlation_causation_controlled_comparisons.py @@ -187,8 +187,8 @@ def analyze_ch13(*, datadir: Path, outdir: Path, seed: int) -> Outputs: The controlled comparison (partial correlation) helps avoid a misleading story: “Revenue causes payroll taxes.” ## What we can and cannot claim -✅ We can say: Revenue and payroll taxes move together in this dataset, and payroll explains much of that relationship. -❌ We cannot say: Increasing revenue causes payroll taxes to rise (causal claim). +- OK: Revenue and payroll taxes move together in this dataset, and payroll explains much of that relationship. +- NOT OK: Increasing revenue causes payroll taxes to rise (a causal claim). ## Sensitivity check Leave-one-out naive correlation range: {loo_min:.3f} to {loo_max:.3f} diff --git a/workbooks/track_d_template/scripts/d00_peek_data.py b/workbooks/track_d_template/scripts/d00_peek_data.py index 2d442d8..3502e0f 100644 --- a/workbooks/track_d_template/scripts/d00_peek_data.py +++ b/workbooks/track_d_template/scripts/d00_peek_data.py @@ -43,7 +43,7 @@ def _preview_csv(path: Path, n: int = 5) -> str: def _peek_dataset(name: str, folder: Path, preview_rows: int) -> tuple[str, list[str]]: if not folder.exists(): msg = ( - f"⚠️ Missing dataset folder: {folder}\n" + f"[WARN] Missing dataset folder: {folder}\n" "If you just created this workbook, you may be on an older PyStatsV1 version.\n" "Update, then re-run workbook init:\n\n" " python -m pip install -U pystatsv1\n" @@ -54,7 +54,7 @@ def _peek_dataset(name: str, folder: Path, preview_rows: int) -> tuple[str, list csvs = sorted(folder.glob("*.csv")) if not csvs: msg = ( - f"⚠️ No CSV files found in: {folder}\n" + f"[WARN] No CSV files found in: {folder}\n" "This workbook expects canonical datasets to exist under data/synthetic/.\n" ) return msg, [msg] @@ -116,7 +116,8 @@ def main(argv: list[str] | None = None) -> int: report = outdir / "d00_peek_data_summary.md" report.write_text("\n".join(sections).rstrip() + "\n", encoding="utf-8") - print(f"\n✅ Wrote summary: {report}") + # ASCII-only status marker for Windows consoles that default to cp1252. + print(f"\n[OK] Wrote summary: {report}") print("Tip: If you edited data/synthetic, run: pystatsv1 workbook run d00_setup_data --force") return 0 diff --git a/workbooks/track_d_template/scripts/d00_setup_data.py b/workbooks/track_d_template/scripts/d00_setup_data.py index 3dbc7b4..9da52ca 100644 --- a/workbooks/track_d_template/scripts/d00_setup_data.py +++ b/workbooks/track_d_template/scripts/d00_setup_data.py @@ -97,7 +97,8 @@ def main(argv: list[str] | None = None) -> int: ], ) - print("\n✅ Datasets ready under:", root) + # ASCII-only status marker for Windows consoles that default to cp1252. + print("\n[OK] Datasets ready under:", root) print(" -", ledger_dir) print(" -", nso_dir) return 0