Data tanpa visualisasi adalah angka yang tidak bercerita. Proyek ini melatih alur kerja visualisasi lengkap dari awal hingga akhir: memilih dataset yang tepat, mengimpor dan membersihkannya, membuat beberapa grafik yang menjawab pertanyaan analisis, lalu mengekspor hasil menjadi laporan siap dibagikan.
Alur tahapannya:
- pemilihan dataset — menetapkan pertanyaan analisis dan dataset numerik yang menjawabnya,
- import dan pembersihan — membaca data mentah dan merapikannya,
- pembuatan visualisasi — memilih jenis grafik dan menyusun layout multi-panel,
- ekspor laporan — menyimpan figur dan ringkasan teks ke folder laporan.
Seluruh kode sumber setiap tahap tersedia pada bagian Berkas Sumber di bawah halaman setiap bagian.
Perilaku yang Diharapkan #
Sebelum menulis kode, mari kita tetapkan perilaku akhir program. Satu panggilan jalankanPipeline('latihan') harus menjalankan enam tahap berurutan, mencetak progres tiap tahap, dan meninggalkan folder keluaran yang rapi. Transkrip berikut adalah hasil nyata satu eksekusi:
== Pipeline Visualisasi Dataset ==
Folder kerja: latihan
[1/6] Membuat dataset sintetis ...
data/penjualan.csv: 36 bulan x 3 produk
[2/6] Memuat data ...
36 baris, 3 nilai kosong, 2 kandidat outlier (|z| > 2.5)
[3/6] Membersihkan data ...
3 NaN diimputasi (median), 2 outlier dikoreksi (clip IQR)
[4/6] Menghitung statistik ...
Total 36 bulan: kopi 21403, teh 12358, susu 19580 unit
[5/6] Membuat visualisasi ...
hasil/tren_bulanan.png
hasil/distribusi_penjualan.png
hasil/perbandingan_tahunan.png
[6/6] Mengekspor laporan ...
hasil/laporan_ringkasan.txt
Selesai. Semua keluaran ada di folder hasil/.Fitur yang Dibangun #
| Fitur | Perilaku |
|---|---|
| Dataset sintetis deterministik | 36 bulan penjualan 3 produk dibangun dari formula tetap tanpa RNG — identik di setiap eksekusi, di MATLAB maupun Octave |
| Masalah data disuntikkan | 3 sel NaN (laporan hilang) dan 2 pencilan (entri terduplikasi, salah titik desimal) ditanam sengaja |
| Baca CSV dengan guard | readmatrix di MATLAB R2019a+, dlmread dengan offset header di Octave — satu berkas, dua lingkungan |
| Imputasi median | NaN diganti median kolom; median tahan pencilan sehingga imputasi tidak tergeser data ekstrem |
| Koreksi pencilan | kandidat outlier dideteksi z-score (|z| > 2.5), lalu dipotong ke pagar Tukey [Q1-1.5*IQR, Q3+1.5*IQR] |
| Tiga figur analisis | line plot tren, histogram distribusi (subplot), grouped bar tahunan + errorbar std — headless, PNG 150 dpi |
| Laporan otomatis | laporan_ringkasan.txt: statistik per produk, tabel tahunan, temuan utama (produk terbaik, puncak musiman, tren), daftar figur |
| Idempoten | menjalankan ulang pada folder yang sama menimpa keluaran dengan isi identik |
| Test terstruktur | tests/uji_pipeline.m memeriksa CSV, pembersihan, statistik, figur, laporan, dan idempotensi dengan assert |
Tujuan Pembelajaran #
- Memecah analisis data menjadi pipeline modular: satu fungsi, satu tanggung jawab, dirangkai orkestrator.
- Menulis kode kompatibel dua mesin dengan pola guard
existuntuk I/O berkas. - Membersihkan data nyata secara terukur: menghitung
NaN, mengimputasi median, mendeteksi pencilan z-score, dan membatasi dengan pagar IQR. - Menggambar figur headless (
figure('visible','off')+print -dpng -r150) yang aman di server dan runner tanpa layar. - Menyusun laporan teks dengan
fprintfyang rata kolom serta temuan yang dihitung, bukan diketik. - Menguji pipeline end-to-end dan membuktikan idempotensi dengan
assertdanisequal.
Prasyarat #
Materi berikut perlu dikuasai sebelum memulai proyek ini:
- Statistik Deskriptif dari section Statistik dan Analisis Data (mean, std, median, kuantil)
- Missing Data dan Data Cleaning dari section Pengolahan Data
- Membaca File CSV dan Menulis File Data dari section Import dan Export Data
- Line Plot, Bar Chart, dan Histogram dari section Visualisasi Data
- Labels, Title, dan Legend, Subplot dan Layout, serta Export Figures dari section Visualisasi Data
- Assertions dan Unit Testing dari section Debugging dan Pengujian
Struktur Proyek #
Kode dipisah menjadi tujuh modul di src/ dan satu berkas uji di tests/:
visualisasi-dataset/
├── _index.md
├── bagian/
│ ├── pemilihan-dataset/
│ │ └── index.md
│ ├── import-dan-pembersihan-data/
│ │ └── index.md
│ ├── pembuatan-visualisasi/
│ │ └── index.md
│ └── ekspor-laporan/
│ └── index.md
├── src/
│ ├── buatDataset.m - dataset sintetis deterministik -> CSV
│ ├── muatData.m - baca CSV + laporan NaN & outlier
│ ├── bersihkanData.m - imputasi median + clip pagar IQR
│ ├── hitungStatistik.m - statistik per produk & per tahun
│ ├── buatVisualisasi.m - tiga figur PNG (headless, 150 dpi)
│ ├── eksporLaporan.m - laporan_ringkasan.txt
│ └── jalankanPipeline.m - orkestrasi enam tahap
└── tests/
└── uji_pipeline.m - uji end-to-end berbasis assertCara Menjalankan #
Buka folder proyek, pasang src/ ke path sekali per sesi, lalu panggil orkestrator dengan nama folder kerja:
addpath('src'); % sekali per sesi
hasil = jalankanPipeline('latihan');Program membuat folder latihan/ bila belum ada, lalu meninggalkan struktur keluaran berikut:
latihan/
├── data/
│ └── penjualan.csv - dataset mentah (36 baris, 3 produk)
└── hasil/
├── tren_bulanan.png - figur 1: tren bulanan tiga produk
├── distribusi_penjualan.png - figur 2: histogram per produk
├── perbandingan_tahunan.png - figur 3: total tahunan + std
└── laporan_ringkasan.txt - laporan siap dibagikanUntuk menguji seluruh proyek secara otomatis, jalankan berkas uji dari folder tests/:
>> uji_pipeline
== uji_pipeline.m ==
LULUS: CSV terbentuk dengan 36 baris data
LULUS: muatData menemukan 3 NaN dan 2 kandidat outlier
LULUS: pembersihan mengimputasi 3 NaN dan meng-clip 2 outlier
LULUS: statistik identik dengan hitungan manual
LULUS: 3 figur PNG dan laporan lengkap terbentuk
LULUS: eksekusi ulang idempoten (hasil identik)
folder uji dibersihkan: tidak ada residu di /tmp
Ringkasan: 6 kelompok uji lulus, 0 gagalTahapan Pengerjaan #
Proyek dikerjakan dalam empat bagian berurutan. Setiap bagian menghasilkan modul yang bisa dijalankan dan diuji pada tahapnya:
- Bagian 1: Pemilihan Dataset — pertanyaan analisis, kriteria dataset, rancangan formula sintetis, dan struktur kolom.
- Bagian 2: Import dan Pembersihan Data — baca CSV dengan guard, deteksi
NaN, imputasi median, dan koreksi pencilan. - Bagian 3: Pembuatan Visualisasi — tiga figur yang menjawab tiga pertanyaan analisis, digambar headless dan disimpan 150 dpi.
- Bagian 4: Ekspor Laporan — laporan teks terstruktur, temuan otomatis, idempotensi, uji end-to-end, dan checklist deliverable.
Mulailah dari Bagian 1 dan ikuti urutannya karena setiap modul dibangun di atas keluaran modul sebelumnya.
Tetapkan pertanyaan analisis, pilih dataset numerik, dan dokumentasikan struktur datanya.
Buka → # Bagian 2: Import dan Pembersihan DataBaca dataset dari CSV, tangani nilai kosong, dan normalisasi kolom yang dibutuhkan.
Buka → # Bagian 3: Pembuatan VisualisasiBangun grafik inti: tren, distribusi, dan perbandingan dalam layout multi-panel.
Buka → # Bagian 4: Ekspor LaporanEkspor figur resolusi tinggi dan ringkasan statistik ke struktur folder laporan.
Buka →