Laporan teknis adalah rumah tetap bagi seluruh hasil kerja analisis. Pembacanya bukan pemilik toko yang ingin tahu keputusan apa yang diambil, melainkan sesama analis, auditor, dan — yang paling sering — diri kita sendiri enam bulan kemudian, yang sudah lupa detail pengerjaannya. Bagi pembaca tersebut, “hasilnya 43,57 porsi” belum menjadi informasi; mereka perlu tahu data apa, diolah bagaimana, dengan asumsi apa, dan batas berlakunya sampai mana. Pada chapter ini kita susun laporan teknis yang lengkap namun tetap ringkas ditulis, termasuk cara membuat kerangkanya secara otomatis dari hasil hitungan.

Anatomi Laporan Teknis #

Laporan teknis yang baik tidak perlu panjang; ia perlu lengkap pada bagian yang tepat. Ada tujuh bagian yang hampir selalu hadir, dan masing-masing menjawab satu pertanyaan yang pasti muncul ketika seseorang menelusuri ulang kerja kita:

BagianPertanyaan yang dijawabIsi ringkas
RingkasanApa inti hasilnya?Temuan utama dengan angka, tiga sampai lima butir
Latar belakangMengapa analisis ini dijalankan?Pertanyaan bisnis dan konteksnya
DataData apa yang dipakai?Sumber, periode, jumlah baris, kamus singkat
MetodeBagaimana angka dihitung?Langkah olah, alat, versi, parameter, seed
HasilApa yang ditemukan?Tabel dan grafik dengan penjelasan
BatasanSejauh mana hasil berlaku?Keterbatasan data dan asumsi
LampiranDi mana detailnya?Data mentah, skrip, keluaran penuh

Urutan tersebut sengaja menempatkan ringkasan di puncak — laporan teknis pun tunduk pada piramida terbalik yang kita bahas pada chapter Menyusun Narasi Data . Bedanya, laporan teknis menuntut ketelitian yang lebih tinggi pada bagian metode dan lampiran, karena kedua bagian itulah yang membedakan laporan yang bisa ditiru ulang dari laporan yang hanya bisa dipercaya begitu saja.

Metode yang Bisa Ditiru Ulang #

Bagian metode adalah jantung laporan teknis. Ujiannya sederhana: pembaca yang memegang data dan laporan kita harus bisa menghasilkan angka yang persis sama tanpa bertanya kepada kita. Untuk itu, bagian metode minimal mencantumkan sumber data dan periodenya, langkah pengolahan, nama alat beserta versinya, parameter yang dipakai, dan seed generator acak bila ada. Kebiasaan ini adalah kelanjutan langsung dari prinsip reproducible analysis yang kita bangun pada chapter Reproducible Analysis , dan dokumentasi datanya mengikuti pola chapter Dokumentasi Dataset .

Membuat Kerangka Laporan Otomatis #

Menulis laporan sambil membuka-buka hasil hitungan adalah resep angka yang tidak sinkron: ringkasan menulis satu angka, lampiran menyimpan angka lain. Solusinya adalah membangun kerangka laporan langsung dari hasil hitungan — angka yang tampil di ringkasan diambil dari tabel yang sama dengan yang tampil di bagian hasil. Sebagai contoh, kita susun kerangka laporan uji menu baru Toko Kopi Kita dari data 14 hari:

python
import pandas as pd

uji = pd.DataFrame({
    "varian": ["standar"] * 7 + ["gula aren"] * 7,
    "terjual": [34, 36, 35, 33, 37, 35, 36, 41, 44, 42, 45, 43, 44, 46],
})
ringkas = uji.groupby("varian")["terjual"].agg(n="count", rata_rata="mean", simpangan="std").round(2)
selisih = ringkas.loc["gula aren", "rata_rata"] - ringkas.loc["standar", "rata_rata"]

kerangka = (
    "# Laporan Teknis: Uji Menu Es Kopi Gula Aren\n\n"
    "## Ringkasan\n"
    f"- Varian gula aren terjual rata-rata {ringkas.loc['gula aren', 'rata_rata']:.2f} porsi/hari, "
    f"{selisih:+.2f} porsi di atas varian standar ({ringkas.loc['standar', 'rata_rata']:.2f}).\n\n"
    "## Metode\n"
    "- Desain: rotasi harian dua varian, 7 hari per varian, satu gerai yang sama.\n"
    "- Data: 14 baris penjualan harian (lampiran A).\n"
    "- Analisis: perbandingan rata-rata deskriptif; tanpa uji signifikansi.\n\n"
    "## Hasil\n"
    + ringkas.to_string() + "\n\n"
    "## Batasan\n"
    "- Tujuh hari per varian belum menangkap musiman bulanan dan hari besar.\n\n"
    "## Lampiran\n"
    "- A: data harian lengkap (14 baris, format CSV)\n"
    "- B: skrip analisis (analisis_menu.py, pandas 2.2)\n"
)
print(kerangka)

