Bölüm 2 Veri Düzenleme II
Veri düzenlemenin diğer bir aşaması ise veriyi üst düzeyde toplama işlemleridir. Bu işlemlerden en sık kullanılanlar; count(), grup_by(), summarise(), summarise_all(), summarise_if(), summarise_at(),across(), top_n() fonksiyonlarıdır. Yine bu fonksiyonlar dplyr paketi içerisinde yer almakatadır. Sırasıyla örneklerle bu fonksiyonları inceleyelim.
2.1 count() fonksiyonu
count() fonksiyonu frekans tablosu oluşturmak için kullanılmaktadır. Yine pipe operatörü ile birlikte sıklıkla kullanılmaktadır.
count()fonksiyonunun pipe ile kullanımı:
Görüldüğü üzere fonksiyonun içine değişken ismini yazmak yeterlidir. Örnek veri seti üzerinden fonksiyonun kullanımını inceleyelim.
## # A tibble: 1 × 1
## n
## <int>
## 1 6890
Elde edilen çıktıya göre midiPSA verisinde 6890(n) gözlem olduğu görülmektedir. Fakat sadece tek bir değişkene göre dağılım incelenmek istenirse fonksiyonun içine değişken ismi yazılmalıdır.
## # A tibble: 2 × 2
## CINSIYET n
## <dbl> <int>
## 1 1 3396
## 2 2 3494
Çıktıda cinsiyet değişkenine göre frekans tablosu yer almaktadır. Kız(1) öğrencilerin sayısı 3396, erkek öğrencilerin sayısı 3494 olduğu görülmektedir. Ayrıca cinsiyete göre dağılımlar sıralanmak istenebilir. Bu durumda sort argümanı ile kullanılabilir.
## # A tibble: 2 × 2
## CINSIYET n
## <dbl> <int>
## 1 2 3494
## 2 1 3396
Elde edilen çıktıda sort argümanı yardımıyla frekans tablosundaki değerlerin sıralandığı görülmektedir. Şimdi bu veri setini kullanarak öğrencilerin SINIF ve CINSIYET değişkenlerine göre dağılımını sıralama argümanını kullanarak inceleyelim.
# CINSIYET ve SINIF değişkenlerine göre dağılımın sıralanması
midiPISA %>% count(CINSIYET,SINIF, sort=TRUE) ## # A tibble: 12 × 3
## CINSIYET SINIF n
## <dbl> <dbl> <int>
## 1 1 10 2707
## 2 2 10 2653
## 3 2 9 747
## 4 1 9 548
## 5 1 11 124
## 6 2 11 83
## 7 1 8 11
## 8 2 8 8
## 9 1 12 5
## 10 2 7 2
## 11 1 7 1
## 12 2 12 1
Elde edilen çıktıda sınıf düzeyi (SINIF), cinsiyet (CINSIYET) ve frekansların (n) yer aldığı üç sütunun olduğu görülmektedir. “sort=TRUE” yardımıyla n sütunundaki değerler büyükten küçüğe sıralanarak verilmiştir. CINSIYET değişkeni iki kategori, SINIF değişkeni altı kategoriden oluştuğundan toplam 12 satır yer almaktadır. Frekansı en yüksek olan grup (n=2707) 10. sınıfa ait kız öğrencilerdir(1).
2.2 summarise()/summarize()
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.
midiPISA veri setinde yer alan okuma başarısı için hesaplanan olası puan değerlerinden (plausible value) ilki kullanılmıştır. Burada okuma puanlarının ortalaması hesaplanabilir.
## # A tibble: 1 × 1
## `mean(ODOKUMA1)`
## <dbl>
## 1 464.
midiPISA verisinde yer alan okumapuanı1 değerlerinin ortalaması 464.23 bulunmuştur. Görüldüğü üzere summarise() fonksiyonu içinde isimlendirme yapılamaz, oluşan veri setinde isimlendirme yapmak için:
# ortalamanın "ortalama" sütun ismi ile hesaplanması
midiPISA %>%
summarise(ortalama=mean(ODOKUMA1)) ## # A tibble: 1 × 1
## ortalama
## <dbl>
## 1 464.
Genellikle bir veri setinde özet bilgiler elde etmek için birden fazla özetleyici fonksiyon kullanılmak istenebilir. Ö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))## # A tibble: 1 × 5
## n ortalama sd min max
## <int> <dbl> <dbl> <dbl> <dbl>
## 1 6890 464. 87.8 176. 772.
Elde edilen çıktıda sırasıyla, frekans(n), ortalama(mean), standart sapma(sd), minimum (min) ve maksimum (max) değerleri yer almaktadır.
2.3 summarise() ve group_by()
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.
- CINSIYET değişkenine göre ODOKUMA1 puanlarına ilişkin özetleyici istatistikler:
midiPISA %>%
group_by(CINSIYET) %>%
summarise(n = n(),ortalama=mean(ODOKUMA1),sd=sd(ODOKUMA1),min=min(ODOKUMA1),max=max(ODOKUMA1)) ## # A tibble: 2 × 6
## CINSIYET n ortalama sd min max
## <dbl> <int> <dbl> <dbl> <dbl> <dbl>
## 1 1 3396 478. 83.7 236. 772.
## 2 2 3494 451. 89.6 176. 747.
Elde edilen çıktıda, CINSIYET değişkenine göre gruplandırma yapılarak kız ve erkekler için frekans, ortalama, standart sapma, minimum ve maksimum değerler hesaplanmıştır.
Özetleyici istatistiksel bilgiler, veri setinde yer alan birden fazla kategorik değişken için de hesaplanabilir. Öğrencilerin cinsiyet ve sınıf düzeylerine göre elde edilen betimsel istatistikleri ortalamaya göre büyükten küçüğe sıralanmıştır. Yapılan bu işlem “betimsel” isimli nesneye atanmıştır.
betimsel <- midiPISA%>% # betimsel veri nesnesine atama
# 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))
head(betimsel)## # A tibble: 6 × 5
## # Groups: CINSIYET [2]
## CINSIYET SINIF n ortalama sd
## <dbl> <dbl> <int> <dbl> <dbl>
## 1 1 10 2707 482. 79.9
## 2 1 11 124 473. 85.0
## 3 1 9 548 462. 96.9
## 4 2 10 2653 459. 85.0
## 5 2 11 83 448. 87.9
## 6 2 9 747 422. 98.7
Çıktıda olduğu gibi veri seti SINIF ve CINSIYET değişkenlerine göre gruplandırılarak ortalama değerler büyükten küçüğe sıralı olacak şekilde elde edilmiştir. Örneğin en yüksek ortalamaya sahip (482.2971) olan erkek ve 10. sınıftan 2707 öğrenci vardır. group_by() fonksiyonu ile elde ettiğiniz çıktılarda aşağıdaki gibi gruplandırılmış veri Groups çıktısı ile alınır.
Gruplandırılmış elde edilen veri setlerinde tekrar işlem yapmak istenirse ungroup() fonksiyonu kullanılabilir.
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() ## # A tibble: 12 × 5
## CINSIYET SINIF n ortalama sd
## <dbl> <dbl> <int> <dbl> <dbl>
## 1 1 10 2707 482. 79.9
## 2 1 11 124 473. 85.0
## 3 1 9 548 462. 96.9
## 4 2 10 2653 459. 85.0
## 5 2 11 83 448. 87.9
## 6 2 9 747 422. 98.7
## 7 1 12 5 422. 96.6
## 8 2 8 8 363. 82.8
## 9 1 8 11 356. 62.5
## 10 1 7 1 344. NA
## 11 2 7 2 330. 62.1
## 12 2 12 1 322. NA
Gruplandırılmış veri setlerinde bazı fonksiyonlar çalışmayabileceği için, üretilen yeni veri seti başka amaçlarla kullanılacağında ungroup() fonksiyonu ile grupları birleştirmek gereklidir.
2.4 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. Bu fonksiyon veri düzenleme ile ilgili birçok temel fonksiyon içinde düzgün çalışabilmektedir. Fakat genellikle select(), mutate(), filter() veya summarise() içinde kullanılır.
cols = argümanına sütunlar ve .fns = argümanına uygulanacak fonksiyonlar atanır.
midiPISA verisinde okuma puanı olası değer 1 ve 2 sütunlarına ait ortalama değerleri across() fonksiyonu ile hesaplayalım.
## # A tibble: 1 × 2
## ODOKUMA1_mean ODOKUMA2_mean
## <dbl> <dbl>
## 1 464. 464.
ODOKUMA1 ve ODOKUMA2 sütunlarına ait ortalamalar hesaplanmış ve bu ortalama değerlerini veren sütunlar .names = “{col}_mean” ile isimlendirilmiştir.
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.
## # A tibble: 1 × 10
## ODOKUMA1_mean ODOKUMA1_sd ODOKUMA2_mean ODOKUMA2_sd ODOKUMA3_mean ODOKUMA3_sd
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 464. 87.8 464. 87.7 465. 87.1
## # ℹ 4 more variables: ODOKUMA4_mean <dbl>, ODOKUMA4_sd <dbl>,
## # ODOKUMA5_mean <dbl>, ODOKUMA5_sd <dbl>
2.5 summarise() ve across()
dplyr paket fonksiyonlarının **_at,_if,_all** uzantılı varyasyonları bulunmaktadır. Bunlardan biri olan summarise_at() fonksiyonunu bir grup sütunun ortalamasını ve standart sapmasını hesaplamak gerektiğinde kullanabilirsiniz. summarise_at() fonksiyonu ile seçilecek değişkenler vars() fonksiyonu içinde belirtilebilir. Bu işlem select() işlemi yerine geçmektedir. Hesaplama işlemlerini ise list() fonksiyonu içinde tanımlayabilirsiniz.
## # A tibble: 1 × 4
## ODOKUMA1_mean ODOKUMA2_mean ODOKUMA1_sd ODOKUMA2_sd
## <dbl> <dbl> <dbl> <dbl>
## 1 464. 464. 87.8 87.7
summarise_at() fonksiyonu kullanılmak istenildiğinde kullanımdan kaldırılmış olduğu (deprecated) uyarısı görünür. Bir fonksiyonun daha iyi bir alternatifi mevcut ise kullanımdan kaldırılabilir. Daha önce de bahsedilen across() fonksiyonu değişken seçmek için yukarıdaki örnekte vars() fonksiyonu yerine aşağıdaki şekilde kullanılabilir. Bu sayede summarise_at() fonksiyonu yerine summarise() fonksiyonu kullanılmış olur.
## # A tibble: 1 × 4
## ODOKUMA1_mean ODOKUMA1_sd ODOKUMA2_mean ODOKUMA2_sd
## <dbl> <dbl> <dbl> <dbl>
## 1 464. 87.8 464. 87.7
summarise()fonksiyonlarındansummarise_all ()fonksiyonu ile tüm sütunlara istenilen fonksiyon uygulanabilir. Ancak bu fonksiyon kullanımdan kaldırıldığı için bu işleminsummarise()veacross()fonksiyonu ile nasıl yapıldığı gösterilmiştir.
## # A tibble: 1 × 32
## OGRENCIID_mean OGRENCIID_sd SINIF_mean SINIF_sd CINSIYET_mean CINSIYET_sd
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 79203623. 2087. 9.84 0.458 1.51 0.500
## # ℹ 26 more variables: Anne_Egitim_mean <dbl>, Anne_Egitim_sd <dbl>,
## # Baba_Egitim_mean <dbl>, Baba_Egitim_sd <dbl>, OKUMA_ZEVK_mean <dbl>,
## # OKUMA_ZEVK_sd <dbl>, ST097Q01TA_mean <dbl>, ST097Q01TA_sd <dbl>,
## # ST097Q02TA_mean <dbl>, ST097Q02TA_sd <dbl>, ST097Q03TA_mean <dbl>,
## # ST097Q03TA_sd <dbl>, ST097Q04TA_mean <dbl>, ST097Q04TA_sd <dbl>,
## # ST097Q05TA_mean <dbl>, ST097Q05TA_sd <dbl>, ODOKUMA1_mean <dbl>,
## # ODOKUMA1_sd <dbl>, ODOKUMA2_mean <dbl>, ODOKUMA2_sd <dbl>, …
Çıktıda tüm değişkenlerin eksik veriler silinerek ortalamasının alındığı görülmektedir.
Elinizdeki bir veri setinin sayısal (numeric) olan sütunlarının ortalamasını summarise_if() fonksiyonu ile hesaplayabilirsiniz. Bu hesaplamanın summarise() ve across() fonksiyonu ile nasıl yapıldığı gösterilmiştir.
## # A tibble: 1 × 32
## OGRENCIID_mean OGRENCIID_sd SINIF_mean SINIF_sd CINSIYET_mean CINSIYET_sd
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 79203623. 2087. 9.84 0.458 1.51 0.500
## # ℹ 26 more variables: Anne_Egitim_mean <dbl>, Anne_Egitim_sd <dbl>,
## # Baba_Egitim_mean <dbl>, Baba_Egitim_sd <dbl>, OKUMA_ZEVK_mean <dbl>,
## # OKUMA_ZEVK_sd <dbl>, ST097Q01TA_mean <dbl>, ST097Q01TA_sd <dbl>,
## # ST097Q02TA_mean <dbl>, ST097Q02TA_sd <dbl>, ST097Q03TA_mean <dbl>,
## # ST097Q03TA_sd <dbl>, ST097Q04TA_mean <dbl>, ST097Q04TA_sd <dbl>,
## # ST097Q05TA_mean <dbl>, ST097Q05TA_sd <dbl>, ODOKUMA1_mean <dbl>,
## # ODOKUMA1_sd <dbl>, ODOKUMA2_mean <dbl>, ODOKUMA2_sd <dbl>, …
Mevcut kodunuzu _if, _at veya _all işlevleri yerine across() işlevini kullanacak şekilde güncellemek istiyorsanız summarise_at(), summarise_all() ve summarise_if() fonksiyonlarının yerini summarise() fonksiyonu içinde de kullanılabilen across() yardımcı fonksiyonunu kullanabilirsiniz.
2.6 top_n()
top_n()fonksiyonu ile istediğiniz bir değişkenin en yüksek ya da en düşük değerlerine göre veri setinde seçim yapılabilir.
## x
## 1 10
## 2 6
- Okuma puanı en yüksek olan beş kız ve beş erkek öğrencilerin bilgileri
midiPISA %>%
# CINSIYET ve okuma olası değer1 değişkenlerinin seçilmesi
select(CINSIYET,ODOKUMA1)%>%
# büyükten küçüğe okuma puanlarının sıralanması
arrange(desc(ODOKUMA1))%>%
# CINSIYET değişkenine göre verinin gruplandırılması
group_by(CINSIYET) %>%
# okuma puanına göre her kategoriye ait en yüksek 5'er öğrencinin görüntülenmesi
top_n(5,ODOKUMA1) ## # A tibble: 10 × 2
## # Groups: CINSIYET [2]
## CINSIYET ODOKUMA1
## <dbl> <dbl>
## 1 1 772.
## 2 1 748.
## 3 2 747.
## 4 1 743.
## 5 2 737.
## 6 1 719.
## 7 1 715.
## 8 2 714.
## 9 2 713.
## 10 2 707.
2.7 top_n() & - operatörü
top_n() fonksiyonu, “-” ile birlikte kullanıldığında, veri setindeki en düşük ilgili özelliğe sahip öğrencilerin bilgilerini verir. Örneğin, okuma puanı en düşük olan beş kız ve beş erkek öğrencinin bilgilerini elde edelim:
midiPISA %>%
select(CINSIYET,ODOKUMA1)%>%
arrange(desc(ODOKUMA1))%>%
group_by(CINSIYET) %>%
# okuma puanına göre her kategoriye ait en düşük 5'er öğrencinin görüntülenmesi
top_n(-5,ODOKUMA1) ## # A tibble: 10 × 2
## # Groups: CINSIYET [2]
## CINSIYET ODOKUMA1
## <dbl> <dbl>
## 1 1 254.
## 2 1 253.
## 3 1 250.
## 4 1 242.
## 5 1 236.
## 6 2 220.
## 7 2 211.
## 8 2 199.
## 9 2 177.
## 10 2 176.
Elde edilen çıktı incelendiğinde, okuma puanı en düşük 5 öğrenci hem erkek hem de kız öğrenciler olarak ayrı ayrı belirlenmiştir.
Bu bölümde veriyi bir üst düzeye toplama ile ilişki fonksiyonlara yer verilmiştir. Veri Düzenleme III bölümünde farklı veri setlerini birleştirme işlemlerine değinilecektir.