🔍 Veri Keşfi

Keşifsel Veri Analizi (EDA) Kapsamlı Rehber

📅 Güncellendi: 5 Temmuz 2026 ⏱️ 26 dk okuma 🔍 Veri Keşfi

İstatistikçi John Tukey, 1977'de yayımladığı Exploratory Data Analysis adlı eseriyle veri analizine yeni bir bakış açısı kazandırdı: önce veriye bakın, sonra hipotez kurun. Keşifsel Veri Analizi (EDA), herhangi bir istatistiksel model uygulamadan önce verinin doğasını, dağılımını, ilişkilerini ve olası sorunlarını görsel ve sayısal araçlarla anlamak demektir. Bu kapsamlı rehber; betimsel istatistiklerden çarpıklık/basıklığa, aykırı değer tespitinden otomatik EDA araçlarına ve SPSS'teki karşılığına kadar tüm süreci ele alır.

1. EDA Nedir ve Neden Önemlidir?

EDA, herhangi bir istatistiksel model veya makine öğrenmesi algoritması uygulamadan önce verinin yapısını, dağılımını, örüntülerini ve anomalilerini anlamak için yapılır. Eksik veriler, aykırı değerler, dağılım şekilleri ve değişkenler arası ilişkiler EDA aşamasında keşfedilir. Bu adım atlandığında model performansı ve yorumların güvenilirliği ciddi ölçüde zarar görebilir — yanlış dağılım varsayımıyla seçilen bir test veya fark edilmeyen bir aykırı değer, sonuçları baştan sona geçersiz kılabilir.

Tukey'nin mirası: Tukey (1977), veri analizinde "doğrulayıcı" (confirmatory) ve "keşifsel" (exploratory) yaklaşımları ayırt etmiştir. Doğrulayıcı analiz önceden kurulan bir hipotezi test ederken, EDA önyargısız biçimde veriye bakıp hangi hipotezlerin anlamlı olduğunu ortaya çıkarır. Boxplot, stem-and-leaf gösterimi ve medyan bazlı sağlam (robust) istatistikler Tukey'nin bu felsefeden doğan katkılarındandır.

2. EDA'nın Veri Analizi Sürecindeki Yeri

Wickham ve Grolemund'un (2017) R for Data Science eserinde vurgulandığı gibi, EDA döngüsel bir süreçtir: soru sor, veriyi görselleştir/özetle, yeni sorular türet, tekrarla. Tipik bir veri analizi/veri bilimi projesinde EDA şu adımlar arasında yer alır:

  1. Veri toplama / temin etme
  2. Veri temizleme (bkz. Veri Temizleme Nasıl Yapılır?)
  3. Keşifsel Veri Analizi (EDA) — bu yazının konusu
  4. Hipotez kurma / model seçimi
  5. İstatistiksel test veya makine öğrenmesi modeli uygulama
  6. Sonuçları yorumlama ve raporlama

Sık yapılan hata: Veri temizleme ile EDA'yı birbirinin yerine kullanmak. Veri temizleme, hataları (yinelenen kayıt, tutarsız format, geçersiz değer) düzeltmeyi hedefler; EDA ise temizlenmiş veride örüntü ve ilişki aramayı hedefler. Pratikte ikisi iç içe geçer: EDA sırasında fark edilen bir anomali, veri temizlemeye geri dönmeyi gerektirebilir.

3. Veri Setine Genel Bakış

İlk adım veri setinin boyutunu, değişken türlerini ve genel yapısını incelemektir:

import pandas as pd df = pd.read_csv("veri.csv") df.shape # (satır, sütun) sayısı df.dtypes # her sütunun veri tipi df.head() # ilk 5 satır df.info() # tip özeti, bellek kullanımı, eksik değer durumu df.isnull().sum() # sütun bazında eksik değer sayısı df.memory_usage(deep=True) # bellek kullanımını sütun bazında incele

Bu aşamada zaten pek çok şey dikkat çekebilir: beklenmedik veri tipleri (sayısal bir sütunun metin olarak okunması), çok sayıda eksik değer içeren sütunlar veya anlamsız/tutarsız sütun isimleri.

