Statistik · Pelajaran 5 dari 9
Mengelompokkan dan meringkas
9 menit baca · BelajarCode
Pertanyaan analisis sering berbentuk "per kelompok": rata-rata nilai per kelas, total penjualan per produk, jumlah siswa per jenis kelamin. Polanya selalu sama: kelompokkan, lalu ringkas.
Kelompokkan dengan dictionary berisi list
1penjualan = [2 ("Senin", "Kopi", 12), ("Senin", "Teh", 8), ("Selasa", "Kopi", 15),3 ("Selasa", "Roti", 6), ("Rabu", "Kopi", 9), ("Rabu", "Teh", 11),4 ("Rabu", "Roti", 4),5]67per_produk = {}8for hari, produk, jumlah in penjualan:9 per_produk.setdefault(produk, []).append(jumlah)1011print(f"{'Produk':<6} {'Total':>5} {'Rata':>5} {'Hari':>4}")12for produk, daftar in sorted(per_produk.items(), key=lambda p: sum(p[1]), reverse=True):13 print(f"{produk:<6} {sum(daftar):>5} {sum(daftar) / len(daftar):>5.1f} {len(daftar):>4}")Produk Total Rata Hari Kopi 36 12.0 3 Teh 19 9.5 2 Roti 10 5.0 2
Tabel silang
Tabel silang (pivot table) meringkas data menurut dua kelompok sekaligus, misalnya hari dan produk.
1penjualan = [2 ("Senin", "Kopi", 12), ("Senin", "Teh", 8), ("Selasa", "Kopi", 15),3 ("Selasa", "Roti", 6), ("Rabu", "Kopi", 9), ("Rabu", "Teh", 11),4 ("Rabu", "Roti", 4),5]6hari_list = ["Senin", "Selasa", "Rabu"]7produk_list = ["Kopi", "Teh", "Roti"]89silang = {}10for hari, produk, jumlah in penjualan:11 silang[(hari, produk)] = silang.get((hari, produk), 0) + jumlah1213print(f"{'':<7}" + "".join(f"{p:>6}" for p in produk_list) + f"{'Total':>7}")14for hari in hari_list:15 isi = [silang.get((hari, p), 0) for p in produk_list]16 print(f"{hari:<7}" + "".join(f"{x:>6}" for x in isi) + f"{sum(isi):>7}")Kopi Teh Roti Total Senin 12 8 0 20 Selasa 15 0 6 21 Rabu 9 11 4 24
Kunci dictionary berupa tuple (hari, produk) sehingga setiap sel tabel punya tempatnya sendiri.
Pustaka pandas
Analis data profesional biasanya memakai pustaka pandas, yang punya perintah groupby dan pivot_table untuk pekerjaan seperti ini. Memahami cara kerjanya dengan dictionary seperti di atas membuatmu lebih mudah memahami pandas nanti.
Cek pemahaman
Kamu punya data transaksi berisi kolom kota dan nilai belanja. Untuk mencari rata-rata belanja per kota, apa langkah pertamanya?
Latihan
Rata-rata per kelas
Dari data berikut, hitung banyak siswa, rata-rata, dan nilai tertinggi untuk setiap kelas.
[("XI-1", 80), ("XI-2", 92), ("XI-1", 70), ("XI-2", 65), ("XI-3", 88), ("XI-1", 85)]
Pembahasan
1data = [("XI-1", 80), ("XI-2", 92), ("XI-1", 70), ("XI-2", 65), ("XI-3", 88), ("XI-1", 85)]2kelompok = {}3for kelas, nilai in data:4 kelompok.setdefault(kelas, []).append(nilai)56for kelas in sorted(kelompok):7 n = kelompok[kelas]8 print(f"{kelas}: {len(n)} siswa, rata-rata {sum(n) / len(n):.1f}, tertinggi {max(n)}")XI-1: 3 siswa, rata-rata 78.3, tertinggi 85 XI-2: 2 siswa, rata-rata 78.5, tertinggi 92 XI-3: 1 siswa, rata-rata 88.0, tertinggi 88
Hati-hati menyimpulkan bahwa XI-3 paling pintar. Kelas itu hanya punya satu data, terlalu sedikit untuk dibandingkan.
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.