A compact data-quality pipeline that turns messy synthetic operations rows into clean SQLite tables.
| 30-second question | Answer |
|---|---|
| Problem | Analysts often inherit CSV extracts with duplicate IDs, inconsistent labels, malformed dates, invalid emails, and numeric values stored as text. |
| My role | I wrote the cleaning rules, implemented the pandas transform, preserved rejected rows with issue labels, and loaded curated tables into SQLite. |
| Result | The pipeline processes 24 raw rows into 13 clean rows and 11 rejected rows, with every rejection reason made visible. |
| Portfolio signal | Shows practical data-cleaning judgment, SQL readiness, and responsible handling of imperfect operational data. |
| Data policy | All records are synthetic and safe for a public portfolio. |
- Normalization for categories, statuses, dates, regions, emails, and amounts.
- Rejected-record output with explicit quality issues instead of silent drops.
- SQLite load for clean transactions, rejected transactions, and a quality summary.
etl_pipeline.pyis the full extract-transform-load workflow.DATA_QUALITY_RULES.mddocuments acceptance and rejection rules.raw_data.csvis intentionally messy and synthetic.
Python, pandas, SQLite, ETL, data quality, validation rules
python -m pip install -r requirements.txt
python etl_pipeline.pyThe dataset is intentionally small so reviewers can inspect the full pipeline quickly. It is not intended to represent production scale.
- Add unit tests for each quality rule.
- Add incremental loading instead of replace loads.
- Add a small data-quality report exported as HTML.
Every record, identifier, organization, person, scenario, and result in this project is synthetic unless explicitly marked otherwise. No employer, client, university, colleague, customer, credential, private path, or sensitive personal record is used.