Not: Bu günlük hazırlanırken kod düzeltmelerinde yapay zeka aracı Claude AI’den faydalanılmıştır.

Veri Setinin Seçimi

Bu günlükteki uygulamaları daha önce kullandığımız iris veri seti ile yapacağım. İris veri seti, üç farklı süsen çiçeği türüne (Setosa, Versicolor, Virginica) ait çanak yaprağı (sepal) ve taç yaprağı (petal) uzunluk ve genişlik ölçümlerini içeriyor. Her çiçek türünden 50 örnek olmak üzere toplam 150 veri mevcut.

data(iris)
summary(iris)%>%
  kable() %>%
  kable_styling(full_width = F)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100 setosa :50
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:50
Median :5.800 Median :3.000 Median :4.350 Median :1.300 virginica :50
Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199 NA
3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800 NA
Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500 NA

apply Uygulaması

apply() fonksiyonunu matris veya data frame’in tamamı üzerinde kullanırız. Margin 1 ve 2 olmak üzer farklı kullanımları var. Margin 1 ile satır ortalamalarını, margin 2 ile sütunlara ait standart sapmaları hesaplamayı deneyeceğim.

Margin 1 Kullanım Örneği

secili_sutunlar <- iris[,1:4]
satir_ortalamasi <- apply(secili_sutunlar, 1,mean)
iris$satir_ortalamasi <- satir_ortalamasi
head(iris) %>% 
  kable() %>%
  kable_styling(full_width = F)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species satir_ortalamasi
5.1 3.5 1.4 0.2 setosa 2.550
4.9 3.0 1.4 0.2 setosa 2.375
4.7 3.2 1.3 0.2 setosa 2.350
4.6 3.1 1.5 0.2 setosa 2.350
5.0 3.6 1.4 0.2 setosa 2.550
5.4 3.9 1.7 0.4 setosa 2.850

Margin 2 Kullanımı

Seçili sütunların standart sapmasını apply kullanarak hesaplayacağım.

std_1 <- apply(secili_sutunlar, 2, sd)
std_1 %>%
  kable(col.names = "Standart Sapma") %>%
  kable_styling(full_width = F)
Standart Sapma
Sepal.Length 0.8280661
Sepal.Width 0.4358663
Petal.Length 1.7652982
Petal.Width 0.7622377

lapply ve sapply Uygulaması

lapply ve sapply aslında aynı mantıkta çalışıyorlar. İkisi de bir veri yapısının her elemanına aynı fonksiyonu uyguluyor. Aralarındaki tek fark ;lapply liste formatında, sapply ise vektör formatında sonuç veriyor.

secili_sutunlar<- iris[, 1:4]

l_sonuc <- lapply(secili_sutunlar, mean)
class(l_sonuc)  # "list"
## [1] "list"
s_sonuc <- sapply(secili_sutunlar, mean)
class(s_sonuc)  # "numeric"
## [1] "numeric"
knitr::kable(
  data.frame(
    Fonksiyon = c("lapply", "sapply"),
    Sonuc_Tipi = c("Liste", "Vektör"),
    Kullanim = c("Karmaşık yapılar için", "Basit analizler için")
  ),
  caption = "lapply vs sapply Farkları"
)
lapply vs sapply Farkları
Fonksiyon Sonuc_Tipi Kullanim
lapply Liste Karmaşık yapılar için
sapply Vektör Basit analizler için

tapply Uygulaması

Veriyi bir faktöre göre gruplayıp özetler. Vektörler üzerinde çalışır. Burada çiçek türlerine göre taç yaprağı uzunluklarının ortalamalarını hesapladım.

tapply(iris$Petal.Length, iris$Species, mean) %>% 
    kable()%>%
    kable_styling(full_width = F)
x
setosa 1.462
versicolor 4.260
virginica 5.552

mapply Uygulaması

Kullanmak istediğimiz fonksiyonu birden fazla değişkene aynı anda uygulayabiliriz. Burada her bir çiçek türü için taç yaprak uzunluğunun çanak yaprak uzunluğuna ve çanak yaprak genişliğinin taç yaprak genişliğine oranlarının ortalamalarını hesaplıyorum.

