tlf-census-stats
Census-specific statistical analysis for South and Southeast Asian countries — part of TLF ("The Living Facts").
Loads census data (CSV, Excel, or JSON) for a given country, normalizes it to a canonical schema via per-country column aliasing, and produces national totals, descriptive statistics, region-level aggregation, rankings, outlier detection, and HTML/PDF/CSV/JSON reports — either as a library or an interactive CLI.
Supports: Nepal, India, Bangladesh, Pakistan, Sri Lanka, Bhutan.
Install
pip install tlf-census-stats
Or from source, inside the TLF-Data-Analysis monorepo:
cd tlf-census-stats
pip install -e ".[dev]"
Canonical schema
Every country profile maps its own raw column names (e.g. Bangladesh's Division/District, Nepal's Province/District) onto this canonical shape:
| Column | Required? | Notes |
|---|---|---|
region |
Yes | e.g. Division/Province/State |
subregion |
Yes | e.g. District |
total_population |
Yes | |
male |
Yes | |
female |
Yes | |
households |
Yes | |
urban_population |
Optional | |
rural_population |
Optional | |
literacy_rate |
Optional | |
avg_household_size |
Optional | |
third_gender |
Optional | A country's non-binary census category (e.g. Bangladesh's "Hijra"). Not every country publishes this. |
A column-check is printed on every load, showing what was actually found vs. expected for that country.
Quickstart (Python API)
from tlf_census_stats import CensusLoader, StatsReporter
# Load and inspect
df = CensusLoader("bangladesh_census.xlsx", country="bangladesh").load()
# Or run the full report pipeline directly
reporter = StatsReporter("bangladesh_census.xlsx", country="bangladesh")
reporter.run() # prints national totals, descriptive
# stats, region summary, rankings, outliers
reporter.export("report.html") # or .csv / .json / .pdf — same content either way
Reading multiple Excel sheets
# Default: read every sheet, stack their rows into one DataFrame
df = CensusLoader("census.xlsx", country="bangladesh").load()
# Read just one/some sheets
df = CensusLoader("census.xlsx", country="bangladesh", sheet="Merged_All_Table").load()
# Combine several single-topic sheets side-by-side on a shared key,
# instead of stacking rows (use this when each sheet is a different
# topic — household counts, gender split, literacy — all keyed by the
# same District column)
df = CensusLoader("census.xlsx", country="bangladesh", merge_on="District").load()
CLI
tlf-census-stats --country bangladesh --data census.xlsx --export report.html
Run with no flags at all for a fully interactive walkthrough (file path → sheet selection → stack-vs-merge → export format):
tlf-census-stats
For unattended/scripted runs, --yes disables all prompting and fails loudly (rather than silently guessing) if something required is missing:
tlf-census-stats --yes --country nepal --data nepal_census.csv --export out.csv
Full flag list: tlf-census-stats --help
Combining with tlf-data-cleaning
Most census data doesn't start out clean — it's published as a PDF. tlf-data-cleaning (in the separate TLF-Data-Manager repo) handles extraction and cleaning; there's no runtime dependency between the two packages, they compose through the canonical CSV shape above.
Three ways data reaches this package:
- Already-clean CSV/Excel/JSON — use
CensusLoaderdirectly, no other package needed. - Flat-country PDF (Bangladesh, Pakistan, etc.) —
tlf-data-cleaning'sCleaningPipelinedoes the whole extract-and-clean step. - India's hierarchical PDF —
tlf-data-cleaning'sPDFTableExtractordoes raw extraction only; this package'sIndiaCensusTransformerreshapes the nested INDIA → STATE → DISTRICT → SUB-DISTRICT structure into canonical rows (a generic rename/strip/coerce pipeline can't do this reshaping).
Full worked examples for all three: see tlf-data-cleaning's README.
Tests
pytest tests/ -v
tests/fixtures/ holds small, test-owned sample data (deliberately separate from the demo data bundled with the package itself, in tlf_census_stats/data/sample/, which backs the CLI's built-in --country nepal/bangladesh/india defaults).
The India PDF integration test (test_india_transformer.py) gracefully skips unless tlf-data-cleaning is installed alongside this package and its tests/fixtures/india_census_sample.pdf fixture is present at ../../tlf-data-cleaning/tests/fixtures/ — no cross-repo dependency is required for this package's own test suite to pass.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tlf_census_stats-0.1.0.tar.gz.
File metadata
- Download URL: tlf_census_stats-0.1.0.tar.gz
- Upload date:
- Size: 35.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc2501b667ed13eb2b43c8287b0b71c42f80aa44a5e35d9e9c60019a5a8d44ae
|
|
| MD5 |
2f81fd5c137977c2672f0577378f6dcf
|
|
| BLAKE2b-256 |
0261f173e06cb3f28cbb9fd7e4711db9c6322341f4759cefb805f38652c7967c
|
File details
Details for the file tlf_census_stats-0.1.0-py3-none-any.whl.
File metadata
- Download URL: tlf_census_stats-0.1.0-py3-none-any.whl
- Upload date:
- Size: 33.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5287cdcaa9247b0d8c4d1f8d5063e4cd8f43e8cf00c316dd05d3ebdb0ee154a6
|
|
| MD5 |
9e75922eb8c457e87aba63cd1c07f817
|
|
| BLAKE2b-256 |
e20937d5cda343834ea4c3d135eff4c9401ee162b752e96b050f65bc0ac6ab75
|