# Bu kod bloğunu sadece paketler yüklü değilse bir kere çalıştırın
install.packages("DataExplorer")
install.packages("summarytools")
install.packages("dlookr")
# Temel kütüphanemiz
library(tidyverse)

# Yeni Otomatik EDA kütüphanelerimiz
library(DataExplorer)
library(summarytools)
library(dlookr)

# Analiz edeceğimiz veri setini yükleyelim
insurance_df <- read_csv("insurance.csv")

2. Adım: DataExplorer ile Verinin Röntgenini Çekmek

Bu bölümün belki de en sihirli anına hoş geldiniz. Bölüm 5.1’de, insurance_df veri setini anlamak için ne kadar çok adım attığımızı hatırlayın:

Tüm bu işlemleri, DataExplorer paketinin create_report() adındaki tek bir fonksiyonuyla saniyeler içinde yapabiliriz. Bu fonksiyon, veri setimizin adeta tam vücut röntgenini çeker ve bulgularını bize interaktif bir HTML raporu olarak sunar.

Ustalık Notu: Raporu Nasıl Oluştururuz?

Aşağıdaki kod bloğunu doğrudan RStudio’nun Konsol penceresine kopyalayıp çalıştırdığınızda, DataExplorer projenizin bulunduğu klasörde report.html adında bir rapor dosyası oluşturacaktır. .Rmd dosyasının derlenmesi sırasında hata almamak için bu tür otomatik raporlama fonksiyonlarını doğrudan konsolda çalıştırmak en iyi pratiktir.

Bu yüzden, aşağıdaki kod bloğunu eval=FALSE seçeneği ile “çalışmayacak” şekilde ayarlıyoruz.

Ancak size hangi komutu kullanacağınızı göstermek için burada bırakıyoruz.

# Bu kodu RStudio Konsolu'nda çalıştırarak raporunuzu oluşturun!
create_report(insurance_df)

Yukarıdaki kodu çalıştırdığınızda, create_report() fonksiyonu, tarayıcınızda bir HTML dosyası oluşturur. Bu dosya tarayıcınızda açıldığında raporu daha rahat inceleyebilirsiniz.

Raporu Yorumlama: Kaşifin Drone Görüntüleri

create_report()’un oluşturduğu bu rapor, adeta bir kaşifin adanın üzerinden drone ile çektiği yüksek çözünürlüklü görüntüler gibidir. Gelin bu görüntülerin bize neler anlattığına bakalım ve Bölüm 5.1’deki “elle” yaptığımız keşiflerle karşılaştıralım.

Rapor genellikle şu bölümlerden oluşur:

1. Basic Statistics (Temel İstatistikler)

Raporun bize sunduğu ilk ve en temel bilgi, veri setimizin kimlik kartıdır.

Gördüklerimiz ve Yorumumuz:

Bu bölüm, projemizin ilk adımında glimpse() ve colSums(is.na()) gibi komutlarla elde ettiğimiz bilgilerin temiz bir özetidir:

  • Rows (Satırlar): 1,338. Bu, bizim de bulduğumuz gözlem sayısıdır.
  • Columns (Sütunlar): 7. Bu, bizim de bulduğumuz değişken sayısıdır.
  • Discrete columns (Ayrık Sütunlar): 3. DataExplorer, karakter (chr) tipindeki sex, smoker ve region değişkenlerimizi doğru bir şekilde kategorik (ayrık) olarak tanımlamış.
  • Continuous columns (Sürekli Sütunlar): 4. Sayısal (dbl) tipindeki age, bmi, children ve charges değişkenlerimizi sürekli olarak tanımlamış.
  • All missing columns & Missing observations: Her ikisi de 0. Bu, bizim de bulduğumuz gibi, veri setimizde hiç eksik değer olmadığını gösteren en kritik bilgilerden biridir.

Bu ilk tablo sayesinde, daha tek bir grafik bile görmeden, veri setimizin boyutu, yapısı ve temizliği hakkında anında fikir sahibi olmuş olduk.

Aynı bilgileri yüzdesel olarak ve görsel bir formatta sunan “Percentages” grafiği, durumu daha da netleştirir.

Gördüklerimiz ve Yorumumuz:

