dplyr
Paketi ile Veri
Düzenleme#Veri seti üzerinde gerçekleştirilecek işlemlere yönelik olarak
gerekli paketler library()
fonksiyonu ile çağrılmıştır.
library(tidyverse)
library(openintro)
library(ggplot2)
library(dplyr)
library(readr)
#Alıştırma kapsamında ele alınacak olan “student_mat” veri setinin
uzantısının “.csv” olmasına bağlı olarak readr()
paketinde
bulunan read_delim()
fonksiyonu ile veri seti RStudio’ya
tanımlanmıştır. Ardından view()
fonksiyonu ile setin
RStudio üzerinden incelemesi gerçekleştirilmiştir.
student_mat <- read_delim("set.csv",
delim = ";", escape_double = FALSE, trim_ws = TRUE)
## Rows: 395 Columns: 33
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (17): school, sex, address, famsize, Pstatus, Mjob, Fjob, reason, guardi...
## dbl (16): age, Medu, Fedu, traveltime, studytime, failures, famrel, freetime...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
View(student_mat)
#Yüklenen “student_mat” veri setinin değişkenlerini ve setin genel
yapısını gözlemlemek amacıyla head()
komutuyla ilk
satırlarda bulunan bilgileri setten getirilmiştir. Set genel yapısıyla
incelendiğinde 33 değişkene sahiptir.
head(student_mat)
## # A tibble: 6 × 33
## school sex age address famsize Pstatus Medu Fedu Mjob Fjob reason
## <chr> <chr> <dbl> <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 GP F 18 U GT3 A 4 4 at_home teacher course
## 2 GP F 17 U GT3 T 1 1 at_home other course
## 3 GP F 15 U LE3 T 1 1 at_home other other
## 4 GP F 15 U GT3 T 4 2 health servic… home
## 5 GP F 16 U GT3 T 3 3 other other home
## 6 GP M 16 U LE3 T 4 3 services other reput…
## # ℹ 22 more variables: guardian <chr>, traveltime <dbl>, studytime <dbl>,
## # failures <dbl>, schoolsup <chr>, famsup <chr>, paid <chr>,
## # activities <chr>, nursery <chr>, higher <chr>, internet <chr>,
## # romantic <chr>, famrel <dbl>, freetime <dbl>, goout <dbl>, Dalc <dbl>,
## # Walc <dbl>, health <dbl>, absences <dbl>, G1 <dbl>, G2 <dbl>, G3 <dbl>
#Süreçte, “student_mat” veri seti üzerinde yaptığım değişiklikleri
daha rahat takip edebilmek amacıyla “<-” işareti ile yeni veri
setleri tanımlanmıştır. Bu kapsamda, ilk olarak select()
fonksiyonunu kullanarak “student_mat” veri setinden school, sex, age,
Medu, Fedu, studytime, G1, G2 ve G3 değişkenlerini seçilerek,
“student_mat_v2” veri seti tanımlanmıştır.
student_mat_v2 <-student_mat %>% select("school","sex","age","Medu","Fedu","studytime","G1","G2","G3")
student_mat_v2
## # A tibble: 395 × 9
## school sex age Medu Fedu studytime G1 G2 G3
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 GP F 18 4 4 2 5 6 6
## 2 GP F 17 1 1 2 5 5 6
## 3 GP F 15 1 1 2 7 8 10
## 4 GP F 15 4 2 3 15 14 15
## 5 GP F 16 3 3 2 6 10 10
## 6 GP M 16 4 3 2 15 15 15
## 7 GP M 16 2 2 2 12 12 11
## 8 GP F 17 4 4 2 6 5 6
## 9 GP M 15 3 2 2 16 18 19
## 10 GP M 15 3 4 2 14 15 15
## # ℹ 385 more rows
#“Student_mat_v2” veri seti üzerinden 16 ve 17 yaşında bulunan erkek
çocuklarının filter()
fonksiyonu ile filtrelenmiştir.
Filtrelenen bilgiler “student_mat_v3” olarak tanımlanmıştır.Bu
filtreleme snucundan 90 tane veri saptanmıştır.
student_mat_v3 <- student_mat_v2 %>% filter(age %in% c(16, 17), sex == "M")
student_mat_v3
## # A tibble: 90 × 9
## school sex age Medu Fedu studytime G1 G2 G3
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 GP M 16 4 3 2 15 15 15
## 2 GP M 16 2 2 2 12 12 11
## 3 GP M 17 3 2 1 6 5 5
## 4 GP M 16 4 3 1 8 10 10
## 5 GP M 16 4 2 2 15 15 16
## 6 GP M 16 2 2 2 13 13 12
## 7 GP M 16 3 4 2 11 11 11
## 8 GP M 16 4 4 2 10 12 11
## 9 GP M 16 3 2 1 12 14 15
## 10 GP M 16 4 4 3 15 16 15
## # ℹ 80 more rows
#Filtrelenmiş olan “student_mat_v3” setinde bulunan 16 ve 17 yaşında
erkek öğrencilerin “G1”, “G2” ve “G3” puanları sırayıla 0.25, 0.25 ve
0.50 katsayılarıyla ağırlıklandırılmıştır. Bunun için
mutate()
fonksiyonu kullanılmıştır. Ağırlıklandırılmış
puanların olduğu set ise “student_mat_v4” olarak tanımlanmıştır.
Ağırlıklandırmayı seçmemin sebebi ise sadece tek bir ağırlıklandırılmış
puanla karar verilmesini deneme düşüncemdir.
student_mat_v4 <- student_mat_v3 %>%
mutate(agirlikli_puan = (G1 * 0.25) + (G2 * 0.25) + (G3 * 0.50))
student_mat_v4
## # A tibble: 90 × 10
## school sex age Medu Fedu studytime G1 G2 G3 agirlikli_puan
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 GP M 16 4 3 2 15 15 15 15
## 2 GP M 16 2 2 2 12 12 11 11.5
## 3 GP M 17 3 2 1 6 5 5 5.25
## 4 GP M 16 4 3 1 8 10 10 9.5
## 5 GP M 16 4 2 2 15 15 16 15.5
## 6 GP M 16 2 2 2 13 13 12 12.5
## 7 GP M 16 3 4 2 11 11 11 11
## 8 GP M 16 4 4 2 10 12 11 11
## 9 GP M 16 3 2 1 12 14 15 14
## 10 GP M 16 4 4 3 15 16 15 15.2
## # ℹ 80 more rows
#mutate()
fonksiyonu ile, 16 ve 17 yaşındaki erkek
öğrencilerin ağırlıklı puanları hesaplanmış ve bu puanlara göre
öğrencilerin “geçerli” veya “geçersiz” puan durumları yeni bir sütunda
gösterilmiştir. Süreçte 10 puan kesme puanı olarak kabul edilmiştir. Bu
yapı ise “student_mat_v5” üzerinde tanımlanmıştır.
student_mat_v5 <- student_mat_v4 %>%
mutate(agirlikli_basari = if_else(agirlikli_puan >= 10, "Gecerli Puan", "Gecersiz Puan"))
student_mat_v5
## # A tibble: 90 × 11
## school sex age Medu Fedu studytime G1 G2 G3 agirlikli_puan
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 GP M 16 4 3 2 15 15 15 15
## 2 GP M 16 2 2 2 12 12 11 11.5
## 3 GP M 17 3 2 1 6 5 5 5.25
## 4 GP M 16 4 3 1 8 10 10 9.5
## 5 GP M 16 4 2 2 15 15 16 15.5
## 6 GP M 16 2 2 2 13 13 12 12.5
## 7 GP M 16 3 4 2 11 11 11 11
## 8 GP M 16 4 4 2 10 12 11 11
## 9 GP M 16 3 2 1 12 14 15 14
## 10 GP M 16 4 4 3 15 16 15 15.2
## # ℹ 80 more rows
## # ℹ 1 more variable: agirlikli_basari <chr>
#“student_mat_v5” veri seti, “agirlikli_basari” değişkenine göre
group_by()
fonksiyonu ile gruplandırılmıştır. Her bir
başarı grubu için öğrencilerin ağırlıklı puanlarının ortalaması
(agirlikli_puan_ort) ve yaş ortalaması (yas_ort)
summarise()
fonksiyonu ile özet niteliğinde hesaplanmıştır.
Elde edilen sonuçlar, her başarı grubuna ait özet istatistikleri içeren
student_mat_v6 veri seti üzerinde tanımlanmıştır. Bu doğrultuda geçerli
puan alanların yaş ortalamasının 16.41, geçersiz puan alanların yaş
ortalamasının 16.50 olduğu saptanmıştır. Bunun yanı sıra ağırlıklı puan
ortalaması açısından inceleme gerçekleştirildiğinde geçerli puan
alanların 13.03’lük ortalamaya, geçersiz puan alanların ise 6.81’lik bir
ortalamaya sahip olduğu saptanmıştır.
student_mat_v6 <-student_mat_v5 %>%
group_by(agirlikli_basari) %>%
summarise(agirlikli_puan_ort = mean(agirlikli_puan), yas_ort = mean(age))
student_mat_v6
## # A tibble: 2 × 3
## agirlikli_basari agirlikli_puan_ort yas_ort
## <chr> <dbl> <dbl>
## 1 Gecerli Puan 13.0 16.4
## 2 Gecersiz Puan 6.81 16.5
#Gerçekleştirilen analizler sonucunda, student_mat_v5 veri seti
üzerinde öğrenciler 17 yaşından 16 yaşına doğru sıralanmıştır. Bu işlem,
arrange(-age)
fonksiyonu kullanılarak gerçekleştirilmiş ve
öğrencilerin yaşlarına göre azalan düzende sıralanması sağlanmıştır.
student_mat_v5 %>%
arrange(-age)
## # A tibble: 90 × 11
## school sex age Medu Fedu studytime G1 G2 G3 agirlikli_puan
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 GP M 17 3 2 1 6 5 5 5.25
## 2 GP M 17 2 1 1 8 8 10 9
## 3 GP M 17 1 3 2 9 7 8 8
## 4 GP M 17 3 4 2 10 0 0 2.5
## 5 GP M 17 2 1 1 5 0 0 1.25
## 6 GP M 17 1 2 1 16 12 13 13.5
## 7 GP M 17 2 1 1 7 6 0 3.25
## 8 GP M 17 1 3 1 10 10 10 10
## 9 GP M 17 1 1 2 5 8 7 6.75
## 10 GP M 17 4 4 2 13 11 10 11
## # ℹ 80 more rows
## # ℹ 1 more variable: agirlikli_basari <chr>
#Yukarıda gerçekleştirilen sıralamanın yanı sıra, yaş değişkeni
sürece dahil edilmeden, öğrencilerin ağırlıklı puan değerlerine göre
küçükten büyüğe doğru sıralanması amacıyla arrange()
fonksiyonu kullanılmıştır. Bu sıralama dahilinde minimum 1.25 puan alan
öğrencinin olduğu gözlenmektedir.
student_mat_v5 %>%
arrange(agirlikli_puan)
## # A tibble: 90 × 11
## school sex age Medu Fedu studytime G1 G2 G3 agirlikli_puan
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 GP M 17 2 1 1 5 0 0 1.25
## 2 GP M 16 4 3 1 6 0 0 1.5
## 3 GP M 16 1 2 1 7 0 0 1.75
## 4 GP M 17 3 4 2 10 0 0 2.5
## 5 GP M 16 3 4 1 6 5 0 2.75
## 6 GP M 16 4 4 1 7 6 0 3.25
## 7 GP M 17 2 1 1 7 6 0 3.25
## 8 GP M 17 3 2 1 6 5 5 5.25
## 9 GP M 17 3 3 2 6 5 6 5.75
## 10 GP M 16 4 4 1 7 7 5 6
## # ℹ 80 more rows
## # ℹ 1 more variable: agirlikli_basari <chr>
ggplot2
Paketi ile
Görselleştirme#Bölüm kapsamında Doç. Dr. Kübra ATALAY KABASAKAL tarafından önerilmiş 3 grafiği ve kendi oluşturduğum 3 grafiği sunmuş bulunmaktayım.
#Bu bölüm kapsamında “student_mat” veri seti kapsamında veri
görselleştirme gerçekleştirilecektir.Süreçte ggplot2()
önceden aktif edildiğinden dolayı tekrardan
yazılmamamıştır.#Birinci görselleştirme
kapsamında Öğrencilerin final notlarına yönelik yani “G3” kapsamında
histogram grafiği oluşturulmuştur. Bu histogramın oluşturulması
sürecinde ggplot
fonksiyonu kullanılmıştır. Ana yapı olarak
“student_mat” veri seti kabul edilmiş olmakla birlikte “x” değişkeni
olarak G3 ataması yapılmıştır. Ardından geom_histogram()
fonksiyonuyle birlikte histogramın oluşturulması için temel yapı
atanmıştır. Son olarak labs
fonksiyonuyla birlikte x-y
değişkenleri ve histograma yönelik isim tanımlaması gerçekleştilmiştir.
Elde edilen histogram grafiği doğrultusunda iki farklı puan yığılması
olduğu gözlenmektedir. Birinci yığılma “0” puan aralığında gözlenirken,
ikinci yığılma 9-11 puan aralığında gözükmektedir.
histogram <- ggplot(student_mat,aes(x=G3))+
geom_histogram()+
labs(x= "Final Notları",
y= "Ogrenci Sayisi",
title="Ogrencilerin Final Notları")
histogram
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
#İkinci görselleştirme kapsamında
ggplot2()
ile bar grafiği oluşturulması amaçlanmıştır.
Süreçte öncelikle final sınavı başarı ortalamasına yönelik bir sonuç
elde edilmediğinde dolayı cinsiyete dayalı şekilde ortalama puan
hesaplaması yapılmıştır. Buna yönelik olarak group_by()
fonksiyonu ile cinsiyet temelli gruplama sağlanmaştır, ardından
summarise()
fonksiyonu ile cinsiyet temelli ortalama
puanların hesaplaması sağlanmıştır. Ortalama puanların hesaplanmasının
ardından ggplot()
fonksiyonu kapsamında x değişkeni
cinsiyet, y değişkeni ortalama puan olarak atanmıştır. Atamaların
gerçekleştirilmesinin ardından geom_col()
ve
theme_classic()
fonksiyonlarıyla birlikte klasik bir
görünüşte bar grafiği oluşturulmuştur. Elde edilen bar grafiği
doğrultusunda erkeklerin kadınlara göre daha yüksek not ortalamasına
sahip olduğu ifade edilebilir.
basari_ortalama <- student_mat %>%
group_by(sex) %>%
summarise(ortalama_puan = mean(G3))
basari_ortalama
## # A tibble: 2 × 2
## sex ortalama_puan
## <chr> <dbl>
## 1 F 9.97
## 2 M 10.9
bar_grafigi <- ggplot(basari_ortalama, aes(x=sex,y=ortalama_puan))+
geom_col()+
theme_classic()+
labs(x="Cinsiyet (F = Kadın, M = Erkek)",
y="ortalama puan",
title= "Cinsiyete Gore Final Ortalamasi")
bar_grafigi
#Üçüncü görselleştirme kapsamında, aile
desteği alan ve almayan öğrencilerin not dağılımlarına yönelik “boxplot”
oluşturulmuştur.Süreçte ggplot()
fonksiyonu kapsamında x
değişkeni aile desteği durumu, y değişkeni final puanı olarak
atanmıştır. Atamaların gerçekleştirilmesinin ardından
geom_boxplot()
ve theme_minimal()
fonksiyonlarıyla birlikte minimal bir görünüşte boxplot grafiği
oluşturulmuştur. Bu grafik doğrultusunda, aile desteği olan ve olmayan
öğrencilerin medyan notlarının her iki grupta da yaklaşık 11 civarında
olup neredeyse aynı olduğunu göstermektedir. Bu, ortalama başarı
açısından aile desteğinin büyük bir fark yaratmadığı anlamına
gelmektedir. Ayrıca her iki grupta da uç değer olarak “0”
gözlenmiştir.
boxplot_grafigi <- ggplot(student_mat, aes(x = famsup, y = G3)) +
geom_boxplot() +
theme_minimal() +
labs(
x = "Aile Destegi (var-yok)",
y = "Final Notu",
title = "Aile Destegine Gore Ogrencilerin Not Dagılımları"
) +
scale_x_discrete(labels = c("no" = "Yok", "yes" = "Var"))
boxplot_grafigi
#Dördüncü görselleştirme kapsamında kendi
oluşturduğum kod aracılığıyla öğrencilerin birinci ve ikinci dönem
puanları arasında ilişkiyi, çalışma saatlerini renklendirerek ortaya
koymaya çalışmış bulunmaktayım. Bu sürece yönelik olarak
ggplot()
fonksiyonu kapsamında x değişkeni G1, y değişkeni
G2 olarak, renklendirme değişkeni olarak “studytime” atanmıştır.
Ardından saçılım grafiğini elde etmek amacıyla geom_point()
fonksiyonu, doğrusal çizgiyi elde etmek için ise
geom_smooth()
fonksiyonu kullanılmıştır. Tema olarak klasik
görünüm tercih edilmekle birlikte labs()
fonksiyonu
aracılığıyla x, y ve color kısımlarına isim ataması
gerçekleştirilmiştir. Elde edilen saçılım grafiği doğrultusunda iki
dönem arasında pozitif yönlü ilişki olduğu ve doğrusal çizgi boyunca net
çizgi etrafında toplanılmasına bağlı olarak tutarlı sonuçlar elde
edildiği ifade edilebilir. Ancak, grafikte Birinci Dönem notu iyi
olmasına rağmen İkinci Dönemde 0 puan alan (aykırı) öğrenciler de
mevcuttur.
sacilim_grafigi <- ggplot(student_mat, aes(x= G1,y= G2, color = studytime)) +
geom_point()+
geom_smooth(method="lm", se= FALSE)+
theme_classic()+
labs(x="BirinciDonem\n",
y="IkinciDonem\n",
title = "Donemler arası puan sacilim grafigi",
color="calisma saati")
sacilim_grafigi
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation:
## colour.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
#Beşinci görselleştirme kapsamında,
geom()
fonksiyonu içerisinde gördüğüm keman grafiğini
denemiş bulunmaktayım. Süreç içerisinde öğrencilerin babalarının eğitim
düzeyi ve final notu arasındaki ilişkiyi görmeye yönelik
ggplot()
fonksiyonu içerisinde bulunan
geom_violin()
fonksiyonu ile karanlık temada keman grafiği
oluşturmuş bulunmaktayım.Elde edilen grafik doğrultusunda babaların
eğitim seviyesi arttıkça not dağılımındaki değişimin arttığı
gözlenmektedir. Daha detaylı inceleme gerçekleşetirildiğinde eğitimsiz
babaların çocuklarında notların daha çok ortalama üstü aralıkta
bulunduğu ve homojen yapının sağlandığı söylenebilir. Daha eğitimli
babaların çocuklarında ise genel olarak puan dağılımının daha geniş bir
aralıkta olduğu gözlenmiştir. Bu doğrultuda yüksek eğitimli babaların
çocukları arasında hem çok başarılı hem de çok başarısız öğrencilerin
bulunduğunu ve notlar arasındaki farkın büyüdüğü gözlemlenmiştir.
keman_grafigi <- ggplot(student_mat, aes(x = factor(Fedu), y = G3)) +
geom_violin() +
theme_dark() +
labs(x = "Baba Eğitim Durumu", y = "Final Notu", title = "Baba Eğitim Durumu ve Final Notu")
keman_grafigi
#Altıncı görselleştirme kapsamında
öğrencilerin ikinci dönem notlarına yönelik okul tipi temelli histogram
grafiği oluşturulmuştur. Bu histogramın oluşturulması sürecinde
ggplot
fonksiyonu kullanılmıştır. Ana yapı olarak
“student_mat” veri seti kabul edilmiş olmakla birlikte “x” değişkeni
olarak G2 ataması yapılmıştır. Ayrıca bu süreçte fill=
yapısını ilk defa kullanarak okul tipine göre şekillendirme denemiş
bulunmaktayım. Ardından geom_histogram
fonksiyonuyla
histogram ataması velabs
fonksiyonuyla birlikte x ile fill
değişkenleri için ve isim tanımlaması gerçekleştilmiştir.Bu histogram
grafiği doğrultusunda “GP” okulunda okuyanların daha geniş bir puan
ranjında olduğu, “MS” okulunun ise daha homojen bir yapıda olduğu
gözlenmektedir. Genel olarak grafik incelendiğinde, her iki okul türünde
de uç değer olarak görülebilecek yapılar olduğu söylenebilir.
fill_histogram <- ggplot(student_mat, aes(x = G2, fill = school)) +
geom_histogram() +
theme_minimal() +
labs(
x = "Ikıncı Donem",
y = "Frekans",
title = "Okul Turune Gore Ikıncı Puanlarının Dagılımı",
fill = "Okul Turu"
)
fill_histogram
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
#Bu süreçte RMarkdown yapısını kullanmayı öğrenirken, programlama ve raporlama süreçlerinin nasıl bütünleştiğini deneyimleme fırsatı buldum. Öncelikle, RStudio arayüzü üzerinden “File > New File > RMarkdown” seçeneğiyle yeni bir RMarkdown dosyası oluşturulabileceğini öğrendim. Bu aşamada dosya adı, çıktı formatı ve diğer temel özelliklerin belirlenmesi gerektiğini fark ettim.
#RMarkdown çalışma ortamında “Source” ve “Visual” olmak üzere iki farklı düzenleme sekmesi bulunduğunu gözlemledim. “Source” sekmesinde kod temelli bir yazım yapılırken, “Visual” sekmesinin Microsoft Word benzeri bir düzenleme ortamı sunduğunu gördüm. Bu sekme sayesinde metinleri italik veya kalın biçimlendirebilmek, yazı boyutunu değiştirebilmek, bağlantı ve görsel eklemek gibi işlemleri oldukça kolay bir şekilde gerçekleştirebildim.
#Kod blokları (chunk) oluşturma süreci de RMarkdown’ın önemli bir özelliği olarak dikkatimi çekti. Ctrl + Alt + I kısayolu ile veya “Insert” sekmesi üzerinden kolayca yeni bir chunk eklenebildiğini öğrendim. Bu alanlar aracılığıyla farklı fonksiyonlar ve veri işlemleri doğrudan RStudio ortamına entegre edilebiliyor. Ayrıca “Insert” sekmesinin yalnızca kod blokları eklemekle sınırlı kalmadığını, tablo, kaynakça ve benzeri yapıları da belgeye dahil etmeye olanak sağladığını keşfettim.
#Genel olarak bu süreç, RMarkdown’ın yalnızca bir kodlama aracı değil, aynı zamanda veri analizi sonuçlarını etkili biçimde sunmayı sağlayan güçlü bir raporlama aracı olduğunu fark etmemi sağladı. Kısayollarla gerçekleştirilebilen işlemlerin aynı zamanda belirli fonksiyonlarla ve kodlarla da yapılabileceğini görmek, programlama becerilerimi daha esnek bir şekilde kullanmamı sağladı. Bu deneyim, veri analizi süreçlerimi hem daha sistematik hem de profesyonel bir yapıya dönüştürmemde önemli bir katkı sundu.
#Son olarak bu ödev sayesinde sadece RMarkdown öğrenmeyi değil, aynı zamanda ele aldığım fonksiyonlarda yaptığım hataları saptamam açısından bana önemli bir katkı sağladığını ifade edebilirim. Bu doğrultuda bu yapının öğrenmem açısından önemli bir paydaş olabileceğini söyleyebilirim. Gelecekte daha fazla uygulama yaparak R diline ve RMarkdown ortamına daha fazla hakim olabileceğimi düşünüyorum.