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,…

Alıştırma 1 Veri düzenleme (dplyr)

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.

  1. select () kullanarak analizde kullanacağımız sütunları seçme.
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.

  1. mutate() kullanarak veri setine yeni sütun ekleme.
 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.

  1. filter() kullanarak belirli öğrencileri seçme.
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.

  1. Seçilen öğrencilerin betimsel istatistiklerini oluşturma.
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.

Alıştırma 2 Görselleştirme (ggplot)

  1. Boxplot: Cinsiyete göre G3
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.

  1. Histogram Grafiği: Devamsızlık Dağılımı
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.

  1. Scatterplot: Hafta İçi ve Hafta Sonu Alkol İlişkisi
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.

  1. Bar Grafiği: Okul Tercih Nedeni Dağılımı
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.