# 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")
summarytools ile Detaylı ve Şık ÖzetlerDataExplorer’ı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.
dfSummary() ile Veri Çerçevesinin Zengin
ÖzetiPaketin 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]:
age dağılımının oldukça simetrik
olduğunun bir başka kanıtıdır.2. sex [character]:
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.3. bmi [numeric]:
bmi dağılımının normale
yakın olduğunun güçlü bir sayısal göstergesidir.4. children [numeric]:
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.5. smoker [character]:
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.6. region [character]:
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.7. charges [numeric]:
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.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.
freq() ile Kategorilerin Nabzını TutmakBazen 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.
descr() ile Sayısal Verilerin Derinliklerine
İnmekSayı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:
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.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ı!