Menghitung hal-hal terdengar sepele sampai hasilnya meleset sedikit—atau banyak. Saya sering melihat pemeriksaan frekuensi dilakukan dengan pemanggilan list.count() berulang atau metode pandas yang disalahgunakan sehingga diam-diam melewatkan nilai yang hilang. Akibatnya: kode lambat dan angka yang keliru. Solusinya adalah menggunakan alat yang tepat untuk pekerjaan tersebut: collections.Counter untuk peta frekuensi, count() bawaan untuk kueri nilai tunggal yang cepat, dan value_counts() dari pandas saat Anda berada di dalam DataFrame.
Apa itu Counter dan Cara Kerjanya
collections.Counter adalah subclass dictionary untuk menghitung objek yang dapat di-hash (multiset). Anda dapat membangun Counter dari iterable atau mapping. Kunci yang tidak ada akan bernilai default 0; hitungan dapat ditambah atau dikurangi; dan beberapa metode bantu memudahkan tugas umum.
from collections import Counter
# From an iterable (one pass over the data)
nyc_eatery_types =["Mobile Food Truck","Food Cart","Snack Bar","Restaurant","Food Cart","Restaurant","Mobile Food Truck","Snack Bar","Mobile Food Truck"]
eatery_type_counts = Counter(nyc_eatery_types)print(eatery_type_counts)# dict-like viewprint(eatery_type_counts["Restaurant"])# missing keys return 0 instead of KeyErrorprint(eatery_type_counts["Kiosk"])Didukung oleh
Counter({'Mobile Food Truck':3,'Food Cart':2,'Snack Bar':2,'Restaurant':2})20Didukung oleh
Jangan mengandalkan urutan iterasi sebuah Counter. Saat Anda butuh tampilan berperingkat, gunakan most_common().
Menemukan Nilai Paling Umum dengan most_common()
Counter.most_common(n) mengembalikan daftar pasangan (item, count) dalam urutan menurun berdasarkan hitungan. Berikan n untuk membatasi hasil, atau kosongkan untuk mendapatkan semua pasangan.
top_3 = eatery_type_counts.most_common(3)print(top_3)Didukung oleh
[('Mobile Food Truck',3),('Food Cart',2),('Snack Bar',2)]Didukung oleh
Gunakan ini saat Anda membutuhkan analitik frekuensi, papan peringkat, atau pemeriksaan cepat atas data kategorikal.
Lebih Banyak dengan Counter
memperbarui dan mengurangkan hitungan
Data bisnis berubah. update() menambah hitungan, sedangkan subtract() menguranginya. Keduanya menerima iterable atau mapping.
new_permits =["Restaurant","Food Cart","Restaurant"]
eatery_type_counts.update(new_permits)# add 1 for each occurrenceprint(eatery_type_counts)
closures ={"Snack Bar":1}
eatery_type_counts.subtract(closures)# reduce counts (can go negative)print(eatery_type_counts)Didukung oleh
Jika suatu hitungan turun ke 0 atau kurang, metode seperti elements() dan most_common() akan mengabaikannya. Untuk menghapus kunci sepenuhnya, gunakan del counter[key].
menghitung total dan top-N
Mulai Python 3.10, Counter.total() mengembalikan jumlah semua hitungan. Ini berguna saat Anda membutuhkan proporsi atau pangsa.
total_permits = eatery_type_counts.total()for eatery, count in eatery_type_counts.most_common(3):
share = count / total_permits
print(f"{eatery}: {count} ({share:.1%})")Didukung oleh
membangun ulang urutan dengan elements()
elements() menghasilkan setiap elemen sebanyak hitungannya. Urutannya sewenang-wenang.
expanded =list(eatery_type_counts.elements())print(len(expanded),"items reconstructed from counts")Didukung oleh
menggunakan operasi matematika dan bergaya himpunan
Anda dapat menggabungkan counter dengan operasi aritmetika dan operasi min/maks. Hasilnya membuang hitungan nol dan negatif.
from collections import Counter
a = Counter({"Food Cart":5,"Restaurant":2})
b = Counter({"Food Cart":3,"Snack Bar":4})print(a + b)# add countsprint(a - b)# subtract (keeps positives only)print(a & b)# intersection: min of countsprint(a | b)# union: max of countsDidukung oleh
Kapan Menggunakan list.count(), Counter, atau pandas
Pilih alat paling sederhana yang memenuhi kebutuhan dan batasan kinerja Anda.
pemeriksaan nilai tunggal dengan count()
Gunakan count() bawaan saat Anda hanya perlu mengetahui berapa kali satu nilai muncul dalam sebuah urutan atau jumlah substring tidak bertumpang tindih dalam string.
numbers =[1,2,2,3,2]print(numbers.count(2))# 3
word ="banana"print(word.count("a"))# 3
text ="aaa"print(text.count("aa"))# 1: non-overlapping matches onlyprint("cat".count(""))# 4: empty string counts len(s)+1 positionsDidukung oleh
Berhati-hatilah dengan boolean dan integer: True == 1 dan False == 0. Ini dapat membesar-besarkan hitungan jika Anda mencampur tipe.
mixed =[1,True,0,False,True]print(mixed.count(1))# 3 (counts 1 and True)print(mixed.count(0))# 2 (counts 0 and False)Didukung oleh
Hindari memanggil count() berulang di dalam loop pada data besar; setiap panggilan memindai seluruh urutan.
# Inefficient: O(n^2) for large lists# freq = {x: numbers.count(x) for x in numbers}# Efficient: one passfrom collections import Counter
freq = Counter(numbers)Didukung oleh
banyak frekuensi dengan Counter
Saat Anda membutuhkan hitungan untuk banyak nilai unik, bangun Counter sekali dan kueri sesuai kebutuhan. Jelas, cepat, dan dirancang untuk kasus penggunaan ini.
data tabular dengan pandas
Di pandas, DataFrame.count() dan Series.count() menghitung nilai yang tidak hilang. Untuk mendapatkan tabel frekuensi nilai, gunakan Series.value_counts().
import pandas as pd
df = pd.DataFrame({"line":["A","A","B",None,"B","B"],"ridership":[100,None,120,130,None,150],})print(df["line"].count())# 5 (non-missing)print(df["line"].value_counts())# value frequencies# For full row count, use len(df), not df.count()print(len(df))# 6Didukung oleh
Validasi dan bersihkan data dengan Counter
Sebelum analisis, saya memeriksa konsistensi kategori, nilai tak terduga, dan duplikasi. Counter membuat pemeriksaan ini cepat dan berulang.
from collections import Counter
# Example: validate allowed categories
allowed_types ={"Mobile Food Truck","Food Cart","Snack Bar","Restaurant"}
type_counts = Counter(nyc_eatery_types)
unexpected ={t: c for t, c in type_counts.items()if t notin allowed_types}if unexpected:print("Unexpected categories found:", unexpected)# Example: flag duplicates (e.g., station IDs appearing more than once)
station_ids =["ST-001","ST-002","ST-003","ST-002","ST-004","ST-002"]
dup_counts = Counter(station_ids)
duplicates =[sid for sid, c in dup_counts.items()if c >1]print("Duplicate station IDs:", duplicates)Didukung oleh
Catatan praktis dan jebakan umum
Rincian ini menghemat waktu dan mencegah bug yang halus.
Counter mirip dict: kunci yang tidak ada mengembalikan 0; gunakan del counter[key] untuk menghapus entri. Hindari menyimpan nol kecuali Anda membutuhkannya sementara.
Jangan mengandalkan urutan iterasi. Gunakan most_common() untuk keluaran berperingkat.
str.count() menghitung kecocokan yang tidak bertumpang tindih. Untuk hitungan substring yang bertumpang tindih, gunakan re.finditer().
Hindari pemanggilan list.count() berulang pada urutan besar yang sama. Bangun satu Counter saja.
Di pandas, .count() untuk hitungan nilai tidak hilang; gunakan .value_counts() untuk frekuensi nilai.
Pola minimal yang saya andalkan
Ini adalah potongan kode yang paling sering saya gunakan di produksi dan pengajaran.
Peta frekuensi satu lintasan: Counter(iterable)
Kategori Top-N: Counter(data).most_common(n)
Pembaruan inkremental: counter.update(batch) atau counter.subtract(batch)
Pemeriksaan nilai tunggal: sequence.count(x) (hindari dalam loop)
collections.Counter adalah alat yang tepat untuk menghitung banyak nilai secara cepat dan jelas. Gunakan count() bawaan untuk pemeriksaan satu kali, Counter untuk peta frekuensi dan analisis top-N, serta Series.value_counts() saat Anda bekerja di pandas. Perhatikan kasus tepi penghitungan string, kesetaraan boolean–integer, dan perbedaan antara hitungan nilai tidak hilang dan frekuensi nilai. Dengan pola-pola ini, hitungan Anda akan cepat dan tepat.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Selami ilmu data dengan Python dan pelajari cara menganalisis serta memvisualisasikan data Anda secara efektif. Tak perlu pengalaman atau keterampilan coding.
Menghitung hal-hal terdengar sepele sampai hasilnya meleset sedikit—atau banyak. Saya sering melihat pemeriksaan frekuensi dilakukan dengan pemanggilan
list.count()berulang atau metode pandas yang disalahgunakan sehingga diam-diam melewatkan nilai yang hilang. Akibatnya: kode lambat dan angka yang keliru. Solusinya adalah menggunakan alat yang tepat untuk pekerjaan tersebut:collections.Counteruntuk peta frekuensi,count()bawaan untuk kueri nilai tunggal yang cepat, danvalue_counts()dari pandas saat Anda berada di dalam DataFrame.Apa itu Counter dan Cara Kerjanya
collections.Counteradalah subclass dictionary untuk menghitung objek yang dapat di-hash (multiset). Anda dapat membangunCounterdari iterable atau mapping. Kunci yang tidak ada akan bernilai default 0; hitungan dapat ditambah atau dikurangi; dan beberapa metode bantu memudahkan tugas umum.Jangan mengandalkan urutan iterasi sebuah
Counter. Saat Anda butuh tampilan berperingkat, gunakanmost_common().Menemukan Nilai Paling Umum dengan most_common()
Counter.most_common(n)mengembalikan daftar pasangan(item, count)dalam urutan menurun berdasarkan hitungan. Berikannuntuk membatasi hasil, atau kosongkan untuk mendapatkan semua pasangan.Gunakan ini saat Anda membutuhkan analitik frekuensi, papan peringkat, atau pemeriksaan cepat atas data kategorikal.
Lebih Banyak dengan Counter
memperbarui dan mengurangkan hitungan
Data bisnis berubah.
update()menambah hitungan, sedangkansubtract()menguranginya. Keduanya menerima iterable atau mapping.Jika suatu hitungan turun ke 0 atau kurang, metode seperti
elements()danmost_common()akan mengabaikannya. Untuk menghapus kunci sepenuhnya, gunakandel counter[key].menghitung total dan top-N
Mulai Python 3.10,
Counter.total()mengembalikan jumlah semua hitungan. Ini berguna saat Anda membutuhkan proporsi atau pangsa.membangun ulang urutan dengan elements()
elements()menghasilkan setiap elemen sebanyak hitungannya. Urutannya sewenang-wenang.menggunakan operasi matematika dan bergaya himpunan
Anda dapat menggabungkan counter dengan operasi aritmetika dan operasi min/maks. Hasilnya membuang hitungan nol dan negatif.
Kapan Menggunakan list.count(), Counter, atau pandas
Pilih alat paling sederhana yang memenuhi kebutuhan dan batasan kinerja Anda.
pemeriksaan nilai tunggal dengan count()
Gunakan
count()bawaan saat Anda hanya perlu mengetahui berapa kali satu nilai muncul dalam sebuah urutan atau jumlah substring tidak bertumpang tindih dalam string.Berhati-hatilah dengan boolean dan integer:
True == 1danFalse == 0. Ini dapat membesar-besarkan hitungan jika Anda mencampur tipe.Hindari memanggil
count()berulang di dalam loop pada data besar; setiap panggilan memindai seluruh urutan.banyak frekuensi dengan Counter
Saat Anda membutuhkan hitungan untuk banyak nilai unik, bangun
Countersekali dan kueri sesuai kebutuhan. Jelas, cepat, dan dirancang untuk kasus penggunaan ini.data tabular dengan pandas
Di pandas,
DataFrame.count()danSeries.count()menghitung nilai yang tidak hilang. Untuk mendapatkan tabel frekuensi nilai, gunakanSeries.value_counts().Validasi dan bersihkan data dengan Counter
Sebelum analisis, saya memeriksa konsistensi kategori, nilai tak terduga, dan duplikasi.
Countermembuat pemeriksaan ini cepat dan berulang.Catatan praktis dan jebakan umum
Rincian ini menghemat waktu dan mencegah bug yang halus.
Countermirip dict: kunci yang tidak ada mengembalikan 0; gunakandel counter[key]untuk menghapus entri. Hindari menyimpan nol kecuali Anda membutuhkannya sementara.most_common()untuk keluaran berperingkat.str.count()menghitung kecocokan yang tidak bertumpang tindih. Untuk hitungan substring yang bertumpang tindih, gunakanre.finditer().list.count()berulang pada urutan besar yang sama. Bangun satuCountersaja..count()untuk hitungan nilai tidak hilang; gunakan.value_counts()untuk frekuensi nilai.Pola minimal yang saya andalkan
Ini adalah potongan kode yang paling sering saya gunakan di produksi dan pengajaran.
Counter(iterable)Counter(data).most_common(n)counter.update(batch)ataucounter.subtract(batch)sequence.count(x)(hindari dalam loop)df["col"].value_counts()(bukandf.count())Kesimpulan
collections.Counteradalah alat yang tepat untuk menghitung banyak nilai secara cepat dan jelas. Gunakancount()bawaan untuk pemeriksaan satu kali,Counteruntuk peta frekuensi dan analisis top-N, sertaSeries.value_counts()saat Anda bekerja di pandas. Perhatikan kasus tepi penghitungan string, kesetaraan boolean–integer, dan perbedaan antara hitungan nilai tidak hilang dan frekuensi nilai. Dengan pola-pola ini, hitungan Anda akan cepat dan tepat.