1 Giriş

Bu dosyada OLC731 dersi Hafta 8’de yer alan veri düzenleme ve görselleştirmeye ilişkin kod örnekleri ve ders notları ders almaktadır. EPODDER Kitaplıktan işleniyor. 5. bölüm

load("D:/doktora/OLC731/data/PISA_COG_2018.rda")
load("D:/doktora/OLC731/data/PISA_OGR_2018.rda")
load("D:/doktora/OLC731/data/PISA_SCH_2018.rda")
  • Veri setini okuatmak için #PISA_OGR_2018’da yer alan # işareti kaldırılmalıdır.
#devtools::install_github("tuevpaket/tuev")
library("tuev")
data(PISA_COG_2018)
data(PISA_SCH_2018)
data(PISA_OGR_2018)
data("TIMSS19_acgturm7")

1.1 midiPISA veriseti oluşturma

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(magrittr)
load("data/PISA_OGR_2018.rda")
midiPISA <- PISA_OGR_2018 %>% 
  select(OGRENCIID,SINIF,CINSIYET,
         Anne_Egitim,Baba_Egitim,OKUMA_ZEVK,
         ST097Q01TA:ST097Q05TA,ODOKUMA1:ODOKUMA5)
saveRDS(midiPISA,file = "midiPISA.rda")

1.2 miniPISA verisi oluşturma

library(dplyr)
library(magrittr)
miniPISA <- PISA_OGR_2018 %>% 
  select(SINIF, CINSIYET, KITAPSAYISI, SES, 
    Anne_Egitim,Baba_Egitim,OKUMA_ZEVK,OK_YETERLIK,
    Okuloncesi_yil, OKUL_TUR,ODOKUMA1)
df_1<-PISA_OGR_2018 %>% 
  select(OKUMA_BAGLILIGI,OKUMA_ZEVK,OK_ZORLUK)
saveRDS(df_1,"data/df_1.Rds")
saveRDS(miniPISA,file = "miniPISA.rda")

1.3 RDS dosyasını okutma

df_1 <- readRDS("data/df_1.Rds")
#install.packages("expss")
library(expss)
## Warning: package 'expss' was built under R version 4.4.2
## Zorunlu paket yükleniyor: maditr
## Warning: package 'maditr' was built under R version 4.4.2
## 
## To select columns from data: columns(mtcars, mpg, vs:carb)
## 
## Attaching package: 'maditr'
## The following objects are masked from 'package:dplyr':
## 
##     between, coalesce, first, last
## 
## Attaching package: 'expss'
## The following objects are masked from 'package:magrittr':
## 
##     and, equals, not, or
## The following objects are masked from 'package:dplyr':
## 
##     compute, contains, na_if, recode, vars, where
library(tidyverse) # paketin aktifleştirilmesi
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ readr     2.1.5
## ✔ ggplot2   3.5.1     ✔ stringr   1.5.1
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ expss::and()       masks magrittr::and()
## ✖ maditr::between()  masks dplyr::between()
## ✖ maditr::coalesce() masks dplyr::coalesce()
## ✖ readr::cols()      masks maditr::cols()
## ✖ expss::compute()   masks dplyr::compute()
## ✖ tidyr::contains()  masks expss::contains(), dplyr::contains()
## ✖ expss::equals()    masks magrittr::equals()
## ✖ tidyr::extract()   masks magrittr::extract()
## ✖ dplyr::filter()    masks stats::filter()
## ✖ maditr::first()    masks dplyr::first()
## ✖ stringr::fixed()   masks expss::fixed()
## ✖ purrr::keep()      masks expss::keep()
## ✖ dplyr::lag()       masks stats::lag()
## ✖ maditr::last()     masks dplyr::last()
## ✖ purrr::modify()    masks expss::modify()
## ✖ purrr::modify_if() masks expss::modify_if()
## ✖ expss::na_if()     masks dplyr::na_if()
## ✖ tidyr::nest()      masks expss::nest()
## ✖ expss::not()       masks magrittr::not()
## ✖ expss::or()        masks magrittr::or()
## ✖ expss::recode()    masks dplyr::recode()
## ✖ stringr::regex()   masks expss::regex()
## ✖ purrr::set_names() masks magrittr::set_names()
## ✖ purrr::transpose() masks maditr::transpose()
## ✖ ggplot2::vars()    masks expss::vars(), dplyr::vars()
## ✖ purrr::when()      masks expss::when()
## ✖ expss::where()     masks dplyr::where()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
midiPISA<- expss::drop_var_labs(midiPISA) # değişken etiketlerinin atılması 
miniPISA<- expss::drop_var_labs(miniPISA) # değişken etiketlerinin atılması
head(miniPISA)
## # A tibble: 6 × 11
##   SINIF CINSIYET KITAPSAYISI     SES Anne_Egitim Baba_Egitim OKUMA_ZEVK
##   <dbl>    <dbl>       <dbl>   <dbl>       <dbl>       <dbl>      <dbl>
## 1    10        2           2 -2.45             2           2     -0.289
## 2    10        2           3 -2.10             2           2      0.604
## 3    10        1           1 -2.27             1           2      0.638
## 4     9        2           1  0.0324           6           6     -1.15 
## 5     9        2           2 -0.0674           4           4      0.667
## 6    10        2           2  0.398            4           6      0.357
## # ℹ 4 more variables: OK_YETERLIK <dbl>, Okuloncesi_yil <int>, OKUL_TUR <chr>,
## #   ODOKUMA1 <dbl>
head(midiPISA)
## # A tibble: 6 × 16
##   OGRENCIID SINIF CINSIYET Anne_Egitim Baba_Egitim OKUMA_ZEVK ST097Q01TA
##       <dbl> <dbl>    <dbl>       <dbl>       <dbl>      <dbl>      <dbl>
## 1  79200768    10        2           2           2     -0.289          1
## 2  79201064    10        2           2           2      0.604          3
## 3  79201118    10        1           1           2      0.638          2
## 4  79201275     9        2           6           6     -1.15           2
## 5  79201481     9        2           4           4      0.667          3
## 6  79201556    10        2           4           6      0.357          3
## # ℹ 9 more variables: ST097Q02TA <dbl>, ST097Q03TA <dbl>, ST097Q04TA <dbl>,
## #   ST097Q05TA <dbl>, ODOKUMA1 <dbl>, ODOKUMA2 <dbl>, ODOKUMA3 <dbl>,
## #   ODOKUMA4 <dbl>, ODOKUMA5 <dbl>