Output yang Dihasilkan:

text
# Laporan Teknis: Uji Menu Es Kopi Gula Aren

## Ringkasan
- Varian gula aren terjual rata-rata 43.57 porsi/hari, +8.43 porsi di atas varian standar (35.14).

## Metode
- Desain: rotasi harian dua varian, 7 hari per varian, satu gerai yang sama.
- Data: 14 baris penjualan harian (lampiran A).
- Analisis: perbandingan rata-rata deskriptif; tanpa uji signifikansi.

## Hasil
           n  rata_rata  simpangan
varian                            
gula aren  7      43.57       1.72
standar    7      35.14       1.35

## Batasan
- Tujuh hari per varian belum menangkap musiman bulanan dan hari besar.

## Lampiran
- A: data harian lengkap (14 baris, format CSV)
- B: skrip analisis (analisis_menu.py, pandas 2.2)

Mari kita telaah baris-baris kode di atas:

  1. Baris 3-6 (uji = pd.DataFrame(...)): data percobaan 14 hari — tujuh hari menu standar, tujuh hari menu gula aren — tersimpan dalam format panjang dua kolom, format yang alami bagi groupby.
  2. Baris 7 (ringkas = ...): satu baris groupby().agg() menghasilkan tabel ringkasan tiga kolom (jumlah hari, rata-rata, simpangan baku) per varian, lalu .round(2) menjaga tampilan tetap wajar. Tabel inilah satu-satunya sumber angka laporan.
  3. Baris 8 (selisih = ...): selisih kedua rata-rata dihitung dari tabel ringkas, bukan diketik tangan — jika data berubah dan skrip dijalankan ulang, seluruh angka di laporan ikut berubah dengan sendirinya.
  4. Baris 10-26 (kerangka = (...)): kerangka markdown dirakit dengan f-string; tanda \n\n memisahkan antarbagian. Bagian Hasil bahkan menempel to_string() dari tabel ringkas yang sama, sehingga ringkasan dan hasil mustahil berbeda angka.
  5. Baris 27 (print(kerangka)): pada contoh ini kerangka dicetak ke layar; pada pekerjaan nyata kita menyimpannya sebagai berkas dengan pathlib.Path.write_text() agar menjadi lampiran yang ikut ter-version control.

Batasan sering ditulis terburu-buru di menit terakhir, padahal bagian inilah yang paling sering dibaca pembaca kritis. Batasan yang baik menyebutkan apa yang belum diuji dan apa akibatnya bagi pembaca: “tujuh hari per varian belum menangkap musiman bulanan, sehingga selisih 8,43 porsi sebaiknya dibaca sebagai indikasi kuat, bukan angka final”. Kalimat seperti itu tidak melemahkan laporan — ia menunjukkan bahwa penulisnya tahu persis di mana hasilnya berhenti berlaku, dan pada saat yang sama memberi tahu pengambil keputusan seberapa besar ruang amannya.

Format batasan yang mudah diulang: sebutkan keterbatasan, jelaskan arah bias yang mungkin ditimbulkannya, dan tunjuk langkah tindak lanjutnya. Tiga kalimat cukup untuk satu batasan; laporan dengan sepuluh batasan yang masing-masing dua baris jauh lebih berguna daripada laporan dengan satu paragraf batasan yang kabur.

Rangkuman #

  • Laporan teknis ditulis bagi pembaca yang akan menelusuri ulang kerja kita; tujuh bagiannya menjawab tujuh pertanyaan baku — dari ringkasan sampai lampiran.
  • Bagian metode diuji dengan satu standar: pembaca dengan data yang sama harus bisa menghasilkan angka yang persis sama.
  • Kerangka laporan dibangun otomatis dari tabel hasil; angka ringkasan dan angka lampiran berasal dari satu sumber sehingga tidak pernah bergeser.
  • Batasan ditulis dengan struktur keterbatasan → arah bias → tindak lanjut, dan kehadirannya menandakan kekuatan laporan, bukan kelemahannya.

Laporan teknis yang lengkap kini kita miliki. Kenyataannya, hanya sebagian kecil pembaca yang akan menikmatinya dari awal sampai akhir — pemilik toko dan tim operasional membutuhkan versi yang sama benarnya tetapi jauh lebih ringan. Kita terjemahkan pada chapter berikutnya, Membuat Laporan untuk Non-Teknis .

Referensi #

  1. pandas — Pandas User Guide
  2. Project Jupyter — Documentation