Bu çubuk grafik, temel istatistikleri görsel bir özet haline getirir:

  • Discrete vs. Continuous Columns: Sütunlarımızın %43’ünün kategorik (discrete), %57’sinin ise sayısal (continuous) olduğunu bir bakışta görebiliyoruz. Bu, veri setimizin sayısal ve kategorik değişkenler açısından ne kadar dengeli olduğu hakkında hızlı bir fikir verir.
  • Complete Rows (Tam Satırlar): Bu, grafikteki en önemli çubuktur. Satırlarımızın %100’ünün “tam” olduğunu, yani hiçbir satırda eksik bir gözlem bulunmadığını bize garanti eder. Mavi çubuğun %100’de olması, veri temizliği açısından mükemmel bir haberdir.
  • Missing Observations (Eksik Gözlemler): Aynı şekilde, toplam gözlemlerin (hücrelerin) %0’ının eksik olduğunu gösteren yeşil çubuk da verimizin temizliğini teyit eder.

Kısacası, bu iki görsel (temel istatistikler tablosu ve yüzdeler grafiği), bize veri setimizin yapısı ve kalitesi hakkında sağlam bir başlangıç noktası sunar.

2. Data Structure (Veri Yapısı)

Raporun bu bölümü, glimpse() fonksiyonunun yaptığı işi görsel bir ağaç yapısıyla sunar.

Gördüklerimiz ve Yorumumuz:

Bu minimalist ama etkili görsel, veri setimizin bir “kök”ten (root) dallanarak 7 farklı değişkene ayrıldığını gösterir. Bize sunduğu bilgiler şunlardır:

  • Kök Bilgisi: Veri setimizin 1338 gözlem (obs.) ve 7 değişkenden (variables) oluştuğunu teyit eder.
  • Dallar (Değişkenler): Her bir dal, veri setimizdeki bir sütunu temsil eder.
  • Veri Tipleri: Her değişkenin yanında parantez içinde veri tipi belirtilir:
    • age (num), bmi (num), children (num), charges (num): Bunların sayısal (numeric) değişkenler olduğunu gösterir.
    • sex (chr), smoker (chr), region (chr): Bunların metin (character) tipinde değişkenler olduğunu gösterir.

Bu görsel, glimpse() komutunun metin tabanlı çıktısını daha sezgisel bir şemaya dönüştürerek, veri setimizin yapısını bir bakışta anlamamızı sağlar. Özellikle çok sayıda değişkeni olan karmaşık veri setlerinde, hangi değişkenin hangi tipte olduğunu hızlıca görmek için harika bir araçtır.

3. Missing Data Profile (Eksik Veri Profili)

Bu bölüm, veri setimizdeki eksik değer (NA) durumunu görsel olarak özetler. Bir veri kaşifi için, projenin en başında bu profili çıkarmak hayati önem taşır.

Ustalık Notu: Koddaki Uyarı (Warning) Mesajı Ne Anlama Geliyor?

Görselin üzerinde Warning: aes_string() was deprecated in ggplot2 3.0.0. şeklinde bir uyarı fark etmiş olabilirsiniz. Bu bir hata değildir ve raporun oluşmasını engellemez. Bu mesaj, DataExplorer paketinin kendi iç kodlarında, ggplot2’nin eski bir fonksiyonu olan aes_string()’i kullandığını belirtir. ggplot2 güncellendiği için artık bu eski fonksiyon yerine yeni yöntemlerin kullanılması tavsiye edilmektedir. Bu, paketin geliştiricisini ilgilendiren bir durumdur ve bizim analizimizi etkilemez.

Gördüklerimiz ve Yorumumuz:

  • Grafikteki her bir satır, veri setimizdeki bir değişkeni (age, sex, bmi vb.) temsil eder.
  • Her satırın üzerinde “0%” etiketini görüyoruz. Bu, o değişkendeki eksik veri oranının sıfır olduğunu gösterir.
  • Sağ taraftaki “Band” lejantı, “Good” (İyi) olarak işaretlenmiş. Bu da DataExplorer’ın veri setimizin eksik veri açısından “iyi” durumda olduğunu teyit ettiğini gösterir.

Bu görsel, colSums(is.na(insurance_df)) komutunun bize sayısal olarak verdiği “her sütunda 0 eksik var” bilgisini, bir bakışta anlaşılır ve raporlanabilir bir grafiğe dönüştürmüş halidir.

4. Univariate Distribution (Tek Değişkenli Dağılım)

Bu bölüm, projemizin 5.1 Adım 2’sinin tamamen otomatize edilmiş halidir. Rapor, hem sayısal hem de kategorik değişkenler için dağılım grafiklerini otomatik olarak çizer. İlk olarak sayısal değişkenlerin histogramlarına bakalım.

Gördüklerimiz ve Yorumumuz:

