1 İleri Düzey Grafikler ve Plotly ile Veri Görselleştirme / Kontrol Yapıları ve Döngüler

Dersin devamında, “Kontrol Yapıları ve Döngüler” başlığı altında;

Bu yapıların veri analizi ve programlamada nasıl kullanıldığını öğrendim ve farklı durumlara uygun kodlar yazarak pratik yaptım.

1.1 Iris Veriseti ile Öğrenlerin Uygulanması

Aşağıda, iris veri setini kullanarak ders boyunca öğrendiğim kodlara benzer bir şekilde plotly ile bazı görselleştirmeye çalıştım.

  • Gerekli paketlerin yüklenmesi
library(dplyr)
library(tidyr)
library(tibble)  
library(haven)
library(haven)
library(sjlabelled)
library(plotly)

1.1.1 1. Sepal Uzunluğu Yoğunluk Grafiği

veri_turlerine_gore <- iris %>% group_split(Species)

setosa_yogunluk <- density(veri_turlerine_gore[[1]]$Sepal.Length, na.rm = TRUE)
versicolor_yogunluk <- density(veri_turlerine_gore[[2]]$Sepal.Length, na.rm = TRUE)
virginica_yogunluk <- density(veri_turlerine_gore[[3]]$Sepal.Length, na.rm = TRUE)

# Yoğunluk Grafiği
plot_ly() %>%
  add_lines(x = ~setosa_yogunluk$x, y = ~setosa_yogunluk$y, name = "Setosa", fill = 'tozeroy') %>%
  add_lines(x = ~versicolor_yogunluk$x, y = ~versicolor_yogunluk$y, name = "Versicolor", fill = 'tozeroy') %>%
  add_lines(x = ~virginica_yogunluk$x, y = ~virginica_yogunluk$y, name = "Virginica", fill = 'tozeroy') %>%
  layout(xaxis = list(title = "Sepal Uzunluğu"),
         yaxis = list(title = "Yoğunluk"))

1.1.2 2. Sepal Uzunluğu ve Sepal Genişliği Grafiği

iris %>%
  plot_ly(x = ~Sepal.Length, 
          y = ~Sepal.Width, 
          color = ~factor(Species),  
          colors = "Set1") %>%  
  add_markers() %>%  
  layout(
    legend = list(title = list(text = '<b> Türler </b>')), 
    xaxis = list(
      title = "Sepal Uzunluğu", 
      range = c(4, 8)  
    ),
    yaxis = list(
      title = "Sepal Genişliği", 
      range = c(2, 4.5)))

1.1.3 3. Sepal Uzunluğu ve Türlere Göre Kutu Grafiği

iris %>%
  filter(!is.na(Sepal.Length)) %>%  
  plot_ly(x = ~Species, 
          y = ~Sepal.Length, 
          color = ~Species) %>%  
  add_boxplot() %>%  
  layout(
    boxmode = "group",  
    legend = list(
      title = list(text = '<b> Türler </b>')  
    ),
    xaxis = list(
      title = "Türler"  
    ),
    yaxis = list(
      title = "Sepal Uzunluğu", 
      range = c(4, 8)))

1.1.4 4. Sepal Uzunluğu ve Türler Kutu Grafiği

iris %>%
  plot_ly(x = ~Species, 
          y = ~Sepal.Length) %>%  
  add_boxplot() %>%  
  layout(
    xaxis = list(
      title = "Türler"  
    ),
    yaxis = list(
      title = "Sepal Uzunluğu",  
      range = c(4, 8)))

1.1.5 5. Türler ve Sepal Uzunluğu Aralığına Göre Frekans Grafiği

iris %>%
  mutate(Sepal.Length.Group = cut(Sepal.Length, breaks = seq(4, 8, by = 0.5))) %>%  
  count(Species, Sepal.Length.Group) %>%
  plot_ly(x = ~Sepal.Length.Group, 
          y = ~n, 
          hoverinfo = "y", 
          color = ~factor(Species)) %>%  
  add_bars() %>%  
  layout(
    legend = list(
      title = list(text = '<b> Türler </b>')  
    ),
    xaxis = list(
      title = "Sepal Uzunluğu Aralığı"  
    ),
    yaxis = list(
      title = "Frekans",  
      range = c(0, 30)))

