Data engineering / mobility

Local demo / bounded fixture

Urban Mobility Data Platform

ข้อมูลแท็กซี่หนึ่งไฟล์จะกลายเป็น dashboard ได้ยังไงโดยไม่ปล่อยแถวเสีย ๆ ผ่านไป?

แพลตฟอร์ม local-first ที่พาข้อมูลทริปผ่าน profiling, validation, DuckDB/dbt, API และ dashboard พร้อมแยกแถวที่ต้องทิ้งออกมาให้ดู

แดชบอร์ด overview ของ urban mobility data platform
หลักฐานหลักoverview ที่อ่านจาก DuckDB marts ผ่าน read-only API

Data engineering / mobility

อยากเห็นเส้นทางตั้งแต่ไฟล์จนถึงหน้าจอ

โปรเจกต์นี้เริ่มจากภาพ data platform แบบ production-style แต่ผมตั้งใจให้ review ได้จาก fixture เล็ก ๆ โดยไม่ต้องโหลดข้อมูล NYC TLC ทั้งเดือนเข้ามาใน repo

เลยทำให้แต่ละชั้นมีงานของตัวเอง

  • สร้าง Parquet fixture และ profile ก่อนตรวจ timestamp, amount, passenger, zone และ speed
  • แยก valid, duplicate warning และ rejected rows แล้วโหลดเฉพาะแถวที่ผ่านไป DuckDB
  • ให้ dbt สร้าง dimensions, facts และ marts ก่อนส่งให้ FastAPI, React และ Dagster local assets

จากไฟล์สู่ dashboard

  1. 1

    TLC-style Parquet → profile และ validate

  2. 2

    validated / rejected partitions → DuckDB staging → dbt marts

  3. 3

    FastAPI read-only API → React dashboard; Dagster ช่วย orchestration ในเครื่อง

แถวเสียก็เป็นผลลัพธ์เหมือนกัน

fixture มีหนึ่ง valid trip, หนึ่ง duplicate warning และหนึ่งแถวที่ยอดเงินผิด การไม่กลบแถวเสียทิ้งทำให้หน้า quality อธิบายได้ว่าทำไมข้อมูลถึงไม่ไปต่อ

แดชบอร์ด overview ของ urban mobility data platform
overview ที่อ่านจาก DuckDB marts ผ่าน read-only API

ผลที่ออกมา

เดโมมีแถวจริงใน fixture แค่ระดับเล็ก ๆ แต่รันซ้ำสองรอบเพื่อเช็ก month-level idempotency และมี report quality แยก valid, warning, rejected rows ออกจากกัน

หน้า data quality ของ urban mobility data platform
หน้า quality ที่แยก valid, warning และ rejected ให้เห็นเป็นคนละสถานะ

ขอบเขตตอนนี้

  • เดโมไม่ดาวน์โหลด full NYC TLC dataset และ fixture ไม่แทน volume จริง
  • ระบบเป็น local-first ไม่มี production deployment, auth หรือ cloud account
  • optional official sample ต้องใช้ network และ external DATA_DIR แยกจาก repo

ถ้าเริ่มใหม่วันนี้

  • ทำ data contract ให้เห็นคู่กับ quality report ตั้งแต่ก่อนเปิด dashboard
  • เพิ่มเคส late-arriving data และ schema drift เข้า demo fixture
  • ลดจำนวนหน้าจอในรอบแรก แล้วทำ anomaly story ให้จบหนึ่งเส้นทางก่อน

โค้ดและเดโม

ใน repository มีวิธีรัน การทดสอบ และรายละเอียด implementation ฉบับเต็ม

ดูโค้ดบน GitHub