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.
Release files for tlf-census-stats 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tlf_census_stats-0.1.3.tar.gz | 35.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tlf_census_stats-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 69.5 kB
Release files / tlf_census_stats-0.1.3.tar.gz
| Download URL | tlf_census_stats-0.1.3.tar.gz |
|---|---|
| Size | 35.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1f6f85e99dfb8725252405d16c645a74c193b359ea562a26467bb6455abda9b5
|
|
BLAKE2b-256 checksum How to use checksums |
bef9236de81489391c5c718f4c2ea851357b9011a94abf533971a7b52f8e1216
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / tlf_census_stats-0.1.3-py3-none-any.whl
| Download URL | tlf_census_stats-0.1.3-py3-none-any.whl |
|---|---|
| Size | 33.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f07bd4bd1937efba9e2478c37dda533d7fffeaf42b1cff864fa011994f14f9e6
|
|
BLAKE2b-256 checksum How to use checksums |
6709f62b6784abe9a60959a5c71030f85f496d06dd9df352f18e4f9f0552d794
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|