Fungsi reduksi meringkas sebuah array menjadi satu bilangan atau array yang lebih kecil, misalnya total, rata-rata, nilai terkecil, terbesar, dan simpangan baku. Topik ini membahas lima fungsi reduksi NumPy yang paling sering digunakan, yaitu sum, mean, min, max, dan std, beserta metode array yang setara dengannya, sehingga statistik dasar data array dapat dihitung tanpa perulangan eksplisit. Pembahasan masih memakai agregasi menyeluruh, yaitu seluruh elemen diringkas sekaligus, sedangkan pengagregatan per sumbu (axis) dibahas pada topik tersendiri.
Lima fungsi reduksi utama#
NumPy menyediakan fungsi reduksi yang mencakup statistik paling dasar. Fungsi np.sum menjumlahkan seluruh elemen, np.mean menghitung rata-ratanya, np.min dan np.max mencari nilai terkecil dan terbesar, sedangkan np.std menghitung simpangan baku (standard deviation), yaitu ukuran seberapa jauh nilai menyebar dari rata-ratanya. Kelima fungsi menerima array dengan jumlah dimensi apa pun dan, tanpa argumen tambahan, mengembalikan satu bilangan. Contoh berikut memakai array berisi nilai ujian enam siswa.
import numpy as np
nilai = np.array([72, 85, 60, 90, 78, 88])
print(nilai.sum())
print(np.mean(nilai))
print(np.min(nilai))
print(np.max(nilai))
print(np.std(nilai))473
78.83333333333333
60
90
10.398984993204332Setiap baris keluaran menerangkan satu fungsi. Jumlah seluruh nilai adalah 473, dengan rata-rata sekitar 78,83. Nilai terkecilnya 60 dan terbesarnya 90. Simpangan baku sekitar 10,40 menunjukkan bahwa nilai umumnya berjarak sekitar sepuluh poin dari rata-rata. Perhatikan bahwa mean dan std menghasilkan bilangan desimal, sedangkan sum, min, dan max pada array bilangan bulat tetap menghasilkan bilangan bulat.
Kelima fungsi tersebut menerima array sebagai argumen pertama, ditambah argumen opsional seperti axis dan dtype yang jarang diperlukan pada pemakaian dasar. Penghitungannya dikerjakan di dalam NumPy dan bukan melalui perulangan Python, sehingga memanggilnya satu kali pada array besar jauh lebih cepat daripada mengumpulkan elemen satu per satu. Pola inilah yang membedakan fungsi reduksi NumPy dari fungsi statistik bawaan Python, dan pola yang sama berlaku pada operasi array lainnya di seluruh jalur ini.
Metode array yang setara#
Setiap fungsi reduksi NumPy memiliki pasangan metode pada objek array, sehingga operasi yang sama dapat ditulis dalam dua bentuk. Pemanggilan nilai.sum() ekuivalen dengan np.sum(nilai), dan aturan yang sama berlaku untuk mean, min, max, serta std. Keduanya menghasilkan nilai yang persis sama, sehingga pilihan di antara keduanya adalah perkara keterbacaan.
import numpy as np
nilai = np.array([72, 85, 60, 90, 78, 88])
print(nilai.sum(), np.sum(nilai))
print(nilai.mean(), np.mean(nilai))
print(nilai.min(), np.min(nilai))
print(nilai.max(), np.max(nilai))
print(nilai.std(), np.std(nilai))473 473
78.83333333333333 78.83333333333333
60 60
90 90
10.398984993204332 10.398984993204332Kelima pasangan tersebut menghasilkan nilai yang sama. Bentuk metode lebih ringkas ketika array sudah tersimpan dalam variabel dan memungkinkan penulisan berantai seperti nilai.astype(float).mean(), sedangkan bentuk fungsi lebih eksplisit tentang asal operasinya. Bentuk fungsi juga dapat langsung menerima list Python tanpa perlu diubah menjadi array terlebih dahulu, misalnya np.sum([1, 2, 3]), sedangkan metode hanya dimiliki oleh objek ndarray. Dalam satu berkas, gunakan salah satu gaya secara konsisten agar kode mudah dibaca.
Pasangan ini juga berlaku pada argumen opsionalnya. Pemanggilan skor.sum(axis=0) dan np.sum(skor, axis=0) sama-sama sah, sehingga gaya yang dipilih tidak membatasi fitur yang dapat dipakai. Nama metode pada array mengikuti nama fungsinya, yaitu sum, mean, min, max, dan std, sehingga tidak ada perbedaan ejaan yang perlu dihafal.
Reduksi menyeluruh pada array dua dimensi#
Tanpa argumen tambahan, fungsi reduksi pada array dua dimensi meringkas seluruh elemen menjadi satu bilangan, tanpa memandang batas baris maupun kolom. Perilaku ini berbeda dengan intuisi tabel yang mengharapkan hasil per baris atau per kolom, sehingga bentuk array asal sama sekali tidak terbaca pada hasilnya.
import numpy as np
skor = np.array([[80, 92, 78, 88], [85, 74, 90, 79], [70, 82, 76, 84]])
print(skor.sum())
print(skor.mean())
print(skor.min(), skor.max())
print(skor.sum().dtype, skor.mean().dtype)978
81.5
70 92
int64 float64Array tersebut memuat dua belas nilai ujian dari tiga siswa dalam empat mapel, dan seluruhnya dijumlahkan menjadi 978 dengan rata-rata 81,5. Dua baris terakhir memperlihatkan tipe hasilnya. Penjumlahan array int64 menghasilkan int64, sedangkan mean selalu menghasilkan float64 meskipun datanya bilangan bulat, karena pembagian tidak selalu menghasilkan bilangan bulat. Kesadaran akan tipe hasil ini penting ketika hasil agregasi akan dipakai untuk perhitungan lanjutan.
Aturan yang sama berlaku untuk array dengan dimensi lebih dari dua. Reduksi tanpa axis tetap meringkas seluruh elemen menjadi satu bilangan, berapa pun banyaknya sumbu, karena semua elemen diperlakukan setara. Perlakuan menyeluruh ini berguna sebagai pemeriksaan cepat, misalnya memastikan total data sesuai harapan sebelum data dibedah per bagian.
Kesalahan umum#
Kesalahan pertama adalah menganggap np.std menghitung simpangan baku sampel. Secara default, np.std membagi dengan , sehingga hasilnya adalah simpangan baku populasi menurut rumus berikut.
Rumus kedua, yang membagi dengan , adalah simpangan baku sampel dan diperoleh dengan argumen ddof=1. Perbedaannya terlihat jelas pada array yang sama.
import numpy as np
nilai = np.array([72, 85, 60, 90, 78, 88])
print(np.std(nilai))
print(np.std(nilai, ddof=1))10.398984993204332
11.391517311871437Hasil defaultnya sekitar 10,40, sedangkan dengan ddof=1 hasilnya sekitar 11,39. Tidak ada yang salah di antara keduanya, tetapi laporan statistik biasanya menyatakan mana yang dipakai. Apabila data yang dimiliki adalah sampel dari populasi yang lebih besar, gunakan ddof=1 agar sesuai rumus simpangan baku sampel. Sebaliknya, bila data sudah mencakup seluruh populasi yang dianalisis, nilai default tanpa ddof sudah tepat.
Kesalahan kedua adalah memakai fungsi bawaan Python sum pada array NumPy. Fungsi tersebut tetap bekerja, tetapi menelusuri array elemen demi elemen melalui perulangan Python, sehingga jauh lebih lambat daripada np.sum untuk array berukuran besar. Perbaikannya adalah selalu menggunakan np.sum atau metode a.sum() ketika objek yang dijumlahkan adalah array NumPy, dan menyimpan fungsi bawaan sum untuk list serta jenis data Python lainnya.
Ringkasan#
- Fungsi reduksi
sum,mean,min,max, danstdmeringkas array menjadi satu bilangan, yaitu total, rata-rata, nilai terkecil, terbesar, dan simpangan baku. - Setiap fungsi memiliki pasangan metode pada array, sehingga
a.sum()dannp.sum(a)menghasilkan nilai yang sama. - Tanpa argumen tambahan, reduksi pada array dua dimensi meringkas seluruh elemen sekaligus, dengan
meandanstdselalu menghasilkanfloat64. np.stdsecara default menghitung simpangan baku populasi, dan simpangan baku sampel diperoleh denganddof=1.
Referensi#
- numpy.sum — NumPy
— Dokumentasi resmi fungsi penjumlahan, termasuk bentuk metode
ndarray.sumyang setara. - numpy.mean — NumPy — Dokumentasi resmi perhitungan rata-rata aritmetika beserta tipe hasilnya.
- numpy.std — NumPy
— Dokumentasi resmi simpangan baku, termasuk arti parameter
ddofdan nilai defaultnya. - NumPy: the absolute basics for beginners — NumPy
— Tutorial resmi yang memperkenalkan agregasi dengan
sum,min,max, danmean.