Bu dersi, Epodder Kitaplıktan indirdiğimiz Veri Düzenleme ve Görşelleştirme / Kübra Atalay Kabasakal & Sebahat Gören kitabından işledik. Kitaptaki PISA, miniPISA gibi veri setlerini kullanarak analizlerimizi gerçekleştirdik.
Bu kitapta kullanılan veri setleri https://www.oecd.org/pisa/data/ adresinden indirildikten sonra sadece Türkiye’ye ait veri setleri *.Rda uzantılı olacak şekilde kaydedilmiştir. Dersimizde kullanmak için aşağıda yer alan üç veri setini bilgisayarımıza indirdik.
İndirdiğimiz veri setlerini aşağıdaki kodları kullanarak programa yükledik.
Bilişsel veri seti 6890 gözlem(öğrenci) ve 3589 değişken, öğrenci anketi veri seti 6890 gözlem (öğrenci) ve 3589 değişken, okul anketi veri seti 186 gözlem (okul) ve 197 değişken içermektedir. Bu kadar büyük bir veri seti ile çalışmak zor olacağı için pratiklik ve anlaşılabilirlik açısından PISA_OGR_2018 veri setinden seçilen veri düzenleme bölümünde midiPISA, veri görselleştirme bölümünde ise miniPISA veri setleri oluşturulmuş ve kitaptaki örnekler bu veri setleri üzerinden yapılmıştır.
midiPISA veri setini oluşturmak için ilk olarak dplyr ve pipe operatörünün orijinal paketi olan magrittr paketlerini yükledik. Sonrasında pipe( %>% ) operatörünü kullanarak select argümanı ile istediğimiz değişkenleri seçerek midiPISA veri setini oluşturduk.
library(dplyr)
library(magrittr)
midiPISA <- PISA_OGR_2018 %>%
select(OGRENCIID,SINIF,CINSIYET,
Anne_Egitim,Baba_Egitim,OKUMA_ZEVK,
ST097Q01TA:ST097Q05TA,ODOKUMA1:ODOKUMA5)Aynı şekilde bir de miniPISA veri seti oluşturduk.
midiPISA ve miniPISA veri setlerini yukarıdaki gibi değilde linklerden indirirsek midiPISA veri seti , miniPISA veri seti, bu veri setlerini R ortamına aktarmamız gerekir. Bunun için load() fonksiyonunu kullandık. Bu veri setlerinin ilk altı satırını gösteren head() fonksiyonuyla da veri setini yazdırdık.
# çalışılacak veri setinin data adlı klasörden R ortamına aktarılması
load("C:/OLC731/Hafta_06/data/midiPISA.rda")
# ilk altı satırın görüntülenmesi
head(midiPISA) NOT: derste miniPISA veri setini load ederken hata aldım. Bunun veri setindeki değişkenlerin etiketlerinden kaynaklandığını öğrendik. Bu etiketlerden kurtulunca sorun ortadan kalktı. Bunu da şu şekilde yaptık:
library(tidyverse) # paketin aktifleştirilmesi
load("C:/OLC731/Hafta_06/data/midiPISA.rda") # çalışılacak veri setinin R ortamına aktarılması
midiPISA <- expss::drop_var_labs(midiPISA) # değişken etiketlerinin atılması
head(midiPISA)
load("C:/OLC731/Hafta_06/data/miniPISA.rda") # çalışılacak veri setinin R ortamına aktarılması
miniPISA <- expss::drop_var_labs(miniPISA) # değişken etiketlerinin atılması
head(miniPISA)Veri setlerini yükledikten ve değişken etiketlerinden kaynaklanan hatalardan kurtulduktan sonra Veri düzenlemede en sık kullanılan paketlerden biri olan dplyr paketine giriş yaptık.
%>% operatörü veri düzenleme işlemlerinde kullanışlı olduğundan sık tercih edilen bir operatördür. Kısa yolu windows için Ctrl+Shift+M, mac için Cmd+Shift+M’dir. Bu operatör magrittr paketinde yer aldığı için pipe operatörü kullanılırken paketin aktifliği kontrol edilmelidir.
%>% solundaki nesneye sağındaki fonksiyonu uygular. Yani pipe operatörünün solundaki öğeler, sağındaki fonksiyonun ilk argümanına iletilir. Fonksiyon ilk argümanı olan veriyi, pipe operatörünün solundan alır, kalan argümanlar fonksiyonun sağındadır.
Satır bazında veri seçim işlemi yapabilmek için filter() fonksiyonunu kullandık. Böylece veri setindeki istenilen değişkenler filtrelenerek sadece seçilen gözlemlerden oluşan yeni bir veri seti elde ettik. Örneğin; midiPISA verisinde Anne_Egitim anne eğitim düzeyini, Baba_Egitim baba eğitim düzeyini belirten değişkenlerdir. Belirtilen değişkenlerde lisansüstü mezun olma durumu “6” kodu ile belirtilmektedir.
NOT: Büyük veri setleri ile çalışırken filter() fonksiyonunun gerçekten çok işlevsel olacağını anladım. Veri setinden istediğimiz verileri çekebilmek için ve(&), veya(|), eşit(==) gibi birçok mantıksal operatörün bu fonksiyon ile kullanılabileceğini öğrendim.
Veri setinden sütun bazında seçimler yapabilmek için select() fonksiyonunun kullanılabileceğini öğrendik. Aşağıda bu fonksiyonun kullanımına çeşitli örnekler verilmiştir.
Yukarıdaki fonksiyon ile dört değişkenden oluşan yeni bir veri seti oluşturulmuştur.select() fonksiyonu, orijinal veri setinde herhangi bir değişikliğe yol açmaz. Bu nedenle seçim yapılan değişkenlerden oluşan yeni veri setini ayrı bir R nesnesine atayarak kaydetmek gerektiği unutulmamalıdır.
midiPISA %>%
select(OGRENCIID:ST097Q04TA,-CINSIYET) %>% # sütun bazında değişken ekleme ve çıkarma
head(5) #ilk beş satırın görüntülenmesiBu fonksiyon satırları sıralamak amacıyla kullanılıyor. Sıralama işlemini alfabetik sıralamaya göre yapıyor, ama ek bir fonksiyon yazıldığında büyüklük sırasına göre de sıralama yapabiliyor. Böylece veri seti istenilen kritere göre sıralanarak değişkenler arasındaki ilişkinin kolay bir şekilde görülebilmesini sağlıyor.
Veri setinden istenilen değişkenler seçilerek yeni bir veri seti oluşturulmak istendiğinde seçilen değişkenlerin de ismini değiştirmek isteyebiliriz. Bu durumda rename() fonksiyonu (yeni ad=eski ad) şeklinde kullanılabilir.
midiPISA %>%
select(ODOKUMA1,ODOKUMA2)%>%
rename(okumapuan1=ODOKUMA1,okumapuan2=ODOKUMA2) %>%
head(3) Bu fonksiyon ile veri setine yeni değişkenler eklenebileceğini öğrendik. mutate() fonksiyonu ile veri setine yeni değişkenler eklenirken mevcut değişkenler de korunur ancak transmutate() fonksiyonu ile eski değişkenler veri setiden çıkarılarak yeni değişken eklenir.
zevk<- select(midiPISA, starts_with("ST097"))
zevk%>%
mutate(toplam =ST097Q01TA+ST097Q02TA+ST097Q03TA+ST097Q04TA+ST097Q05TA) %>%
head(3) Ders anlatırken Kübra hocanın çok önemsediği, çok sık kullanacağımızı ve çok kkolaylık sağlayacağını söylediği fonksiyonlardan biriydi ifelse fonksiyonu.
## [1] "Negatif" "Pozitif" "Negatif" "Negatif" "Pozitif"
case_when() fonksiyonu çoklu ifelse() kullanımı ile benzer işlevi sağlar. case_when() birden fazla koşula dayalı karşılaştırmalarda yeni bir değişken oluşturmak amacıyla kullanılır.
v1 <- midiPISA %>%
mutate(ODOKUMA1_kategorik =
case_when(
ODOKUMA1 <= 402.6 ~ "dusuk",
ODOKUMA1 > 402.6 & ODOKUMA1 < 525.7 ~ "orta",
ODOKUMA1 >=525.7 ~ "yuksek" )) %>%
select(ODOKUMA1,ODOKUMA1_kategorik)
head(v1)* Derste yaptığımız örnek:
v1 <- midiPISA %>%
mutate(ODOKUMA1_kategorik =
if_else(ODOKUMA1 <= 402.6, "dusuk",
if_else(ODOKUMA1 < 525.7, "orta", "yuksek")
)
) %>%
select(ODOKUMA1, ODOKUMA1_kategorik)
head(v1)count() fonksiyonu frekans tablosu oluşturmak için kullanılmaktadır. Yine pipe operatörü ile birlikte sıklıkla kullanılmaktadır.
summarise() fonksiyonu tek satırda veri setini özetleyerek yeni bir veri seti oluşturan fonksiyondur. Yani seçilen sütunlar için her satırı kullanarak özet istatistikleri hesaplar. Örneğin; min() minumum değer, max() maksimum değer, mean() ortalama değer, median() ortanca, quantile() q. yuzdelik, sd() standart sapma, var() varyans, diff(range()) değiskenlik, first() ilk eleman, last() son eleman, nth() n. eleman, n() toplam eleman sayısı, n_distinct() farklı değerlerin sayısı hesaplanabilir.
Örneğin bir veri setindeki değişkenlerin hem ortalaması, hem standart sapması hem de minimum, maksimum değerleri hesaplanmak istenebilir. Bu durumda aşağıdaki örnekte olduğu gibi bu fonksiyonlar “,” kullanılarak art arda yazılabilir.
midiPISA %>%
summarise(n = n(),
ortalama=mean(ODOKUMA1),
sd=sd(ODOKUMA1),
min=min(ODOKUMA1),
max=max(ODOKUMA1))summarise() fonksiyonu gruplandırılmamış bir veri setinde, tüm satırlardan özet istatistik bilgileri hesaplamıştır. Bu bilgiler, veri setinde yer alan alt gruplar için ise ayrı ayrı group_by() fonksiyonu ile hesaplanabilir. group_by() dan sonra kullanılan fonksiyonlar her grup için ayrı ayrı hesaplanama yapar ve bu fonksiyon içinde sürekli değişken kullanılmaz.
midiPISA %>%
group_by(CINSIYET) %>%
summarise(n = n(),ortalama=mean(ODOKUMA1),sd=sd(ODOKUMA1),min=min(ODOKUMA1),max=max(ODOKUMA1)) midiPISA %>%
#CINSIYET ve SINIF değişkenlerine göre gruplara ayırma
group_by(CINSIYET,SINIF) %>%
# özetleyici bilgileri hesaplama
summarise(n = n(),ortalama=mean(ODOKUMA1),sd=sd(ODOKUMA1)) %>%
# gözlemleri ortalama değerleri büyükten küçüğe olacak şekilde sıralama
arrange(desc(ortalama)) %>%
# grupları birleştirme
ungroup() NOT: Ders dolu dolu geçti, dplyr paketinde gerçekten çok fazla foksiyon var, derste yetişmekte zorlandım biraz açıkcası. Sonradann bakıp tekrarladığımda biraz daha oturdu. Daha öğrenecek çok şey var.