Bu grafik, Bölüm 5.1, Adım 2.1’de ggplot2 ile tek tek oluşturup patchwork ile birleştirdiğimiz histogramların bir benzerini tek seferde sunuyor. Bulgularımız tamamen aynı:

  • age (Yaş): Dağılım oldukça dengeli ve neredeyse “uniform” bir yapı gösteriyor. Bu, veri setinde her yaş grubundan insanın dengeli bir şekilde temsil edildiğini doğrular.
  • bmi (Vücut Kitle İndeksi): Dağılım, çan eğrisine benziyor; yani normal dağılıma oldukça yakın.
  • charges (Masraflar): İşte en önemli bulgu! Histogram, masrafların dağılımının ciddi şekilde sağa çarpık (right-skewed) olduğunu bir kez daha teyit ediyor. Verilerin büyük bir kısmı düşük değerlerde toplanmışken, sağa doğru uzanan uzun bir kuyruk var.
  • children (Çocuk Sayısı): Bu değişkenin de sağa çarpık olduğunu, çoğu gözlemin 0, 1 veya 2 değerinde toplandığını görüyoruz.

Bu otomatik oluşturulmuş grafikler sayesinde, her bir sayısal değişkenin dağılım karakteristiğini saniyeler içinde anlama fırsatı bulduk ve “elle” yaptığımız analizde ulaştığımız sonuçları hızlıca doğruladık.

Şimdi de raporun, kategorik değişkenler için otomatik olarak oluşturduğu çubuk grafiklere (bar chart) bakalım.

Gördüklerimiz ve Yorumumuz:

Bu görsel, Bölüm 5.1, Adım 2.2’de ggplot2 ile oluşturduğumuz çubuk grafiklerin yatay versiyonlarını sunuyor. Varılan sonuçlar yine birebir aynı:

  • sex (Cinsiyet): male ve female kategorilerinin çubuk uzunlukları neredeyse eşit. Bu, veri setimizin cinsiyet açısından dengeli olduğunu bir kez daha gösteriyor.
  • smoker (Sigara İçme Durumu): no çubuğunun, yes çubuğundan çok daha uzun olduğu net bir şekilde görülüyor. Bu, veri setimizin sigara içme durumu açısından dengesiz olduğunun en net görsel kanıtıdır. İnsanların büyük çoğunluğu sigara içmiyor.
  • region (Bölge): Dört bölgeye ait çubukların uzunlukları birbirine oldukça yakın. Bu da coğrafi dağılımın dengeli olduğunu teyit ediyor.

Bu otomatik grafikler sayesinde, tek tek kod yazmadan, tüm kategorik değişkenlerimizin frekans dağılımlarını anında görmüş ve “elle” yaptığımız analizdeki bulgularımızı doğrulamış olduk.

Histogramların yanı sıra, DataExplorer raporu sayısal değişkenlerin teorik bir normal dağılıma ne kadar uyduğunu test eden Q-Q Plot (Quantile-Quantile Plot) grafiklerini de otomatik olarak oluşturur. Bu, serimizin ilerleyen bölümlerinde detaylarına gireceğimiz “normallik testleri” konusuna harika bir görsel giriştir.

Gördüklerimiz ve Yorumumuz:

Bir Q-Q Plot’un temel felsefesi basittir: Eğer bir değişkenin dağılımı normale yakınsa, grafikteki noktaların düz çapraz çizgi etrafında toplanması beklenir.

  • bmi (Vücut Kitle İndeksi): Noktaların büyük bir çoğunluğu düz çizgiye oldukça yakın. Bu, histogramda gördüğümüz “çan eğrisi” şeklini, yani bmi’ın normale yakın bir dağılıma sahip olduğunu istatistiksel olarak destekler.
  • charges (Masraflar): Noktalar, düz çizgiden ciddi şekilde sapma gösteriyor ve “S” şeklinde bir yapı oluşturuyor. Özellikle sağ üst köşedeki noktaların çizgiden hızla uzaklaşması, dağılımın sağa çarpık (right-skewed) olduğunun ve normal dağılımdan çok uzak olduğunun güçlü bir kanıtıdır. Bu, histogramda gördüğümüz uzun kuyruğun bir başka teyididir.
  • age (Yaş) ve children (Çocuk Sayısı): Bu değişkenlerin dağılımları da normalden uzaktır. age’in “uniform” dağılımı ve children’ın ayrık (discrete) yapısı, noktaların çizgiden sapmasına neden olur.

Bu grafikler, bize sadece dağılımın şekli hakkında değil, aynı zamanda ileride kullanacağımız bazı istatistiksel modellerin varsayımlarının (örneğin normallik varsayımı) karşılanıp karşılanmadığı hakkında da önemli ipuçları verir.

