library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.5.1
## Warning: package 'purrr' was built under R version 4.5.1
## Warning: package 'stringr' was built under R version 4.5.1
## Warning: package 'forcats' was built under R version 4.5.1
## ── 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
library(ggplot2)
library(readr)
student_mat <- read_delim("ödevler /ödev 1/student-mat.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)
Alıştırma 1 Veri Düzenleme (dplyr)
student_mat %>% select(school,sex,address)
## # A tibble: 395 × 3
##    school sex   address
##    <chr>  <chr> <chr>  
##  1 GP     F     U      
##  2 GP     F     U      
##  3 GP     F     U      
##  4 GP     F     U      
##  5 GP     F     U      
##  6 GP     M     U      
##  7 GP     M     U      
##  8 GP     F     U      
##  9 GP     M     U      
## 10 GP     M     U      
## # ℹ 385 more rows
student_mat %>% filter(Fjob=="teacher")
## # A tibble: 29 × 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     A           4     4 other    teach… home  
##  3 GP     M        16 U       GT3     T           4     4 teacher  teach… home  
##  4 GP     M        16 R       GT3     A           4     4 other    teach… reput…
##  5 GP     M        15 U       GT3     T           4     4 services teach… course
##  6 GP     F        15 U       GT3     T           4     4 services teach… other 
##  7 GP     F        16 R       GT3     T           4     4 health   teach… other 
##  8 GP     M        16 U       GT3     T           4     4 services teach… other 
##  9 GP     M        15 U       LE3     A           4     4 teacher  teach… course
## 10 GP     M        16 U       GT3     T           4     4 teacher  teach… course
## # ℹ 19 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>
student_mat <- student_mat %>%  mutate(high_absences = absences > 15)
Önce group_by fonksiyonu ile öğrenciler cinsiyetine göre gruplanmış, daha sonra summarise fonksiyonu ile her bir cinsiyet grubu için güncel sağlık durumlarına ilişkin en düşük ve en yüksek değer gösterilmiştir.
student_mat %>% group_by(sex) %>% summarise(min=min(health), max=max(health))
## # A tibble: 2 × 3
##   sex     min   max
##   <chr> <dbl> <dbl>
## 1 F         1     5
## 2 M         1     5Veri setindeki öğrenciler arrange fonksiyonu ile arkadaşlarıyla dışarı çıkma sıklığına göre azalan şekilde sıralanmıştır.
student_mat %>% arrange(desc(goout))
## # 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     M        17 U       GT3     T           3     2 services servi… course
##  2 GP     M        16 U       GT3     T           4     4 teacher  teach… home  
##  3 GP     F        16 U       LE3     A           3     3 other    servi… home  
##  4 GP     M        15 U       LE3     A           4     2 health   health other 
##  5 GP     F        16 U       GT3     T           1     1 services servi… course
##  6 GP     F        15 U       GT3     T           4     3 services other  reput…
##  7 GP     F        16 U       GT3     T           2     1 other    other  course
##  8 GP     F        16 U       GT3     T           4     3 other    at_ho… course
##  9 GP     M        16 U       GT3     T           4     4 services servi… other 
## 10 GP     F        15 U       GT3     T           3     2 services 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>,
## #   high_absences <lgl>
Öğrencilerin final notlarının dağılımını gösteren histogram
Aşağıdaki grafiğe göre, öğrencilerin final notları normal bir dağılım göstermemektedir, biraz sola çarpık bir dağlılım göstermektedir çünkü 0 notunu alan yaklaşık 40 kişi bulunmaktadır.
ggplot(student_mat, aes(x=G3)) +
  geom_histogram() +
  labs(title="Öğrencilerin final notlarının dağılımını gösteren histogram")
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
Birinci dönem ve ikinci dönem ders notları arasındaki ilişkiyi gösteren dağılım grafiği
Aşağıdaki grafik incelendiğinde, 1. dönem ve 2. dönem notları arasında pozitif bir korelasyon bulunmaktadır. Fakat 1. dönem not almasına rağmen ikinci dönem sıfır almış aykırı değerlerin de olduğu grafikte görülmektedir.
ggplot(student_mat, aes(x=G1,y=G2))+
  geom_point() + 
  geom_smooth (method="lm", se=FALSE) +
  labs(x="\n1.donem notları", y="2. donem notları\n", 
   title="1.ve 2.donem notları sacılım grafigi")
## `geom_smooth()` using formula = 'y ~ x'
Öğrencilerin cinsiyetine göre final notlarınının ortalamasını gösteren sütun grafiği
Aşağıdaki grafik incelendiğinde erkek öğrencilerin final notu ortalamalarının, kız öğrencilerin final notu ortalamasından daha yüksek olduğu görülmektedir.
a<-student_mat %>% group_by(sex) %>% summarise(ortalama=mean(G3))
 ggplot(a, aes(x=sex, y=ortalama)) +
   geom_col() +
   labs(x="cinsiyet", y="ortalama")
ÖĞRENME GÜNLÜĞÜM 1
R Markdown ile ilk ödevimi yaptım. Daha önce bu uygulamayı hiç kullanmamıştım, kullanımı şimdilik çok kafa karıştırıcı gelmedi. Yazılan kodları bir belge olarak yayınlamak, sanırım raporlama için yardımcı olacaktır. Genel olarak R programlama dilini öğrenmeyi yabancı dil öğrenmeye benzetiyorum, berlirli bir kodlama mantığı ve yazım dili var aslında , ve ben de bunu kafamda oturtmaya çalışıyorum. Aynı yabancı dil becerisi gibi kullandıkça gelişen, kullanmadıkça körelen bir beceri olduğunu düşünüyorum. Daha yolun başında olmakla beraber, R programlama dilini öğrenmeyi eğlenceli buluyorum. Bu ödevde aslında daha önce derste kullandığımız fonksiyonları kullandık. Fakat, summarise fonksiyonunu kullanıp sonuca baktığımda, aslında tam olarak neyi çıktı olarak aldığımı anlamadım, daha sonra biraz araştırınca sadece seçilen gruba ait en küçük ve en büyük değer nedir bana onları gösterdiğini anladım, benim beklentim en küçük ve en büyük değerlerin kaç tane bulunduğu yönünde gibi birşeydi aslında. Son olarak sütun grafiğini önce geom_bar ile oluşturmaya çalıştım fakat hata aldığım için araştırmalarım sonucu geom_col grafik türünü kullanmam gerektiğini öğrendim.