# 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")
dlookr ile Veri Teşhisi ve Aykırı Değer
AvıŞimdiye kadar veri setimizin genel yapısını ve değişkenlerin dağılımlarını inceledik. Artık bir adım daha derine inerek, veri setimizin “sağlık kontrolünü” yapma zamanı. Bir kaşifin, keşfettiği adadaki su kaynaklarının temizliğini veya toprağın verimliliğini test etmesi gibi, biz de veri setimizdeki potansiyel sorunları (aykırı değerler, sıfırlar vb.) teşhis edeceğiz.
Bu görev için alet çantamızdaki en iyi araçlardan biri
dlookr paketidir. Bu paket, sadece veriyi keşfetmekle
kalmaz, aynı zamanda onu bir doktor gibi “teşhis” eder.
diagnose() ile Genel Sağlık Raporudlookr paketinin amiral gemisi fonksiyonu olan
diagnose(), veri setimizdeki her bir değişken için kapsamlı
bir sağlık raporu sunar.
# insurance_df veri setimiz için bir teşhis raporu oluşturalım
# Bu fonksiyon genellikle .Rmd içinde güvenle çalışır çünkü basit bir tablo döndürür.
diagnose(insurance_df)
## # A tibble: 7 × 6
## variables types missing_count missing_percent unique_count unique_rate
## <chr> <chr> <int> <dbl> <int> <dbl>
## 1 age numeric 0 0 47 0.0351
## 2 sex character 0 0 2 0.00149
## 3 bmi numeric 0 0 548 0.410
## 4 children numeric 0 0 6 0.00448
## 5 smoker character 0 0 2 0.00149
## 6 region character 0 0 4 0.00299
## 7 charges numeric 0 0 1337 0.999
Gördüklerimiz ve Yorumumuz:
Bu tablo, her bir değişkenimiz (satırlar) için farklı sağlık metriklerini (sütunlar) gösterir. Gelin bu temel teşhis raporunu yorumlayalım:
variables & types:
Değişkenlerimizi ve tiplerini (numeric,
character) listeler. Bu, glimpse() ile elde
ettiğimiz bilginin bir tekrarıdır.missing_count &
missing_percent: Her iki sütunun da 0
olması, veri setimizde hiç eksik değer olmadığını bir kez daha, farklı
bir araçla teyit etmemizi sağlar. Bu harika bir haber.unique_count &
unique_rate: Bu sütunlar bize her bir değişkende
kaç adet “eşsiz” veya “tekil” değer olduğunu gösterir.
sex için 2, smoker için 2 ve
region için 4 eşsiz değer olduğunu görmek, bu kategorik
değişkenlerin seviyelerini anlamamızı sağlar.charges için 1337 eşsiz değer olması ve
unique_rate’in 0.999 (yani %99.9) olması, bu değişkendeki
neredeyse her bir değerin birbirinden farklı olduğunu, yani sürekli bir
yapıya sahip olduğunu gösterir.Bu diagnose() çıktısı, bize veri setimizin temel yapısı
ve eksik veri durumu hakkında hızlı bir özet sunar. dlookr
paketinin aykırı değerleri nasıl tespit ettiğini ve raporladığını ise
bir sonraki adımda, plot_outlier() fonksiyonunu incelerken
göreceğiz.
plot_outlier() ile Aykırı Değerleri
Görselleştirmediagnose() fonksiyonu bize aykırı değerlerin
sayısını verdi. Peki bu değerler nasıl görünüyor?
dlookr paketinin plot_outlier() fonksiyonu, bu
aykırı değerleri bizim için görselleştirir.
Ustalık Notu: Raporları Ayrı Çalıştırma Pratiği
Tıpkı create_report() ve view(dfSummary())
gibi, dlookr’un plot_*() ailesindeki
fonksiyonları da karmaşık görsel çıktılar üretir. .Rmd
dosyamızın derlenmesi sırasında, özellikle PDF çıktısı alırken, sorun
yaşamamak adına bu tür görsel raporlama fonksiyonlarını da önce
Konsol’da çalıştırıp sonucunu görmek ve ardından ekran
görüntüsünü .Rmd dosyasına eklemek daha güvenli bir
yöntemdir.
Bu yüzden, aşağıdaki kod bloğunu da 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 aykırı değer grafiğini görüntüleyin!
plot_outlier(insurance_df)
plot_outlier Çıktısını Yorumlama: Aykırı
Değerlerin Teşhisi
Bu komutu konsolda çalıştırdığımızda, dlookr her bir
sayısal değişken için son derece bilgilendirici bir “Teşhis Grafiği”
oluşturur. Bu grafikler, aykırı değerlerin hem kutu grafiğindeki yerini
hem de histogram üzerindeki etkisini karşılaştırmalı olarak
gösterir.
Gördüklerimiz ve Yorumumuz:
age ve children değişkenleri için
dlookr herhangi bir aykırı değer tespit etmemiştir. Bu
nedenle, “With outliers” (Aykırı değerlerle) ve “Without outliers”
(Aykırı değerler olmadan) grafikleri tamamen aynıdır. Bu, bu iki
değişkenin dağılımının “temiz” olduğunu gösterir.Gördüklerimiz ve Yorumumuz:
diagnose() fonksiyonunun raporladığı gibi, kutu grafiğinin
üst “bıyığının” (whisker) ötesinde birkaç tane aykırı değer (siyah
noktalar) olduğunu net bir şekilde görüyoruz. Bu değerler yaklaşık
olarak 47’nin üzerindeki BMI değerleridir.bmi için aykırı değer sayısı
az olduğu için, dağılımın genel şeklinde dramatik bir değişiklik
olmaz.Gördüklerimiz ve Yorumumuz:
charges değişkeni için kutu grafiğinin
üzerinde devasa bir aykırı değer yığını olduğunu görüyoruz.charges
değişkeninin sağa çarpık yapısının ana nedeninin bu yüksek değerli
aykırı noktalar olduğunu kesin olarak kanıtlamaktadır. Bu aykırı
değerler bir “hata” mıdır? Hayır! Bu durumda, bu değerler sigorta
masraflarının doğasını yansıtan gerçek verilerdir. Ancak bu değerlerin
varlığını bilmek, ileride bir model kurmaya karar verirsek, modelimizin
bu uç değerlerden ne kadar etkileneceğini anlamamız açısından hayati
önem taşır.4. Adım Özeti ve Sonraki Adım:
dlookr paketi, veri setimizin “sağlık taramasını” hızlı
ve etkili bir şekilde yapmamızı sağladı. Özellikle charges
değişkenindeki yüksek aykırı değerlerini görsel
(plot_outlier) olarak görmüş olduk.
Artık alet çantamıza üç yeni ve güçlü otomatik EDA aracı ekledik. Peki, hangisini ne zaman kullanmalıyız? Bir sonraki ve son adımımız, bu araçları karşılaştırarak bir “Kaşifin Pusula Seçimi” rehberi oluşturmak!