5. Correlation Analysis (Korelasyon Analizi)

Raporun bu bölümü, veri setimizdeki tüm sayısal ve kategorik değişkenler arasındaki korelasyonu görsel bir ısı haritası (heatmap) ile sunar. Korelasyon, iki değişkenin ne kadar birlikte hareket ettiğini ölçen bir katsayıdır ve -1 ile +1 arasında bir değer alır.

Ustalık Notu:

DataExplorer bu grafiği oluşturmadan önce, kategorik değişkenleri (sex, smoker vb.) arka planda otomatik olarak “one-hot encoding” yöntemine benzer bir şekilde sayısal (0/1 gibi) değişkenlere dönüştürür. Bu sayede tüm değişkenleri tek bir matriste karşılaştırabilir.

Gördüklerimiz ve Yorumumuz:

Isı haritasını yorumlarken, kırmızı renkler pozitif korelasyonu (biri artarken diğeri de artar), mavi renkler ise negatif korelasyonu (biri artarken diğeri azalır) gösterir. Rengin tonu ne kadar koyuysa, ilişki o kadar güçlüdür. Hedefimiz olan charges satırına odaklanalım:

  • charges ve smoker_yes: Bu iki değişkenin kesiştiği kare, koyu kırmızı renkte ve içinde 0.79 yazıyor. Bu, +1’e çok yakın, çok güçlü bir pozitif korelasyon demektir. Bu, bugüne kadarki en önemli bulgumuzu sayısal olarak kanıtlıyor: Sigara içiyor olmak (smoker_yes), masrafların (charges) artmasıyla çok güçlü bir şekilde ilişkilidir.
  • charges ve age: Bu karenin değeri 0.3, yani orta kuvvette pozitif bir korelasyon. Bu da Bölüm 5.1, Adım 3.2’de geom_point ile gördüğümüz “yaş arttıkça masraflar artar” trendini doğrular.
  • charges ve bmi: Bu karenin değeri 0.2, yani zayıf-orta arası pozitif bir korelasyon. Bu da bmi arttıkça masrafların artma eğiliminde olduğunu gösterir.

Bu korelasyon matrisi, “elle” yaptığımız analizde saatler sürebilecek hipotezleri ve görsel bulguları, tek bir tabloda özetleyerek bize saniyeler içinde sunar. Özellikle hangi değişkenlerin hedef değişkenimizle daha güçlü bir ilişkiye sahip olduğunu belirlemede inanılmaz derecede hızlı ve etkilidir.

6. Principal Component Analysis (Temel Bileşenler Analizi)

Raporun bu bölümü, Temel Bileşenler Analizi (PCA) adında daha ileri seviye bir istatistiksel tekniğin özetini sunar.

Ustalık Notu: PCA Nedir?

PCA, birbiriyle ilişkili (korelasyonlu) çok sayıda değişkeni, bilgiyi mümkün olduğunca az kayıpla, daha az sayıda ve birbiriyle ilişkisiz yeni değişkenlere (bunlara “temel bileşen” denir) dönüştürme sanatıdır. Amacı, veri setindeki “bilgi gürültüsünü” azaltmak ve enformasyonu daha yoğun bir şekilde temsil etmektir. Bu konu, makine öğrenmesi serilerinde detaylıca ele alınır.

Gördüklerimiz ve Yorumumuz:

Bu grafik, her bir temel bileşenin (PC1, PC2, vb.) veri setimizdeki toplam varyansın (değişkenliğin) yüzde kaçını açıkladığını gösterir.

  • PC1 (İlk Temel Bileşen): Tek başına veri setindeki toplam varyansın yaklaşık %23’ünü açıklamaktadır. Bu, veri setimizdeki en baskın desenin veya ilişkinin bu bileşen tarafından temsil edildiğini gösterir.
  • Kümülatif Açıklama: Grafikteki etiketler (23%, 40%, 53%…), o bileşen ve ondan öncekilerin birlikte varyansın toplamda ne kadarını açıkladığını gösterir. Örneğin, ilk üç temel bileşen (PC1, PC2, PC3) bir araya geldiğinde, veri setimizdeki toplam değişkenliğin %53’ünü açıklayabilmektedir.
  • İlk beş temel bileşen ise varyansın %75’ini açıklamaktadır.

