library(tidyverse)
library(ggplot2)
library(readr)
student_mat <- read_delim("student-mat.csv",
delim = ";", escape_double = FALSE, trim_ws = TRUE)
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,…
Bu çalışmada student-mat veri setini kullanarak, alkol tüketimi (Dalc, Walc), ebeveyn eğitim düzeyi (Medu, Fedu) ve ebeveynlerin birlikte yaşama durumu (Pstatus) ile akademik başarı (G3) arasındaki ilişkileri incelemek amaçlanmıştır.
student_mat_v2 <- student_mat %>% select(Dalc, Walc, Medu, Fedu, Pstatus, sex, G3)
head(student_mat_v2, 6)
## # A tibble: 6 × 7
## Dalc Walc Medu Fedu Pstatus sex G3
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <dbl>
## 1 1 1 4 4 A F 6
## 2 1 1 1 1 T F 6
## 3 2 3 1 1 T F 10
## 4 1 1 4 2 T F 15
## 5 1 2 3 3 T F 10
## 6 1 2 4 3 T M 15
Select fonksiyonunu kullanarak ihtiyacımız olan sütunları tutup, verideki diğer sütunları attık. Asıl veri setimiz olan student_mat’ı bozmamak için de student_mat_v2 adında yeni bir veri seti olarak kaydettik.
student_mat_v2 <- student_mat_v2 %>%
mutate( parent_edu_sum = Medu + Fedu, ort_alc= (Dalc + Walc) / 2, gecme= G3 >= 10)
Mutate fonksiyonu veri setine yeni bir sütun eklemek veya var olan sütunu değiştirmek için kullanılır. Yukarda anne ve babanın eğitim puanlarını tek sütunda birleştirmek için mutate kullanarak parent_edu_sum sütunu oluşturduk. Yine mutate kullanarak hafta içi ve hafta sonu kullanılan alkol miktarının ortalamasını alarak yeni bir sütun oluşturup adına ort_alc adını verdik. gecme isimli yeni sütunda ise G3 notu 10 ve üzeri olanlarda TRUE, 10’un altında olanlarda FALSE yazıyor.
v2_filtered<- student_mat_v2 %>%
filter(Pstatus == "T", parent_edu_sum >= 6)
Filter fonksiyonunu kullanarak ailesiyle birlikte yaşayan ve anne babasının eğitim puanları toplamı 6 ve üzeri olan öğrencileri seçtik.
v2_betimsel <- v2_filtered %>%
group_by(sex) %>%
summarise(n= n(),mean_G3= mean(G3),gecme_yuzdesi= mean(gecme)*100, mean_ort_alc = mean(ort_alc)) %>%
arrange(desc(gecme_yuzdesi), desc(mean_G3))
v2_betimsel
## # A tibble: 2 × 5
## sex n mean_G3 gecme_yuzdesi mean_ort_alc
## <chr> <int> <dbl> <dbl> <dbl>
## 1 M 84 11.4 76.2 2.09
## 2 F 84 11.3 69.0 1.65
v2_filtered isminde oluşturduğumuz veri setini group_by() kullanarak kız ve erkek diye ikiye ayırdık. summarise() kullanarak grupta kaç kişi var (n), ortalama final notu (mean_G3), geçme yüzdesi (gecme_yuzdesi) (TRUE FALSE şeklinde olduğu için ortalamasını alıp 100’le çarptık) ve ortalama alkol gibi betimsel analizleri yaptık. arrange() fonksiyonuyla da geçme yüzdesi en yüksek olan grup üstte olacak şekilde sıraladık.
ggplot(student_mat, aes(x = sex, y = G3)) +
geom_boxplot() +
theme_classic() +
labs(title = "Cinsiyete Göre G3 Dağılımı",
x = "cinsiyet", y = "G3")
Grafik Yorumu: Cinsiyete göre G3 dağılımında medyanlar birbirine yakın olup, erkeklerin biraz daha yüksektir. Her iki grupta da G3=0 olan uç değerler vardır. Genel yayılım benzer.
ggplot(student_mat, aes(x = absences)) +
geom_histogram() +
theme_gray() +
labs(title = "Devamsızlık Dağılımı",
x = "Devamsızlık (gün)", y = "Öğrenci sayısı")
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
Grafik Yorumu: Devamsızlıklar çoğunlukla 0-10 gün aralığında yapılmıştır. Bazı öğrencilerin devamsızlık yaptığı gün sayıları 40 ve üzeridir. Bu uç değerler nedeniyle grafiğin kuyruğu sağa uzamaktadır.
ggplot(student_mat, aes(x = Dalc, y = Walc)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
theme_light() +
labs(title = "Hafta İçi ve Hafta Sonu Alkol İlişkisi",
x = "Hafta içi alkol kulllanımı", y = "Hafta sonu alkol kullanımı")
## `geom_smooth()` using formula = 'y ~ x'
Grafik Yorumu: Hafta içi ve hafta sonu alkol puanları arasında pozitif bir ilişki vardır. Hafta içi alkol kullanımı arttıkça, hafta sonu alkol kullanma da artma eğilimindedir.
ggplot(student_mat, aes(x = reason)) +
geom_bar() +
theme_minimal() +
labs(title = "Okul Tercih Nedeni Dağılımı",
x = "Okul seçme nedeni",
y = "Öğrenci sayısı")
Grafik Yorumu: Okul tercihinde en önemli etken ders tercihi olmuştur. Eve yakınlık ikinci sırada yer almıştır.