##Matematik Başarısı Ödevi

##Adım 1: Gerekli Paketlerin Çağrılması

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.1     ✔ stringr   1.5.2
## ✔ ggplot2   4.0.0     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.1.0     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

##Adım 2: Veri Setinin Yüklenmesi(Bu kısmı hatırlamadığım için Gemini yardımı aldım. )

mat_data<- read_delim("student-mat(in).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.

##Adım 3: Veri setinin doğru yüklenip yüklenmediğini kontrol etmek için birkaç satırı görüntüledim.

glimpse(mat_data)
## 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 1A:

select Komutu ile Belirli Sütunları Seçme: Öğrencinin Okulu, Cinsiyeti, Yaşı, Annenin Eğitim Düzeyi ve Final Notu değişkenlerini seçerek yeni bir tablo oluşturdum. Dah sonra bu değişkenlere Türkçe isim verdim.

secilen_degiskenler <- mat_data %>% 
  select(school, sex, age, Medu,G3)

secilen_degiskenler %>% 
  
  rename(
    Okul=school,
    Cinsiyet=sex,
    Yas=age,
    Anne_Egitim_Duzeyi=Medu,
    Final=G3
  )
## # A tibble: 395 × 5
##    Okul  Cinsiyet   Yas Anne_Egitim_Duzeyi Final
##    <chr> <chr>    <dbl>              <dbl> <dbl>
##  1 GP    F           18                  4     6
##  2 GP    F           17                  1     6
##  3 GP    F           15                  1    10
##  4 GP    F           15                  4    15
##  5 GP    F           16                  3    10
##  6 GP    M           16                  4    15
##  7 GP    M           16                  2    11
##  8 GP    F           17                  4     6
##  9 GP    M           15                  3    19
## 10 GP    M           15                  3    15
## # ℹ 385 more rows

##Alıştırma 1B:

Gabriel Pereira (GP) okulunda olup final notu 10 ve daha yüksek olan öğrencileri filtreledim.

basarili_gp <- mat_data %>%
  filter(school == "GP", G3 >= 10)
  head(basarili_gp)
## # 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        15 U       LE3     T           1     1 at_home  other   other 
## 2 GP     F        15 U       GT3     T           4     2 health   servic… home  
## 3 GP     F        16 U       GT3     T           3     3 other    other   home  
## 4 GP     M        16 U       LE3     T           4     3 services other   reput…
## 5 GP     M        16 U       LE3     T           2     2 other    other   home  
## 6 GP     M        15 U       LE3     A           3     2 services 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>

##Alıştırma 1C:

1. dönem ve 2. dönem not ortalamalarını alıp ortalama_1 adında yeni bir sütun oluşturdum.

mat_data %>% 
  mutate((ortalama_1=(G1+G2)/2))
## # A tibble: 395 × 34
##    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>,
## #   `(ortalama_1 = (G1 + G2)/2)` <dbl>

##Alıştırma 1D:

Öğrencileri okullarına ve cinsiyetlerine göre gruplara ayırdım. Daha sonra her bir gruptaki öğrenci sayısını ve her bir grubun final not ortalamalarını hesapladım.

mat_data %>% 
  group_by(school,sex) %>% 
    summarise(
      ogrenci_sayisi=n(),
      final_ortalama=mean(G3)
    )
## `summarise()` has grouped output by 'school'. You can override using the
## `.groups` argument.
## # A tibble: 4 × 4
## # Groups:   school [2]
##   school sex   ogrenci_sayisi final_ortalama
##   <chr>  <chr>          <int>          <dbl>
## 1 GP     F                183           9.97
## 2 GP     M                166          11.1 
## 3 MS     F                 25           9.92
## 4 MS     M                 21           9.76

##Alıştırma 1E:

Öğrencileri önce ders çalışma sürelerine göre grupladım. Daha sonra her bir grubu final notu en yüksekten düşüğe göre sıraladım. Daha sonra kolay okumak için üzerinde çalıştığım bu iki sütunu seçtim.

mat_data %>% 
  group_by(studytime) %>% 
  arrange(desc(G3)) %>% 
  select(studytime,G3)
## # A tibble: 395 × 2
## # Groups:   studytime [4]
##    studytime    G3
##        <dbl> <dbl>
##  1         4    20
##  2         2    19
##  3         1    19
##  4         1    19
##  5         3    19
##  6         3    19
##  7         3    18
##  8         2    18
##  9         1    18
## 10         2    18
## # ℹ 385 more rows

##Alıştırma 2A-1:

Öğrencilerin okula devam etmedikleri gün sayısının histogramı grafiğini yaptım. Aralık olarak 10 gün belirledim. Daha sonra başlık yazdım.

mat_data %>% 
ggplot(aes(x = absences)) +
  geom_histogram(
    binwidth = 10
  ) +

  labs(
    title = "Devamsızlık Sayılarının Dağılımı",
    x = "Toplam Devamsızlık Sayısı",
    y = "Ogrenci Sayısı",
    
  ) +
  theme_light()

##Yorum: Grafiğe göre öğrencilerin çok büyük bir kısmı 20 gün altında devamsızlık yapmaktadır. Bu durum devamsızlığın söz konusu grup için önemli bir problem olamadığını ve öğrencilerin büyük oranda okula devam ettiğini göstermektedir.

##Alıştırma 2A-2:

Öğrencilerin 1. dönem notlarının histogram grafiğini yaptım. Aralık olarak 4 puan belirledim. Çubuk dolgu ve kenarlık rengi belirledim. Daha sonra başlık yazdım.

mat_data %>% 
  ggplot(aes(x = G1)) + 
  geom_histogram(binwidth =4,
  fill = "#2E8B57",          
  color = "white")+
  
  labs(
    title = "Birinci Donem Notlarının (G1) Dagılımı",
    x = "Birinci Donem Notu",
    y = "Ogrenci Sayısı")

##Yorum: Grafikten notlarda çok fazla uç değer olmadığı, dağılımın normal dağılıma yakın olduğu görülmektedir. 10’dan fazla puan alan öğrenci sayısının 10’dan az puan alan öğrenci sayısından bir miktar fazla olduğu söylenebilir. Öğrenci grubunun genel olarak homojen bir başarı gösterdiği ifade edilebilir.

##Alıştırma 2B-1:

Anne mesleğine göre öğrencilerin ortalama final notlarını gösteren bir bar grafiği oluşturdum. İlk olarak, X eksenine anne mesleklerini yerleştirdim. Grafiğin, her bir meslek grubu için final notlarının ortalamasını otomatik olarak hesaplattım. (Burada yapay zeka desteği aldım.)Görsel ayrım sağlamak için her meslek kategorisine farklı bir dolgu rengi atadım. Daha sonra, grafiğin ne anlama geldiğini açıklamak için ana başlık ile X ve Y eksenlerine etiketler ekledim. Son olarak, daha sade ve modern bir görünüm için theme_minimal temasını seçtim.

mat_data %>% 
  
ggplot(aes(x = reorder(Mjob, G3), y = G3, fill = Mjob)) +
    stat_summary(fun = "mean", geom = "bar") +
  
  labs(
    title = "Anne Mesleğine Gore Ogrencilerin Ortalama Basarısı",
    x = "Annenin Mesleği",
    y = "Ortalama Final Notu (G3)"
  ) +
  
  theme_minimal()

##Yorum: Yukarıdaki grafik öğrencilerin matematik dersi final puanlarının annlerinin mesleklerine göre ortalamalarını gösteriyor. Grafiğe göre en yüksek akademik başarı, annesi sağlık (health) sektöründe çalışan öğrencilerde görülürken, onları annesi öğretmen (teacher) olan öğrenciler yakından takip etmektedir. Diğer meslek grupları (services, other) orta sıralarda yer alırken, en düşük not ortalaması annesi ev hanımı (at_home) olan öğrenci grubuna aittir.

##Alıştırma 2B-2:

Hafta içi alkol tüketim düzeyine (Dalc) göre öğrencilerin ortalama final notlarını gösteren bir bar grafiği oluşturdum. İlk olarak, X eksenine alkol tüketim düzeylerini, Y eksenine ise final notlarını (G3) yerleştirdim. Her bir çubuğun dolgu rengini de (fill), ait olduğu tüketim düzeyine göre belirledim. Grafiğin daha anlaşılır olması için X eksenindeki “1”, “2” gibi sayısal etiketleri “Cok Az”, “Az”, “Orta”, “Fazla” ve “Cok Fazla” gibi açıklayıcı metinlerle değiştirdim. Daha sade bir görünüm için theme_minimal temasını kullandım ve gereksiz olduğu için renk göstergesini kaldırdım. Son olarak, grafiğin ne hakkında olduğunu anlatan bir ana başlık ile X ve Y eksenlerine başlıklar ekledim.

mat_data %>% 
  ggplot(aes(x=factor(Dalc), y=G3, fill = factor(Dalc))) +
  stat_summary(fun="mean", geom = "bar")+
   scale_x_discrete(labels = c(
    "1" = "Cok Az", 
    "2" = "Az", 
    "3" = "Orta", 
    "4" = "Fazla", 
    "5" = "Cok Fazla"))+
  theme_minimal() +
  theme(
    legend.position = "none"
  )+
  labs(
    title = "HAlkol Tuketimine Gore Ortalama Basarı",
    x = "Alkol Tuketim Duzeyi", 
    y = "Ortalama Final Notu"
  ) 

##Yorum: Yukarıdaki grafik hafta içi alkol türketim sıklığına göre öğrencilerin matematik puanlarının ortalamalarını göstermektedir. Grafikte görüleceği üzere alkol kullanma sıklığına göre öğrencileri grupladığımızda grupların matematik final notları arasında önemli bir farklılık gözükmemektedir.

##Alıştırma 2C-1:

Anaokuluna gitme durumunun öğrencilerin final notu başarısı ile ilişkisini karşılaştırmak için bir kutu grafiği (oluşturdum. x eksenine anaokuluna gitme durumunu, y eksenine ise öğrencilerin final notlarını yerleştirdim. Her bir kategoriyi görsel olarak ayırmak için fill estetiğini kullanarak kutuları farklı renklerle doldurdum ve son olarak geom_boxplot() komutuyla grafiği çizdirdim.

mat_data %>% 
  ggplot(aes(x=nursery, y=G3, fill = nursery))+
  geom_boxplot()

##Yorum: Bu grafik anaokuluna giden ve gitmeyen öğrencilerin matematik dersi final başarılarının dağılımını göstermektedir. Grafiğe göre her iki grubun ortalaması oldukça yakındır. Ancak anaokuluna giden öğrencilerin puanları daha geniş bir dağılım göstermektedir.

##Alıştırma 2C-2:

Evde internet erişimi olup olmamasının öğrencilerin final notu başarısı ile ilişkisini karşılaştırmak için bir kutu grafiği oluşturdum. X eksenine internet erişimi olup olmama durumunu, y eksenine ise öğrencilerin final notlarını yerleştirdim. Her bir kategoriyi görsel olarak ayırmak için fill fonksiyonunu kullanarak kutuları farklı renklerle doldurdum ve son olarak geom_boxplot() komutuyla grafiği çizdirdim. Uç değerleri kırmızı nokta ile gösterip arka planı beyaz yaptım.

mat_data %>% 
  ggplot(aes(x=internet, y=G3, fill = internet))+
  geom_boxplot(
    outlier.colour = "red")+
    theme_bw()

##Yorum: Bu grafikte öğrencilerin matematik final notu dağılımları evde internet erişimi olup olmama durumuna göre gösterilmiştir. Genel olarak evde internet erişimi olan öğrencilerin puanlarının daha yüksek olduğu görülmektedir. Her iki grupta birer uç değer olmakla birlikte evde internet erişimi olan öğrencilerin puanlarının ranjı daha büyüktür.

##Alıştırma 2D-1:

Öğrencilerin birinci dönem notları ile final notları arasındaki ilişkiyi görselleştirmek için bir saçılım diyagramı (scatter plot) oluşturdum. X eksenine birinci dönem notunu, Y eksenine ise final notunu yerleştirdim. Son olarak, veri setindeki her bir öğrenciyi X ve Y eksenlerindeki notlarına karşılık gelen bir nokta olarak çizdirmek için geom_point() komutunu kullandım.

mat_data %>% 
  ggplot(aes(x=G1, y=G3))+
  geom_point()

##Yorum: Diyagrama göre birinci dönem notları ile final notları arasında çok güçlü, pozitif ve doğrusal bir ilişki olduğu anlaşılmaktadır. X eksenindeki G1 notu arttıkça, Y eksenindeki G3 notu da tutarlı bir şekilde artma eğilimi göstermektedir. Ayrıca, ilk dönemde geçer not almış bazı öğrencilerin final notunun sıfır olması, bu öğrencilerin dersi bırakmış olabileceğine işaret etmektedir.

##Alıştırma 2D-2:

Devamsızlık sayısı ile öğrencilerin final notları arasındaki ilişkiyi incelemek için bir serpilme diyagramı oluşturdum. X eksenine devamsızlık sayısını, y eksenine ise final notlarını atadım. Bu ilişkinin iki farklı okul için nasıl değiştiğini görmek amacıyla, noktaların rengini color fonksiyonu ile okula göre ayarladım. Her bir öğrenciyi geom_point() komutuyla renkli bir nokta olarak çizdirdim ve son olarak theme_bw() komutuyla grafiğe temiz bir görünüm verdim.

mat_data %>% 
  ggplot(aes(x=absences, y=G3, color=school))+
  geom_point()+
  theme_bw()

##Yorum: Bu diyagram, devamsızlık sayısı ile akademik başarı arasında gözle görülür negatif bir ilişki olduğunu ortaya koymaktadır. Grafikteki en çarpıcı bulgu, en yüksek notlara (G3 > 15) sahip öğrencilerin tamamının çok az devamsızlık yapmış (10 günden az) olmasıdır. Tersine, devamsızlık sayısı arttıkça yüksek not alan öğrenci sayısı neredeyse sıfıra inmektedir. Noktaların okula göre renklendirilmesi, bu negatif eğilimin her iki okuldaki öğrenciler için de geçerli olduğunu göstermektedir.