Bu haftaki derste, kitabın İleri Düzey Grafik Örnekleri bölümünde anlatılan plotly kütüphanesini kullanarak çeşitli veri görselleştirme yöntemlerini öğrendik. Plotly kütüphanesinde oluşturulan grafikler aynı zamanda etkileşimli olduğu için veriyi görselleştirme ve karşı tarafa daha net aktarma noktasında oldukça zengin içeriğe sahip. plotly, özellikle interaktif görselleştirme açısından çok kullanışlı. Oluşturulan grafiklerin çevrim içi paylaşımı ve kullanıcılarla etkileşimli olması bence bu dersin en etkileyici yanıydı. İleri düzey görselleştirme tekniklerini derinlemesine öğrenmeyi gerçekten çok istiyorum ama ilk aşamada biraz karmaşık geldi tabiki, üzerinde pratikk yapmak gerekiyor. Ama grafiklerle ilgili pratik yapmak sıkıcı değil, ben çok keyif alıyorum diyebilirim.
# Veriyi silindir sayısına göre gruplama
silindir_sayisi <- mtcars %>% group_split(cyl)
cyl4_yogunluk <- density(silindir_sayisi[[1]]$mpg, na.rm = TRUE)
cyl6_yogunluk <- density(silindir_sayisi[[2]]$mpg, na.rm = TRUE)
cyl8_yogunluk <- density(silindir_sayisi[[3]]$mpg, na.rm = TRUE)
# Yoğunluk Grafiği
plot_ly() %>%
add_lines(x = ~cyl4_yogunluk$x, y = ~cyl4_yogunluk$y, name = "4 Silindir", fill = 'tozeroy') %>%
add_lines(x = ~cyl6_yogunluk$x, y = ~cyl6_yogunluk$y, name = "6 Silindir", fill = 'tozeroy') %>%
add_lines(x = ~cyl8_yogunluk$x, y = ~cyl8_yogunluk$y, name = "8 Silindir", fill = 'tozeroy') %>%
layout(xaxis = list(title = "MPG (Mil Başına Yakıt Tüketimi)"),
yaxis = list(title = "Yoğunluk"))mtcars %>%
plot_ly(
x = ~mpg, # Yakıt tüketimi (mpg)
y = ~hp, # Motor gücü (hp)
color = ~factor(cyl), # Silindir sayısı (cyl)
colors = "Set1"
) %>%
add_markers() %>% # Nokta grafiği ekle
layout(
legend = list(title = list(text = '<b> Silindir Sayısı </b>')),
xaxis = list(
title = "MPG (Mil Başına Yakıt Tüketimi)",
range = c(10, 35)), # X ekseni aralığı
yaxis = list(
title = "HP (Motor Gücü)",
range = c(50, 350) # Y ekseni aralığı
)
)Bu grafik, yakıt tüketimi ile motor gücü arasındaki ilişkiyi, silindir sayısına göre renklendirilmiş olarak göstermektedir. Bu görselleştirme, motor gücünün ve yakıt tüketiminin silindir sayısına göre nasıl değiştiğini kolayca anlamamıza olanak tanır.
mtcars %>%
filter(!is.na(mpg)) %>%
plot_ly(
x = ~factor(cyl), # Silindir sayısı
y = ~mpg, # Yakıt tüketimi (mpg)
color = ~factor(cyl)) %>%
add_boxplot() %>% # Kutu grafiği ekle
layout(boxmode = "group") %>%
layout(legend = list(title=list(text ='<b> Silindir Sayısı </b>'))) %>%
layout(
xaxis = list(title = "Silindir Sayısı"),
yaxis = list(title = "MPG (Yakıt Tüketimi)",range = c(10, 35))) # Y ekseni aralığıBu grafik, farklı silindir sayılarının yakıt tüketim dağılımlarını karşılaştırmayı kolaylaştırır.
mtcars %>%
count(cyl, gear) %>%
plot_ly(x = ~factor(gear), y = ~n, hoverinfo = "y", color = ~factor(cyl)) %>%
add_bars() %>%
layout(legend = list(title = list(text = '<b> Silindir Sayısı </b>'))) %>%
layout(
xaxis = list(title = "Vites Sayısı"),
yaxis = list(title = "Frekans", range = c(0, 15)))Bu grafik, her bir silindir sayısındaki araçların vites dağılımını anlamayı kolaylaştırır.
Kontrol yapıları, girdilere veya verilerin özelliklerine yanıt vermemize ve buna göre farklı R ifadeleri yürütmemize olanak tanır.
Bu derste; if, else, ifelse gibi yapıların nasıl doğru şekilde kullanılacağını öğrendik.
Yukarıdaki kod, koşul yanlışsa hiçbir şey yapmaz. Koşul yanlış olduğunda yürütmek istediğimiz bir eylemimiz varsa, o zaman bir else cümlesine ihtiyacımız vardır.
if’i herhangi bir if ile takip ederek bir dizi test yapabilirsiniz. else if kullanabilirsiniz.
if/else yapısana geçerli bir örnek:
## bir rastgele sayı oluşturun
set.seed(41)
x <- runif(1, 0, 10)
if(x > 3) {
y <- 10
} else {
y <- 0
}
x;y## [1] 2.134905
## [1] 0
Bu kod, x değerinin 3’ten büyük olup olmadığını kontrol eder ve buna göre y değerini 10 veya 0 olarak belirler.
Aynı ifade eşdeğer bir şekilde şöyle yazılabilir:
## [1] "Basarili"
else kullanımı ile çıktı alabiliriz:
## [1] "Basarisiz"
x <- 90 # Başarılı Durum
if(x>=90){
print("AA-kim kaybetmis biz bulalım")
}else if(x>=80){
print("BA")
}else if(x>=70){
print("BB")
}else if(x>=65){
print("CB")
}else if(x>=60){
print("CC")
}else if(x>=50){
print("DD")
}else if(x>=30){
print("FD")
}else{
print("FF")
}## [1] "AA-kim kaybetmis biz bulalım"
a<-5
if(a==0){
print("1/0 tanimsizdir.")
}else{
print(paste(a,"'in carpmaya gore tersi 1/",a,sep=""))
}## [1] "5'in carpmaya gore tersi 1/5"
## [1] 1.899161
if(v1>1){
print("1'den buyuk")
}else if(v1>=-1 & v1<=1){
print("-1 ile +1 arasında")
}else{
print("-1'den kucuk")
}## [1] "1'den buyuk"
if() önermesi bir elemanlı vektörlerde çıktı verse de if() önermesi içinde kullanılabilen all fonkisyonu ile vektörün tüm elemanları için koşul testi yapabilir.
x <- c(1,2,-3,4)
if(all(x>0)){
print("tum sayilar 0'dan buyuktur")
} else{
print("tum sayilar 0'dan buyuk degildir")
}## [1] "tum sayilar 0'dan buyuk degildir"
Bir vektörde içinde yer alan her hangi bir elemana dair test ise if() fonksiyonu içinde any() fonksiyonu ile sağlanabilir.
x <- c(1,2,-3,4)
if(any(x<0)){
print("nesne en az bir negatif sayi icerir")
} else{
print("nesne negatif sayi icermez")
}## [1] "nesne en az bir negatif sayi icerir"
x <- 2
if(x == 2) {
goster3 <- "Dogru"
goster3b <- c(1,2,3)
goster3c <- sample(1:1000,4)
} else {
goster3 <- "Yanlis"
goster3b <- c(3,2,1)
goster3c <- 10000 + sample(1:1000,4)
}
goster3## [1] "Dogru"
## [1] 1 2 3
## [1] 96 894 584 698
ifelse() durum cümlesi, if() durum cümlelerinde vektörlerin kullanımından kaynaklı sıkıntılara çözüm sunar. Bu bakımdan ifelse(), if() durum cümlelerinin vektörler için kullanılabilir halidir.
ifelse(koşul, Doğru İfade, Yanlış İfade)
## [1] "Basarisiz"
## [1] 1 2 3 4 99 5
## [1] 1 2 3 4 NA 5
## [1] 89 84 54 81 57 78 55 71 80 62 87 67 70 83 82 61 66 53 50 69 79 64 85 51 73
## [26] 74 88
## [1] "Tek Sayi" "Cift Sayi" "Cift Sayi" "Tek Sayi" "Tek Sayi" "Cift Sayi"
## [7] "Tek Sayi" "Tek Sayi" "Cift Sayi" "Cift Sayi" "Tek Sayi" "Tek Sayi"
## [13] "Cift Sayi" "Tek Sayi" "Cift Sayi" "Tek Sayi" "Cift Sayi" "Tek Sayi"
## [19] "Cift Sayi" "Tek Sayi" "Tek Sayi" "Cift Sayi" "Tek Sayi" "Tek Sayi"
## [25] "Tek Sayi" "Cift Sayi" "Cift Sayi"
## [1] 4 3 4 2 1 7 -10 5 6 -8 7 -3 9 7 -9 10 4 -1 -8
## [20] 8 -3 0 4 5 8 1 3
## [1] "Pozitif" "Pozitif" "Pozitif" "Pozitif" "Pozitif" "Pozitif" "Negatif"
## [8] "Pozitif" "Pozitif" "Negatif" "Pozitif" "Negatif" "Pozitif" "Pozitif"
## [15] "Negatif" "Pozitif" "Pozitif" "Negatif" "Negatif" "Pozitif" "Negatif"
## [22] "Sifir" "Pozitif" "Pozitif" "Pozitif" "Pozitif" "Pozitif"
## [1] 51 39 74 66 70
R’de for döngüleri bir ara değişken alır ve ona bir dizi ya da vektörden ardışık değerler atar. For döngüleri en yaygın olarak bir nesnenin (liste, vektör, vb.) elemanları üzerinde yineleme yapmak için kullanılır.
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
Döngüde indeks değişkeni herhangi bir nesne ile tanımlanabilir. Örneğin i, ayrıca indeks değerinin başlangıcı 1 olmak zorunda değildir.
## [1] 5
## [1] 6
## [1] 7
## [1] 8
Karakter yazımında indeks i sadece tekrar amaçlı kullanılır.
## [1] "Merhaba"
## [1] "Merhaba"
## [1] "Merhaba"
## [1] "Merhaba"
## [1] "Merhaba"
## [1] "Merhaba"
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
## 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
## [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"
Her zaman işlemi tüm elemanlara uygulamak istemeyebiliriz. Bunu önlemek icin akış kontrolü yapmak gerekir.
Kontrol mantıksal operatörlerle ya da koşul cümleleri ile sağlanabilir.
## 1
## indeks cift sayidir
## 3
for(i in 1:3){
if (i==2) {
cat("indeks degeri ikidir:",i,"\n")
}else{cat("indeks degeri iki degildir","\n")}
}## indeks degeri iki degildir
## indeks degeri ikidir: 2
## indeks degeri iki degildir
if sadece numerik değer ve vektörlerle çalışmaz. Aynı zamanda veri seti, matris ve listelerle de çalışabilir.
## sutun toplamlari: 15
## sutun toplamlari: 20
## [,1] [,2]
## [1,] 1 21
## [2,] 2 22
## [3,] 3 23
## [4,] 4 24
## [5,] 5 25
X matrisini kullanarak aşağıdaki çıktıyı elde etmek için gerekli kodu yazınız.
1 satirdaki degerlerin carpimi 21 olarak hesaplanmistir. 2 satirdaki degerlerin carpimi 44 olarak hesaplanmistir. 3 satirdaki degerlerin carpimi 69 olarak hesaplanmistir. 4 satirdaki degerlerin carpimi 96 olarak hesaplanmistir. 5 satirdaki degerlerin carpimi 125 olarak hesaplanmistir.
for (i in 1:nrow(X)) {
carpim <- prod(X[i, ]) # Satırdaki elemanların çarpımı
cat(i, ". satirdaki degerlerin carpimi", carpim, "olarak hesaplanmistir.\n")
}## 1 . satirdaki degerlerin carpimi 21 olarak hesaplanmistir.
## 2 . satirdaki degerlerin carpimi 44 olarak hesaplanmistir.
## 3 . satirdaki degerlerin carpimi 69 olarak hesaplanmistir.
## 4 . satirdaki degerlerin carpimi 96 olarak hesaplanmistir.
## 5 . satirdaki degerlerin carpimi 125 olarak hesaplanmistir.
## 1. satirdaki degerlerin carpimi =21
## 2. satirdaki degerlerin carpimi =44
## 3. satirdaki degerlerin carpimi =69
## 4. satirdaki degerlerin carpimi =96
## 5. satirdaki degerlerin carpimi =125