Penyiapan lingkungan

Menyiapkan Python, DuckDB, Docker, dan VS Code, lalu menyusun kerangka proyek yang dipakai di sepanjang jalur.

Daftar isi

Topik ini menyiapkan lingkungan kerja yang dipakai di sepanjang jalur, yaitu Python, DuckDB, Docker, dan Visual Studio Code, lalu menyusun kerangka proyek tempat kode pipeline ditulis. Setiap komponen diperiksa keberadaannya satu per satu, disertai perintah pemeriksaan yang dapat dijalankan ulang. Setelah selesai, struktur folder proyek sudah terbentuk dan pustaka intinya sudah teruji.

Komponen inti lingkungan#

Empat komponen membentuk lingkungan kerja jalur ini, dan masing-masing mengisi peran yang tidak saling menggantikan. Python menjadi bahasa utama untuk skrip pipeline dan ekstraksi, DuckDB menjadi warehouse lokal untuk latihan SQL dan transformasi, Docker mengemas pipeline agar eksekusinya konsisten, sedangkan Visual Studio Code menjadi editor tempat seluruh kode ditulis. PostgreSQL muncul sebagai latihan tambahan lewat Docker ketika sebuah topik membutuhkan basis data transaksional.

KomponenPeran di jalur ini
Python 3.12bahasa utama skrip pipeline dan ekstraksi
DuckDB 2.0warehouse lokal untuk SQL, transformasi, dan latihan query
Dockermengemas pipeline beserta dependensinya menjadi container
Visual Studio Codeeditor teks dengan dukungan ekstensi Python dan Docker

Versi yang dirujuk bukan pilihan acak. Python 3.12 dan DuckDB 2.0 adalah versi yang dipakai pada seluruh contoh jalur ini, sehingga keluaran yang muncul di setiap topik dapat direproduksi apa adanya. Apabila versi di komputer berbeda, sebagian besar contoh tetap berjalan, tetapi keluarannya perlu dibandingkan ulang.

Memeriksa Python dan pustaka inti#

Pemeriksaan dimulai dari versi Python dan ketersediaan pustaka inti, yaitu duckdb, pandas, dan pyarrow. Jalankan perintah berikut di terminal, kemudian bandingkan keluarannya dengan yang tertera pada blok keluaran. Apabila pemeriksaan kedua gagal, pustaka inti belum terpasang dan pemasangannya dibahas segera setelah ini. Panggil python3 secara eksplisit, karena pada sebagian sistem perintah python menunjuk ke versi Python yang berbeda atau tidak ada sama sekali.

bash
# memeriksa versi Python yang terpasang
python3 --version
# memastikan pustaka inti tersedia
python3 -c "import duckdb, pandas, pyarrow; print('pustaka inti siap')"
text Keluaran
Python 3.12.16
pustaka inti siap

Pada komputer sendiri, pustaka tersebut dipasang melalui pip, yaitu pengelola paket bawaan Python. Bentuk python3 -m pip dipilih daripada perintah pip langsung karena menjamin paket terpasang pada Python yang sama dengan yang menjalankannya. Sebelum memasang apa pun, buat lingkungan virtual (virtual environment), yakni folder terisolasi yang menyimpan paket milik satu proyek tanpa mengganggu proyek lain. Lingkungan virtual dibuat sekali, diaktifkan setiap kali bekerja pada proyek, lalu paket dipasang di dalamnya.

bash
# tidak-dijalankan
# membuat lingkungan virtual bernama .venv di folder proyek
python3 -m venv .venv
# mengaktifkan lingkungan virtual pada Linux dan macOS
source .venv/bin/activate
# memasang pustaka inti di dalam lingkungan virtual
python3 -m pip install duckdb pandas pyarrow

Uji pertama DuckDB#

DuckDB adalah basis data analitik yang berjalan in-process, yakni di dalam proses Python itu sendiri tanpa server terpisah, sehingga cukup dipasang lewat pip dan langsung dipakai. Sifat ini membedakannya dari PostgreSQL yang memisahkan servernya, dan perbedaan itu kembali dibahas pada bagian Docker di bawah. Basis data dapat dijalankan di memori untuk latihan, atau disimpan sebagai satu berkas apabila data perlu dipertahankan. Skrip berikut membuat tabel, mengisinya, lalu menampilkan isinya melalui query SQL.

python cek-duckdb.py
import duckdb

con = duckdb.connect()

# membuat tabel dengan data contoh
con.execute("""
    CREATE TABLE suhu_harian AS
    SELECT hari, CAST(suhu_c AS DOUBLE) AS suhu_c
    FROM (VALUES (1, 24.5), (2, 25.1), (3, 23.8), (4, 26.0))
         AS t(hari, suhu_c)
""")

# menampilkan isi tabel
con.sql("SELECT * FROM suhu_harian ORDER BY hari").show()
text Keluaran
┌───────┬────────┐
│ hari  │ suhu_c │
│ int32 │ double │
├───────┼────────┤
│     1 │   24.5 │
│     2 │   25.1 │
│     3 │   23.8 │
│     4 │   26.0 │
└───────┴────────┘

Skrip di atas memperkenalkan dua pola yang terus dipakai di sepanjang jalur. Metode execute menjalankan SQL yang mengubah keadaan, seperti membuat tabel, sedangkan con.sql mengembalikan hasil query yang siap ditampilkan. Pernyataan CREATE TABLE dengan AS SELECT membuat tabel baru langsung dari hasil query, dan pola ini dipakai ulang pada transformasi yang lebih besar. Tipe double pada kolom suhu_c berasal dari CAST yang dinyatakan eksplisit, bukan dari perkiraan DuckDB sendiri. Blok keluarannya menampilkan tabel bergaya warehouse, lengkap dengan tipe data tiap kolom, dan gaya tampilan ini muncul berulang di sepanjang jalur.