1.2 Kontrol Yapıları ve Döngüler

1.2.1 Kontrol Yapıları

  • Kontrol yapıları, işlemleri belirli koşullara göre yönetmek için kullanılır.
  • if, else, ifelse gibi yapıların doğru şekilde nasıl uygulanacağını öğrendim.

1. Koşula Göre Değer Atama

set.seed(42)
sayisal_deger <- runif(1, 0, 10)

if(sayisal_deger > 5) {
  sonuc <- "Büyük"
} else {
  sonuc <- "Küçük veya Eşit"
}

2. Bir Sayının Çarpmaya Göre Tersini Bulma

a <- 0
if(a != 0) {
  ters <- 1 / a
  cat(a, "sayısının çarpmaya göre tersi:", ters)
} else {
  cat(a, "sayısının çarpmaya göre tersi tanımsızdır.")
}
## 0 sayısının çarpmaya göre tersi tanımsızdır.

1.2.2 Döngüler

Döngüler, işlemleri tekrarlamak için kullanılır. Bu hafta for döngü yapılarını inceledik.

Örnek:

for (i in 1:10) {
  sonuc <- i + i
  cat(i, "+", i, "=", sonuc, "\n")
}
## 1 + 1 = 2 
## 2 + 2 = 4 
## 3 + 3 = 6 
## 4 + 4 = 8 
## 5 + 5 = 10 
## 6 + 6 = 12 
## 7 + 7 = 14 
## 8 + 8 = 16 
## 9 + 9 = 18 
## 10 + 10 = 20

Matris Satır Toplamlarını Hesaplama

matris <- matrix(1:10, nrow = 5, byrow = TRUE)
satir_toplamlari <- numeric(nrow(matris))
for (i in 1:nrow(matris)) {
  satir_toplamlari[i] <- sum(matris[i, ])
}

cat("Satır Toplamları:", satir_toplamlari)
## Satır Toplamları: 3 7 11 15 19

1.2.3 İleri Seviye Kontrol Yapıları

Vektördeki Değerleri Test Etme

set.seed(101)
sayilar <- sample(-10:10, 15, replace = TRUE)

sonuclar <- ifelse(sayilar > 0, "Pozitif", 
                   ifelse(sayilar < 0, "Negatif", "Sıfır"))

cat("Sayılar:", sayilar, "\nSonuçlar:", sonuclar)
## Sayılar: -2 3 6 -8 -8 -2 -8 -8 -9 9 10 6 3 1 -10 
## Sonuçlar: Negatif Pozitif Pozitif Negatif Negatif Negatif Negatif Negatif Negatif Pozitif Pozitif Pozitif Pozitif Pozitif Negatif

1.2.4 ifelse Kullanımı

Tek veya Çift Sayıları Belirleme

set.seed(41)
sayi_listesi <- sample(1:100, 20)

tek_cift <- ifelse(sayi_listesi %% 2 == 0, "Çift", "Tek")

cat("Sayılar:", sayi_listesi, "\nTek/Çift Durumu:", tek_cift)
## Sayılar: 40 35 5 96 72 58 29 70 22 59 31 45 82 85 92 89 76 17 68 52 
## Tek/Çift Durumu: Çift Tek Tek Çift Çift Çift Tek Çift Çift Tek Tek Tek Çift Tek Çift Tek Çift Tek Çift Çift

2 Sıra Sizde Çözümleri

Final ve Vize Notlarına Göre Geçme Durumu

Derste yaptığım;

vize <- c(60, 70, 80, 90, 55)
final <- c(45, 65, 70, 50, 80)
devam <- c(14, 10, 13, 12, 11)

gecme_notu <- ifelse(devam >= 11 & final >= 50, 
                     final * 0.6 + vize * 0.4, 
                     ifelse(devam < 11, 
                            final * 0.6, 
                            NA))

cat("Geçme Notları:", gecme_notu, sep = "\n")
## Geçme Notları:
## NA
## 39
## 74
## 66
## 70

for ile yaptığım

