Kontrol Versi untuk Analisis

Git bagi data scientist: apa yang di-commit, apa yang tidak, dan mengapa.

Daftar isi

Kontrol versi untuk analisis menjawab pertanyaan yang muncul setiap proyek dipikirkan ulang, yaitu kode mana yang menghasilkan angka pada laporan, dan versi mana yang dipakai saat itu. Git memenuhi kebutuhan itu dengan mencatat perubahan kode beserta alasannya, sementara data dan hasil yang dapat dibangun ulang dikeluarkan dari catatannya. Topik ini menetapkan pembagian itu, contoh berkas pengecualiannya, dan pola commit yang berguna bagi data scientist. Setelah membacanya, setiap angka pada laporan dapat dilacak ke commit yang menghasilkannya.

Apa yang masuk versi dan apa yang tidak#

Kode, konfigurasi, dan dokumentasi masuk versi, sedangkan data mentah yang besar, hasil yang dapat dibangun ulang, dan berkas sementara tidak. Kaidah pemisahnya satu kalimat: apa pun yang dapat dibangun ulang dari berkas yang dicatat tidak perlu dicatat lagi. Berkas yang tidak dapat dibangun ulang, termasuk data mentah kecil yang menjadi sumber kebenaran, justru dicatat beserta asal-usulnya pada README.

text gitignore_contoh.txt
# berkas yang tidak masuk versi (diawali titik saat dipakai: .gitignore)
__pycache__/
*.pyc
.venv/
.ipynb_checkpoints/
data/mentah/*.csv
data/hasil/*.png
.env

Dua entri yang paling sering dilupakan adalah .env yang memuat kredensial dan folder data mentah yang berukuran besar. Kredensial yang terlanjur di-commit harus dianggap bocor dan diganti, karena riwayat git menyimpan setiap versi lama, dan menghapus berkasnya pada commit berikutnya tidak menghapus sejarahnya.

Keluaran analisis seperti grafik dan tabel berada di sisi yang tidak dicatat, sebab pipeline.py membangunnya ulang, dan kebijakan ini membuat repository tetap kecil sambil menjaga satu sumber kebenaran, yaitu kode beserta data mentahnya.

Commit sebagai catatan keputusan#

Commit yang baik menyimpan satu perubahan yang utuh dengan pesan yang menyatakan keputusannya, dan pesan semacam “perbaiki bug” tidak membantu pembaca enam bulan kemudian. Pola yang berguna bagi data scientist adalah menyebut perubahan analisis dan dampak angkanya, misalnya “keluarkan sensor rusak dari rata-rata, rata-rata turun dari 232.7 ke 44.9”.

Pola tersebut membuat riwayat berfungsi sebagai buku besar keputusan analisis, dan penelusuran mundur melalui git log beserta git diff menemukan commit yang mengubah suatu angka. Penanda keputusan besar, seperti versi yang dikirim kepada pemangku kepentingan, diberi tag agar angka pada laporan tertentu selalu dapat dibangun ulang persis.

Ukuran commit yang kecil memudahkan pembatalan yang presisi melalui git revert, sedangkan commit raksasa yang mencampur pembersihan, pemodelan, dan perubahan dokumentasi menyulitkan keduanya. Ritme yang sehat adalah satu commit per keputusan analisis, bukan satu commit per pekan kerja.

Branch dan kolaborasi kecil#

Branch menjaga cabang eksperimen dari keadaan yang stabil, dan dua pola yang paling berguna bagi analisis adalah branch per eksperimen serta branch per laporan, dengan penggabungan ke main ketika hasilnya diserahkan. Bandingkan hasil antar branch adalah pekerjaan yang sah, dan angka pada setiap laporan dibangun dari commit yang dicatat pada lampirannya.

Data yang ditulis proses, seperti cache dan checkpoint notebook, masuk daftar pengecualian yang sama, karena keduanya berukuran besar dan tidak membawa keputusan. Berkas notebook yang ter-commit disarankan dijalankan ulang penuh sebelum dicatat, agar keluaran sel yang tersimpan tidak berbeda dari kodenya.

Kesalahan umum#

Kesalahan pertama adalah meng-commit kredensial untuk kenyamanan. Rahasia yang masuk riwayat harus diganti, dan berkas .env yang berada di pengecualian sejak awal membuat kecelakaan itu tidak pernah terjadi.

Kesalahan kedua adalah commit raksasa tanpa pesan yang bermakna. Riwayat kehilangan fungsinya sebagai catatan keputusan, dan kembali ke versi angka lama menjadi tebakan alih-alih perintah git checkout yang tepat.

Kesalahan ketiga adalah meng-commit hasil berkas besar yang dibangun ulang setiap eksekusi. Repository membengkak dan perbandingan antar versi menjadi berisik, sedangkan berkas pengecualian memisahkannya sejak awal.

Ringkasan#

  • Kode, konfigurasi, dan dokumentasi masuk versi, sedangkan hasil yang dibangun ulang serta data besar dikeluarkan melalui .gitignore.
  • .env dan folder data mentah adalah entri pengecualian yang paling sering dilupakan, dan kredensial yang terlanjur masuk harus diganti.
  • Commit yang kecil dengan pesan keputusan menjadikan riwayat sebagai buku besar analisis, dan tag menandai versi yang dikirim.
  • Hash commit yang dicantumkan pada laporan membuat setiap angka dapat dibangun ulang persis.

Referensi#