2 Betimleyici İstatistikler

2.1 Minimum ve Maksimum Değerleri

min(midiPISA$ODOKUMA1)
## [1] 175.608
max(midiPISA$ODOKUMA1) # maksimum değer hesaplama
## [1] 771.508
min<-range(midiPISA$ODOKUMA1)[1] #minimum değer hesaplama
min
## [1] 175.608
max<-range(midiPISA$ODOKUMA1)[2] #maksimum değer hesaplama
max
## [1] 771.508

2.2 Ortalama

mean(midiPISA$ODOKUMA1) # ortalama hesaplama
## [1] 464.2299
mean(midiPISA$ODOKUMA1,na.rm=TRUE) # kayıp değerler hariç ortalama hesaplama
## [1] 464.2299

2.3 Medyan

median(midiPISA$ODOKUMA1) # medyan hesaplama
## [1] 463.403
quantile(midiPISA$ODOKUMA1,0.5) # medyan hesaplama
##     50% 
## 463.403

2.4 I. ve II. Çeyrekler

quantile(midiPISA$ODOKUMA1,0.25) # I. çeyrekler hesaplama
##      25% 
## 402.5635
quantile(midiPISA$ODOKUMA1,0.75) # III. çeyrekler hesaplama
##      75% 
## 525.7188

2.5 Standart Sapma ve Varyans

sd(midiPISA$ODOKUMA1) # standart sapma hesaplama
## [1] 87.78006
var(midiPISA$ODOKUMA1) # varyans hesaplama
## [1] 7705.339
midiPISA %>% 
# "O_" başlayan ve "OD" içeren değişkenlerin seçimi
  select(starts_with("OD") & contains("MA")) %>% 
  lapply(.,sd) # her bir değişkenin standart sapmasının hesaplanması
## $ODOKUMA1
## [1] 87.78006
## 
## $ODOKUMA2
## [1] 87.696
## 
## $ODOKUMA3
## [1] 87.07692
## 
## $ODOKUMA4
## [1] 87.40305
## 
## $ODOKUMA5
## [1] 87.21323
midiPISA %>% 
# "O_" başlayan ve "OD" içeren değişkenlerin seçimi
  select(starts_with("OD") & contains("MA")) %>% 
  summarise(across(everything(), list(sd = sd),na.rm=TRUE)) # her bir değişkenin standart sapmasının hesaplanması
