Analisis yang kokoh berdiri di atas data yang dikenal baik. Pada bagian ini kita menelusuri bagaimana data member Toko Kopi Kita terbentuk — dari kebiasaan pelanggan menyebut nama di kasir sampai baris yang tercetak pada ekspor — lalu membaca strukturnya dengan pandas. Tujuannya bukan sekadar bisa memuat berkas, melainkan memahami apa yang tercatat, apa yang tidak tercatat, dan tanda-tanda apa yang perlu dicurigai sebelum data dipakai lebih jauh.
Asal-Usul Data Program Member #
Aliran datanya sederhana. Saat membayar, pelanggan member menyebutkan namanya; pegawai memilih nama itu di aplikasi kasir; aplikasi menambahkan catatan kunjungan dan menotal belanjanya. Setiap pagi aplikasi menyimpan ringkasan per pelanggan, dan pada 17 Januari 2026 Bu Rina mengekspor rekap 30 hari terakhir untuk seluruh member aktif: 32 baris, satu baris per pelanggan. Perlu digarisbawahi: berkas ini adalah rekap agregat per pelanggan, bukan catatan transaksi satu per satu. Konsekuensinya kita tidak bisa bertanya “jam berapa pelanggan biasanya datang” atau “menu apa yang dibeli pada kunjungan ke berapa” — analisis kita terbatas pada apa yang memang tercatat.
Lima kolom pada berkas membawa informasi berikut:
| Kolom | Makna |
|---|---|
pelanggan | Nama pelanggan terdaftar pada program member |
kota | Kota tempat tinggal pelanggan |
kunjungan_30hari | Jumlah kunjungan selama 30 hari terakhir |
belanja_ribu | Total belanja 30 hari terakhir, dalam ribu rupiah |
menu_favorit | Menu minuman yang paling sering dibeli |
Membaca Berkas dan Mengintip Barisnya #
Berkas data/pelanggan.csv berformat CSV standar: baris pertama berisi nama kolom, nilai dipisah koma, satu baris per pelanggan. pandas membacanya dengan satu panggilan read_csv, lalu kita intip bagian awalnya untuk memastikan asumsi tentang bentuk data memang benar:
import pandas as pd
mentah = pd.read_csv("../data/pelanggan.csv")
print("Ukuran data:", mentah.shape)
print(mentah.head(6).to_string(index=False))Output yang Dihasilkan:
Ukuran data: (32, 5)
pelanggan kota kunjungan_30hari belanja_ribu menu_favorit
Siti Rahmawati Bandung 25 500 americano
Bambang Sutrisno Bandung 4 480 americano
Andi Firmansyah Bandung 10 400 matcha latte
Budi Santoso Bandung 22 462 kopi susu
Budi Santoso Bandung 22 462 kopi susu
Nurul Aini Bandung 12 420 teh tawarMari kita bedah keluarannya:
(32, 5): 32 baris dan 5 kolom, sesuai cerita ekspor — setidaknya untuk ukurannya.head(6)memperlihatkan enam baris pertama tanpa indeks (index=False) agar tabelnya rapi dibaca. Keenam barisnya sudah cukup mewakili ragam data: nama orang, nama kota, angka, dan nama menu.- Budi Santoso tampil dua kali — baris keempat dan kelima identik seluruhnya. Ini bukan kebetulan yang bisa diabaikan; kita akan diagnosa resmi pada Bagian 3.
belanja_ribuberarti 500 = Rp 500.000. Satuan ribu seperti ini lazim pada ekspor kasir; kita harus ingat terus faktor seribu ini saat membaca angka.
Membaca Tipe Data dan Nilai Unik #
Bentuk luar sudah terbaca; sekarang kita periksa bentuk dalamnya. Tipe data tiap kolom menentukan operasi apa yang bisa dijalankan, dan jumlah nilai unik sering membocorkan kejanggalan sebelum kita melihatnya satu per satu:
import pandas as pd
mentah = pd.read_csv("../data/pelanggan.csv")
print("Tipe data tiap kolom:")
print(mentah.dtypes.to_string())
print("\nJumlah nilai unik tiap kolom:")
print(mentah.nunique().to_string())Output yang Dihasilkan:
Tipe data tiap kolom:
pelanggan object
kota object
kunjungan_30hari object
belanja_ribu int64
menu_favorit object
Jumlah nilai unik tiap kolom:
pelanggan 31
kota 4
kunjungan_30hari 20
belanja_ribu 23
menu_favorit 4Keluaran tersebut menyiapkan tiga temuan yang menuntut penjelasan:
kunjungan_30haribertipeobject, bukan angka. Padahal kolom ini jelas berisi jumlah kunjungan. pandas menurunkan tipe dari isi: kalau ada satu saja sel yang bukan angka, seluruh kolom dibaca sebagai teks. Ada sesuatu di kolom ini yang belum kita lihat.- 32 baris tetapi hanya 31 nama pelanggan unik. Selaras dengan Budi Santoso yang tampil dua kali pada
head(6)— ada satu duplikat di dalam data. - 4 nilai kota unik, padahal member Toko Kopi Kita tinggal di tiga kota: Bandung, Cimahi, dan Sumedang. Satu nilai ekstra pasti berasal dari cara penulisan yang tidak seragam.
Tiga kejanggalan itu tidak membuat data rusak berat — 32 baris dengan tiga masalah kecil adalah kondisi yang sehat untuk data dunia nyata. Tetapi ketiganya wajib ditangani dengan sadar sebelum fitur dan clustering menyentuh data, karena duplikat menggelembungkan hitungan, kolom teks memblokir perhitungan angka, dan kota yang tak seragam akan pecah saat diagregasi. Detail pemakaiannya bisa dirujuk pada dokumentasi pandas.read_csv .
Struktur data kini dipahami, dan tiga masalahnya sudah dinamai satu per satu. Semuanya kita bedah dan bereskan pada Bagian 3: Membersihkan Data .