4. Eksik Veri Analizi

Eksik verinin miktarı kadar deseni de önemlidir. Rastgele mi eksik, yoksa belirli bir alt gruba mı yoğunlaşmış? missingno kütüphanesi bu deseni görselleştirmede etkilidir:

# pip install missingno import missingno as msno msno.matrix(df) # eksik veri desenini matris olarak göster msno.heatmap(df) # eksik değerlerin sütunlar arası birlikte oluşma korelasyonu msno.bar(df) # sütun bazında dolu/eksik oranı çubuk grafiği

Eksik veri türleri (MCAR / MAR / MNAR) ve uygun doldurma (imputation) stratejileri için Anket Analizi Nasıl Yapılır? yazımızdaki ilgili bölüme bakabilirsiniz.

5. Betimsel İstatistikler: Merkezi Eğilim ve Yayılım

Sayısal değişkenler için df.describe() komutu merkezi eğilim ve yayılım ölçütlerini özetler:

df.describe() df.describe(percentiles=[.1, .25, .5, .75, .9]) # ek yüzdelik dilimler
İstatistikNe İçin Kullanılır
mean (ortalama)Merkezi eğilim; aykırı değerlere duyarlı
50% (medyan)Aykırı değerlerden etkilenmeyen sağlam (robust) merkez
std (standart sapma)Verinin ortalama etrafındaki yayılımı
IQR (Q3−Q1)Aykırı değerlere dayanıklı yayılım ölçütü
min / maxOlası veri giriş hatalarını (örn. negatif yaş) gösterir
mode (mod)En sık tekrarlanan değer; kategorik değişkenlerde temel ölçüt

Kategorik değişkenler için df['kolon'].value_counts() frekans dağılımını, df['kolon'].nunique() ise benzersiz kategori sayısını verir.

6. Çarpıklık (Skewness) ve Basıklık (Kurtosis)

Ortalama ve standart sapma tek başına dağılımın şeklini anlatmaz. İki ek ölçüt bu boşluğu doldurur:

  • Çarpıklık (Skewness): Dağılımın simetriden sapmasını ölçer. 0'a yakın değer simetrik dağılımı; pozitif değer sağa çarpık (kuyruk sağda), negatif değer sola çarpık (kuyruk solda) dağılımı gösterir.
  • Basıklık (Kurtosis): Dağılımın kuyruklarının normal dağılıma göre "ağırlığını" ölçer. Fazladan basıklık (excess kurtosis) > 0 ise dağılım sivri ve ağır kuyrukludur (leptokurtik — aykırı değer olasılığı yüksek); < 0 ise basık ve hafif kuyrukludur (platikurtik).
Simetrik (skew≈0) Sağa Çarpık (+) uzun kuyruk → Sola Çarpık (−) ← uzun kuyruk İki Modlu (Bimodal)
Şekil 1. Dağılım şekilleri: simetrik, sağa/sola çarpık ve iki modlu (bimodal) desenler — her biri farklı bir veri üretme sürecine işaret eder ve farklı istatistiksel yöntemler gerektirir.
df['gelir'].skew() # çarpıklık katsayısı df['gelir'].kurtosis() # fazladan basıklık (excess kurtosis) from scipy import stats stat, p = stats.shapiro(df['gelir']) # Shapiro-Wilk normallik testi print(f"Shapiro-Wilk p-değeri: {p:.4f}")

7. Tek Değişkenli Görselleştirme

Histogram ve KDE

Histogram, sürekli bir değişkenin dağılımını görsel olarak ortaya koyar. sns.histplot(data=df, x='gelir', kde=True) komutu histogramın üzerine yoğunluk eğrisi (KDE) ekler — KDE'nin matematiksel temeli için Yoğunluk Analizi (KDE) yazımıza bakabilirsiniz.

import seaborn as sns import matplotlib.pyplot as plt sns.histplot(data=df, x='gelir', bins=30, kde=True) plt.title("Gelir Dağılımı") plt.show()

