Anasayfa / Genel bir bakış / Her Haftaya Bir Paket: “R dilinde funModeling ile verileri hisset”

Her Haftaya Bir Paket: “R dilinde funModeling ile verileri hisset”

R‘sız hiç olur mu 😀 

Python ile makine öğrenmesi serisine parelel olarak, her hafta bir paketin tanıtımıyla R programında da birlikte akacağız. 

Bu hafta R dilinde ki funModeling paketiyle verileri koklayacağız, tadacağız, dinleyeceğiz. Verilerin profillerini tüm yalınlığıyla ortaya koyan bu paketin gelin özel güçlerini daha yakından görelim.

Verilerimiz ne durumda?

Çalışmamızda, hastaların bazı bilgileri ve semptomlarına göre kalp hastalığının varlığını araştıran bir veriyi inceleyelim. Veriyi elimize aldığımızda ilk sormamız gerekenlerin başında eksik gözlem var mı, hangi tip değişkenlerimiz var, kategorik değişkenler kaç sınıftan oluşuyor, sürekli değişkenlerimiz de sıfırın yoğunluğu nedir gibi sorular gelir. Bütün bu soruları tek bir kodla cevaplayalım.

library(funModeling)
df_status(heart_disease)

Burada ilk sütun değişken isimlerini verir.

q_zeros (quantity zeros) : ilgili değişkendeki sıfır miktarını verir. Neden önemli? Mesela “has_heart_disease” yani kap hastalığı varsa “1”, yoksa “0” olarak kodlanan faktör değişkenlerde dengesiz veri(imbalanced data) problemi var mı diye hızlıca görebiliriz. Eğer sürekli veride sıfırın yoğunluğunu görüyorsak buda veride seyreklik problemi(sparsity problem) oluşturur yani verinin dağılımını bozar. Bundan dolayı değişkeni kategorikleştirmeye yoluna gidebiliriz.

p_zeros (percent zeros) : ilgili değişkende sıfırın bulunma yüzdesini verir.

q_na (quantity of NA) : ilgili değişkendeki eksik gözlem miktarı.

p_na (percent of NA) : ilgili değişkenin yüzde kaçının eksik veriden oluştuğunu söyler. Neden önemli? Eksik gözlem yüzdesine göre değişkeni çıkarmalı mıyız, doldurmalı mıyız, doldurma kararını aldıktan sonra o değişken üzerinde bir takım incelemeye gitmeliyiz. Eksik gözlemler rastgele dağılmış mı, başka değişkenlerden kaynaklanıyor olabilir mi gibi düğümleri çöze çöze gitmemizde yardımcı olur.

q_inf (quantity of infinite values) : değişkende sonsuz değerlerin miktarı

p_inf (percent of infinite values) : değişkende sonsuz değerlerin yüzdesi

type : değişkenin tipi

unique : veride benzersiz değerlerin miktarını verir.

 

Kategorik Verilerle Derinleşelim: 

Kategorik verileri genelde frekans tablolarıyla özetleriz. Bir değişkende ilgili kategorinin frekansı nedir, diğer kategorilerle birlikte verinin kaçta kaçını oluşturuyor(kümülatif toplam) gibi sorularla cevap aradığımızda;  freq() fonksiyonu verideki kategorik değişkenleri algılayıp sadece onları özetini bize getirir. Aynı zamanda değişkenlerin sütun grafiklerinide çıktıda basar.

freq(heart_disease)  #verideki tüm kategorik değişkenlerin özeti

freq(data=heart_disease, input = c("thal","chest_pain")) #sadece istediğimiz kategorik değişkenleri input argümanıyla verebiliriz

freq(data=heart_disease$thal, plot = FALSE, na.rm = TRUE) #eksik gözlemleri ve grafikleri çıktıda görmek istemediğimizde

 

Yukarıdaki çıktıda verideki tüm kategorik değişkenlerin özetleri yer alıyor. ilk sütunda değişkenin adı hemen altında kategorileri yer alıyor. Bu kategorilerin değişkendeki sayılarını frequency, yüzdelerini percentage, kümülatif toplamlarını da yüzdesel olarak cumulative_perc sütununda veriyor. Tüm değişkenlerin sütun grafiğini art arda basıyor, yukarıda sadece bir tanesini ele aldık.

 

Nümerik Verilerle Derinleşelim: 

Sürekli değişkenlerin betimsel istatistiklerini aşağıdaki kodla detaylı bir şekilde görebiliriz.

profiling_num(heart_disease)

 

Verideki kesikli ve sürekli verilerini algılayıp barchart ve histogram grafiklerini bir arada veren harika fonksiyon!

 plot_num(heart_disease)

 

 

