Sepanjang course ini kita telah mempelajari validasi, pembersihan, deduplikasi, pemuatan, logging, dan pengujian sebagai potongan konsep yang terpisah. Pada proyek pertama ini kita merangkai seluruh potongan tersebut menjadi satu pipeline yang benar-benar bekerja: membaca berkas CSV mentah, memvalidasi setiap baris, membersihkan nilai yang belum normal, membuang duplikat, lalu memuat hasilnya ke tabel database. Studi kasusnya adalah pesanan toko daring fiktif TokoKita yang mengekspor data penjualan setiap bulan dalam format CSV.

Proyek ini dikerjakan dalam sembilan bagian berurutan. Setiap bagian menambah satu lapisan kemampuan, dan setiap lapisan diuji dengan pytest sebelum kita lanjut. Seluruh kode sumber tersedia pada bagian Berkas Sumber di bawah halaman ini, dan setiap bagian merujuk ke berkas yang sama sehingga kondisi proyek tetap utuh di setiap tahap.

Cerita Proyek #

TokoKita adalah toko daring kecil yang sistem ordernya masih warisan lama. Setiap akhir bulan, sistem tersebut mengekspor seluruh pesanan menjadi berkas CSV dan menaruhnya di folder yang sama. Tim analitik ingin tabel pesanan yang dapat dipercaya: satu baris per pesanan, tanpa duplikat, dengan tipe data yang benar.

Audit cepat terhadap dua berkas ekspor terakhir menemukan beberapa jenis kotoran yang khas:

  • baris ganda akibat sistem mengekspor ulang pesanan yang sama,
  • nilai kosong pada kolom wajib seperti email dan tanggal,
  • format yang bervariasi: selesai vs SELESAI, 210.000 vs 210000,
  • nilai yang mustahil: jumlah negatif, harga negatif, tanggal 2024-06-31.

Arsitektur Pipeline #

Alur yang kita bangun mengikuti pola baca, validasi, bersihkan, deduplikasi, muat:

Tahap validasi menolak baris yang tidak dapat diselamatkan. Tahap pembersihan menormalkan baris yang lolos tetapi belum rapi. Tahap deduplikasi memastikan satu pesanan hanya muncul sekali, termasuk saat pesanan yang sama diekspor ulang pada berkas bulan berikutnya.

Tahapan Pengerjaan #

BagianFokusBerkas utama
1Memahami kebutuhan dan audit datadata/pesanan_2024-06.csv
2Merancang skema databaseconfig/schema.sql
3Membaca dan memvalidasi CSVsrc/validate.py
4Membersihkan datasrc/clean.py
5Memuat data ke PostgreSQLsrc/load.py, src/loader_postgres.py
6Menangani data duplikatsrc/dedup.py
7Menambahkan loggingsrc/logging_setup.py
8Menguji pipelinetests/
9Menjalankan pipelinepython3 -m src.pipeline

Mulailah dari Bagian 1 dan kerjakan sesuai urutan, karena setiap bagian dibangun di atas keputusan bagian sebelumnya.

Peta Berkas Proyek #

text
pipeline-data-csv-ke-postgresql/
├── _index.md
├── part-1..part-9/index.md
├── data/
│   ├── pesanan_2024-06.csv      (mentah, 107 baris)
│   ├── pesanan_2024-07.csv      (mentah, 111 baris)
│   └── processed/               (hasil pipeline: CSV bersih, log, basisdata)
├── src/                         (validate, clean, dedup, load, logging_setup,
│                                  pipeline, loader_postgres)
├── tests/                       (5 berkas pytest, 89 pengujian)
└── config/                      (schema.sql, pipeline.yaml, database.example.yaml)

Cara Menjalankan Proyek #

Semua perintah dijalankan dari direktori root proyek. Kebutuhan lingkungan: Python 3.12, pytest, dan PyYAML (semuanya sudah tersedia di lingkungan tutorial).

bash
# jalankan seluruh pengujian
python3 -m pytest tests/ -q

# jalankan pipeline dari awal sampai akhir
python3 -m src.pipeline

Pipeline membaca config/pipeline.yaml untuk nilai bawaan; opsi baris perintah seperti --db dan --level selalu menimpa nilai berkas tersebut.

Catatan tentang PostgreSQL #

Skema dan pemuatan ditulis untuk PostgreSQL: SERIAL, ON CONFLICT, RETURNING, serta constraint CHECK dan UNIQUE.

Rujukan teknis yang dipakai proyek ini: dokumentasi modul csv Python dan dokumentasi PostgreSQL .

Setelah memahami bentuk akhir proyek, mari kita mulai dari hal yang paling menentukan: apa sebenarnya yang dibutuhkan TokoKita. Lanjutkan ke Bagian 1: Memahami Kebutuhan.