Data cleaning, analysis, and business intelligence built with Python
An independent, code-first analysis of the same Olist Brazilian e-commerce data behind my SQL warehouse project, starting from the 9 raw transactional CSVs instead of any already-cleaned tables. It covers the full analyst workflow in Python: raw audit, cleaning and validation, sales and revenue, customer and seller intelligence, fulfillment and delivery, a cross-business synthesis, and a final visualization notebook.
Rather than reusing the treated Gold-layer tables from OlistEcom, this project works from the 9 raw Olist CSVs (~1M+ combined records), so the cleaning and validation decisions are made fresh in Python instead of inherited from the SQL pipeline. Each notebook has its own log with exact numbers, decisions, and caveats.
01–03 Raw audit, cleaning, validation: profile every raw table, surface
the structural facts later work depends on (for example, customer_id is a
per-order key and customer_unique_id is the real person), produce the cleaned
tables, and confirm row counts and join integrity before anything trusts a merge.
Built as a series of Jupyter notebooks using Pandas and NumPy for data handling and Matplotlib/Seaborn for the visuals. Revenue is defined as item price plus freight, and gross (all orders) and net (delivered only) figures are always reported as a labeled pair. One-to-many relationships between orders, order items, and payments are handled explicitly to avoid double-counting revenue on joins.
Two habits run through the whole project: every average is checked against its median because right-skew is the norm in this data, and real order volume is checked before trusting any monthly or categorical number, since several dramatic-looking figures (like a "100% late rate" in 2016-09) turned out to be near-zero-sample artifacts. Near-empty ramp-up and tail-off months are excluded from growth narratives. Five of the eight charts read small pre-aggregated summary tables exported from earlier notebooks.