## Warning: There was 1 warning in `summarise()`.
## ℹ In argument: `across(everything(), list(sd = sd), na.rm = TRUE)`.
## Caused by warning:
## ! The `...` argument of `across()` is deprecated as of dplyr 1.1.0.
## Supply arguments directly to `.fns` through an anonymous function instead.
## 
##   # Previously
##   across(a:b, mean, na.rm = TRUE)
## 
##   # Now
##   across(a:b, \(x) mean(x, na.rm = TRUE))
## # A tibble: 1 × 5
##   ODOKUMA1_sd ODOKUMA2_sd ODOKUMA3_sd ODOKUMA4_sd ODOKUMA5_sd
##         <dbl>       <dbl>       <dbl>       <dbl>       <dbl>
## 1        87.8        87.7        87.1        87.4        87.2

2.6 Tüm Özet İstatistikler

summary(midiPISA$ODOKUMA1) # betimleyici istatistiklerin özeti
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   175.6   402.6   463.4   464.2   525.7   771.5
# gruplara göre betimleyici istatistiklerin özeti
#by(midiPISA$ODOKUMA1, midiPISA$CINSIYET, summary) 

library(psych)
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
describe(midiPISA %>% 
  select(CINSIYET,ODOKUMA1)) # özetleyici istatistiklerinin hesaplanması
##          vars    n   mean    sd median trimmed   mad    min    max range  skew
## CINSIYET    1 6890   1.51  0.50    2.0    1.51  0.00   1.00   2.00   1.0 -0.03
## ODOKUMA1    2 6890 464.23 87.78  463.4  463.90 91.11 175.61 771.51 595.9  0.04
##          kurtosis   se
## CINSIYET     -2.0 0.01
## ODOKUMA1     -0.3 1.06

2.7 Değişkenlik Katsayısı

library(pastecs) # paketin aktifleştirilmesi
## Warning: package 'pastecs' was built under R version 4.4.2
## 
## Attaching package: 'pastecs'
## The following object is masked from 'package:tidyr':
## 
##     extract
## The following objects are masked from 'package:maditr':
## 
##     first, last
## The following object is masked from 'package:magrittr':
## 
##     extract
## The following objects are masked from 'package:dplyr':
## 
##     first, last
round(stat.desc(midiPISA %>% 
  select(CINSIYET,OKUMA_ZEVK)),2)  # değişkenlik katsayısının hesaplanması
##              CINSIYET OKUMA_ZEVK
## nbr.val       6890.00    6821.00
## nbr.null         0.00       0.00
## nbr.na           0.00      69.00
## min              1.00      -2.73
## max              2.00       2.66
## range            1.00       5.39
## sum          10384.00    4659.70
## median           2.00       0.64
## mean             1.51       0.68
## SE.mean          0.01       0.01
## CI.mean.0.95     0.01       0.02
## var              0.25       0.95
## std.dev          0.50       0.98
## coef.var         0.33       1.43

2.8 Mod

tab <- table(midiPISA$Anne_Egitim) # her benzersiz değer için oluşum sayısı
tab
## 
##    0    1    2    3    4    5    6 
##  695 1882 1362  575  675  759  887
sort(tab, decreasing = TRUE) # en yüksekten en düşüğe doğru sıralama
## 
##    1    2    6    5    0    4    3 
## 1882 1362  887  759  695  675  575

2.9 Frekans Tablosu Oluşturma

## KABLE ile bunları tablolara çekebilirsin
midiPISA %>%
  group_by(Anne_Egitim) %>% # Anne_Egitim e göre gruplandırma
  count() %>%  # frekans tablosu oluşturma
  ungroup() # gruplandırmanın kaldırılması
## # A tibble: 8 × 2
##   Anne_Egitim     n
##         <dbl> <int>
## 1           0   695
## 2           1  1882
## 3           2  1362
## 4           3   575
## 5           4   675
## 6           5   759
## 7           6   887
## 8          NA    55
midiPISA %>%
  summarise(ort = mean(ODOKUMA1), # ortalama
            sd = sd(ODOKUMA1),    # standart sapma 
            n = n())              # frekans hesaplama