Boxplot ve Violin Plot

Kutu grafiği (boxplot), medyanı, çeyrekler arası aralığı (IQR) ve aykırı değerleri tek bir grafikte sunar:

min Q1 Medyan Q3 max aykırı değerler IQR = Q3 − Q1
Şekil 2. Boxplot anatomisi: kutu Q1–Q3 arasını (IQR), çizgi medyanı, bıyıklar (whisker) 1.5×IQR sınırını, noktalar aykırı değerleri gösterir.
sns.boxplot(data=df, x='cinsiyet', y='maas') sns.violinplot(data=df, x='cinsiyet', y='maas') # yoğunluk şeklini de gösterir

8. Kategorik Değişken Analizi

Kategorik değişkenler için frekans tabloları ve bar grafikleri temel araçtır:

df['sehir'].value_counts() df['sehir'].value_counts(normalize=True) * 100 # yüzde olarak sns.countplot(data=df, y='sehir', order=df['sehir'].value_counts().index)

Az sayıda kategori dominant, çok sayıda kategori az temsil ediliyorsa (uzun kuyruklu dağılım), Pareto grafiği (kümülatif yüzde çizgisiyle bar grafiği) hangi kategorilerin toplam gözlemin çoğunluğunu oluşturduğunu (80/20 kuralı) hızlıca gösterir.

9. Çift Değişkenli Analiz: Scatter Plot ve Korelasyon

İki sürekli değişken arasındaki ilişkiyi görselleştirmek için saçılım diyagramı kullanılır:

sns.scatterplot(data=df, x='egitim_yili', y='gelir', hue='cinsiyet') # Sayısal ilişki gücü df[['egitim_yili', 'gelir']].corr(method='pearson') # doğrusal ilişki df[['egitim_yili', 'gelir']].corr(method='spearman') # monotonik, sıra tabanlı ilişki

Doğrusal mı, eğrisel mi, yoksa ilişki yok mu — bu dört temel deseni ayırt etmek, hangi korelasyon katsayısının (Pearson vs Spearman) ve hangi modelin (doğrusal vs doğrusal olmayan) uygun olduğuna karar vermenizi sağlar. Detaylı yorumlama için Korelasyon Analizi yazımıza bakabilirsiniz.

🔷 Pearson kullanın, eğer…

  • İlişki doğrusal görünüyorsa
  • Her iki değişken de yaklaşık normal dağılıyorsa
  • Aykırı değer az/yoksa (Pearson aykırı değere duyarlıdır)

🟩 Spearman kullanın, eğer…

  • İlişki monotonik ama doğrusal değilse
  • Sıra/ordinal veriyle çalışıyorsanız
  • Aykırı değerlere dayanıklı bir ölçüt istiyorsanız

10. Çok Değişkenli Analiz: Pair Plot ve Isı Haritası

Birden fazla değişken arasındaki tüm ikili ilişkileri aynı anda görmek için pair plot, tüm korelasyonları tek bakışta özetlemek için ısı haritası (heatmap) kullanılır:

sns.pairplot(df, hue='kategori', diag_kind='kde') plt.figure(figsize=(10, 8)) sns.heatmap(df.corr(numeric_only=True), annot=True, cmap='coolwarm', fmt='.2f') plt.title("Korelasyon Isı Haritası")

Koyu kırmızı güçlü pozitif, koyu mavi güçlü negatif ilişkiyi temsil eder. Çok değişkenli veri setlerinde (10+ sayısal değişken), ısı haritası hangi değişken çiftlerinin derinlemesine incelenmeye değer olduğunu önceliklendirmenize yardımcı olur.

11. Aykırı Değer Tespiti

Aykırı değerler, gerçek bir anomaliyi (veri giriş hatası) veya nadir ama geçerli bir gözlemi temsil edebilir — ayrım yapmak analistin uzmanlığını gerektirir. En yaygın tespit yöntemleri:

