Operator aritmatika bawaan cukup untuk penjumlahan dan perkalian sehari-hari, tetapi program nyata sering butuh lebih: pembulatan ke atas, akar kuadrat, faktorial, atau rata-rata sekumpulan data penjualan. Daripada menulis rumus sendiri, Python menyediakan dua module siap pakai: math untuk matematika klasik dan statistics untuk statistik deskriptif. Keduanya bagian dari standard library, jadi tidak perlu menginstal apa pun.
Module math: Pembulatan dan Nilai Dasar #
Module math berisi function yang menerima dan mengembalikan angka. Kita mulai dari yang paling sering dipakai:
import math
print(math.ceil(7.2), math.floor(7.8))
print(math.sqrt(144))
print(math.fabs(-15.75))Output yang Dihasilkan:
8 7
12.0
15.75Mari kita bedah kode di atas:
- Baris 3 (
math.ceil(7.2)): functionceil()membulatkan angka ke atas menjadi8, sedangkanmath.floor(7.8)membulatkan ke bawah menjadi7. - Baris 4 (
math.sqrt(144)): functionsqrt()mengembalikan akar kuadrat sebagaifloat, yaitu12.0. - Baris 5 (
math.fabs(-15.75)): functionfabs()mengambil nilai absolut dan selalu mengembalikanfloat(15.75), berbeda dengan built-inabs()yang mengembalikan integer saat inputnya integer.
Berikut ringkasan function math yang paling sering dipakai:
| Function | Tugas | Contoh |
|---|---|---|
math.ceil(x) | Bulatkan ke atas | ceil(7.2) → 8 |
math.floor(x) | Bulatkan ke bawah | floor(7.8) → 7 |
math.sqrt(x) | Akar kuadrat | sqrt(144) → 12.0 |
math.fabs(x) | Nilai absolut (float) | fabs(-15.75) → 15.75 |
math.factorial(n) | Faktorial n! | factorial(6) → 720 |
math.gcd(a, b) | Faktor persekutuan terbesar | gcd(48, 60) → 12 |
math.log(x, base) | Logaritma | log(8, 2) → 3.0 |
math.pow(x, y) | Pangkat sebagai float | pow(2, 10) → 1024.0 |
Satu hal yang menarik: math.pow() hampir selalu lebih baik diganti operator **. Keduanya menghitung pangkat, tetapi hasilnya berbeda tipe:
import math
print(math.factorial(6))
print(math.gcd(48, 60))
print(math.log(8, 2))
print(math.pow(2, 10), 2 ** 10)Output yang Dihasilkan:
720
12
3.0
1024.0 1024Perhatikan baris terakhir: math.pow(2, 10) mengembalikan 1024.0 (float), sedangkan 2 ** 10 mengembalikan 1024 (integer). Gunakan operator ** untuk bilangan bulat agar hasil tetap presisi, dan gunakan math.pow() hanya saat kita memang bekerja di ranah float.
Nilai Khusus: inf dan nan #
Module math juga menyediakan alat untuk menangani dua nilai khusus: infinity (inf) dan not a number (nan). Nilai nan muncul dari operasi matematika yang tidak terdefinisi, misalnya inf - inf:
import math
tak_terhingga = float("inf")
selisih = tak_terhingga - tak_terhingga
print(selisih == selisih)
print(math.isnan(selisih))Output yang Dihasilkan:
False
TrueNilai nan punya sifat unik: nan tidak pernah sama dengan nilai apa pun, termasuk dirinya sendiri. Karena itu, membandingkan dengan == menghasilkan False, dan satu-satunya cara yang benar untuk mendeteksinya adalah math.isnan().
Module statistics untuk Data Nyata #
Module statistics menghitung ukuran statistik dasar dari sekumpulan data. Sebagai contoh, kita pakai data jumlah unit terjual selama delapan hari:
import statistics
unit_terjual = [120, 135, 150, 150, 160, 175, 190, 210]
print(statistics.mean(unit_terjual))
print(statistics.median(unit_terjual))
print(statistics.mode(unit_terjual))
print(statistics.stdev(unit_terjual))
print(statistics.variance(unit_terjual))Output yang Dihasilkan:
161.25
155.0
150
29.368350311176826
862.5Mari kita bedah peran setiap function:
- Baris 5 (
statistics.mean(...)): menghitung rata-rata, yaitu1290 / 8 = 161.25. - Baris 6 (
statistics.median(...)): mengambil nilai tengah. Karena jumlah data genap, functionmedian()mengambil rata-rata dua nilai tengah:(150 + 160) / 2 = 155.0. - Baris 7 (
statistics.mode(...)): mengembalikan nilai yang paling sering muncul, yaitu150(muncul dua kali). - Baris 8 (
statistics.stdev(...)): menghitung standard deviation (simpangan baku) sampel yang mengukur seberapa menyebar data terhadap rata-rata. - Baris 9 (
statistics.variance(...)): menghitung variansi sampel, yaitu kuadrat dari standard deviation (29.36...² ≈ 862.5).
| Function | Pertanyaan yang dijawab |
|---|---|
mean(data) | Berapa rata-rata datanya? |
median(data) | Mana nilai tengahnya? |
mode(data) | Nilai apa yang paling sering muncul? |
stdev(data) | Seberapa menyebar datanya (sampel)? |
variance(data) | Berapa variansi sampelnya? |
Untuk analisis angka yang jauh lebih berat, ekosistem Python menyediakan pandas dan NumPy. Namun untuk rata-rata, median, dan simpangan baku satu list, module statistics lebih dari cukup dan tidak menambah dependensi apa pun.