A guided, four-step data quality wizard: Import & Review → Automatic Checks → Clean Values → Find Outliers. Nothing is changed to your data until you explicitly apply a fix.
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
streamlit run app.pyVisit http://localhost:8501.
docker build -t data-cleanup-assistant .
docker run -d -p 8501:8501 --name dqa data-cleanup-assistantThen put a reverse proxy (nginx, Caddy, Traefik) in front of port 8501 for TLS and a proper domain, e.g.:
server {
listen 443 ssl;
server_name dqa.yourdomain.org;
location / {
proxy_pass http://localhost:8501;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}python -m venv /opt/dqa/.venv
/opt/dqa/.venv/bin/pip install -r requirements.txtCreate /etc/systemd/system/dqa.service:
[Unit]
Description=Data Cleanup Assistant
After=network.target
[Service]
User=www-data
WorkingDirectory=/opt/dqa
ExecStart=/opt/dqa/.venv/bin/streamlit run app.py --server.port=8501 --server.address=127.0.0.1
Restart=always
[Install]
WantedBy=multi-user.targetsudo systemctl enable --now dqaThen reverse-proxy the same way as Option A.
.streamlit/config.tomlsets the theme (purple#484898branding) and a 50 MB upload limit. Adjust[server] maxUploadSizeif you need to accept larger files.- No secrets are required for the current feature set. If you later add a
KoboToolbox or Google Drive API connection, put credentials in
.streamlit/secrets.toml(already git-ignored) and read them viast.secrets["your_key"]— never hardcode them inapp.py.
app.py # main wizard (4 steps)
utils/validators.py # data quality check functions (missing values,
# duplicates, outliers via IQR/MAD, category checks,
# multi-select parsing for KoboToolbox exports)
requirements.txt
Dockerfile
.streamlit/config.toml
- Single-user session state — no shared multi-user accounts or auth yet. Add a reverse-proxy auth layer (e.g. nginx basic auth, OAuth2 Proxy) if this needs to sit behind a login for your team.
- Tested comfortably up to tens of thousands of rows; very large files (millions of rows) will need chunked processing, which isn't implemented.
- The "Find Outliers" step currently supports numeric variables only.
KoboToolbox multi-select and categorical consistency checks exist in
utils/validators.pybut aren't wired into the UI yet.