vize <- c(60, 70, 80, 90, 55)
final <- c(45, 65, 70, 50, 80)
devam <- c(14, 10, 13, 12, 11)

gecme_notlari <- numeric(length(vize))

for (i in 1:length(vize)) {
  if (devam[i] >= 11) {
    gecme_notlari[i] <- final[i] * 0.6 + vize[i] * 0.4
  } else {
    gecme_notlari[i] <- final[i] * 0.6
  }
}

cat("Geçme Notları:", gecme_notlari)
## Geçme Notları: 51 39 74 66 70

Döngü ile İşlem Takibi Sorusu (derste yapıldı)

islem_takibi <- character(10)
for (i in 1:10) {
  islem_takibi[i] <- paste("İşlem", i, "tamamlandı")
}

cat(islem_takibi, sep = "\n")
## İşlem 1 tamamlandı
## İşlem 2 tamamlandı
## İşlem 3 tamamlandı
## İşlem 4 tamamlandı
## İşlem 5 tamamlandı
## İşlem 6 tamamlandı
## İşlem 7 tamamlandı
## İşlem 8 tamamlandı
## İşlem 9 tamamlandı
## İşlem 10 tamamlandı

Önemli Notlar

x <- c("a", "b", "c", "d")

for(i in 1:4) {
        print(x[i])  
}
## [1] "a"
## [1] "b"
## [1] "c"
## [1] "d"
for(i in seq_along(x)) {   
        print(x[i])
}
## [1] "a"
## [1] "b"
## [1] "c"
## [1] "d"

Deneme

for (i in 1:10) {
  cat(i, "+", i, "=", i + i, "\n")
}
## 1 + 1 = 2 
## 2 + 2 = 4 
## 3 + 3 = 6 
## 4 + 4 = 8 
## 5 + 5 = 10 
## 6 + 6 = 12 
## 7 + 7 = 14 
## 8 + 8 = 16 
## 9 + 9 = 18 
## 10 + 10 = 20

Deneme

for (i in 1:10) {
  print(paste(i, "+", i, "=", i + i))
}
## [1] "1 + 1 = 2"
## [1] "2 + 2 = 4"
## [1] "3 + 3 = 6"
## [1] "4 + 4 = 8"
## [1] "5 + 5 = 10"
## [1] "6 + 6 = 12"
## [1] "7 + 7 = 14"
## [1] "8 + 8 = 16"
## [1] "9 + 9 = 18"
## [1] "10 + 10 = 20"

Deneme

# Veriler
X <- cbind(1:5, 21:25)
X
##      [,1] [,2]
## [1,]    1   21
## [2,]    2   22
## [3,]    3   23
## [4,]    4   24
## [5,]    5   25
# Satır çarpımlarını hesaplayıp yazdırma
for (i in 1:nrow(matris)) {
  carpim <- prod(matris[i, ]) # Satırdaki elemanların çarpımı
  cat(i, "satirdaki degerlerin carpimi", carpim, "olarak hesaplanmistir.\n")
}
## 1 satirdaki degerlerin carpimi 2 olarak hesaplanmistir.
## 2 satirdaki degerlerin carpimi 12 olarak hesaplanmistir.
## 3 satirdaki degerlerin carpimi 30 olarak hesaplanmistir.
## 4 satirdaki degerlerin carpimi 56 olarak hesaplanmistir.
## 5 satirdaki degerlerin carpimi 90 olarak hesaplanmistir.

Deneme

X <- cbind(1:5, 21:25)
X
##      [,1] [,2]
## [1,]    1   21
## [2,]    2   22
## [3,]    3   23
## [4,]    4   24
## [5,]    5   25
for(i in 1:nrow(X)){
  cat(i, ". satirdaki sayilarin carpimi =", X[i,1]*X[i,2],sep = "", "\n")
}
## 1. satirdaki sayilarin carpimi =21
## 2. satirdaki sayilarin carpimi =44
## 3. satirdaki sayilarin carpimi =69
## 4. satirdaki sayilarin carpimi =96
## 5. satirdaki sayilarin carpimi =125

. SON NOT

Bu derste ve takip eden iki hafta içerisinde;