# 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")

3. Adım: summarytools ile Detaylı ve Şık Özetler

DataExplorer’ın create_report() fonksiyonu, adeta bir kaşifin adanın üzerinden drone ile çektiği yüksek çözünürlüklü bir hava fotoğrafı gibidir. Bize arazinin genel yapısını bir bakışta gösterdi. Ancak iyi bir kaşif, sadece hava fotoğrafıyla yetinmez; yere iner, belirli bitkileri inceler, toprağın yapısını analiz eder ve bulgularını özenle not defterine kaydeder.

İşte summarytools paketi, bizim bu detaylı alan not defterimizdir. Bize, genel manzaranın içinde kaybolmak yerine, belirli değişkenlere veya veri setinin tamamına daha odaklı, detaylı ve şık bir şekilde bakma imkanı sunar.

3.1: dfSummary() ile Veri Çerçevesinin Zengin Özeti

Paketin amiral gemisi fonksiyonu olan dfSummary(), veri çerçevemizin tamamı için inanılmaz derecede detaylı bir HTML özeti oluşturur. Her bir değişken için temel istatistikleri, frekansları, eksik veri oranını ve hatta küçük bir dağılım grafiğini tek bir tabloda sunar.

Ustalık Notu: Raporları Ayrı Çalıştırma Pratiği

Tıpkı DataExplorer::create_report()’da olduğu gibi, summarytools’un view() fonksiyonu da kendi HTML çıktısını oluşturur. .Rmd dosyamızın derlenmesi sırasında çakışmaları ve olası hataları önlemek için, bu tür komutları doğrudan RStudio’nun Konsol penceresinde ç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 interaktif özeti görüntüleyin!
view(dfSummary(insurance_df))

dfSummary Çıktısını Yorumlama: Kaşifin Detaylı Notları

Bu komutu konsolda çalıştırdığımızda karşımıza çıkan tablo, DataExplorer’ın raporundaki birçok bölümü tek bir yoğun ve bilgilendirici özette birleştirir. Gelin, bu “alan not defterinin” bize sunduğu zengin bilgileri satır satır inceleyelim:

Gördüklerimiz ve Yorumumuz:

Her bir satır, veri setimizdeki bir değişkene karşılık gelir ve bize o değişken hakkında inanılmaz detaylar sunar:

  • 1. age [numeric]:

    • Stats/Values: Ortalama yaşın 39.2, medyanın ise 39 olduğunu görüyoruz. Ortalama ve medyanın birbirine bu kadar yakın olması, age dağılımının oldukça simetrik olduğunun bir başka kanıtıdır.
    • Graph: Sağ taraftaki minyatür histogram, Bölüm 5.1’de çizdiğimiz yaş histogramının neredeyse aynısıdır ve dağılımın “uniform” (dengeli) yapısını teyit eder.
  • 2. sex [character]:

    • Freqs (% of Valid): Veri setinin %49.5’inin female, %50.5’inin ise male olduğunu görüyoruz. Bu, cinsiyet dağılımının ne kadar dengeli olduğunu bize sayısal olarak gösterir.
    • Graph: Minyatür çubuk grafik de bu dengeli yapıyı bir bakışta görmemizi sağlar.
  • 3. bmi [numeric]:

    • Stats/Values: Ortalama (30.7) ve medyan (30.4) yine birbirine çok yakın. Bu, bmi dağılımının normale yakın olduğunun güçlü bir sayısal göstergesidir.
    • Graph: Minyatür histogram, bizim de daha önce çizdiğimiz gibi, tipik bir “çan eğrisi” şeklini andırıyor.
  • 4. children [numeric]:

    • Freqs (% of Valid): Bu sayısal bir değişken olmasına rağmen, dfSummary bize her bir değerin frekansını (0 çocuk: %42.9, 1 çocuk: %24.2 vb.) sunarak harika bir iş çıkarıyor. Bu, insanların çoğunun çocuğu olmadığını veya tek çocuğu olduğunu anında görmemizi sağlar.
    • Graph: Minyatür çubuk grafik, bu sağa çarpık dağılımı görsel olarak özetler.
  • 5. smoker [character]:

    • Freqs (% of Valid): İşte en çarpıcı frekans bilgisi! no (içmeyenler) %79.5 iken, yes (içenler) sadece %20.5. Bu, smoker değişkeninin ne kadar dengesiz bir dağılıma sahip olduğunu net bir şekilde ortaya koyar.
    • Graph: Minyatür grafik de bu büyük dengesizliği vurgular.
  • 6. region [character]:

    • Freqs (% of Valid): Dört bölgenin de yüzdeleri birbirine oldukça yakın (northeast: %24.2, northwest: %24.3, southeast: %27.2, southwest: %24.3). Bu, coğrafi dağılımın da dengeli olduğunu gösterir.
    • Graph: Minyatür çubuk grafikteki çubukların neredeyse aynı boyda olması bu dengeyi görsel olarak teyit eder.
  • 7. charges [numeric]:

    • Stats/Values: Belki de en önemli istatistiksel ipucu burada! Ortalama (Mean: 13270.4) ile medyan (Median: 9382) arasında çok büyük bir fark var. Bu, dağılımın sağa çarpık olduğunun ve yüksek değerli aykırı değerlerin ortalamayı yukarı çektiğinin en güçlü sayısal kanıtıdır.
    • Graph: Minyatür histogram, bu sağa çarpıklığı ve uzun kuyruğu mükemmel bir şekilde görselleştirir.