sonuc <- mapply(function(sp) {
  tur_verisi <- iris[iris$Species == sp, ]
  c(
    Uzunluk_Orani = mean(tur_verisi$Petal.Length / tur_verisi$Sepal.Length),
    Genislik_Orani = mean(tur_verisi$Petal.Width / tur_verisi$Sepal.Width)
  )
}, 
sp = c("setosa", "versicolor", "virginica")
)

sonuc_tablo <- t(sonuc)
colnames(sonuc_tablo) <- c("Taç/Çanak Uzunluk Oranı", "Taç/Çanak Genişlik Oranı")
rownames(sonuc_tablo) <- c("Setosa", "Versicolor", "Virginica")

kable(sonuc_tablo, digits = 3, caption = "İris Türlerine Göre Taç/Çanak Oranları")
İris Türlerine Göre Taç/Çanak Oranları
Taç/Çanak Uzunluk Oranı Taç/Çanak Genişlik Oranı
Setosa 0.293 0.072
Versicolor 0.718 0.480
Virginica 0.844 0.684

split Uygulaması

split() fonksiyonu bir veri setini veya vektörü, belirli bir değişkene göre gruplara ayırır ve her grubu ayrı bir liste elemanı olarak saklar. Burada çiçekleri türlerine göre ayırıp taç ve çanak yapraklarının uzunlukları ortalamalarını hesapladım.

sonuc <- split(iris, iris$Species) %>%
  lapply(function(x) {
    c(
      Ort_Sepal = mean(x$Sepal.Length),
      Ort_Petal = mean(x$Petal.Length)
      
    )
  })

sonuc_tablo <- do.call(rbind, sonuc)


colnames(sonuc_tablo) <- c("Çanak Yaprak", 
                            "Taç Yaprak" 
                )
rownames(sonuc_tablo) <- c("Setosa", "Versicolor", "Virginica")

kable(sonuc_tablo, 
      digits = 2, 
      caption = "İris Türlerine Göre İstatistiksel Özet",
      align = 'c')
İris Türlerine Göre İstatistiksel Özet
Çanak Yaprak Taç Yaprak
Setosa 5.01 1.46
Versicolor 5.94 4.26
Virginica 6.59 5.55

by Uygulaması

by() fonksiyonu, veriyi kategorik bir değişkene göre gruplara ayırır ve her grup için belirttiğimiz fonksiyonu uygular. Her bir çiçek türü için ayrı ayrı ortalama taç ve çanak yaprak uzunluklarını hesapladım.

sonuc_by <- by(iris[, 1:4], iris$Species, function(x) {
  c(
    Sepal_Ortalama = mean(x$Sepal.Length),
    Petal_Ortalama = mean(x$Petal.Length)
  )
})

tablo_by <- do.call(rbind, sonuc_by)
rownames(tablo_by) <- c("Setosa", "Versicolor", "Virginica")
colnames(tablo_by) <- c("Çanak Yaprak", 
                         "Taç Yaprak")

kable(tablo_by, 
      digits = 2, 
      caption = "İris Türlerine Göre İstatistiksel Analiz (by fonksiyonu)",
      align = 'c') %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = FALSE,
                position = "center")
İris Türlerine Göre İstatistiksel Analiz (by fonksiyonu)
Çanak Yaprak Taç Yaprak
Setosa 5.01 1.46
Versicolor 5.94 4.26
Virginica 6.59 5.55

datacamp ’tan İki İz

Bilgisayardaki Bir Resmi Ekleme

Datacampta egzersiz yaparken bilgisayrdaki bir resmin nasıl ekleneceğini öğrendiğim bir kısım vardı. O bilgiyi burada uygulamak istiyorum.

İris Türleri

İris Türleri

Metin İçinde Bağlantı Verme

Yine datacamp egzersizi yaparken web sitesi yazmadan metne bağlantı eklemeyi öğrendiğim bir kısım vardı. Onu da burada örneklemek isterim. Bu günlükte adını sık sık andığımız iris çiçeğinin ne anlama geldiğini bilmek ister misiniz?