Frekans Tabloları için crosstab
İki kategorik sütunun frekans veya oran çapraz tablosunu pd.crosstab ile hesaplayın.
Frekans Tabloları için crosstab, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
Crosstab Nedir?
Çapraz tabülasyon (crosstab), iki veya daha fazla kategorik değişkenden alınan her değer birleşiminin bir veri kümesinde kaç kez göründüğünü sayar. Özellikle sayım için tasarlanmış özel bir pivot tablosu türüdür. Pandas, açıkça groupby() veya pivot_table() çağırmaya gerek kalmadan bu sıklık tablolarını hesaplamak için kısa bir yol olarak pd.crosstab() işlevini sunar.
Temel crosstab() Çağrısı
En temel pd.crosstab(index, columns) çağrısı, dizi benzeri iki girdi (genellikle DataFrame sütunları) alır ve bir sıklık tablosu döndürür. Satırlar ilk bağımsız değişkendeki benzersiz değerlere, sütunlar ise ikinci bağımsız değişkendeki benzersiz değerlere karşılık gelir. Her hücre, özgün verilerde her iki değerin birlikte bulunduğu satırların sayısını içerir.
import pandas as pd
df = pd.DataFrame({
'gender': ['M', 'F', 'M', 'F', 'M', 'F', 'M'],
'product': ['A', 'A', 'B', 'B', 'A', 'B', 'B']
})
ct = pd.crosstab(df['gender'], df['product'])
print(ct)
# product A B
# gender
# F 1 2
# M 2 2Satır ve Sütun Adlarını Özelleştirme
Çıktıdaki satır ve sütun eksenlerine anlamlı adlar vermek için rownames ve colnames parametrelerini kullanın; bu parametreler varsayılan Series adlarını geçersiz kılar. Bu, DataFrame'inizdeki ham sütun adları oluşturulan tablonun bağlamında kendiliğinden açıklayıcı olmadığında kullanışlıdır.
ct = pd.crosstab(
df['gender'], df['product'],
rownames=['Customer Gender'],
colnames=['Purchased Product']
)
print(ct)
# Purchased Product A B
# Customer Gender
# F 1 2
# M 2 2Kenar Toplamlarını Ekleme (Satır ve Sütun Toplamları)
Tüm değerleri toplayan bir satır ve sütun eklemek için margins=True aktarın. Kenar etiketi varsayılan olarak 'All' değeridir; ancak margins_name ile özelleştirilebilir. Kenar satırı sütun başına toplam sayıyı, kenar sütunu satır başına toplam sayıyı, sağ alt hücre ise genel toplamı gösterir.
ct = pd.crosstab(df['gender'], df['product'],
margins=True, margins_name='Total')
print(ct)
# product A B Total
# gender
# F 1 2 3
# M 2 2 4
# Total 3 4 7Oranlara Dönüştürme
Sayımları oranlara dönüştürmek için normalize parametresini aktarın. normalize=True veya normalize='all', genel toplama böler. normalize='index', satır oranlarını hesaplar (her satırın toplamı 1.0 olur). normalize='columns', sütun oranlarını hesaplar (her sütunun toplamı 1.0 olur). Grupların boyutları farklı olduğunda oranlar, ham sayımlardan daha bilgilendiricidir.
# Row proportions: what fraction of each gender bought each product?
print(pd.crosstab(df['gender'], df['product'], normalize='index').round(2))
# product A B
# gender
# F 0.33 0.67
# M 0.50 0.50
# All proportions: each cell as fraction of grand total
print(pd.crosstab(df['gender'], df['product'], normalize=True).round(2))Saymak Yerine Değerleri Birleştirme
Varsayılan olarak crosstab satırları sayar. Bunun yerine values ve aggfunc parametrelerini aktararak sayısal bir sütun üzerinde toplulaştırma yapabilirsiniz; bu işlem pivot_table() işlemine benzer. Örneğin her cinsiyet-ürün birleşimi için toplam geliri hesaplayabilirsiniz. Bu, crosstab işlevini pivot_table işlevine neredeyse eşdeğer kılar; ancak sıklık tablosu kullanım senaryosu için söz dizimi biraz daha kısadır.
df['revenue'] = [100, 80, 150, 120, 200, 90, 130]
# Sum revenue by gender and product instead of counting
ct_rev = pd.crosstab(
df['gender'], df['product'],
values=df['revenue'],
aggfunc='sum'
)
print(ct_rev)
# product A B
# gender
# F 80 210
# M 300 280Çok Düzeyli Crosstab
Satırlarda veya sütunlarda birden çok düzey içeren bir crosstab oluşturmak için index ya da columns parametresine bir liste aktarın. Sonuç, daha ayrıntılı bir döküm sağlayan bir MultiIndex içerir. Örneğin satırlarda cinsiyet ve bölgeyi, sütunlarda ise ürünü çapraz tablolamak her cinsiyet-bölge-ürün birleşimini gösterir.
df['region'] = ['East', 'West', 'East', 'West', 'East', 'East', 'West']
ct_multi = pd.crosstab(
[df['gender'], df['region']],
df['product'],
margins=True
)
print(ct_multi)
# product A B All
# gender region
# F East 0 1 1
# West 1 1 2
# M East 2 1 3
# West 0 1 1
# All 3 4 7crosstab() ve pivot_table() Karşılaştırması
pd.crosstab() ve pd.pivot_table() önemli ölçüde örtüşür. crosstab, sıklık sayımı için iyileştirilmiştir ve dizi benzeri girdileri doğrudan alır (DataFrame almaz); bu nedenle hızlı tablolar için biraz daha kısadır. pivot_table bir DataFrame üzerinde çalışır ve her toplulaştırma işlevini yerel olarak destekler. Yalnızca sayım yapılan görevlerde crosstab deyimsel tercihtir; sayısal değerleri toplulaştırmak için pivot_table kullanmayı tercih edin.
# crosstab (more concise for counting)
print(pd.crosstab(df['gender'], df['product']))
# Equivalent pivot_table
print(pd.pivot_table(df, index='gender', columns='product',
aggfunc='size', fill_value=0))
# Both produce the same resultKi-Kare Testine Hazırlık
Crosstab, iki kategorik değişkenin istatistiksel olarak ilişkili olup olmadığını sınayan bağımsızlık ki-kare testinin standart girdisidir. scipy.stats.chi2_contingency() işlevi bir crosstab dizisini doğrudan kabul eder. Bu, istatistiksel veri analizinde crosstab'ın en yaygın kullanım alanlarından biridir: tabloyu hesaplar ve ardından aynı iş akışı içinde test edersiniz.
from scipy import stats
ct = pd.crosstab(df['gender'], df['product'])
# Convert to numpy array for scipy
chi2, p, dof, expected = stats.chi2_contingency(ct.values)
print(f'Chi2: {chi2:.2f}')
print(f'P-value: {p:.4f}')
print(f'Degrees of freedom: {dof}')
# p > 0.05 means no significant associationCrosstab'ı Isı Haritası Olarak Görselleştirme
Çok sayıda kategori içeren crosstab'ları ham sayılar olarak yorumlamak zordur. Bunları sns.heatmap() ile ısı haritası olarak görselleştirmek, örüntüleri hemen görünür kılar; yüksek sıklıklı hücreler parlak renklerle gösterilir. Ham sayımlar yerine oranları göstermek için normalize edilmiş sürümü aktarın ve her hücredeki değerleri görüntülemek için annot=True kullanın.
import seaborn as sns
import matplotlib.pyplot as plt
ct_norm = pd.crosstab(df['gender'], df['product'], normalize='index')
# sns.heatmap(ct_norm, annot=True, fmt='.0%', cmap='Blues')
# plt.title('Purchase Rate by Gender and Product')
# plt.tight_layout()
# plt.show()
print('Normalised crosstab ready for heatmap:')
print(ct_norm.round(2))Uygulamalı Örnek: Anket Analizi
Eksiksiz bir crosstab iş akışı şöyledir: anket verilerini yüklemek, demografik değişkenler ile yanıt değişkenleri arasındaki sıklık tablolarını hesaplamak, yanıt oranlarını elde etmek için satırlara göre normalleştirmek ve güçlü örüntüleri belirlemek. Bu, pazar araştırması, A/B testleri ve kullanıcı segmentasyonundaki standart analiz iş akışıdır; ayrıca 10'dan az Pandas kod satırıyla tamamlanabilir.
# Simulate a survey dataset
survey = pd.DataFrame({
'age_group': ['18-25', '26-35', '18-25', '36-45', '26-35', '36-45'],
'satisfaction': ['High', 'Low', 'High', 'Medium', 'High', 'Low']
})
ct = pd.crosstab(survey['age_group'], survey['satisfaction'],
margins=True, margins_name='Total')
print(ct)
rates = pd.crosstab(survey['age_group'], survey['satisfaction'],
normalize='index').round(2)
print(rates)Hızlı Kontrol
Bu derste öğrendiklerinizle sıklık tabloları için pd.crosstab konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: pd.crosstab(), iki kategorik değişkenin birleşimleri için sıklık sayılarını hesaplar; normalize, sayımları satır, sütun veya toplam oranlarına dönüştürür; margins=True, satır ve sütun toplamlarını ekler; crosstab çıktısı ki-kare testleri ve ısı haritası görselleştirmeleriyle doğrudan uyumludur. Sırada DatetimeIndex ve dönem aralıklarını kullanarak zaman serisi verileriyle çalışacağız.
Yapay zeka eğitmeniyle Python öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Frekans Tabloları için crosstab” dersi ücretsiz mi?
Evet — “Frekans Tabloları için crosstab” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
“Frekans Tabloları için crosstab” dersinde ne öğreneceğim?
İki kategorik sütunun frekans veya oran çapraz tablosunu pd.crosstab ile hesaplayın. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Frekans Tabloları için crosstab” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- pivot_table: Çapraz Tablo
- melt: Geniş Biçimden Uzun Biçime
- MultiIndex ile stack ve unstack
- Frekans Tabloları için crosstab