Genel Sonuç:

dfSummary() çıktısı, bize sadece temel istatistikleri vermekle kalmaz, aynı zamanda minyatür grafikler ve frekans tabloları aracılığıyla her değişkenin karakterini tek bir bakışta anlamamızı sağlar. Bu çıktı, Bölüm 5.1’de birçok farklı adımla ulaştığımız içgörülerin neredeyse tamamını tek bir tabloda özetlemiş oldu.

3.2: freq() ile Kategorilerin Nabzını Tutmak

Bazen tüm veri setinin özetiyle değil, sadece tek bir kategorik değişkenin frekans dağılımıyla ilgileniriz. summarytools::freq() fonksiyonu, table() fonksiyonunun çok daha şık ve bilgilendirici bir alternatifidir.

Örneğin, veri setimizdeki en “dengesiz” dağılıma sahip olan smoker değişkenini inceleyelim.

# 'smoker' değişkeninin frekans tablosunu oluşturalım
# results='asis' ve `method = 'render'` argümanları, 
# HTML çıktısının doğrudan .Rmd dosyasına gömülmesini sağlar.
freq(insurance_df$smoker, 
     style = "rmarkdown", 
     report.nas = FALSE,
     headings = FALSE)
  Freq % % Cum.
no 1064 79.52 79.52
yes 274 20.48 100.00
Total 1338 100.00 100.00

Gördüklerimiz ve Yorumumuz:

Bu basit komut, bize sadece frekansları ve yüzdeleri (% Valid, % Total) vermekle kalmaz, aynı zamanda kümülatif yüzdeleri de sunar. Sigara içmeyenlerin (no) tüm veri setinin yaklaşık %80’ini oluşturduğunu net bir şekilde görüyoruz.

3.3: descr() ile Sayısal Verilerin Derinliklerine İnmek

Sayısal değişkenler için R’ın temel summary() fonksiyonu harikadır, ancak bazen daha fazlasına ihtiyaç duyarız. summarytools::descr() fonksiyonu, bize çarpıklık (skewness), basıklık (kurtosis), standart hata (std.error) gibi daha ileri seviye istatistikleri de sunar.

# Sayısal değişkenleri seçip descr() ile analiz edelim
insurance_df %>%
  select(age, bmi, charges) %>%
  descr(
    stats = c("mean", "sd", "min", "max", "med", "skewness", "kurtosis"),
    transpose = TRUE, # Tabloyu daha okunaklı yapmak için satır ve sütunların yerini değiştirir
    headings = FALSE
  )
Mean Std.Dev Min Max Median Skewness Kurtosis
age 39.21 14.05 18.00 64.00 39.00 0.06 -1.25
bmi 30.66 6.10 15.96 53.13 30.40 0.28 -0.06
charges 13270.42 12110.01 1121.87 63770.43 9382.03 1.51 1.59

Gördüklerimiz ve Yorumumuz:

  • skewness (Çarpıklık): Bu sütun bize bir dağılımın ne kadar simetrik olduğunu söyler.
    • bmi için çarpıklık 0.28’dir. 0’a çok yakın olan bu değer, bmi dağılımının oldukça simetrik (normale yakın) olduğunu matematiksel olarak doğrular.
    • charges için ise çarpıklık 1.51’dir. Bu yüksek pozitif değer, dağılımın sağa çarpık olduğunun en güçlü sayısal kanıtıdır. Bu, histogram ve Q-Q plot’ta gördüğümüz görsel bulguyu teyit eder.
  • kurtosis (Basıklık): Bu değer, bir dağılımın “kuyruklarının” ne kadar kalın veya “zirvesinin” ne kadar sivri olduğunu anlatır. charges için yüksek olan bu değer, dağılımda çok sayıda aykırı değer olduğunun bir başka göstergesidir.

3. Adım Özeti ve Sonraki Adım:

summarytools paketi, alet çantamıza harika ve şık raporlama araçları ekledi. DataExplorer’ın geniş kapsamlı raporunun yanında, summarytools bize belirli analizleri (frekans, detaylı istatistikler) daha odaklı ve yayın kalitesinde yapma imkanı sundu. Özellikle descr() ile charges değişkeninin “sağa çarpık” olduğunu sayısal olarak kanıtlamış olduk.

Artık verimizin genel yapısını ve tekil değişkenlerini hem görsel hem de sayısal olarak derinlemesine anladığımıza göre, veri setimizin “sağlık kontrolünü” yapacak olan doktorumuz dlookr paketini ziyaret etme zamanı. Bir sonraki adımımız, dlookr ile Veri Teşhisi ve Aykırı Değer Avı!