Data yang dikumpulkan dari banyak sumber hampir pasti mengandung duplikasi: ID transaksi tercatat dua kali, nama kota berulang, atau ID pelanggan yang muncul di dua channel sekaligus. np.unique merapikan satu array menjadi daftar nilai unik, sedangkan keluarga fungsi set operation — union1d, intersect1d, setdiff1d, setxor1d — membandingkan dua array seperti operasi himpunan pada matematika.
Semua fungsi pada bab ini mengembalikan hasil yang unik dan terurut menaik. Sifat itu membuat np.unique sekaligus menjadi alat deteksi duplikat yang praktis: bila len(np.unique(a)) lebih kecil dari len(a), array a pasti berisi nilai ganda.
unique: Nilai Unik Secara Terurut #
import numpy as np
transaksi = np.array([3, 1, 3, 5, 2, 1, 3])
print(np.unique(transaksi))
kota = np.array(["Medan", "Bali", "Medan", "Solo", "Bali", "Solo"])
print(np.unique(kota))Output yang Dihasilkan:
[1 2 3 5]
['Bali' 'Medan' 'Solo']Penjelasan singkat:
- Baris 4 (
np.unique(transaksi)): tujuh nilai transaksi diringkas menjadi empat nilai unik[1 2 3 5], terurut menaik. - Baris 7 (
np.unique(kota)): array string juga ditangani; urutannya leksikografis (abjad), sehingga'Bali'mendahului'Medan'.
Tiga Opsi return_* untuk Analisis Frekuensi #
np.unique punya tiga parameter bendera yang menambah keluaran: return_index, return_counts, dan return_inverse. Ketika salah satu diaktifkan, fungsi mengembalikan tuple, bukan satu array.
import numpy as np
transaksi = np.array([3, 1, 3, 5, 2, 1, 3])
unik, indeks = np.unique(transaksi, return_index=True)
print(unik)
print(indeks)
unik, jumlah = np.unique(transaksi, return_counts=True)
print(jumlah)
unik, balik = np.unique(transaksi, return_inverse=True)
print(balik)
print(unik[balik])Output yang Dihasilkan:
[1 2 3 5]
[1 4 0 3]
[2 1 3 1]
[2 0 2 3 1 0 2]
[3 1 3 5 2 1 3]Mari kita bedah kelima baris keluaran:
- Baris 5 (
print(unik)): nilai unik terurut[1 2 3 5]— dasar bagi semua keluaran lain. - Baris 6 (
indeks, darireturn_index=True):[1 4 0 3]adalah posisi kemunculan pertama tiap nilai unik:1pertama muncul di indeks 1,2di indeks 4,3di indeks 0, dan5di indeks 3. - Baris 8 (
jumlah, darireturn_counts=True):[2 1 3 1]berarti1muncul dua kali,2sekali,3tiga kali, dan5sekali. Pasanganunikdanjumlahmembentuk tabel frekuensi sederhana. - Baris 10 (
balik, darireturn_inverse=True):[2 0 2 3 1 0 2]memetakan setiap elemen asli ke posisinya di array unik — elemen pertama3menunjuk posisi 2 array unik, dan seterusnya. - Baris 11 (
unik[balik]): membuktikan pemetaan tersebut; hasilnya persis array asli.return_inverseberguna untuk memberi “ID ringkas” pada banyak baris data.
Operasi Himpunan antara Dua Dataset #
Empat fungsi berikut membandingkan dua kelompok ID pelanggan: yang berbelanja lewat channel online dan yang datang langsung ke toko. Semua fungsi memperlakukan isi array sebagai himpunan, sehingga hasilnya selalu unik dan terurut.
import numpy as np
pelanggan_online = np.array([101, 103, 105, 107])
pelanggan_toko = np.array([103, 107, 108])
print(np.union1d(pelanggan_online, pelanggan_toko))
print(np.intersect1d(pelanggan_online, pelanggan_toko))
print(np.setdiff1d(pelanggan_online, pelanggan_toko))
print(np.setxor1d(pelanggan_online, pelanggan_toko))Output yang Dihasilkan:
[101 103 105 107 108]
[103 107]
[101 105]
[101 105 108]Tabel berikut merangkum keempatnya:
| Fungsi | Padanan himpunan | Arti pada contoh | Hasil |
|---|---|---|---|
np.union1d(A, B) | A gabung B | semua pelanggan dari dua channel | [101 103 105 107 108] |
np.intersect1d(A, B) | A irisan B | berbelanja di kedua channel | [103 107] |
np.setdiff1d(A, B) | A dikurangi B | hanya pernah online | [101 105] |
np.setxor1d(A, B) | A xor B | hanya muncul di salah satu channel | [101 105 108] |
Perhatikan urutan argumen: np.setdiff1d(pelanggan_toko, pelanggan_online) memberi hasil berbeda, yaitu [108] — pelanggan yang hanya datang ke toko.
Opsi assume_unique #
Keluaran yang selalu di-unik-kan tidak gratis: tiap fungsi set operation menjalankan langkah unique internal pada masukannya. Jika kita tahu pasti kedua array bebas duplikat, berikan assume_unique=True agar langkah itu dilewati. Namun jika asumsinya keliru, hasilnya tidak lagi merupakan himpunan yang benar.
import numpy as np
a = np.array([1, 1, 2, 3])
b = np.array([2])
print(np.setdiff1d(a, b))
print(np.setdiff1d(a, b, assume_unique=True))Output yang Dihasilkan:
[1 3]
[1 1 3]Yang berbeda di sini:
- Baris 5 (tanpa opsi):
np.setdiff1dmenjalankan pembersihan duplikat internal, sehingga hasilnya benar-benar himpunan[1 3]meskipunaberisi dua1. - Baris 6 (
assume_unique=True): fungsi memercayai klaim kita bahwaaunik. Klaim itu keliru, sehingga duplikat1bocor ke hasil[1 1 3].