Bu analiz, EDA’nın bu aşamasında bizim için doğrudan bir “aksiyon” gerektirmese de, veri setimizin iç yapısı ve değişkenlerinin kolektif olarak ne kadar “bilgi” taşıdığı hakkında bize fikir verir. Bu, serimizin gelecek bölümlerinde değinebileceğimiz daha ileri seviye konular için bir “merak uyandırma” notu olarak düşünülebilir.

Bir önceki grafik bize ne kadar varyansın açıklandığını gösterirken, bu ikinci PCA grafiği bize bu varyansı hangi değişkenlerin açıkladığını gösterir.

Gördüklerimiz ve Yorumumuz:

Bu grafik, ilk 5 temel bileşenin (PC1, PC2, …) her birinin hangi orijinal değişkenlerle güçlü bir şekilde ilişkili olduğunu gösterir. Çubuk ne kadar uzunsa, o değişkenin o temel bileşeni oluşturmadaki rolü o kadar büyüktür.

  • PC1’e Odaklanalım: Hatırlarsanız, PC1 tek başına varyansın en büyük kısmını (%23) açıklıyordu. Bu grafiğe baktığımızda, PC1’i oluşturan en güçlü değişkenlerin smoker_yes, smoker_no ve charges olduğunu görüyoruz. smoker_yes ve charges’ın çubukları aynı (negatif) yöndeyken, smoker_no’nun çubuğu zıt (pozitif) yöndedir.
  • Bu Ne Anlama Geliyor?: Bu, veri setimizdeki en büyük varyans kaynağının, yani en belirgin “desenin”, sigara içme durumu ile masraflar arasındaki güçlü ilişkiden kaynaklandığını matematiksel olarak bize söyler. Bu, EDA’nın başından beri bulduğumuz en önemli içgörüyü, çok daha karmaşık bir istatistiksel yöntemle bir kez daha doğrulamaktadır.
  • Diğer Bileşenler: PC2’nin daha çok sex (cinsiyet) ile, PC3 ve PC4’ün ise region (bölge) değişkenlerinin farklı kategorileri ile ilişkili olduğunu görebiliriz. Bu da bize veri setindeki diğer varyasyon kaynakları hakkında fikir verir.

2. Adım Özeti ve Sonraki Adım: Bir Komutla Gelen Bilgelik

Gördüğümüz gibi, DataExplorer::create_report() fonksiyonu, Keşifsel Veri Analizi’nin ilk ve en önemli adımlarını inanılmaz bir hızla gerçekleştirerek bize saatler kazandırdı. Bölüm 5.1’de adım adım keşfettiğimiz temel bulguların neredeyse tamamını (değişken dağılımları, eksik veri durumu, temel ilişkiler) tek bir komutla teyit etmiş olduk.

İleri Seviye Konulara İlk Bakış

Bu rapor, bize aynı zamanda serimizin gelecek bölümlerinde derinlemesine dalacağımız bazı ileri seviye konular hakkında da bir ön izleme sundu:

  • Q-Q Plot’lar ve Normallik: charges değişkeninin normal dağılımdan ne kadar uzak olduğunu görsel olarak gördük. Bir değişkenin dağılımını “normale” yaklaştırmak için log gibi dönüşümler yapma sanatını ve bu durumu istatistiksel olarak test edeceğimiz normallik testlerini ilerideki bölümlerde işleyeceğiz.
  • Korelasyon Analizi: Isı haritası, smoker_yes ve charges arasındaki güçlü ilişkiyi (0.79) bize sayısal olarak gösterdi. İki değişken arasındaki ilişkinin istatistiksel olarak “anlamlı” olup olmadığını test etmeyi ve korelasyonun inceliklerini gelecek maceralarımızda öğreneceğiz.
  • Temel Bileşenler Analizi (PCA): Bu rapor, PCA gibi karmaşık bir makine öğrenmesi tekniğini bile bizim için otomatik olarak uyguladı ve veri setimizdeki en baskın desenin “sigara içme-masraf ilişkisi” olduğunu kanıtladı. Boyut indirgeme gibi bu tür ileri seviye konular da yol haritamızın ilerleyen duraklarında yer alacak.

Şimdilik bu analizleri, veri setimiz hakkında bize hızlıca “fikir veren” güçlü araçlar olarak düşünebiliriz.

Sonuç

DataExplorer bize adanın genel bir haritasını verdi. Ancak bu harita, her patikayı veya her küçük dereyi göstermez. Bazen, belirli bölgelere daha yakından bakmak veya haritada olmayan detayları keşfetmek için farklı bir alet gerekir.

İşte bu noktada bir sonraki aracımız devreye giriyor. Bir sonraki adımımız, summarytools ile Detaylı ve Şık Özetler oluşturmak!