Acesso programático aos dados do DATASUS
Project description
SUSFlow
Modern Python library for downloading, parsing and engineering DATASUS public health datasets. SUSFlow provides:
- resilient FTP access to DATASUS
- a local cache that mirrors the FTP tree
- transparent decompression of proprietary
.dbcfiles to tabular data - helpers to load datasets as pandas DataFrame ready for analysis
This repository focuses on practical reproducibility and safe access to legacy public data systems.
Portuguese (Brazil) documentation and module index: Português do Brasil
Contents
- Module documentation in
docs/en/(layouts, variable dictionaries, notes) - Library code:
susflow/ - Utilities:
tools/(FTP mapping and inspection)
Quick links
- CNES — health establishments
- PNI — immunizations
- SIM — mortality
- SINAN — notifiable diseases
- SINASC — live births
- SIASUS — ambulatory information system (SUS)
- SIHSUS — hospital information system (SUS)
- IBGE — population estimates
- FTP file patterns summary
Installation
Install in editable mode during development (includes dev/lint/test tools via the dev extra):
git clone https://github.com/OncoAtlas/susflow.git
cd susflow
python -m venv .venv
. ./.venv/bin/activate
pip install -U pip
pip install -e ".[dev]"
Install from PyPI (recommended for most users):
pip install susflow
To install a specific released version:
pip install susflow==0.2.0
Core runtime dependencies are declared in pyproject.toml. Optional extras:
susflow[dev]— development tools (ruff, black, isort, pytest, coverage, etc.)susflow[polars]— Polars output support viaengine="polars"susflow[pyarrow]— PyArrow output + Parquet sidecar cache supportsusflow[parquet]— Parquet sidecar cache (pyarrow)susflow[polars,pyarrow]— for fullengine=and cache flexibility
Basic usage
Each DATASUS system is available under susflow.systems (including the newer ibge_pop). APIs are lightweight: list_files, download and read helpers manage discovery, download and conversion.
The read() functions now support additional options:
engine="pandas" | "polars" | "pyarrow"— return native objects instead of pandas DataFrame.parquet=True— enable local.parquetsidecar cache for faster repeated reads.
Example: SINASC (Live Births)
from susflow.systems import sinasc
# list files for a state
sinasc.list_files(uf="SP")
# download and return a pandas.DataFrame
df = sinasc.read(uf="SP", year=2020)
Example: PNI (Vaccinations)
from susflow.systems import pni
df = pni.read(uf="RJ", year=2015)
Example: Using new engine and parquet options + batch downloads
from susflow import download_batch
from susflow.systems import sinasc
# Read with Polars (requires susflow[polars])
df = sinasc.read(uf="SP", year=2020, engine="polars")
# Enable Parquet sidecar cache (requires susflow[pyarrow] or [parquet])
df = sinasc.read(uf="SP", year=2020, parquet=True)
# Concurrent downloads
paths = download_batch([
("sinasc", {"uf": "SP", "year": 2020}),
("sinasc", {"uf": "RJ", "year": 2021}),
])
Command-line interface
SUSFlow also provides a susflow CLI (installed via the package or pip install susflow):
susflow --help
susflow sinasc list --uf SP
susflow cnes download SP 2023 --type ST
The CLI supports list and download for the main systems. For full control (including engine= and parquet cache), use the Python API.
New in recent releases: ibge_pop module for population estimates.
Caching behavior
By default downloads are stored under ~/.susflow/cache/ mirroring FTP paths. If a requested file is present locally the library skips the download and reads directly from cache. To force re-download set force=True on download/reader helpers.
Performance guidance
- Downcast numeric types and convert repeated strings to
categoryto reduce memory. - Convert commonly used datasets to Parquet once and reuse local Parquet caches.
- For very large datasets prefer processing in chunks or using DuckDB/Polars to avoid excessive RAM.
Developer tools and linters
After pip install -e ".[dev]" (see Installation above), the tools are available. Run the checks locally:
. ./.venv/bin/activate
ruff check .
black --check .
isort --check-only .
pytest -q
Testing strategy
- Unit tests should mock FTP and file IO; see
tests/unit/for examples. - Integration tests that access live FTP data should be opt-in and run manually (network-dependent).
Utilities
tools/mapear_ftp.py helps locate and audit DATASUS FTP directory structures when paths change. It can save structured maps to tools/mapas/ for offline analysis.
Contributing
See CONTRIBUTING.md for guidelines: coding style, tests, and PR workflow. See docs/en/coverage.md for coverage instructions.
License
This project is released under the MIT License — see LICENSE.
Contact
Open issues and pull requests are welcome. For larger changes please open an issue to discuss scope before implementing.
Project details
Release history Release notifications | RSS feed
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 susflow-0.2.0.tar.gz.
File metadata
- Download URL: susflow-0.2.0.tar.gz
- Upload date:
- Size: 62.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef3b977b6c13195dbdab6165a44aefb6cbd980e0edeaf89736a00660dc861762
|
|
| MD5 |
dcddf85378e18c5a3c4d9c8ea40d958f
|
|
| BLAKE2b-256 |
eb373f05139329a7e469a0815ef3fcff67333feb1fdf1c6816d5b28832d913f0
|
File details
Details for the file susflow-0.2.0-py3-none-any.whl.
File metadata
- Download URL: susflow-0.2.0-py3-none-any.whl
- Upload date:
- Size: 28.6 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 |
6e593eed84b91c92ae9b90b4e073f863d2d9d946829c7f61251f42df442ca238
|
|
| MD5 |
16c0206af8fb37bbccbc22a2014bd833
|
|
| BLAKE2b-256 |
a0c55cf6fd9e7839306a85966dc7fe529d421c3731872f9667b4afb13144a49a
|