Analisis Bivariat dan Korelasi
Jelajahi hubungan antara pasangan kolom menggunakan plot sebaran, plot kotak, dan peta panas korelasi.
Analisis Bivariat dan Korelasi adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.
Dari Satu Variabel Menjadi Dua
Analisis bivariat memeriksa hubungan antara tepat dua kolom pada satu waktu. Setelah membuat profil setiap kolom secara terpisah (analisis univariat), Anda menanyakan: bagaimana hubungan antara kedua variabel ini? Metode analisis bergantung pada kombinasi tipe variabel: numerik vs. numerik (plot sebar + korelasi), kategorikal vs. numerik (plot kotak/biola), atau kategorikal vs. kategorikal (tabulasi silang + khi-kuadrat). Setiap kombinasi memerlukan teknik yang berbeda.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
# Relationship types present in the dataset
print('Numeric columns:', df.select_dtypes('number').columns.tolist())
print('Categorical columns:', df.select_dtypes('object').columns.tolist())
print('Boolean columns:', df.select_dtypes('bool').columns.tolist())Numerik vs. Numerik: Plot Sebar
Untuk dua variabel numerik, plot sebar adalah alat utama analisis bivariat. Plot ini menampilkan setiap observasi sebagai titik pada koordinat (x, y), sehingga memperlihatkan arah, kekuatan, dan bentuk hubungan. Selalu amati plot sebelum menghitung koefisien korelasi — korelasi 0 tetap dapat menunjukkan hubungan nonlinier (melengkung) yang kuat dan tidak ditangkap oleh koefisien tersebut.
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
sns.scatterplot(data=df, x='age', y='fare', alpha=0.4)
plt.title('Age vs. Fare — Is There a Linear Relationship?')
plt.xlabel('Age')
plt.ylabel('Fare ($)')
plt.show()Koefisien Korelasi Pearson
Pearson r mengukur kekuatan dan arah hubungan linier antara dua variabel numerik. Hitung dengan df[['col1', 'col2']].corr() atau scipy.stats.pearsonr(x, y), yang juga mengembalikan nilai p untuk pengujian signifikansi. Selalu pasangkan r dengan plot sebar — nilai r yang tinggi dapat disebabkan oleh beberapa pencilan, dan nilai r yang sama dapat menggambarkan bentuk sebaran yang sangat berbeda (Kuartet Anscombe terkenal menunjukkan hal ini).
import pandas as pd
import seaborn as sns
from scipy import stats
df = sns.load_dataset('titanic').dropna(subset=['age', 'fare'])
# Pearson correlation
r, p = stats.pearsonr(df['age'], df['fare'])
print(f'Pearson r = {r:.3f}, p-value = {p:.4f}')
# Spearman for robustness check
rho, p_sp = stats.spearmanr(df['age'], df['fare'])
print(f'Spearman rho = {rho:.3f}, p-value = {p_sp:.4f}')Kategorikal vs. Numerik: Plot Kotak dan Biola
Ketika satu variabel bersifat kategorikal dan variabel lainnya numerik, pertanyaannya adalah: apakah distribusi numerik berbeda di antara kategori? Gunakan plot kotak atau plot biola untuk membandingkannya. Misalnya, apakah status kelangsungan hidup memengaruhi tarif yang dibayar? Apakah kelas penumpang memengaruhi usia? Plot ini langsung menunjukkan apakah keanggotaan kategori berkaitan dengan nilai variabel numerik yang lebih tinggi atau lebih rendah.
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
sns.boxplot(data=df, x='class', y='fare',
order=['First', 'Second', 'Third'], ax=axes[0])
axes[0].set_title('Fare by Passenger Class')
sns.violinplot(data=df, x='survived', y='age',
inner='quartile', ax=axes[1])
axes[1].set_title('Age Distribution by Survival')
plt.tight_layout()
plt.show()Statistik GroupBy untuk Kategorikal vs. Numerik
Lengkapi perbandingan visual dengan statistik numerik per kelompok menggunakan groupby. Hitung mean, median, dan jumlah untuk setiap kategori guna mengukur perbedaan yang terlihat pada plot. Perhatikan kategori yang mean dan mediannya berbeda jauh (menandakan pencilan di dalam kelompok), serta periksa apakah ukuran kelompok seimbang — kelompok yang sangat kecil (<5 observasi) membuat perbandingan tidak dapat diandalkan.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
stats = df.groupby('class')['fare'].agg(['mean', 'median', 'std', 'count'])
stats.columns = ['Mean Fare', 'Median Fare', 'Std Fare', 'Count']
print(stats.round(2))
print('\nSurvival rate by class:')
print(df.groupby('class')['survived'].mean().round(3))Kategorikal vs. Kategorikal: Tabulasi Silang
Untuk dua variabel kategorikal, gunakan pd.crosstab(df['var1'], df['var2']) untuk membuat tabel frekuensi yang menunjukkan jumlah observasi pada setiap kombinasi kategori. Normalisasikan berdasarkan baris atau kolom dengan normalize='index' atau normalize='columns' untuk memperoleh proporsi, bukan jumlah. Ini merupakan dasar untuk mempelajari apakah dua variabel kategorikal bersifat independen atau berasosiasi.
import pandas as pd
import seaborn as sns
df = sns.load_dataset('titanic')
# Frequency table
counts = pd.crosstab(df['class'], df['survived'])
counts.columns = ['Died', 'Survived']
print('Counts:')
print(counts)
# Row-normalised proportions (survival rate per class)
props = pd.crosstab(df['class'], df['survived'], normalize='index')
props.columns = ['Died', 'Survived']
print('\nSurvival Rate per Class:')
print(props.round(3))Memvisualisasikan Tabulasi Silang sebagai Heatmap
Ubah tabulasi silang menjadi heatmap agar frekuensi setiap sel dapat dibandingkan secara visual dengan cepat. Cara ini lebih mudah dipindai daripada tabel tercetak ketika terdapat banyak kombinasi kategori. Beri anotasi pada setiap sel dengan nilainya menggunakan annot=True dan pilih peta warna berurutan (seperti 'YlOrRd') karena semua nilainya non-negatif. Heatmap proporsi yang dinormalisasi berdasarkan baris secara efektif menunjukkan distribusi bersyarat suatu kategori berdasarkan kategori lainnya.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
props = pd.crosstab(df['class'], df['sex'], normalize='index')
sns.heatmap(props, annot=True, fmt='.2f', cmap='YlOrRd')
plt.title('Gender Mix by Passenger Class (Row %)')
plt.xlabel('Sex')
plt.ylabel('Class')
plt.show()Pengujian Khi-Kuadrat untuk Independensi
Pengujian independensi khi-kuadrat memeriksa apakah dua variabel kategorikal secara statistik bersifat independen. scipy.stats.chi2_contingency(crosstab) mengembalikan statistik khi-kuadrat, nilai p, derajat kebebasan, dan frekuensi harapan. Nilai p yang kecil (biasanya < 0.05) berarti terdapat asosiasi yang signifikan secara statistik antara kedua variabel — distribusi salah satunya berubah secara sistematis mengikuti variabel lainnya.
import pandas as pd
import seaborn as sns
from scipy.stats import chi2_contingency
df = sns.load_dataset('titanic')
# Test if passenger class and survival are independent
crosstab = pd.crosstab(df['class'], df['survived'])
chi2, p, dof, expected = chi2_contingency(crosstab)
print(f'Chi-squared: {chi2:.2f}')
print(f'P-value: {p:.6f}')
print(f'Degrees of freedom: {dof}')
print(f'\nConclusion: {"Significant association" if p < 0.05 else "No significant association"}')Matriks Korelasi Lengkap untuk Kolom Numerik
Daripada memeriksa pasangan satu per satu, hitung matriks korelasi lengkap untuk semua kolom numerik dan visualisasikan sebagai heatmap. Dengan demikian, Anda dapat melihat pasangan variabel yang berkorelasi kuat dalam sekali pandang. Korelasi tinggi antara fitur independen (multikolinearitas) dapat menimbulkan masalah pada model regresi — mengetahuinya sejak awal memungkinkan Anda menghapus atau menggabungkan fitur redundan sebelum pemodelan.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
df = sns.load_dataset('titanic')
corr = df.select_dtypes('number').corr()
mask = np.triu(np.ones_like(corr, dtype=bool))
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',
cmap='coolwarm', vmin=-1, vmax=1,
linewidths=0.5, square=True)
plt.title('Correlation Matrix — Titanic Numeric Columns')
plt.tight_layout()
plt.show()Interaksi Antarsubkelompok
Terkadang, hubungan antara dua variabel berbeda secara drastis di antara subkelompok—fenomena yang dikenal sebagai Paradoks Simpson. Misalnya, korelasi antara usia dan tarif mungkin positif untuk penumpang kelas satu, tetapi negatif untuk penumpang kelas tiga. Selalu segmentasikan analisis bivariat berdasarkan variabel kategorikal utama (menggunakan hue di Seaborn atau agregasi groupby terpisah) untuk memeriksa apakah hubungan tersebut konsisten atau berbalik di antara subkelompok.
import seaborn as sns
import matplotlib.pyplot as plt
df = sns.load_dataset('titanic')
# Scatter coloured by passenger class
sns.scatterplot(
data=df.dropna(subset=['age', 'fare']),
x='age',
y='fare',
hue='class',
alpha=0.5,
palette='deep'
)
plt.title('Age vs Fare — Does Class Change the Relationship?')
plt.legend(title='Class')
plt.yscale('log') # log scale due to fare skewness
plt.show()Mendokumentasikan Temuan Bivariat
Setelah menyelesaikan analisis bivariat, dokumentasikan temuan-temuan utama: pasangan fitur mana yang berkorelasi (dan seberapa kuat), apakah variabel kategorikal menunjukkan perbedaan kelompok yang bermakna dalam hasil numerik, serta interaksi atau paradoks subkelompok yang ditemukan. Wawasan ini harus menjadi dasar keputusan pemilihan fitur—pasangan fitur yang sangat berkorelasi mungkin memerlukan penghapusan salah satunya, dan prediktor kategorikal yang kuat terhadap variabel target harus ditandai sebagai masukan prioritas tinggi untuk pemodelan.
Pemeriksaan Singkat
Uji pemahaman Anda tentang analisis bivariat dan korelasi dari pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini, Anda mempelajari bahwa plot sebar dan Pearson r menganalisis hubungan numerik-numerik, plot kotak/biola dan groupby membandingkan variabel numerik di berbagai kategori, serta tabulasi silang dengan uji chi-kuadrat mengukur keterkaitan antara variabel kategorikal. Selanjutnya, kita akan membahas cara menyusun temuan EDA menjadi laporan ringkasan yang terstruktur.
Belajar Python dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Analisis Bivariat dan Korelasi” gratis?
Ya — teks lengkap “Analisis Bivariat dan Korelasi” 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 Bivariat dan Korelasi”?
Jelajahi hubungan antara pasangan kolom menggunakan plot sebaran, plot kotak, dan peta panas korelasi. 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 3 dari 4.
Berapa lama pelajaran “Analisis Bivariat dan Korelasi” 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