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şlemeye devam ettik. Geçen haftaki derste 2.4. across() fonksiyonunda kalmıştık.

across()

Bir veri setinde aynı anda birden fazla sütuna aynı işlem uygulanmak istendiğinde dplyr paketi içindeki across() fonksiyonu sıklıkla kullanılmaktadır. Genellikle summarise() ve mutate() içinde kullanılarak işlemleri topluca yapmayı kolaylaştırır.

  • midiPISA verisinde okuma puanı olası değer 1 ve 2 sütunlarına ait ortalama değerleri across() fonksiyonu ile hesaplayalım.
midiPISA %>%
     summarise(across(.cols=c(ODOKUMA1,ODOKUMA2),.fns=mean, .names = "{col}_mean"))
  • Birden fazla istatistiksel bilgi hesaplanmak istendiğinde list() argümanı kullanılabilir. “OD” ile başlayan sütunlara ait ortalama ve standart sapma değerlerini hesaplayalım.
# Birden fazla sütun için ortalama ve standart sapma hesaplama
midiPISA %>%
  summarise(across(starts_with("OD"), list(mean = mean, sd = sd)))

summarise() ve across()

Kullanımdan kaldırılmış olan summarise_at(), summarise_if(), summarise_all() gibi fonksiyonların yerine artık summarise() ve across() fonksiyonşarının birlikte kullanılarak bu işlevlerin yerini getirildiğini öğrendik.

  • Örneğin; elimizdeki bir veri setinin sayısal (numeric) olan sütunlarının ortalamasını summarise_if() fonksiyonu ile hesaplayabiliriz. Bu hesaplama summarise() ve across() fonksiyonu ile şu şekilde yapılabilir:
# Sayısal değişkenlerin ortalama ve standart sapmalarını hesaplama
midiPISA %>%
  summarise(across(where(is.numeric), list(mean = mean, sd = sd), na.rm = TRUE))

top_n()

top_n() fonksiyonu, belirli bir değişkenin en yüksek veya en düşük değerlerine göre veri setinde seçim yapmamıza olanak tanır.

  • Örneğin, Okuma puanı en yüksek olan beş kız ve beş erkek öğrencinin bilgilerini bulmak için kullanılabilir.
# Her iki cinsiyet için en yüksek okuma puanına sahip ilk 5 öğrencinin bulunması
midiPISA %>%
  group_by(CINSIYET) %>%
  top_n(5, ODOKUMA1)

top_n() ve “-” operatörü

top_n() fonksiyonu, “-” ile birlikte kullanıldığında, veri setindeki en düşük ilgili özelliğe sahip öğrencilerin bilgilerini verir.

#  Her iki cinsiyet için en düşük okuma puanına sahip ilk 5 öğrencinin bulunması
midiPISA %>%
  group_by(CINSIYET) %>%
  top_n(-5, ODOKUMA1)

join()

join() fonksiyonları iki veri setini istenilen şekilde birleştirme amacıyla kullanılır. Her iki veri setini birleştirmek istediğimizde bu veri setlerinden hangi satır veya sütunları seçeceğimizi, satırların eşleşip eşleşmeyeceğini hangi değişkenlerle belirleneceğinin bilinmesi gerekmektedir. Bu nedenle de her bir amaca yönelik join fonksiyon türleri belirlenmiştir. Bunlar; left_join(), right_join(), full_join(), inner_join(), semi_join(), anti_join() fonksiyonlarıdır.

  • left_join()

midiPISA1, midiPISA verisinden OGRENCIID, CINSIYET ve ST097Q01TA, ST097Q02TA değişkenlerinin ve bu veri setinin ilk altı satırının seçilmesi ile oluşturulur.

midiPISA1 <- midiPISA %>% select(OGRENCIID,CINSIYET,ST097Q01TA,ST097Q02TA) #değişkenlerin seçimi
midiPISA1<-midiPISA1[1:6,] #veri setinin ilk 6 satırının seçilmesi
midiPISA1

midiPISA1 verisinin oluşturulmasından sonra midiPISA2 verisi oluşturulur. Öncelikle midiPISA verisinden öğrenci id, okumaktan zevk alma ve okuma olası değer1 puanları değişkenleri seçilir. Ardından bu veri setinin ilk yedi satırı seçilir ve üçüncü satır silinir. Sonuç olarak altı satırlık bir midiPISA2 veri seti elde edilmiş olur.

#değişkenlerin seçimi
midiPISA2<- midiPISA %>% select(OGRENCIID,OKUMA_ZEVK,ODOKUMA1) 
midiPISA2<-midiPISA2[1:7,] #veri setinin ilk 7 satırının seçilmesi
midiPISA2<-midiPISA2[-3,] #veri setinin 3. satırının çıkarılması
midiPISA2
midiPISA1%>% left_join(midiPISA2) #verileri birleştirme
  • inner_join()

A %>% inner_join(B) ile sadece A ve B nin eşleşen satırları birleştirilir. Yani hem A hem de B den gelen sütunları alır.

midiPISA1%>% inner_join(midiPISA2) # veri birleştirme
  • full_join()

A %>% full_join(B) ile A ve B veri setinde yer alan tüm satırları birleştirir. Hem A hem de B den gelen sütunları alır.

midiPISA1%>% full_join(midiPISA2) # veri birleştirme

full_join() fonksiyonu ile veri setleri doğrudan birleştirilmektedir. (kümelerdeki birleşim işlemi gibi).

gather() ve spread()

gather() fonksiyonu geniş veriyi, uzun veri haline getirir. spread() fonksiyonu uzun veriden tekrar geniş veri olusturmaya yarar. gather() fonksiyonunun tersi olan işlevi yapar.

(gather() fonksiyonu yeni tidy paketinde kalldırılmış, o nedenle burda hata verdi dosya)

{r}# 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

{r}# uzun <- genisveri %>% gather(O_OD,okumapuan,ODOKUMA1:ODOKUMA5) uzun %>% arrange(OGRENCIID) %>% head(10) # verinin ilk 10 satırının görüntülenmesi

pivot_longer() ve pivot_wider()

  • pivot_longer()

Bu fonksiyonlar gather() ve spread() fonksiyonlarına alternatif olarak üretilmmiştir. pivot_longer() fonksiyonu geniş veriyi, uzun veri haline getirir.

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

Elde edilen çıktıda öğrenci ıd ve beş okuma olası değerinin yer aldığı toplam altı değişkenin yer aldığı 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.

uzun2 <- genisveri %>% pivot_longer(names_to="okumapuan",values_to="deger",cols=ODOKUMA1:ODOKUMA5)
uzun2 %>% head(5)
  • pivot_wider()

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<- uzun2 %>% pivot_wider(names_from="okumapuan",values_from="deger")
genis %>% head(5)

seperate()

separate() fonksiyonu, bir sütunu birden fazla sütuna ayırır. Bu özellik, değerlerin bir sütunda birleştirildiği durumlarda faydalıdır. Bu sayede karmaşık sütun değerlerini anlamlı parçalara ayırabiliriz.

uzun_v1 <- uzun2 %>% 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

unite()

separate() fonksiyonunun tam tersi olarak iki sütunu alıp tek sütunda birleştirir. Tanımlayıcı birleşik sütunlar oluşturur.

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