Analisis Univariat
Analisis setiap kolom secara terpisah: plot distribusi untuk data numerik dan jumlah nilai untuk data kategorikal, lalu catat pencilan dan kemencengan.
Analisis Univariat adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 2 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 Analisis Univariat?
Analisis univariat memeriksa satu kolom pada satu waktu secara terpisah, tanpa memperhatikan hubungan antarkolom. Tujuannya adalah memahami distribusi setiap variabel, mendeteksi pencilan, mengidentifikasi kecondongan, dan menemukan masalah kualitas data sebelum pemodelan dimulai. Analisis univariat berbeda untuk kolom numerik dan kategorikal — kolom numerik memerlukan plot distribusi dan statistik ringkasan, sedangkan kolom kategorikal memerlukan jumlah frekuensi dan proporsi.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric_cols = df.select_dtypes('number').columns.tolist()
categoric_cols = df.select_dtypes('object').columns.tolist()
print('Numeric columns:', numeric_cols)
print('Categorical columns:', categoric_cols)Histogram untuk Kolom Numerik
Buat histogram untuk setiap kolom numerik guna melihat bentuk distribusinya. Perhatikan simetri vs. kecondongan (ekor di salah satu sisi), modalitas (satu puncak vs. beberapa puncak), dan anomali yang terlihat jelas (nilai di ujung ekstrem yang tampaknya tidak masuk akal). Di Pandas, df.hist() membuat kisi histogram untuk banyak kolom dengan cepat tanpa perlu menulis perulangan, tetapi histplot dari Seaborn memberikan kontrol yang lebih terperinci untuk setiap kolom.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('titanic')
# Quick multi-column histogram grid
numeric = df.select_dtypes('number')
numeric.hist(bins=20, figsize=(12, 8), layout=(2, 3), color='steelblue', edgecolor='white')
plt.suptitle('Univariate Distributions (Numeric Columns)', y=1.02)
plt.tight_layout()
plt.show()Statistik Ringkasan untuk Kolom Numerik
Untuk setiap kolom numerik, hitung dan bandingkan mean vs. median. Jika mean > median secara signifikan, distribusinya condong ke kanan (ekor kanan panjang, umum pada data pendapatan dan harga). Jika mean < median, distribusinya condong ke kiri. Periksa juga simpangan baku relatif terhadap mean: std yang lebih besar daripada mean pada variabel non-negatif menandakan variabilitas tinggi atau adanya pencilan. Hitung kecondongan secara langsung dengan df.skew().
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')
summary = pd.DataFrame({
'mean': numeric.mean(),
'median': numeric.median(),
'std': numeric.std(),
'skewness': numeric.skew(),
'missing_pct': (numeric.isna().sum() / len(df) * 100).round(1)
}).round(2)
print(summary)Plot Kotak untuk Mendeteksi Pencilan
Plot kotak adalah alat visual tercepat untuk menemukan pencilan pada kolom numerik. Setiap titik di luar garis whisker (1.5×IQR dari Q1 atau Q3) diplot secara terpisah dan ditandai sebagai kemungkinan pencilan. Kolom dengan banyak titik pencilan perlu diselidiki: apakah titik-titik tersebut merupakan kesalahan entri data, nilai ekstrem yang sah, atau bukti distribusi non-normal? Plot kotak juga menunjukkan kecondongan ke kanan atau kiri melalui posisi median yang tidak simetris di dalam kotak.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('titanic')
fig, axes = plt.subplots(1, 3, figsize=(14, 5))
for ax, col in zip(axes, ['age', 'fare', 'sibsp']):
df[[col]].boxplot(ax=ax)
ax.set_title(f'Box Plot: {col}')
plt.tight_layout()
plt.show()Jumlah Pencilan Berbasis IQR
Metode IQR (Rentang Antarkuartil) mendefinisikan pencilan sebagai nilai di bawah Q1 - 1.5×IQR atau di atas Q3 + 1.5×IQR. Anda dapat menghitungnya secara terprogram untuk menghitung dan memeriksa pencilan di setiap kolom numerik tanpa membuat plot. Hal ini berguna dalam pipeline otomatis ketika Anda perlu mencatat jumlah anomali, bukan membuat grafik. Keputusan tentang penanganan pencilan — menghapus, membatasi, atau menandainya — harus dibuat dengan sengaja berdasarkan pengetahuan domain.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')
Q1 = numeric.quantile(0.25)
Q3 = numeric.quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
outlier_counts = ((numeric < lower) | (numeric > upper)).sum()
print('Outlier counts per column:')
print(outlier_counts[outlier_counts > 0])Jumlah Nilai untuk Kolom Kategorikal
Untuk setiap kolom kategorikal, panggil value_counts() untuk melihat distribusi observasi di berbagai kategori. Selalu periksa: apakah satu kategori mendominasi (>80%)? Hal ini menyebabkan ketidakseimbangan kelas dalam tugas klasifikasi. Apakah ada kategori langka yang hanya memiliki 1-2 observasi (salah ketik atau kesalahan entri data)? Apakah distribusinya sesuai dengan ekspektasi bisnis (misalnya, kolom 'country' yang menunjukkan sebagian besar pesanan berasal dari negara yang tidak terduga)?
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
for col in ['sex', 'embarked', 'class', 'who']:
counts = df[col].value_counts(dropna=False)
pct = (counts / len(df) * 100).round(1)
result = pd.DataFrame({'count': counts, 'pct%': pct})
print(f'\n--- {col} ---')
print(result)Diagram Batang untuk Variabel Kategorikal
Visualisasikan jumlah nilai kategorikal sebagai diagram batang menggunakan sns.countplot atau dengan memanggil value_counts().plot(kind='bar'). Urutkan batang dari yang paling sering hingga paling jarang agar pembaca dapat langsung melihat kategori dominan. Untuk variabel biner (ya/tidak, pria/wanita), diagram lingkaran dapat digunakan — tetapi untuk lebih dari 3 kategori, diagram batang selalu lebih jelas. Putar label penanda sebesar 45 derajat jika nama kategori panjang.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('titanic')
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
sns.countplot(data=df, x='embarked', order=df['embarked'].value_counts().index, ax=axes[0])
axes[0].set_title('Embarkation Port Counts')
sns.countplot(data=df, x='class', order=['First', 'Second', 'Third'], ax=axes[1])
axes[1].set_title('Passenger Class Counts')
plt.tight_layout()
plt.show()Mendeteksi Kecondongan dan Menerapkan Transformasi
Kolom numerik yang sangat condong ke kanan (kecondongan > 1.5) sering kali dapat diperbaiki dengan transformasi logaritmik agar menjadi lebih simetris. Hal ini penting untuk banyak pengujian statistik dan beberapa algoritme ML yang mengasumsikan kenormalan. Terapkan np.log1p() (log(x+1), aman untuk nilai yang mendekati nol), lalu periksa kembali kecondongannya. Bandingkan histogram sebelum dan sesudah transformasi untuk memastikan distribusinya menjadi lebih menyerupai lonceng.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('titanic')
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
sns.histplot(df['fare'], bins=30, kde=True, ax=axes[0])
axes[0].set_title(f'fare (skew={df["fare"].skew():.2f})')
log_fare = np.log1p(df['fare'])
sns.histplot(log_fare, bins=30, kde=True, ax=axes[1], color='coral')
axes[1].set_title(f'log1p(fare) (skew={log_fare.skew():.2f})')
plt.tight_layout()
plt.show()Memeriksa Kolom dengan Varians Nol
Kolom dengan varians nol (semua nilainya identik) tidak memberikan informasi bagi model apa pun dan sebaiknya dihapus. Kolom dengan varians mendekati nol (99% baris memiliki nilai yang sama) juga tidak berguna. Hitung varians dengan df.var() lalu lakukan penyaringan. Periksa juga kolom dengan nunique() == len(df) — kolom tersebut kemungkinan merupakan kolom ID yang tidak boleh digunakan sebagai fitur, tetapi mungkin berguna sebagai pengenal baris.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')
# Zero-variance columns
zero_var = numeric.columns[numeric.var() == 0].tolist()
print('Zero-variance columns:', zero_var)
# Near-zero variance (std < 0.01)
nzv = numeric.columns[numeric.std() < 0.01].tolist()
print('Near-zero variance:', nzv)
# Likely ID columns (all unique values)
id_candidates = [c for c in df.columns if df[c].nunique() == len(df)]
print('Likely ID columns:', id_candidates)Perulangan Otomatisasi Analisis Univariat
Daripada mengulangi analisis yang sama secara manual untuk setiap kolom, tulislah perulangan yang mengiterasi semua kolom numerik dan mencetak statistik penting dalam format terstruktur. Dengan demikian, Anda dapat memindai puluhan kolom dengan cepat dan menandai kolom yang perlu diperhatikan. Output tersebut dapat disimpan ke dalam file CSV sebagai bagian dari log audit pipeline yang dapat ditinjau pemangku kepentingan sebelum data digunakan dalam pemodelan.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
numeric = df.select_dtypes('number')
rows = []
for col in numeric.columns:
s = df[col]
Q1, Q3 = s.quantile(0.25), s.quantile(0.75)
IQR = Q3 - Q1
n_outliers = ((s < Q1 - 1.5*IQR) | (s > Q3 + 1.5*IQR)).sum()
rows.append({
'column': col,
'missing_pct': round(s.isna().mean() * 100, 1),
'mean': round(s.mean(), 2),
'std': round(s.std(), 2),
'skew': round(s.skew(), 2),
'outliers': int(n_outliers)
})
report = pd.DataFrame(rows)
print(report.to_string(index=False))Mendokumentasikan Temuan Univariat
Setelah menyelesaikan analisis univariat, dokumentasikan temuan Anda secara sistematis. Untuk setiap kolom, catat: bentuk distribusi (condong, bimodal, kurang lebih normal), persentase nilai yang hilang dan strategi imputasi yang direncanakan, jumlah pencilan dan keputusan penanganannya (batasi, hapus, tandai), serta nilai mencurigakan yang memerlukan klarifikasi domain. Dokumentasi ini menjadi log kualitas data yang memandu langkah-langkah pembersihan dan mencegah keputusan terlupakan atau diperdebatkan di kemudian hari.
Pemeriksaan Singkat
Uji pemahaman Anda tentang analisis univariat dari pelajaran ini.
Rangkuman Pelajaran
Dalam pelajaran ini Anda mempelajari: histogram mengungkapkan bentuk distribusi kolom numerik, plot kotak dan pagar IQR mengidentifikasi pencilan, dan value_counts mengungkapkan frekuensi kategori untuk kolom kategorikal. Mengotomatiskan pemeriksaan ini dalam sebuah perulangan akan menghasilkan laporan kualitas yang dapat digunakan kembali. Berikutnya kita akan membahas analisis bivariat dan korelasi — memahami hubungan antara pasangan kolom.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Analisis Univariat” gratis?
Ya — teks lengkap “Analisis Univariat” 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 “Analisis Univariat”?
Analisis setiap kolom secara terpisah: plot distribusi untuk data numerik dan jumlah nilai untuk data kategorikal, lalu catat pencilan dan kemencengan. 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 2 dari 4.
Berapa lama pelajaran “Analisis Univariat” 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
- Daftar Periksa Pemrofilan Dataset
- Analisis Univariat
- Analisis Bivariat dan Korelasi
- Merangkum Temuan dalam Laporan