YöntemMantıkNe Zaman Uygun
IQR KuralıQ1 − 1.5×IQR altı veya Q3 + 1.5×IQR üstü aykırı kabul edilirÇarpık dağılımlarda da sağlam (robust) çalışır — genel amaçlı ilk tercih
Z-SkoruOrtalamadan >3 standart sapma uzaklık aykırı kabul edilirYaklaşık normal dağılımlarda; çarpık verilerde yanıltıcı olabilir
Görsel (Boxplot/Scatter)Gözle incelemeHızlı ilk tarama, az sayıda değişken
Mahalanobis MesafesiÇok değişkenli uzaklık; değişkenler arası korelasyonu dikkate alırTek başına normal görünen ama çok değişkenli uzayda aykırı olan noktalar
Isolation ForestAğaç tabanlı anomali tespiti; azınlık noktaları daha az bölme ile izole ederYüksek boyutlu, büyük veri setlerinde otomatik tespit
# IQR yöntemi ile aykırı değer tespiti Q1 = df['gelir'].quantile(0.25) Q3 = df['gelir'].quantile(0.75) IQR = Q3 - Q1 alt_sinir = Q1 - 1.5 * IQR ust_sinir = Q3 + 1.5 * IQR aykiri_degerler = df[(df['gelir'] < alt_sinir) | (df['gelir'] > ust_sinir)] print(f"Aykırı değer sayısı: {len(aykiri_degerler)}")

