0Pricing
Pandas & NumPy Academy · Pelajaran

crosstab untuk Tabel Frekuensi

Hitung tabulasi silang frekuensi atau proporsi dari dua kolom kategorikal dengan pd.crosstab.

crosstab untuk Tabel Frekuensi adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa Itu Crosstab?

Tabulasi silang (crosstab) menghitung berapa kali setiap kombinasi nilai dari dua atau lebih variabel kategorikal muncul dalam suatu himpunan data. Ini merupakan kasus khusus tabel pivot yang dirancang khusus untuk penghitungan. Pandas menyediakan pd.crosstab() sebagai cara ringkas untuk menghitung tabel frekuensi ini tanpa perlu memanggil groupby() atau pivot_table() secara eksplisit.

Pemanggilan Dasar crosstab()

Pemanggilan minimal pd.crosstab(index, columns) menerima dua masukan mirip array (biasanya kolom DataFrame) dan mengembalikan tabel frekuensi. Baris berisi nilai unik dari argumen pertama, sedangkan kolom berisi nilai unik dari argumen kedua. Setiap sel berisi jumlah baris tempat kedua nilai tersebut muncul bersama dalam data asli.

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  2

Menyesuaikan Nama Baris dan Kolom

Gunakan parameter rownames dan colnames untuk memberikan nama yang bermakna pada sumbu baris dan kolom dalam keluaran, menggantikan nama Series default. Ini berguna ketika nama kolom mentah dalam DataFrame Anda tidak menjelaskan maknanya dalam konteks tabel yang dihasilkan.

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  2

Menambahkan Margin (Total Baris dan Kolom)

Berikan margins=True untuk menyertakan total baris dan kolom yang menjumlahkan semua nilai. Label margin secara default adalah 'All', tetapi dapat disesuaikan dengan margins_name. Baris margin menunjukkan jumlah total untuk setiap kolom, kolom margin menunjukkan jumlah total untuk setiap baris, dan sel kanan bawah menunjukkan total keseluruhan.

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      7

Menormalisasi Menjadi Proporsi

Berikan parameter normalize untuk mengubah jumlah menjadi proporsi. normalize=True atau normalize='all' membagi dengan total keseluruhan. normalize='index' menghitung proporsi baris (setiap baris berjumlah 1,0). normalize='columns' menghitung proporsi kolom (setiap kolom berjumlah 1,0). Proporsi lebih informatif daripada jumlah mentah ketika ukuran kelompok berbeda.

# 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))

Mengagregasi Nilai, Bukan Menghitung Jumlah

Secara default, crosstab menghitung jumlah baris. Sebagai gantinya, Anda dapat mengagregasi kolom numerik dengan memberikan parameter values dan aggfunc — mirip dengan pivot_table(). Misalnya, hitung total pendapatan untuk setiap kombinasi gender dan produk. Hal ini membuat crosstab hampir setara dengan pivot_table, tetapi dengan sintaks yang sedikit lebih ringkas untuk penggunaan tabel frekuensi.

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

Crosstab Multi-Tingkat

Berikan daftar pada index atau columns untuk membuat crosstab dengan beberapa tingkat pada baris atau kolom. Hasilnya memiliki MultiIndex, sehingga memberikan perincian yang lebih mendalam. Misalnya, melakukan tabulasi silang gender dan wilayah pada baris terhadap produk pada kolom akan menampilkan setiap kombinasi gender-wilayah-produk.

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    7

crosstab() vs pivot_table()

pd.crosstab() dan pd.pivot_table() memiliki banyak kesamaan. crosstab dioptimalkan untuk menghitung frekuensi dan menerima masukan mirip array secara langsung (bukan DataFrame), sehingga sedikit lebih ringkas untuk tabulasi cepat. pivot_table bekerja pada DataFrame dan secara bawaan mendukung fungsi agregasi apa pun. Untuk tugas yang hanya menghitung jumlah, crosstab adalah pilihan idiomatis; untuk mengagregasi nilai numerik, pilih pivot_table.

# 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 result

Persiapan Uji Chi-Kuadrat

Crosstab adalah masukan standar untuk uji chi-kuadrat independensi, yang menguji apakah dua variabel kategorikal memiliki hubungan secara statistik. Fungsi scipy.stats.chi2_contingency() menerima array crosstab secara langsung. Ini merupakan salah satu penggunaan crosstab yang paling umum dalam analisis data statistik — Anda menghitung tabel, lalu mengujinya dalam satu alur kerja.

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 association

Memvisualisasikan Crosstab sebagai Heatmap

Crosstab dengan banyak kategori sulit ditafsirkan jika ditampilkan sebagai angka mentah. Memvisualisasikannya sebagai heatmap menggunakan sns.heatmap() membuat pola segera terlihat — sel dengan frekuensi tinggi tampil dalam warna yang lebih terang. Teruskan versi yang telah dinormalisasi untuk menampilkan proporsi, bukan jumlah mentah, dan gunakan annot=True untuk menampilkan nilai di setiap sel.

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))

Contoh Praktis: Analisis Survei

Alur kerja crosstab lengkap: memuat data survei, menghitung tabel frekuensi antara variabel demografis dan variabel respons, menormalisasi berdasarkan baris untuk mendapatkan tingkat respons, serta mengidentifikasi pola yang kuat. Ini adalah alur analisis standar dalam riset pasar, pengujian A/B, dan segmentasi pengguna, dan dapat diselesaikan dalam kurang dari 10 baris kode Pandas.

# 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)

Pemeriksaan Singkat

Uji pemahaman Anda tentang pd.crosstab untuk membuat tabel frekuensi dari pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini Anda mempelajari bahwa pd.crosstab() menghitung frekuensi kemunculan untuk kombinasi dua variabel kategorikal; normalize mengubah hitungan menjadi proporsi baris, kolom, atau total; margins=True menambahkan total baris dan kolom; serta keluaran crosstab kompatibel secara langsung dengan uji chi-kuadrat dan visualisasi peta panas. Selanjutnya, kita akan bekerja dengan data deret waktu menggunakan DatetimeIndex dan rentang periode.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “crosstab untuk Tabel Frekuensi” gratis?

Ya — teks lengkap “crosstab untuk Tabel Frekuensi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “crosstab untuk Tabel Frekuensi”?

Hitung tabulasi silang frekuensi atau proporsi dari dua kolom kategorikal dengan pd.crosstab. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “crosstab untuk Tabel Frekuensi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. pivot_table: Tabulasi Silang
  2. melt: Format Lebar ke Panjang
  3. stack dan unstack dengan MultiIndex
  4. crosstab untuk Tabel Frekuensi
← Kembali ke Pandas & NumPy Academy