13 Veri Düzenleme V
Bir veriyi R ortamamına aktardıktan sonra veri setinde yer alan tüm satır ya da sütunların doğru bir şekilde aktarılıp aktarılmadığı, değişken isimlerinin düzgün olup olmadığı yani özellikle sütun adlarında boşluk olmaması ya da farklı karakterler bulunmaması kontrol edilmelidir. İlk olarak R ortamına aktarılan boş satır ve sütunlar olup olmadığı filter() ve select() gibi fonksiyonlarla incelebilir. Eksik verilerin nasıl temsil edildiği kontrol edilmelidir. NA," " (bosluk), ., 999 , 9999 vb. şekilde ifade edilen eksik veriler mutate() ve ifelse() ile düzenlebilir. Ayrıca karakter (character) ve faktör (factor) değişkenlerinin de düzgün tanımlanıp tanımlanmadığı incelenmelidir.
13.1 Dağınık veri
Sütunlarda program, kadın ve erkek isimleri olan dağınık bir veri seti üzerinden veri düzenlemesinin temel aşamalarını gerçekleştirelim:
Program | Kadın | Erkek |
---|---|---|
Olcme | 6 | 6 |
Program | 5 | 5 |
Yonetim | 7 | 8 |
PDR | 5 | 3 |
Bir veri setindeki gözlem, değişken ve değişken değerlerinin ne olduğu öncelikle belirlenmelidir. Örnekteki veri setinde her bir programda yer alan öğrencilerin cinsiyeti gözlem; program, cinsiyet, frekans ise değişkenleri oluşturmalıdır. Program: Olcme, Program, Yonetim, PDR; Cinsiyet: Kadın, Erkek ten oluşmalı ve bunların degişken değeri olması gerekiyor, örnekteki gibi sütun başlığı değil. Frekansların ise iki sütuna dağıldığı görülmektedir.
13.2 Düzgün Veri
Yukarıdaki örnekte verilen dağınık verinin olması gereken düzgün veri hali aşağıda yer almaktadır.
Program | Cinsiyet | Frekans |
---|---|---|
Olcme | Kadın | 6 |
Olcme | Erkek | 6 |
Program | Kadın | 5 |
Program | Erkek | 5 |
Yonetim | Kadın | 7 |
Yonetim | Erkek | 8 |
PDR | Kadın | 5 |
PDR | Erkek | 3 |
Düzgün veri seti incelendiğinde, değişkenlerin sütunlarda, gözlemlerin satırlarda olduğu görülmektedir. Bu veri setinde program, cinsiyet ve frekans olmak üzere üç farklı değişken bulunmaktadır. Değişken adları mümkün olduğunca örnekte olduğu gibi anlamlı olmalıdır.
Aslında çok sayıda satırı anlamlandırmak, çok sayıda sütunu anlamlandırmaktan daha kolaydır. Verinin bu şekilde düzenlenmesi dplyr, ggplot2, plotly, lattice gibi paketleri rahat kullanabilmek için oldukça önemlidir. Hiyerarşik ve karma modeller için de verinin düzgün olması gerekmektedir. Ayrıca düzgün bir veri seti, eksik değerler ve dengesiz tekrarlanan ölçüm verileriyle ilgili daha az sorun sağlar.
tidyr, reshape vb. paketler ve bu paketlerde yer alan fonksiyonlar veri düzenlemede kullanılabilir.
Aslında çok sayıda satırı anlamlandırmak, çok sayıda sütunu anlamlandırmaktan daha kolaydır. Verinin bu şekilde düzenlenmesi dplyr, ggplot2, plotly, lattice gibi paketleri rahat kullanabilmek için oldukça önemlidir. Hiyerarşik ve karma modeller için de verinin düzgün olması gerekmektedir. Ayrıca düzgün bir veri seti, eksik değerler ve dengesiz tekrarlanan ölçüm verileriyle ilgili daha az sorun sağlar.
13.3 gather()
gather()
fonksiyonu bir dizi sütun alır ve onları iki yeni sütuna (kendi adını verebileceğin) dönüştürür.
Fonksiyonun kullanım şekli;
gather(data, key, value, ..., na.rm = FALSE,
convert = FALSE, factor_key = FALSE)
- A key: Orijinal sütun adlarını saklayan bir anahtar.
- A value: Bu orijinal sütunlardaki değerlere sahip bir değer.
Fonksiyonun kullanımını göstermek için örnek bir veri seti üzerinde çalışalım.
library(tuev)
data(PISA_OGR_2018)
midiPISA <- PISA_OGR_2018 %>%
select(OGRENCIID,SINIF,CINSIYET,
Anne_Egitim,Baba_Egitim,OKUMA_ZEVK,
ST097Q01TA:ST097Q05TA,ODOKUMA1:ODOKUMA5)
genisveri<- midiPISA %>% select(OGRENCIID,ODOKUMA1:ODOKUMA5) #belli değişkenlerin seçilmesi
genisveri %>% head(6) # verinin ilk 6 satırının görüntülenmesi
OGRENCIID | ODOKUMA1 | ODOKUMA2 | ODOKUMA3 | ODOKUMA4 | ODOKUMA5 |
---|---|---|---|---|---|
79200768 | 376.022 | 417.746 | 420.630 | 413.837 | 434.434 |
79201064 | 512.316 | 473.229 | 563.902 | 485.396 | 500.394 |
79201118 | 396.383 | 413.859 | 423.121 | 452.124 | 392.434 |
79201275 | 393.006 | 428.757 | 364.850 | 382.522 | 378.563 |
79201481 | 552.457 | 570.109 | 562.955 | 530.835 | 532.487 |
79201556 | 441.286 | 415.682 | 406.586 | 437.001 | 473.036 |
Elde edilen çıktıda öğrenci ıd ve beş okuma olası değerinin yer aldığı toplam altı değişkenden yer alan veri seti görüntülenmektedir. Bu değişkenler sütunlarda yer almaktadır. gather()
fonksiyonu geniş veriyi, uzun veri haline getirir.
uzun <- genisveri %>% gather(O_OD,okumapuan,ODOKUMA1:ODOKUMA5)
uzun %>% arrange(OGRENCIID) %>% head(10)
OGRENCIID | O_OD | okumapuan |
---|---|---|
79200001 | ODOKUMA1 | 449.876 |
79200001 | ODOKUMA2 | 457.572 |
79200001 | ODOKUMA3 | 413.428 |
79200001 | ODOKUMA4 | 430.044 |
79200001 | ODOKUMA5 | 439.072 |
79200002 | ODOKUMA1 | 669.156 |
79200002 | ODOKUMA2 | 665.848 |
79200002 | ODOKUMA3 | 684.978 |
79200002 | ODOKUMA4 | 664.624 |
79200002 | ODOKUMA5 | 659.670 |
Çıktı incelendiğinde, oluşan veride ODOKUMA1, ODOKUMA2, ODOKUMA3, ODOKUMA4 ve ODOKUMA5 okumapuanı değişkeninin değerleri hâline gelmiştir. Çıktıda görüldüğü gibi, şimdi ID dışında iki sütunumuz var: Biri kategorik diğeri sayısal değerleri içerir. Her katılımcı icin beş farklı okuma olası değeri olduğu için her bir ID değeri beş kere tekrarlanmaktadır. Burada veri setinin ilk on satırı görüntülendiğinden sadece 79200001 ve 79200002 id numaralı öğrenciler görüntülenmektedir.
13.4 spread()
-
spread()
fonksiyonu uzun veriden tekrar geniş veri olusturmaya yarar.gather()
fonksiyonunun tersi olan işlevi yapar
tekrar_genis <- uzun %>% spread(O_OD,okumapuan) # geniş veri oluşturulması
tekrar_genis %>% head(6) # ilk altı satırın görüntülenmesi
OGRENCIID | ODOKUMA1 | ODOKUMA2 | ODOKUMA3 | ODOKUMA4 | ODOKUMA5 |
---|---|---|---|---|---|
79200001 | 449.876 | 457.572 | 413.428 | 430.044 | 439.072 |
79200002 | 669.156 | 665.848 | 684.978 | 664.624 | 659.670 |
79200003 | 451.875 | 502.208 | 443.832 | 456.082 | 436.965 |
79200004 | 346.944 | 317.129 | 339.054 | 325.048 | 367.116 |
79200005 | 466.959 | 497.879 | 415.394 | 470.793 | 446.268 |
79200006 | 366.303 | 364.383 | 384.399 | 420.318 | 351.426 |
Öğrenci id değişkeni ile birlikte okuma puanlarının isimlerinin ve değerlerinin yer aldığı iki sütundan oluşan (id hariç) uzun veri seti, beş olası değerinin de ayrı birer sütun olarak yer aldığı toplam beş sütundan(id hariç) oluşan geniş veri setine dönüştürülmüştür.
13.5 pivot_longer() ve pivot_wider()
Verilerin girilme şekli genellikle geniş ve uzun olmak üzere iki formattan oluşur. Geniş formatta veriler, bir gözlemin özellikleri veya yanıtlar tek bir satırda verilir. Genellikle veriler bu şekilde girilmesine rağmen geniş format her zaman kullanışlı olmayabilir. Geniş verinin uzun veriye dönüştürülmesini gather()
ve uzun verinin geniş veriye dönüşütürülmesini spread()
fonksiyonu ile gerçekleştirdik. Ancak bahsedilen iki fonksiyona alternatif yeni fonksiyonlar üretilmiştir. Bu bölümde bu iki fonksiyon açıklanacaktır.
midiPISA verisetinden daha az değişken içerecek şekilde bir geniş veri seti örneği oluşturalım.
genisveri <- midiPISA %>% select(OGRENCIID,ODOKUMA1:ODOKUMA5) #belli değişkenlerin seçilmesi
genisveri %>% head(6) # verinin ilk 6 satırının görüntülenmesi
OGRENCIID | ODOKUMA1 | ODOKUMA2 | ODOKUMA3 | ODOKUMA4 | ODOKUMA5 |
---|---|---|---|---|---|
79200768 | 376.022 | 417.746 | 420.630 | 413.837 | 434.434 |
79201064 | 512.316 | 473.229 | 563.902 | 485.396 | 500.394 |
79201118 | 396.383 | 413.859 | 423.121 | 452.124 | 392.434 |
79201275 | 393.006 | 428.757 | 364.850 | 382.522 | 378.563 |
79201481 | 552.457 | 570.109 | 562.955 | 530.835 | 532.487 |
79201556 | 441.286 | 415.682 | 406.586 | 437.001 | 473.036 |
Elde edilen çıktıda öğrenci ıd ve beş okuma olası değerinin yer aldığı toplam altı değişkenden yer alan veri seti görüntülenmektedir. Bu değişkenler sütunlarda yer almakta olup geniş veri formatındadır. pivot_longer
fonksiyonu geniş veriyi, uzun veri haline getirir.
uzun <- genisveri %>% pivot_longer(names_to="okumapuan",values_to="deger",cols=ODOKUMA1:ODOKUMA5)
uzun %>% head(5)
OGRENCIID | okumapuan | deger |
---|---|---|
79200768 | ODOKUMA1 | 376.022 |
79200768 | ODOKUMA2 | 417.746 |
79200768 | ODOKUMA3 | 420.630 |
79200768 | ODOKUMA4 | 413.837 |
79200768 | ODOKUMA5 | 434.434 |
Çıktı incelendiğinde, oluşan veride ODOKUMA1, ODOKUMA2, ODOKUMA3, ODOKUMA4 ve ODOKUMA5 ayrı bir sütunun değerleri haline gelmiştir. Bu okuma puan türlerinin sütununun yer aldığı değişken names_to argümanı ile "okumapuan" olarak isimlendirilmiştir. Ayrıca values_to argümanı ise okuma puanı değerlerinin yer aldığı sütun isimlendirilmiştir. Çıktıda görüldüğü gibi, şimdi ID dışında iki sütunumuz var: Biri okuma puanı türü için, diğeri okuma puanı türleri için. Her katılımcı icin beş farklı okuma olası değeri olduğu için her bir ID değeri beş kere tekrarlanmaktadır. Burada veri setinin ilk beş satırı görüntülendiğinden sadece 792200768 id numaralı öğrencinin değerleri görüntülenmektedir.
Bir veri setini daha iyi yorumlayabilmek amacıyla uzun veri formatından geniş veri formatına dönüştürülür. Genellikle bir gözlem için değerlerin birden çok satırda yer aldığı durumlarda tercih edilir. Bunun için pivot_wider()
fonksiyonu kullanılır.
genis<- uzun %>% pivot_wider(names_from="okumapuan",values_from="deger")
genis %>% head(5)
OGRENCIID | ODOKUMA1 | ODOKUMA2 | ODOKUMA3 | ODOKUMA4 | ODOKUMA5 |
---|---|---|---|---|---|
79200768 | 376.022 | 417.746 | 420.630 | 413.837 | 434.434 |
79201064 | 512.316 | 473.229 | 563.902 | 485.396 | 500.394 |
79201118 | 396.383 | 413.859 | 423.121 | 452.124 | 392.434 |
79201275 | 393.006 | 428.757 | 364.850 | 382.522 | 378.563 |
79201481 | 552.457 | 570.109 | 562.955 | 530.835 | 532.487 |
13.6 separate()
separate()
fonksiyonu bir sütunu birden çok sütuna ayırır. Değerlerin sütun adlarına gömüldüğü toplanmış verilerde ortaktır. Oluşan veride okuma puanı değerlerinin karakter ve sayısal değerlerini ayırmak için separate()
fonkisyonu kullanılabilir.
uzun_v1 <- uzun %>% separate(okumapuan, c("OD","Sayi"),"MA") # bir sütunu iki sütuna ayırma
uzun_v1 %>% head(3) #ilk üç satırın görüntülenmesi
OGRENCIID | OD | Sayi | deger |
---|---|---|---|
79200768 | ODOKU | 1 | 376.022 |
79200768 | ODOKU | 2 | 417.746 |
79200768 | ODOKU | 3 | 420.630 |
Elde edilen çıktıya göre, okuma puanı olası değerlerinin yer aldığı sütun ikiye ayrılarak OD sütunu ve sayı sütunundan oluşmaktadır. Çıktının ilk üç satırı görüntülendiği için tek bir öğrenciye ait üç olası değerler yer almaktadır.
13.7 unite()
separate()
fonksiyonunun tam tersi olarak iki sütunu alıp tek sütunda birleştirir.
uzun_birles <- uzun_v1 %>% unite(ODOKUMA, OD, Sayi, sep = "_") # sütun birleştirmenin yapılması
uzun_birles %>% head(3) # ilk üç satırın görüntülenmesi
OGRENCIID | ODOKUMA | deger |
---|---|---|
79200768 | ODOKU_1 | 376.022 |
79200768 | ODOKU_2 | 417.746 |
79200768 | ODOKU_3 | 420.630 |
Elde edilen çıktı incelendiğinde, öğrenci id değişkeni hariç iki sütunun olduğu görülmektedir. ODOKUMA sütunu, okuma puanlarının isimlerinden, değer ise okuma olası puanı değerlerinden oluşmaktadır.
separate()
fonksiyonunun alternatifi extract()
ve unite()
fonksiyonunun ile yapılabilecek olan işlemler mutate()
fonksiyonu ile de yapılabilir.
Bu alternatiflerin uygunluğunun özel kullanım durumunuza ve verilerinizin niteliğine bağlı olduğunu unutmayın. Paketler zaman içinde yeni fonksiyonlara veya iyileştirmelere sahip olabileceğinden, en son güncellemeler için her zaman fonksiyon yardım sayfalarını kontrol etmenizi öneriyoruz.