Docker untuk lingkungan yang konsisten#

Python yang berjalan di mesin berbeda cenderung memiliki versi dan paket yang berbeda. Docker menyeragamkan lingkungan eksekusi pipeline. Image adalah cetakan berisi sistem operasi ringkas, kode, dan seluruh dependensi, sedangkan container adalah instans yang berjalan dari cetakan itu. Pipeline yang dikemas sebagai container berperilaku sama di komputer mana pun, asalkan daftar dependensinya tertulis jelas.

Daftar dependensi dinyatakan dalam berkas bernama Dockerfile, dan setiap barisnya adalah satu instruksi yang dijalankan berurutan saat image dibangun. Berkas berikut menjadi contoh awal yang dipakai ketika pipeline mulai dikemas. Struktur folder src yang dirujuknya disiapkan pada bagian kerangka proyek di bawah.

dockerfile Dockerfile
FROM python:3.12-slim

WORKDIR /app

RUN pip install --no-cache-dir duckdb==2.0.0 pandas==2.2.3 pyarrow==26.0.0

COPY src/ src/

CMD ["python", "src/pipeline.py"]

FROM memilih image dasar Python 3.12 yang ramping, WORKDIR menetapkan folder kerja di dalam container, dan RUN memasang pustaka pada saat image dibangun. COPY menyalin folder src dari proyek ke dalam image, sedangkan CMD menyatakan perintah yang dijalankan ketika container dimulai. Berkas src/pipeline.py adalah titik masuk proyek, dan kerangka folder di bagian akhir topik ini sudah menyiapkan posisinya.

Perintah Docker berikut memeriksa pemasangan dan mengunduh image PostgreSQL 16 untuk latihan basis data transaksional. Jalankan hanya apabila Docker sudah terpasang dan layanannya berjalan. Pada lingkungan latihan tanpa Docker, kedua perintah ini dilewati dan tidak menghalangi topik mana pun.

bash
# tidak-dijalankan
# memeriksa versi Docker yang terpasang
docker --version
# mengunduh image PostgreSQL 16 untuk latihan basis data transaksional
docker pull postgres:16

Kerangka proyek#

Seluruh topik pada jalur ini menaruh kode pada kerangka proyek yang sama, sehingga struktur foldernya dibuat sekali sekarang. Kerangka ini terdiri atas tiga folder, yaitu data untuk berkas data mentah dan hasil ekstraksi, sql untuk skrip transformasi, dan src untuk kode Python pipeline. Jalankan perintah berikut dari folder tempat proyek diletakkan.

bash
# membuat kerangka direktori proyek
mkdir -p de-proyek/data de-proyek/src de-proyek/sql
# memeriksa struktur yang terbentuk
find de-proyek -type d | sort
text Keluaran
de-proyek
de-proyek/data
de-proyek/sql
de-proyek/src

Struktur yang muncul pada blok keluaran menjadi bentuk baku jalur ini. Folder data menampung berkas yang masuk dan keluar dari pipeline, folder sql menyimpan transformasi yang berdiri sendiri, sedangkan folder src menampung kode Python yang menggerakkan keduanya. Pemisahan data dari src menjaga berkas data tidak bercampur dengan kode yang memprosesnya. Nama de-proyek boleh diganti sesuai kebutuhan, asalkan seluruh perintah berikutnya mengikuti nama yang dipilih. Folder yang masih kosong terisi ketika latihan pipeline batch dimulai, sehingga kerangka ini sengaja dibuat ramping.

Kesalahan umum#

Tiga kekeliruan berikut paling sering muncul saat lingkungan baru disiapkan. Masing-masing disertai penyebab dan perbaikannya.

  • Memakai versi pustaka yang berbeda dari contoh. Keluaran DuckDB atau pandas dapat berubah antarversi, sehingga hasil yang muncul tidak sama dengan blok keluaran pada topik. Periksa versi terpasang dengan python3 -m pip show duckdb lalu samakan apabila keluarannya tidak cocok.
  • Menjalankan skrip dari folder yang salah. Path relatif seperti data/mentah.csv dibaca dari working directory, yaitu folder tempat perintah dijalankan, bukan dari lokasi berkas skripnya. Jalankan skrip dari root proyek, atau susun path dengan modul pathlib yang mengacu ke lokasi skripnya.
  • Memanggil Docker tanpa daemon yang berjalan. Klien docker menampilkan error koneksi padahal pemasangannya benar. Jalankan Docker Desktop atau layanan Docker pada sistem terlebih dahulu, kemudian ulangi perintahnya.
  • Melewatkan pemeriksaan versi sebelum membandingkan keluaran. Perbedaan nomor versi dapat mengubah tampilan tabel dan angka yang dicetak. Samakan versi pustaka atau sesuaikan pembacaan keluarannya sebelum menyimpulkan ada yang salah.

Ringkasan#

  • Lingkungan jalur ini terdiri atas Python 3.12, DuckDB 2.0, Docker, dan Visual Studio Code, dengan PostgreSQL sebagai latihan tambahan lewat container.
  • Paket Python dipasang di dalam lingkungan virtual per proyek, bukan ke Python global.
  • DuckDB berjalan in-process dan menghasilkan tabel bergaya warehouse melalui SQL biasa.
  • Kerangka proyek berisi folder data, sql, dan src, dan bentuknya dipakai di sepanjang jalur.

Referensi#