Bağımlı Değişkenimizi Kimler, Ne kadar Açıklıyor?

Veri kümelerinin hızlı bir şekilde araştırılabilmesi için özel tasarlanmış iki değişkenli bağımlılığın ölçüsünü kullanıyoruz. Varsayımlar sağlanmadığında, aradaki ilişki doğrusal olmadığında; korelasyonun ötesinde fonksiyonel bir ilişki varsa MIC(mutual information coefficent) veya diğer bilgi ölçümlerini(entropi, gain ratio vs.) kullanabiliriz.

en: entropi değeridir
mi (mutual information): karşılıklı bilgi katsayısıdır. Bu değerin bire yakın olması belirsizlikte azalmayı işaret eder. Yani ilgi değişkenin bağımlı değişkeni açıklama miktarıdır.
ig (information gain): bilgi katsayısıdır.
gr (gain ratio): Bilgi katsayısının entropiye bölünmesinden elde edilir.

Burada bağımlı değişkenimiz kalp hastalığının varlığını ifade eden değişken. Genellikle karşılıklı bilgi katsayısını(mi) ya da bilgi kazanımını(ig) kullanırız. Bu değerler bire ne kadar yakınsa ilgili nitelik, bağımlı değişkeni o kadar iyi açıkladığını söyleyebiliriz.

var_rank_info(heart_disease, target = "has_heart_disease")

 

Kategorik değişkenlerin bağımlı değişken üzerindeki dağılımını cross_plot() fonksiyonuyla görselleştirebiliriz. Aşağıda kalp hastalığının cinsiyete göre dağılımını soldaki grafikte yüzdesel, sağdaki grafikte frekans olarak görüyoruz.

cross_plot(heart_disease, input = "gender", target = "has_heart_disease")

 

Aynı zamanda sürekli bir değişkeni kesiklileştirerek bağımlı değişken içinde dağılımına da bakabiliriz. cross_plot bunu bizim için otomatik olarak yapıyor. Aşağıda kalp atış oranının, kalp hastalığına sahip olanlarda ve olmayanlardaki oranlarının nasıl değiştiğini görebiliriz.

cross_plot(heart_disease, input = "max_heart_rate", 
                          target = "has_heart_disease")

 

Şimdi de sürekli değişkenlerin, kategorik değişkenlere göre dağılımına bakalım. Kalp hastalığının sahip olanların ve olmayanların yaş dağılımını plotar() fonksiyonunun yardımıyla çizdirebiliriz. Eşkenar dörtgenler ortalamayı temsil ediyor.

 plotar(data = heart_disease, input = "age", 
                              target = "has_heart_disease", 
                              plot_type = "boxplot")

 

Burada grafik tipini değiştirebiliriz. Maksimum kalp atış oranının kalp hastası olanlarda ve olmayanlardaki dağılımına bir de histogramla bakalım.

plotar(data = heart_disease, input = "max_heart_rate", 
                             target = "has_heart_disease", 
                             plot_type = "histdens")

Şimdi toparlayalım. df_status ile; verilerimizde eksik gözlemleri, veride sıfır ve sonsuz değerlerin miktarını ve yüzdesini, verinin tipini, benzersiz gözlem sayısını inceleyerek büyük resmi çizdik. Bütünden parçalara indik;  freq bize kategorik verileri, profiling_num ise sürekli verileri bize anlattı. plot_num ile veride canı barchart ve histogram çeken değişkenleri eşanlı çizdirdik. Bu fonksiyonlar sayesinde verinin hikayesinden hakkında bir spoiler dan fazlasını aldık. Daha sonra var_rank_info ile kimler bağımlı değişkenimizi ne kadar etkilediğini araştırdık. cross_plot ve plotar fonksiyonları ile istediğimiz koşullar altında grafikler çizdik.

Ne dersin Data Sapiens, yeni bir pokemon mu doğuyor 😛 😀

 

 

KAYNAKLAR

https://livebook.datascienceheroes.com/

https://www.rdocumentation.org/packages/funModeling/versions/1.6.8

https://towardsdatascience.com/exploratory-data-analysis-8fc1cb20fd15

https://r4ds.had.co.nz/exploratory-data-analysis.html

 

 

 

 

 

 

Hakkında Tuğbanur GÜVELİ

GÖZ ATMAK İSTEYEBİLİRSİNİZ

Python ile Adres Bulucu

Python ile Adres Bulma Motoru Oluşturma

Merhaba arkadaşlar, bu aralar işimden dolayı Python ile haşır neşir olduğumdan dolayı Python ile yazılarıma …

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir