Bir şeyleri saymak, sonuçlar az ya da çok sapınca önemsiz olmaktan çıkar. Sıklık kontrollerinin tekrarlı list.count() çağrılarıyla ya da eksik değerleri sessizce atlayan yanlış pandas yöntemleriyle yapıldığını gördüm. Sonuç: yavaş kod ve hatalı sayılar. Çözüm, işe uygun aracı kullanmaktır: sıklık haritaları için collections.Counter, tek bir değeri hızlıca sorgulamak için yerleşik count() ve DataFrame içindeyken pandas value_counts().
Counter Nedir ve Nasıl Çalışır
collections.Counter, hashlenebilir nesneleri saymak için (çoklu küme) bir sözlük alt sınıfıdır. Bir yinelenebilirden (iterable) ya da eşlemeden (mapping) bir Counter oluşturabilirsiniz. Eksik anahtarların varsayılanı 0’dır; sayımlar artırılıp azaltılabilir; birkaç kullanışlı yöntem yaygın işleri kolaylaştırır.
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"])Altyapı:
Counter’ın yineleme sırasına güvenmeyin. Sıralı bir görünüm gerektiğinde most_common() kullanın.
En Yaygın Değerleri most_common() ile Bulma
Counter.most_common(n), azalan sayım sırasına göre (öğe, sayı) çiftlerinin bir listesini döndürür. Sonucu sınırlamak için n verin ya da tüm çiftleri almak için atlayın.
Bir sayım 0’a ya da altına düşerse, elements() ve most_common() gibi yöntemler onu yok sayar. Bir anahtarı tamamen kaldırmak için del counter[key] kullanın.
toplamları ve en-İlk N’i hesaplama
Python 3.10’dan itibaren, Counter.total() tüm sayımların toplamını döndürür. Oranlar veya paylar gerektiğinde kullanışlıdır.
elements(), her öğeyi sayısı kadar verir. Sıra keyfidir.
expanded =list(eatery_type_counts.elements())print(len(expanded),"items reconstructed from counts")Altyapı:
matematik ve küme-tarzı işlemler kullanma
Sayaçları aritmetik ve min/maks tarzı işlemlerle birleştirebilirsiniz. Sonuçlar 0 ve negatif sayımları düşürür.
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 countsAltyapı:
list.count(), Counter veya pandas Ne Zaman Kullanılır
Gereksinimlerinizi ve performans kısıtlarınızı karşılayan en basit aracı seçin.
count() ile tek değer kontrolleri
Bir dizide yalnızca bir değerin kaç kez geçtiğini ya da bir dizgede örtüşmeyen alt dize sayımını bilmeniz gerektiğinde yerleşik count() kullanın.
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 positionsAltyapı:
Bool ve tamsayılarla dikkatli olun: True == 1 ve False == 0. Türleri karıştırırsanız sayımlar şişebilir.
mixed =[1,True,0,False,True]print(mixed.count(1))# 3 (counts 1 and True)print(mixed.count(0))# 2 (counts 0 and False)Altyapı:
Büyük verilerde döngüler içinde count()’u tekrar tekrar çağırmaktan kaçının; her çağrı tüm diziyi tarar.
# 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)Altyapı:
Counter ile birden çok sıklık
Birçok benzersiz değer için sayımlar gerektiğinde, bir kez Counter oluşturun ve gerektiğinde sorgulayın. Bu kullanım için açık, hızlı ve tasarlanmıştır.
pandas ile tablosal veriler
pandas’ta, DataFrame.count() ve Series.count() eksik olmayan sayımları hesaplar. Değerlerin bir sıklık tablosunu almak için Series.value_counts() kullanın.
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))# 6Altyapı:
Counter ile veriyi doğrulayın ve temizleyin
Analizden önce, kategorik tutarlılığı, beklenmedik değerleri ve yinelenenleri kontrol ederim. Counter bu kontrolleri hızlı ve tekrarlanabilir kılar.
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)Altyapı:
Pratik notlar ve yaygın tuzaklar
Bu ayrıntılar zaman kazandırır ve sinsi hataları önler.
Counter sözlük gibidir: eksik anahtarlar 0 döner; girdileri kaldırmak için del counter[key] kullanın. Geçici olarak gerekmedikçe sıfırları depolamaktan kaçının.
Yineleme sırasına güvenmeyin. Sıralı çıktı için most_common() kullanın.
str.count() örtüşmeyen eşleşmeleri sayar. Örtüşen alt dize sayımları için re.finditer() kullanın.
Aynı büyük dizi üzerinde tekrarlı list.count() çağrılarından kaçının. Bunun yerine tek bir Counter oluşturun.
pandas’ta .count() eksik-olmayan sayımlar içindir; değer sıklıkları için .value_counts() kullanın.
Sık kullandığım minimal kalıplar
Bunlar, üretimde ve eğitimde en sık kullandığım kod parçacıklarıdır.
Tek geçişli sıklık haritası: Counter(iterable)
En-İlk N kategoriler: Counter(data).most_common(n)
Artımsal güncellemeler: counter.update(batch) veya counter.subtract(batch)
Tek değer kontrolü: sequence.count(x) (döngülerde kaçının)
collections.Counter, birden çok değeri hızlı ve anlaşılır biçimde saymak için doğru araçtır. Tek seferlik kontroller için yerleşik count()’u, sıklık haritaları ve en-İlk N analiz için Counter’ı ve pandas ile çalışırken Series.value_counts()’ı kullanın. Dizge sayımındaki köşe durumlarına, boolean–tamsayı eşdeğerliğine ve eksik-olmayan sayımlar ile değer sıklıkları arasındaki farka dikkat edin. Bu kalıplarla sayımlarınız hem hızlı hem doğru olacaktır.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Bir şeyleri saymak, sonuçlar az ya da çok sapınca önemsiz olmaktan çıkar. Sıklık kontrollerinin tekrarlı
list.count()çağrılarıyla ya da eksik değerleri sessizce atlayan yanlış pandas yöntemleriyle yapıldığını gördüm. Sonuç: yavaş kod ve hatalı sayılar. Çözüm, işe uygun aracı kullanmaktır: sıklık haritaları içincollections.Counter, tek bir değeri hızlıca sorgulamak için yerleşikcount()ve DataFrame içindeyken pandasvalue_counts().Counter Nedir ve Nasıl Çalışır
collections.Counter, hashlenebilir nesneleri saymak için (çoklu küme) bir sözlük alt sınıfıdır. Bir yinelenebilirden (iterable) ya da eşlemeden (mapping) birCounteroluşturabilirsiniz. Eksik anahtarların varsayılanı 0’dır; sayımlar artırılıp azaltılabilir; birkaç kullanışlı yöntem yaygın işleri kolaylaştırır.Counter’ın yineleme sırasına güvenmeyin. Sıralı bir görünüm gerektiğindemost_common()kullanın.En Yaygın Değerleri most_common() ile Bulma
Counter.most_common(n), azalan sayım sırasına göre(öğe, sayı)çiftlerinin bir listesini döndürür. Sonucu sınırlamak içinnverin ya da tüm çiftleri almak için atlayın.Bunu sıklık analitiği, sıralama tabloları veya kategorik verilerde hızlı sağlama kontrolleri için kullanın.
Counter ile Daha Fazlası
sayımları update ve subtract ile değiştirme
İş verileri değişir.
update()sayımları artırır,subtract()ise azaltır. Her ikisi de yinelenebilirleri veya eşlemeleri kabul eder.Bir sayım 0’a ya da altına düşerse,
elements()vemost_common()gibi yöntemler onu yok sayar. Bir anahtarı tamamen kaldırmak içindel counter[key]kullanın.toplamları ve en-İlk N’i hesaplama
Python 3.10’dan itibaren,
Counter.total()tüm sayımların toplamını döndürür. Oranlar veya paylar gerektiğinde kullanışlıdır.elements() ile dizileri yeniden kurma
elements(), her öğeyi sayısı kadar verir. Sıra keyfidir.matematik ve küme-tarzı işlemler kullanma
Sayaçları aritmetik ve min/maks tarzı işlemlerle birleştirebilirsiniz. Sonuçlar 0 ve negatif sayımları düşürür.
list.count(), Counter veya pandas Ne Zaman Kullanılır
Gereksinimlerinizi ve performans kısıtlarınızı karşılayan en basit aracı seçin.
count() ile tek değer kontrolleri
Bir dizide yalnızca bir değerin kaç kez geçtiğini ya da bir dizgede örtüşmeyen alt dize sayımını bilmeniz gerektiğinde yerleşik
count()kullanın.Bool ve tamsayılarla dikkatli olun:
True == 1veFalse == 0. Türleri karıştırırsanız sayımlar şişebilir.Büyük verilerde döngüler içinde
count()’u tekrar tekrar çağırmaktan kaçının; her çağrı tüm diziyi tarar.Counter ile birden çok sıklık
Birçok benzersiz değer için sayımlar gerektiğinde, bir kez
Counteroluşturun ve gerektiğinde sorgulayın. Bu kullanım için açık, hızlı ve tasarlanmıştır.pandas ile tablosal veriler
pandas’ta,
DataFrame.count()veSeries.count()eksik olmayan sayımları hesaplar. Değerlerin bir sıklık tablosunu almak içinSeries.value_counts()kullanın.Counter ile veriyi doğrulayın ve temizleyin
Analizden önce, kategorik tutarlılığı, beklenmedik değerleri ve yinelenenleri kontrol ederim.
Counterbu kontrolleri hızlı ve tekrarlanabilir kılar.Pratik notlar ve yaygın tuzaklar
Bu ayrıntılar zaman kazandırır ve sinsi hataları önler.
Countersözlük gibidir: eksik anahtarlar 0 döner; girdileri kaldırmak içindel counter[key]kullanın. Geçici olarak gerekmedikçe sıfırları depolamaktan kaçının.most_common()kullanın.str.count()örtüşmeyen eşleşmeleri sayar. Örtüşen alt dize sayımları içinre.finditer()kullanın.list.count()çağrılarından kaçının. Bunun yerine tek birCounteroluşturun..count()eksik-olmayan sayımlar içindir; değer sıklıkları için.value_counts()kullanın.Sık kullandığım minimal kalıplar
Bunlar, üretimde ve eğitimde en sık kullandığım kod parçacıklarıdır.
Counter(iterable)Counter(data).most_common(n)counter.update(batch)veyacounter.subtract(batch)sequence.count(x)(döngülerde kaçının)df["col"].value_counts()(df.count()değil)Sonuç
collections.Counter, birden çok değeri hızlı ve anlaşılır biçimde saymak için doğru araçtır. Tek seferlik kontroller için yerleşikcount()’u, sıklık haritaları ve en-İlk N analiz içinCounter’ı ve pandas ile çalışırkenSeries.value_counts()’ı kullanın. Dizge sayımındaki köşe durumlarına, boolean–tamsayı eşdeğerliğine ve eksik-olmayan sayımlar ile değer sıklıkları arasındaki farka dikkat edin. Bu kalıplarla sayımlarınız hem hızlı hem doğru olacaktır.