KULLANILACAK PAKETLERİN KURULUMU VE BELGENİN R’A OKUTULMASI
library (tidyverse)
library(openintro)
library(ggplot2)
library(dplyr)
library(readr)
student_mat <- read_delim("student-mat.csv",
delim = ";", escape_double = FALSE, trim_ws = TRUE)
#Açmaya çalıştığın belge adının doğru olması ve ilgili belgenin çalıştığın klasör içinde bulunması R'ın o belgeyi okuyabilmesi için şarttır.
OKUTULAN BELGENİN İNCELENMESİ
#Veri düzenleme işlemlerinin kodları yazılır.
#Veriye göz atmak
glimpse(student_mat)
## Rows: 395
## Columns: 33
## $ school <chr> "GP", "GP", "GP", "GP", "GP", "GP", "GP", "GP", "GP", "GP",…
## $ sex <chr> "F", "F", "F", "F", "F", "M", "M", "F", "M", "M", "F", "F",…
## $ age <dbl> 18, 17, 15, 15, 16, 16, 16, 17, 15, 15, 15, 15, 15, 15, 15,…
## $ address <chr> "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U",…
## $ famsize <chr> "GT3", "GT3", "LE3", "GT3", "GT3", "LE3", "LE3", "GT3", "LE…
## $ Pstatus <chr> "A", "T", "T", "T", "T", "T", "T", "A", "A", "T", "T", "T",…
## $ Medu <dbl> 4, 1, 1, 4, 3, 4, 2, 4, 3, 3, 4, 2, 4, 4, 2, 4, 4, 3, 3, 4,…
## $ Fedu <dbl> 4, 1, 1, 2, 3, 3, 2, 4, 2, 4, 4, 1, 4, 3, 2, 4, 4, 3, 2, 3,…
## $ Mjob <chr> "at_home", "at_home", "at_home", "health", "other", "servic…
## $ Fjob <chr> "teacher", "other", "other", "services", "other", "other", …
## $ reason <chr> "course", "course", "other", "home", "home", "reputation", …
## $ guardian <chr> "mother", "father", "mother", "mother", "father", "mother",…
## $ traveltime <dbl> 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 1, 2, 1, 1, 1, 3, 1, 1,…
## $ studytime <dbl> 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 3, 1, 2, 3, 1, 3, 2, 1, 1,…
## $ failures <dbl> 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,…
## $ schoolsup <chr> "yes", "no", "yes", "no", "no", "no", "no", "yes", "no", "n…
## $ famsup <chr> "no", "yes", "no", "yes", "yes", "yes", "no", "yes", "yes",…
## $ paid <chr> "no", "no", "yes", "yes", "yes", "yes", "no", "no", "yes", …
## $ activities <chr> "no", "no", "no", "yes", "no", "yes", "no", "no", "no", "ye…
## $ nursery <chr> "yes", "no", "yes", "yes", "yes", "yes", "yes", "yes", "yes…
## $ higher <chr> "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes", "ye…
## $ internet <chr> "no", "yes", "yes", "yes", "no", "yes", "yes", "no", "yes",…
## $ romantic <chr> "no", "no", "no", "yes", "no", "no", "no", "no", "no", "no"…
## $ famrel <dbl> 4, 5, 4, 3, 4, 5, 4, 4, 4, 5, 3, 5, 4, 5, 4, 4, 3, 5, 5, 3,…
## $ freetime <dbl> 3, 3, 3, 2, 3, 4, 4, 1, 2, 5, 3, 2, 3, 4, 5, 4, 2, 3, 5, 1,…
## $ goout <dbl> 4, 3, 2, 2, 2, 2, 4, 4, 2, 1, 3, 2, 3, 3, 2, 4, 3, 2, 5, 3,…
## $ Dalc <dbl> 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,…
## $ Walc <dbl> 1, 1, 3, 1, 2, 2, 1, 1, 1, 1, 2, 1, 3, 2, 1, 2, 2, 1, 4, 3,…
## $ health <dbl> 3, 3, 3, 5, 5, 5, 3, 1, 1, 5, 2, 4, 5, 3, 3, 2, 2, 4, 5, 5,…
## $ absences <dbl> 6, 4, 10, 2, 4, 10, 0, 6, 0, 0, 0, 4, 2, 2, 0, 4, 6, 4, 16,…
## $ G1 <dbl> 5, 5, 7, 15, 6, 15, 12, 6, 16, 14, 10, 10, 14, 10, 14, 14, …
## $ G2 <dbl> 6, 5, 8, 14, 10, 15, 12, 5, 18, 15, 8, 12, 14, 10, 16, 14, …
## $ G3 <dbl> 6, 6, 10, 15, 10, 15, 11, 6, 19, 15, 9, 12, 14, 11, 16, 14,…
#Verinin baştan ilk 10 satırını görmek
head(student_mat, 10)
## # A tibble: 10 × 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 teach… 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 servi… 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…
## 7 GP M 16 U LE3 T 2 2 other other home
## 8 GP F 17 U GT3 A 4 4 other teach… home
## 9 GP M 15 U LE3 A 3 2 services other home
## 10 GP M 15 U GT3 T 3 4 other other home
## # ℹ 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>
ALISTIRMA 1: VERI DUZENLEME (dplyr)
Aşağıdaki işlemlerden en az üçünü uygulayınız. Yaptığınız her bir işlemi açıklayarak yapınız
Belirli sütunları seçin (select
)
Belirli bir koşula göre filtreleme yapın
(filter
)
Yeni bir sütun oluşturun (mutate
)
Özetleme işlemleri yapın
(group_by
+ summarise
)
Veriyi sıralayın (arrange
)
#Veri düzenleme işlemlerinin kodları yazılır.
#Öğrencilerin final notlarının sütunu seçilir.
student_mat %>%
select(G3)
## # A tibble: 395 × 1
## G3
## <dbl>
## 1 6
## 2 6
## 3 10
## 4 15
## 5 10
## 6 15
## 7 11
## 8 6
## 9 19
## 10 15
## # ℹ 385 more rows
#Öğrencileri adrese göre gruplayarak çalışma saati 2 ve üzeri olan öğrencileri içeren bir sütun oluşturur.
student_mat %>%
group_by(address) %>%
mutate(studytime >= 2)
## # A tibble: 395 × 34
## # Groups: address [2]
## 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 teach… 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 servi… 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…
## 7 GP M 16 U LE3 T 2 2 other other home
## 8 GP F 17 U GT3 A 4 4 other teach… home
## 9 GP M 15 U LE3 A 3 2 services other home
## 10 GP M 15 U GT3 T 3 4 other other home
## # ℹ 385 more rows
## # ℹ 23 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>,
## # `studytime >= 2` <lgl>
#Öğrencileri yaşa göre gruplayarak dışarı çıkma saati 3 ve üzeri olan ve devamsızlık sayısı 11 ve üzeri olan öğrencileri yaşa göre azalan sırada listeyerek filtreler.
student_mat %>%
group_by (age) %>%
filter (goout >= 3 & absences >= 11) %>%
arrange(desc(age))
## # A tibble: 45 × 33
## # Groups: age [7]
## school sex age address famsize Pstatus Medu Fedu Mjob Fjob reason
## <chr> <chr> <dbl> <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
## 1 GP M 22 U GT3 T 3 1 services servi… other
## 2 MS M 20 U LE3 A 2 2 services servi… course
## 3 GP F 19 U GT3 T 3 3 other servi… home
## 4 GP M 19 U GT3 T 3 3 other other home
## 5 GP M 19 U GT3 T 4 4 teacher servi… reput…
## 6 GP F 19 U LE3 T 1 1 at_home other reput…
## 7 GP F 19 R GT3 A 3 1 services at_ho… home
## 8 GP M 18 U GT3 T 2 2 services other home
## 9 GP M 18 U LE3 T 3 3 services health home
## 10 GP F 18 R GT3 T 3 1 other other reput…
## # ℹ 35 more rows
## # ℹ 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>
#Öğrencilerden kadın olanlar ve romantik ilişkisi olmayanlar filtrelenir ve frekansı bulunur..
count(student_mat %>%
filter(sex == "F", romantic == "no"))
## # A tibble: 1 × 1
## n
## <int>
## 1 129
#Final notlarının ortalamasını hesaplar ve bir değişken hazırlar. Kodun tamamı parantez içine alınırsa atama yapılmasının haricinde sonucu da gösterir.
(ort_final <- mean(student_mat $ G3))
## [1] 10.41519
ALISTIRMA 2: GORSELLESTIRME (ggplot2)
İki adet grafik oluşturunuz. Örnek olarak aşağıdaki grafik türlerinden en az ikisini oluşturabilirsiniz. Anak grafiği kendinizi yaratırsanız daha mennun olurum. Oluşturduğunuz grafikleri yorumlayınız
Histogram: Öğrencilerin final notlarının dağılımı
Bar grafiği: Cinsiyete göre başarı ortalamaları
Boxplot: Aile desteği alan ve almayan öğrencilerin not dağılımları
Scatter plot: Ders çalışma süresi ile başarı arasındaki ilişki
#Veri görselleştirme işlemlerinin kodları yazılır.
#Histogram
#Öğrencilerin final notlarının cinsiyete göre dağılımı
ggplot(data = student_mat, aes(x = G3, fill = sex)) +
geom_histogram(color = "grey", bins = 20, position = "dodge") +
theme_linedraw() +
labs(title = "Final notlarının cinsiyete göre dağılımı",
x = "Final notları",
y = "Frekans",
fill = "Cinsiyet") +
scale_fill_manual(values = c("F" = "lightpink", "M" = "lightblue"),
labels = c("F" = "Kadın", "M" = "Erkek"))
#Grafikte kadın ve erkek öğrencilerin final notlarının frekans dağılımı görülmektedir. Genel olarak her iki cinsiyetin dağılımı birbirine oldukça benzer bir şekil göstermektedir. Notların büyük çoğunluğu 10 civarında yoğunlaşmış, bu da ortalama düzeyde bir başarıyı işaret etmektedir. Bununla birlikte, her iki grupta da 0 civarında dikkate değer bir yığılma görülmekte, bu durum sınava girmeyen veya çok düşük başarı gösteren öğrencilerin varlığını düşündürmektedir. Yüksek not aralığında (15 ve üzeri) frekansın belirgin biçimde azaldığı gözlenmektedir.
#Boxplot
#Öğrencilerin aile desteği alan ve almayanların, yasal vasileri ve aile iletişimleriyle kalitelerinin dağılımı
ggplot(data = student_mat, aes(x = famsup, y = famrel, color = guardian)) +
geom_boxplot() +
theme_linedraw() +
labs(title = "Öğrencilerin aile etkileşimlerinin dağılımı",
x = "Ailenin eğitim desteği",
y = "Aile ile iletişim kalitesi",
color = "Yasal vasisi") +
scale_x_discrete(labels = c("no" = "Hayır", "yes" = "Evet")) +
scale_color_manual(values = c("father" = "darkblue", "mother" = "red", "other" = "orange"),
labels = c("father" = "Baba", "mother" = "Anne", "other" = "Diğer"))
#Aile desteği alan öğrenciler genel olarak yüksek bir iletişim kalitesine sahipken, özellikle baba veya anne vasisi olanlarda medyan değer 4 civarında yoğunlaşmıştır. Destek almayan öğrencilerde ise iletişim kalitesi dağılımı daha geniş ve medyan biraz daha düşüktür, bu durum aile desteği eksikliğinin iletişim kalitesini olumsuz etkileyebileceğini göstermektedir. Ayrıca, farklı yasal vasiler arasında, baba vasisi olan öğrencilerin iletişim kalitesi biraz daha homojen ve yüksek görünürken, anne veya diğer vasilerde uç değerlerin daha fazla olması dikkat çekmektedir.
ÖZ-DEĞERLENDİRME
Özellikle dplyr ve tidyverse
paketindeki select
, filter
, group_by
, arrange
ve mutate
fonksiyonlarını
etkin biçimde kullanmayı öğrendim. Ayrıca ggplot2 kütüphanesiyle veri
görselleştirmenin temel mantığını kavradım. R Script ortamında
başlangıçta zorlanmama rağmen, R
Markdown’ın Visual modunun analiz sürecini daha pratik ve
anlaşılır hale getirdiğini deneyimledim.