## # A tibble: 1 × 3
##     ort    sd     n
##   <dbl> <dbl> <int>
## 1  464.  87.8  6890

3 Bölüm 6 Veri Görselleştirme

Temel grafik sistemleri; base öğrenmesi en kolay olan, grid diğer araçları geliştirmek için güçlü modüller içeren, lattice gridler üzerine kurulu genel amaçlı grafikler ve ggplot2 grafiklerin grammeri olarak bilinir.

# install.packages("tidyverse", repos="https://cran.rstudio.com") # paketin yüklenmesi
library("tidyverse") # paketin aktifleştirilmesi
library(dplyr)
library(magrittr)
library(haven)
library(plotly)
miniPISA <- PISA_OGR_2018 %>%
select(CINSIYET, SINIF,KITAPSAYISI, SES, Anne_Egitim, Baba_Egitim,Okuloncesi_yil,OKUL_TUR,OKUMA_ZEVK,
       OK_YETERLIK,ODOKUMA1) 
# kategorik değişkenlerin faktör olarak kaydı
miniPISA<- miniPISA %>% mutate_if(is.labelled, sjlabelled::as_factor)
# Faktör değiskenlere düzey atama amacıyla yazılan fonksiyon
levelsnames <- function(x){
  levels(x) <- names(attr(x,"labels"))
  x
}
# yazılan fonksiyonun faktör değişkenlere uygulanması
miniPISA <-mutate_if(miniPISA,is.factor, levelsnames)
head(miniPISA)
## # A tibble: 6 × 11
##   CINSIYET SINIF    KITAPSAYISI      SES Anne_Egitim Baba_Egitim Okuloncesi_yil
##   <fct>    <fct>    <fct>          <dbl> <fct>       <fct>       <fct>         
## 1 Erkek    SINIF 10 11-25 kitap  -2.45   Ortaokul    Ortaokul    2 yildan az   
## 2 Erkek    SINIF 10 26-100 kitap -2.10   Ortaokul    Ortaokul    2 yildan az   
## 3 Kiz      SINIF 10 0-10 kitap   -2.27   Ilkokul     Ortaokul    2 yildan az   
## 4 Erkek    SINIF 9  0-10 kitap    0.0324 Lisans ustu Lisans ustu 2 yildan az   
## 5 Erkek    SINIF 9  11-25 kitap  -0.0674 Onlisans    Onlisans    <NA>          
## 6 Erkek    SINIF 10 11-25 kitap   0.398  Onlisans    Lisans ustu <NA>          
## # ℹ 4 more variables: OKUL_TUR <fct>, OKUMA_ZEVK <dbl>, OK_YETERLIK <dbl>,
## #   ODOKUMA1 <dbl>

3.1 ggplot

library(ggplot2)
#qplot(x, y, data, geom)
#ggplot(x, y, data, geom)
#ggplot( data, aes(x, y)) + geom.grafikismi()
#ggplot(x, y, data, geom="density") 
#ggplot( data, aes(x, y)) + geom.density()

3.2 Yoğunluk Grafiği

ggplot(miniPISA, aes(x=ODOKUMA1))+
  geom_density(linetype="dashed", fill="pink")

3.2.1 Histogram

grafik_1 <- ggplot(miniPISA, aes(x=ODOKUMA1)) #ilk katmanın oluşturulması
grafik_1 # oluşturulan nesnenin kaydedilmesi

3.2.2 Katman Eklenmesi

grafik_1 + geom_histogram()+theme_minimal() # histogram çizilmesi
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

3.2.3 Yüzey Eklenmesi

#facet_wrap(~değişken, ncol=n) 
#facet_wrap(~değişken, nrow=n) 
grafik_1 +
  geom_histogram()  +       
  facet_wrap(~CINSIYET, ncol=2) # cinsiyet değişkenindeki faktörlerin sütunda yer alması

grafik_1 + 
  geom_histogram() +
   facet_wrap(~CINSIYET, nrow=2) # cinsiyet değişkenindeki faktörlerin satırda yer alması

#Yüzeylerin düzenlenmesi
#facet_grid(satırdeğişkeni~sütundeğişkeni)
#facet_grid(satırdeğişkeni~.) 
#facet_grid(.~sütundeğişkeni)

library(haven)
miniPISA <- 
  miniPISA %>% 
  mutate_if(is.labelled, funs(as_factor(.)))