Pengolahan Data dan Analisis Data Eksploratori
Pelajar akan memuatkan set data mentah, menganalisis taburan dan korelasi, mengenal pasti isu kualiti data, serta mendokumentasikan penemuan dalam buku nota Jupyter yang boleh dihasilkan semula.
Pengolahan Data dan Analisis Data Eksploratori ialah pelajaran Machine Learning Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Machine Learning Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Machine Learning Academy merangkumi sejumlah 4 pelajaran.
Apakah Analisis Data Penerokaan?
Analisis Data Penerokaan (EDA) ialah amalan memprofilkan set data sebelum pemodelan bagi memahami strukturnya, taburan, hubungan dan isu kualitinya. Istilah ini diperkenalkan oleh John Tukey. EDA berasaskan prinsip mudah: biarkan data berbicara. Melangkaui EDA dengan tergesa-gesa dan terus membina model ialah sebab kedua paling lazim projek ML gagal, selepas penentuan skop masalah yang lemah. EDA menghalang anda daripada membina model berasaskan asas yang rosak.
Memuatkan dan Pemeriksaan Pertama
Sentiasa mulakan dengan pemeriksaan struktur: berapa banyak baris dan lajur, serta apakah jenis datanya? Gunakan df.shape, df.dtypes, df.head() dan df.info(). Cari lajur yang kelihatan berangka tetapi disimpan sebagai object (rentetan), serta lajur yang kelihatan berkategori tetapi dikodkan sebagai integer. Jenis data yang tidak sepadan menyebabkan pepijat senyap pada langkah seterusnya apabila scikit-learn menganggap kategori yang dikodkan sebagai integer sebagai pemboleh ubah berterusan.
import pandas as pd
import numpy as np
# Load dataset
df = pd.read_csv('customer_churn.csv')
print('Shape:', df.shape)
print('\nData types:')
print(df.dtypes)
print('\nFirst 5 rows:')
print(df.head())
print('\nSummary info:')
df.info()Analisis Univariat: Taburan
Analisis univariat memeriksa satu pemboleh ubah pada satu-satu masa. Bagi ciri berangka, plotkan histogram dan kira statistik ringkasan (min, median, sisihan piawai, kecondongan). Taburan yang sangat condong (kecondongan > 2) sering mendapat manfaat daripada transformasi log sebelum pemodelan. Bagi ciri berkategori, plotkan carta bar untuk kiraan nilai. Kategori yang muncul dalam kurang daripada 1% baris mungkin menimbulkan masalah dengan pengekodan satu panas dan pembahagian berstrata.
import matplotlib.pyplot as plt
import seaborn as sns
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
# Numeric: histogram of account age
df['account_age_days'].hist(bins=40, ax=axes[0])
axes[0].set_title('Account age distribution')
axes[0].set_xlabel('Days')
# Categorical: churn rate by plan type
df.groupby('plan_type')['churned'].mean().plot(kind='bar', ax=axes[1])
axes[1].set_title('Churn rate by plan type')
axes[1].set_ylabel('Churn rate')
plt.tight_layout()
plt.savefig('univariate.png', dpi=150)Jadual Statistik Ringkasan
df.describe() menghasilkan kiraan, min, sisihan piawai, min, kuartil dan max bagi setiap lajur berangka. Periksanya dengan teliti: nilai max yang jauh lebih besar daripada persentil ke-99 menandakan pencilan. Nilai min sifar dalam lajur 'hari sejak pembelian terakhir' mungkin bermaksud pelanggan membuat pembelian hari ini — atau mungkin juga merupakan penanda bagi data yang hilang. Memahami kes pinggiran ini mencegah ralat senyap dalam prapemprosesan seterusnya.
stats = df.describe(percentiles=[0.01, 0.25, 0.5, 0.75, 0.99])
print(stats.T) # transpose for readability
# Flag suspicious columns
for col in df.select_dtypes(include='number').columns:
skew = df[col].skew()
pct99 = df[col].quantile(0.99)
max_val = df[col].max()
if max_val > 5 * pct99:
print(f'OUTLIER WARNING: {col} — max ({max_val:.1f}) >> 99th pct ({pct99:.1f}), skew={skew:.2f}')Analisis Nilai Hilang
Nilai hilang mesti diprofilkan sebelum keputusan imputasi dibuat. Kira peratusan nilai nol bagi setiap lajur dengan df.isnull().mean(). Lajur yang mempunyai lebih daripada 50% nilai hilang mungkin perlu digugurkan sepenuhnya. Fahami mekanisme kehilangan data: adakah ia hilang sepenuhnya secara rawak (MCAR), atau hilang bukan secara rawak (MNAR) — contohnya, pelanggan yang berhenti melanggan memadamkan maklumat akaun mereka? Kehilangan data MNAR itu sendiri bermaklumat dan patut dikodkan sebagai penunjuk binari.
missing = df.isnull().mean().sort_values(ascending=False)
missing_pct = missing[missing > 0] * 100
print('Missing value percentages:')
print(missing_pct.round(1))
import matplotlib.pyplot as plt
missing_pct.plot(kind='barh', figsize=(8, 5))
plt.xlabel('% missing')
plt.title('Missing values by column')
plt.tight_layout()
plt.savefig('missing.png', dpi=150)Analisis Bivariat: Korelasi
Analisis bivariat memeriksa hubungan antara pasangan pemboleh ubah. Bagi hubungan berangka-berangka, kira matriks korelasi dan gambarkannya sebagai peta haba dengan seaborn.heatmap. Korelasi melebihi 0.95 antara dua ciri menandakan multikolineariti — kedua-dua ciri membawa maklumat yang hampir sama, jadi salah satunya boleh digugurkan tanpa kehilangan kuasa ramalan. Kira juga korelasi titik-biserial antara ciri berangka dan sasaran binari untuk mengenal pasti ciri yang paling meramalkan sejak awal.
import seaborn as sns
import matplotlib.pyplot as plt
numeric_df = df.select_dtypes(include='number')
corr = numeric_df.corr()
plt.figure(figsize=(10, 8))
sns.heatmap(corr, annot=True, fmt='.2f', cmap='coolwarm', center=0)
plt.title('Correlation matrix')
plt.tight_layout()
plt.savefig('corr_heatmap.png', dpi=150)
# Highest corr pairs (excluding self-correlation)
high_corr = (
corr.where(np.triu(np.ones(corr.shape), k=1).astype(bool))
.stack().abs().sort_values(ascending=False)
)
print('Top correlated pairs:')
print(high_corr.head(5))Analisis Pemboleh Ubah Sasaran
Sentiasa analisis pemboleh ubah sasaran secara berasingan. Bagi pengelasan binari, kira kadar kelas positif (df['churned'].mean()). Kadar di bawah 5% atau melebihi 95% menunjukkan ketidakseimbangan teruk yang mempengaruhi pilihan algoritma dan metrik penilaian. Bagi sasaran regresi, semak kenormalan — sasaran yang condong sering mendapat manfaat daripada transformasi log sebelum latihan, terutamanya bagi model berasaskan pepohon yang kebal terhadapnya, tetapi transformasi ini penting bagi regresi linear.
target = 'churned'
class_dist = df[target].value_counts(normalize=True)
print('Class distribution:')
print(class_dist)
print(f'\nPositive class rate: {df[target].mean():.3f}')
print(f'Imbalance ratio: {class_dist.max() / class_dist.min():.1f}:1')
# Visual
df[target].value_counts().plot(kind='bar')
import matplotlib.pyplot as plt
plt.title('Target class distribution')
plt.ylabel('Count')
plt.xticks([0, 1], ['Retained', 'Churned'], rotation=0)
plt.tight_layout()
plt.savefig('target_dist.png', dpi=150)Pengesanan dan Pengendalian Pencilan
Pencilan boleh memesongkan latihan model, terutamanya bagi model berasaskan jarak (KNN, SVM) dan regresi linear. Gunakan kaedah IQR (tandakan nilai di luar [Q1 - 1.5·IQR, Q3 + 1.5·IQR]) atau skor-Z (tandakan nilai dengan |z| > 3) untuk pengesanan awal. Bagi setiap pencilan yang ditandakan, siasat: adakah ia ralat kemasukan data, nilai ekstrem yang sah atau kerosakan penderia? Nilai ekstrem yang sah hendaklah dikekalkan; ralat hendaklah dibetulkan atau dibuang.
def iqr_outliers(series):
Q1, Q3 = series.quantile(0.25), series.quantile(0.75)
IQR = Q3 - Q1
lower, upper = Q1 - 1.5 * IQR, Q3 + 1.5 * IQR
outlier_mask = (series < lower) | (series > upper)
return outlier_mask, lower, upper
for col in df.select_dtypes(include='number').columns:
mask, lo, hi = iqr_outliers(df[col])
n_out = mask.sum()
if n_out > 0:
print(f'{col}: {n_out} outliers ({n_out/len(df)*100:.1f}%), '
f'valid range=[{lo:.2f}, {hi:.2f}]')Plot Hubungan Ciri-Sasaran
Bagi tugasan pengelasan, gambarkan perbezaan taburan setiap ciri berangka antara kelas menggunakan plot biola atau plot kotak yang dikelompokkan mengikut sasaran. Ciri yang taburannya memisahkan kedua-dua kelas dengan jelas berkemungkinan mempunyai kuasa ramalan. Bagi ciri berkategori, carta bar berkumpulan yang menunjukkan kadar pelanggan berhenti melanggan bagi setiap nilai kategori dapat mendedahkan dengan cepat kategori yang berkaitan dengan risiko lebih tinggi.
import seaborn as sns
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
# Numeric feature vs target: violin plot
sns.violinplot(
data=df, x='churned', y='account_age_days',
palette=['#2196F3', '#F44336'], ax=axes[0]
)
axes[0].set_xticklabels(['Retained', 'Churned'])
axes[0].set_title('Account age by churn status')
# Categorical feature vs target: bar plot
df.groupby('plan_type')['churned'].mean().plot(kind='bar', ax=axes[1])
axes[1].set_title('Churn rate by plan type')
axes[1].set_ylabel('Churn rate')
plt.tight_layout()
plt.savefig('feature_target.png', dpi=150)Mendokumentasikan Dapatan EDA
Dapatan EDA mesti didokumentasikan dalam notebook Jupyter yang boleh dihasilkan semula dan dikongsi dengan pasukan. Sekurang-kurangnya, dokumentasikan: lajur yang digugurkan dan sebabnya, keputusan imputasi bagi setiap lajur, pengendalian pencilan, magnitud ketidakseimbangan kelas, ciri ramalan utama dan sebarang isu kualiti data yang dirujukkan kepada pasukan kejuruteraan data. Notebook ini menjadi bahagian kualiti data dalam kad model kelak dan amat bernilai apabila menyahpepijat kemerosotan prestasi dalam pengeluaran beberapa bulan kemudian.
# EDA findings summary (add as a markdown cell in the notebook)
findings = {
'dropped_columns': ['customer_id (identifier)', 'last_login_ip (PII, not predictive)'],
'imputation': {
'days_since_support_contact': 'median (12% missing, MCAR)',
'contract_end_days': 'mode (3% missing)'
},
'outliers': 'total_spend: 14 values > $50k capped at 99th percentile ($48,200)',
'class_imbalance': '8.3% churn rate — use SMOTE or class_weight=balanced',
'top_features': ['days_since_last_purchase', 'total_spend_90d', 'support_tickets'],
'escalations': ['contract_type column has 847 unmapped legacy codes — check with engineering']
}
for key, val in findings.items():
print(f'{key}: {val}')Alat EDA Automatik
Bagi set data besar yang mempunyai ratusan ciri, EDA secara manual tidak praktikal. ydata-profiling (dahulunya pandas-profiling) menjana laporan HTML interaktif dengan taburan, korelasi, nilai hilang dan amaran pencilan bagi setiap lajur melalui satu panggilan fungsi. sweetviz menghasilkan laporan perbandingan merentas pembahagian latihan/ujian atau segmen kelas sasaran. Gunakan alat ini sebagai titik permulaan, tetapi sentiasa susuli dengan plot tersuai khusus domain bagi ciri yang paling penting.
# ydata-profiling: one line EDA report
# pip install ydata-profiling
from ydata_profiling import ProfileReport
profile = ProfileReport(
df,
title='Customer Churn EDA Report',
explorative=True
)
profile.to_file('eda_report.html')
print('Report saved to eda_report.html')
# sweetviz: compare train vs test distribution
# pip install sweetviz
import sweetviz as sv
report = sv.analyze(df, target_feat='churned')
report.show_html('sweetviz_report.html')Semakan Pantas
Uji pemahaman anda tentang konsep Pembelajaran Mesin dengan Python daripada pelajaran ini.
Rumusan Pelajaran
Dalam pelajaran ini, anda telah mempelajari bahawa EDA memprofilkan taburan, hubungan, nilai hilang dan pencilan sebelum sebarang pemodelan, analisis bivariat (korelasi, plot ciri-sasaran) mengenal pasti ciri yang paling meramalkan, dan dapatan EDA mesti didokumentasikan dalam notebook yang boleh dihasilkan semula untuk membimbing keputusan prapemprosesan serta menjadi rekod kualiti data. Seterusnya, kita akan menjalankan pertandingan pemilihan model untuk membandingkan lima algoritma pada set data yang sama selepas diproses.
Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Pengolahan Data dan Analisis Data Eksploratori” percuma?
Ya — teks penuh “Pengolahan Data dan Analisis Data Eksploratori” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Machine Learning Academy, tingkat taraf kepada CoddyKit PRO. Kursus Machine Learning Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pengolahan Data dan Analisis Data Eksploratori”?
Pelajar akan memuatkan set data mentah, menganalisis taburan dan korelasi, mengenal pasti isu kualiti data, serta mendokumentasikan penemuan dalam buku nota Jupyter yang boleh dihasilkan semula. Anda berlatih Machine Learning Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Machine Learning Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Machine Learning Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Pengolahan Data dan Analisis Data Eksploratori” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Machine Learning Academy ini?
Ya. Setiap pelajaran Machine Learning Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Penentuan Skop Projek: Menetapkan Masalah dan Kriteria Kejayaan
- Pengolahan Data dan Analisis Data Eksploratori
- Pertandingan Pemilihan Model: Membandingkan Lima Algoritma
- Membungkus, Mendokumentasikan dan Membentangkan Model Akhir