Aykırı değeri silmeden önce düşünün: Bir aykırı değer, veri giriş hatası (yaş = 999) olabileceği gibi gerçek ve önemli bir gözlem de olabilir (bir CEO'nun maaşı). Sildiğiniz her gözlem için gerekçenizi raporlayın; "aykırı olduğu için sildim" tek başına yeterli bir gerekçe değildir.

12. Veri Dönüşümleri: Log, Box-Cox, Normalizasyon

Çarpık dağılımlar veya farklı ölçeklerdeki değişkenler, bazı analizlerden önce dönüştürülmelidir:

  • Logaritmik dönüşüm: Sağa çarpık dağılımları (gelir, nüfus gibi) simetrikleştirmede etkilidir: np.log1p(df['gelir']).
  • Box-Cox dönüşümü: Log dönüşümünün genelleştirilmiş hali; veriye en uygun λ parametresini otomatik bulur (yalnızca pozitif değerlerde çalışır).
  • Min-Max Normalizasyon: Değerleri [0, 1] aralığına ölçekler; mesafe tabanlı algoritmalar (K-Means, KNN) için önemlidir.
  • Standardizasyon (Z-score): Ortalama 0, standart sapma 1 olacak şekilde ölçekler; PCA ve regresyon gibi yöntemlerde tercih edilir.
import numpy as np from scipy import stats from sklearn.preprocessing import StandardScaler, MinMaxScaler df['gelir_log'] = np.log1p(df['gelir']) df['gelir_boxcox'], lam = stats.boxcox(df['gelir'] + 1) scaler = StandardScaler() df['gelir_z'] = scaler.fit_transform(df[['gelir']])

13. Otomatik EDA Araçları

Veri seti büyük veya değişken sayısı fazlaysa, manuel olarak her değişkeni tek tek incelemek yerine otomatik EDA araçları tek komutla kapsamlı bir HTML rapor üretir:

# pip install ydata-profiling from ydata_profiling import ProfileReport profile = ProfileReport(df, title="EDA Raporu", explorative=True) profile.to_file("eda_raporu.html")
AraçÖne Çıkan Özellik
ydata-profiling (eski adıyla pandas-profiling)Her değişken için dağılım, eksik değer, korelasyon, uyarılar (yüksek korelasyon, sabit sütun vb.) içeren kapsamlı HTML rapor
Sweetvizİki veri setini (örn. eğitim vs test) yan yana karşılaştırmalı görselleştirme
AutoVizVeri tipine göre otomatik en uygun grafik türünü seçip toplu görselleştirme üretir
D-TaleEtkileşimli, tarayıcı tabanlı veri keşif arayüzü (Excel benzeri deneyim)

Otomatik araçların sınırı: Bu araçlar hızlı bir ilk genel bakış sağlar ancak alan bilgisi (domain knowledge) gerektiren yorumlamanın (örn. "bu aykırı değer aslında kampanya dönemine denk geliyor") yerini tutmaz. Otomatik rapor bir başlangıç noktasıdır, analizin sonu değil.

14. SPSS'te EDA: Explore Prosedürü

SPSS kullanıcıları için EDA'nın büyük kısmı tek bir prosedürde toplanmıştır:

Analyze Descriptive Statistics Explore…
Dependent List: incelenecek sayısal değişken(ler)
Factor List: (isteğe bağlı) gruplara göre karşılaştırma değişkeni
Statistics: Descriptives (ortalama, medyan, çarpıklık, basıklık)
Plots: Boxplot, Histogram, Normality plots with tests (Shapiro-Wilk/Kolmogorov-Smirnov)
OK
Explore çıktısında dikkat edilmesi gerekenler: "Tests of Normality" tablosundaki Shapiro-Wilk p-değeri (n<50 için tercih edilir) veya Kolmogorov-Smirnov p-değeri; "Descriptives" tablosundaki Skewness/Kurtosis satırları ve standart hataları (değer, standart hatanın ±2 katını aşıyorsa istatistiksel olarak anlamlı çarpıklık/basıklık işareti); boxplot'ta yıldız (*) ve daire (○) işaretli aykırı/uç değerler.

15. EDA Raporlama ve Sonraki Adımlar

EDA bir keşif sürecidir; bulguları özetlemek ve analizin bir sonraki aşaması için yol haritası çizmek önemlidir. Bir EDA raporunda şu sorulara yanıt verilmelidir:

  • Hangi değişkenler bağımlı değişkenle ilişkili görünüyor?
  • Hangi sütunlarda veri kalitesi sorunu (eksik veri, aykırı değer) var ve nasıl ele alındı?
  • Dağılımlar normal mi, yoksa parametrik olmayan yöntemler mi gerekiyor?
  • Değişkenler arasında çoklu doğrusal bağlantı (multicollinearity) riski var mı (korelasyon > 0.8)?
  • Bir sonraki adımda hangi model/test aileleri (parametrik/non-parametrik, doğrusal/doğrusal olmayan) uygun görünüyor?

16. Yaygın Hatalar

  • Sadece ortalamaya bakıp medyanı görmezden gelmek: Çarpık dağılımlarda ortalama yanıltıcı olabilir; ikisini birlikte raporlayın.
  • Aykırı değerleri sorgusuzca silmek: Silme kararını gerekçelendirin ve duyarlılık analizi yapın (silmeden/silerek sonuçları karşılaştırın).
  • Korelasyonu nedensellikle karıştırmak: Isı haritasında yüksek korelasyon görmek, bir değişkenin diğerine neden olduğu anlamına gelmez.
  • Yalnızca sayısal özet çıkarıp hiç görselleştirme yapmamak: Anscombe'un dörtlüsü (Anscombe's Quartet) klasik örneğidir — dört farklı veri seti aynı ortalama, varyans ve korelasyona sahipken tamamen farklı desenler sergiler; yalnızca görselleştirme bu farkı ortaya çıkarır.
  • EDA'yı atlayıp doğrudan modele geçmek: Zaman baskısı altında cazip gelse de, fark edilmeyen bir veri kalitesi sorunu modelin tamamını geçersiz kılabilir.

Verinizin Hikayesini Birlikte Keşfedelim

Veri setiniz için kapsamlı EDA raporu hazırlıyor, bulgularınızı yorumluyor ve ileri analiz için en uygun yöntemi öneriyoruz.

Ücretsiz Danışma Al

Kaynaklar

  • Tukey, J. W. (1977). Exploratory Data Analysis. Addison-Wesley.
  • Wickham, H., & Grolemund, G. (2017). R for Data Science. O'Reilly Media. r4ds.had.co.nz
  • Anscombe, F. J. (1973). Graphs in Statistical Analysis. The American Statistician, 27(1), 17–21.
  • ydata-profiling Documentation. docs.profiling.ydata.ai