React Flow mini map
🛠️ Uygulamalı MLbaşlangıç22 dk

Veri Temizleme ve EDA

Pandas ile keşifsel veri analizi

Gerçek dünya verisi bir hazine sandığı gibidir — içinde altın kadar çöp de vardır. Keşifsel Veri Analizi (EDA), bu sandığı açıp neyin değerli neyin atılması gerektiğini anlamanızı sağlar. İyi bir EDA, başarılı bir modelin temel taşıdır.

🔍Dedektif Gibi Düşünün

EDA, bir cinayet masası dedektifinin olay yerini incelemesine benzer. Her veri noktası bir ipucu, her dağılım bir örüntü, her aykırı değer potansiyel bir şüpheli. Acele etmeden, sistematik olarak tüm kanıtları toplarsınız.

Eksik veriler üç türde gelir:…

Eksik veri analizi ve görselleştirme

Python
1import pandas as pd
2import seaborn as sns
3import matplotlib.pyplot as plt
4
5# Eksik veri sayımı
6print(df.isnull().sum())
7print(f"Toplam eksik oran: {df.isnull().mean().mean():.2%}")
8
9# Eksik veri haritası
10sns.heatmap(df.isnull(), cbar=True, yticklabels=False)
11plt.title("Eksik Veri Haritası")
12plt.show()
13
14# Basit imputation stratejileri
15df['yaş'].fillna(df['yaş'].median(), inplace=True) # Sayısal
16df['şehir'].fillna(df['şehir'].mode()[0], inplace=True) # Kategorik

⚠️Eksik veriyi silmeden önce düşünün! %5'ten fazla eksik varsa silmek yerine imputation tercih edin. Ancak hedef değişkende eksik varsa o satırları silmek genellikle en güvenli yoldur.

Verinin şeklini anlamak kritiktir:…

IQR = Q3 - Q1 | Aykırı: x < Q1-1.5·IQR veya x > Q3+1.5·IQR

Interquartile Range (IQR) yöntemi aykırı değer tespitinin en yaygın yoludur. Q1 (25. persentil) ve Q3 (75. persentil) arasındaki mesafenin 1.5 katı dışındaki değerler aykırı kabul edilir.

Aykırı değer tespiti: IQR ve Z-score

Python
1import numpy as np
2from scipy import stats
3
4# IQR yöntemi
5Q1 = df['fiyat'].quantile(0.25)
6Q3 = df['fiyat'].quantile(0.75)
7IQR = Q3 - Q1
8alt_sinir = Q1 - 1.5 * IQR
9ust_sinir = Q3 + 1.5 * IQR
10outliers_iqr = df[(df['fiyat'] < alt_sinir) | (df['fiyat'] > ust_sinir)]
11
12# Z-score yöntemi (|z| > 3 aykırı)
13z_scores = np.abs(stats.zscore(df['fiyat']))
14outliers_z = df[z_scores > 3]
15
16print(f"IQR ile {len(outliers_iqr)}, Z-score ile {len(outliers_z)} aykırı değer")

Aykırı Değeri Sil

  • ·Veri girişi hatası kesinse
  • ·Model aykırılara hassassa (linear regression)
  • ·Aykırı oran %1'den azsa

Aykırı Değeri Tut

  • ·Gerçek bir fenomeni temsil ediyorsa
  • ·Model robust ise (tree-based)
  • ·Anomali tespiti yapıyorsanız

Değişkenler arası ilişkiyi ölçer:…

Korelasyon matrisi ve ısı haritası

Python
1import seaborn as sns
2
3# Pearson korelasyonu
4corr_matrix = df.select_dtypes(include=[np.number]).corr()
5
6# Isı haritası
7plt.figure(figsize=(10, 8))
8sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0,
9 fmt='.2f', square=True, linewidths=0.5)
10plt.title("Korelasyon Matrisi")
11plt.tight_layout()
12plt.show()
13
14# Yüksek korelasyonlu çiftleri bul
15high_corr = corr_matrix.abs().unstack().sort_values(ascending=False)
16high_corr = high_corr[high_corr < 1] # Kendisiyle korelasyonu çıkar
17print(high_corr[high_corr > 0.8])

Kategorik değişkenler farklı araçlar gerektirir:…

Kategorik veri analizi

Python
1from scipy.stats import chi2_contingency
2
3# Countplot
4sns.countplot(data=df, x='eğitim_seviyesi', hue='işe_alındı')
5plt.title("Eğitim Seviyesine Göre İşe Alınma")
6plt.show()
7
8# Crosstab ve Chi-square
9cross = pd.crosstab(df['eğitim_seviyesi'], df['işe_alındı'])
10chi2, p_value, dof, expected = chi2_contingency(cross)
11print(f"Chi-square: {chi2:.2f}, p-value: {p_value:.4f}")
12if p_value < 0.05:
13 print("İki değişken arasında anlamlı ilişki var!")

💡EDA'da df.describe() ve df.info() ile başlayın. Sonra hedef değişkenin dağılımını inceleyin — dengesiz sınıflar varsa stratejinizi ona göre belirleyin.

✦ Quiz

Bir değişkende %30 eksik veri var. En uygun yaklaşım hangisidir?

✦ Quiz

Pearson korelasyonu r = 0.95 çıktı. Bu ne anlama gelir?

✦ Quiz

Hangi durumda Spearman korelasyonu Pearson'a tercih edilmelidir?

Bağlantılı Konular