class: center, middle, inverse, title-slide # 💪 4005 R ile Büyük Veri Analitiği ##
📉 Veri Manipulasyonu_02 ###
👩🏫 Dr. Kübra ATALAY KABASAKAL
Hacettepe Üniversitesi ### 20/12/2021
📧
katalay@hacettepe.edu.tr
--- layout: true <div class="my-footer"> <span> - Dr. Kübra Atalay Kabasakal </span> </div> --- # Veriyi üst düzeyde toplama .huge[📊] .hand[İçerik...] - **count()** fonksiyonu -- - **grup_by()** ve **summarize()** -- - **summarize_all()** ve **summarize_if()** ve **summarize_at()** -- - **top_n()** --- ## count() fonksiyonu - **count()** fonkisyonu frekans tablosu oluşturmak için kullanılabilir. - **count()** fonksiyonunun pipe ile kullanımı ```r veri_seti %>% count(degisken_adı) ``` --- ## count() fonksiyonu ```r library(dplyr) data(PISA_STU_2018) PISA_STU_2018 %>% count() ``` ``` ## # A tibble: 1 x 1 ## n ## <int> ## 1 6890 ``` - Cinsiyete göre dağılım .huge[👦] .huge[👧] ```r PISA_STU_2018 %>% count(ST004D01T) ``` ``` ## # A tibble: 2 x 2 ## ST004D01T n ## <dbl+lbl> <int> ## 1 1 [Female] 3396 ## 2 2 [Male] 3494 ``` --- ## count() fonksiyonu - Cinsiyete göre dağılım - **sort** argümanı ile sıralanabilir. .huge[👦] .huge[👧] ```r PISA_STU_2018 %>% count(ST004D01T,sort=TRUE) ``` ``` ## # A tibble: 2 x 2 ## ST004D01T n ## <dbl+lbl> <int> ## 1 2 [Male] 3494 ## 2 1 [Female] 3396 ``` --- ## count() fonksiyonu - PISA_OGR_2018 öğrenci verisindeki değişken adlarının türkçeleştirilmiş halidir. - Bu veri setini kullanarak öğrencilerin göçmenlik durumları ve cinsiyetlere göre dağılımını inceleyelim. ```r PISA_OGR_2018 %>% count(CINSIYET,Gocmenlik) ``` ``` ## # A tibble: 8 x 3 ## CINSIYET Gocmenlik n ## <dbl+lbl> <dbl+lbl> <int> ## 1 1 [Kiz] 1 [Yerli] 3306 ## 2 1 [Kiz] 2 [İkinci Nesil] 17 ## 3 1 [Kiz] 3 [Birinci Nesil] 10 ## 4 1 [Kiz] NA 63 ## 5 2 [Erkek] 1 [Yerli] 3357 ## 6 2 [Erkek] 2 [İkinci Nesil] 20 ## 7 2 [Erkek] 3 [Birinci Nesil] 7 ## 8 2 [Erkek] NA 110 ``` ??? siz de bu işlemi sıralandırılmış olarak yapınız. --- ## count() fonksiyonu ```r PISA_OGR_2018 %>% count(SINIF, sort=TRUE) ``` ``` ## # A tibble: 6 x 2 ## SINIF n ## <dbl+lbl> <int> ## 1 10 [SINIF 10] 5360 ## 2 9 [SINIF 9] 1295 ## 3 11 [SINIF 11] 207 ## 4 8 [SINIF 8] 19 ## 5 12 [SINIF 12] 6 ## 6 7 [SINIF 7] 3 ``` ??? siz de SINIF ve CINSIYET e göre dağılımı bulunuz? --- ## count() fonksiyonu - Gruplandırılmış veride bellirli bir değişkene ilişkin toplam almak istiyorsanız **count()** fonksiyonunun **wt()** argümanını kullanabilirsiniz. ```r PISA_OGR_2018 %>% count(OKUL_TUR, wt=SES, sort=TRUE) ``` ``` ## # A tibble: 39 x 2 ## OKUL_TUR n ## <chr+lbl> <dbl> ## 1 TUR0318 [Anadolu Imam Hatip Lisesi - A] 8.71 ## 2 TUR0108 [Anadolu Lisesi - A] -0.522 ## 3 TUR0305 [Sosyal Bilimler Lisesi - A] -15.9 ## 4 TUR0302 [Fen Lisesi - A] -16.4 ## 5 TUR0303 [Fen Lisesi - B] -34.0 ## 6 TUR0304 [Fen Lisesi - C] -34.2 ## 7 TUR0326 [Anadolu Guzel Sanatlar Lisesi] -38.2 ## 8 TUR0301 [Ortaokul] -49.4 ## 9 TUR0306 [Sosyal Bilimler Lisesi - B] -65.7 ## 10 TUR0307 [Sosyal Bilimler Lisesi - C] -77.0 ## # ... with 29 more rows ``` --- ## summarize() fonksiyonları - **summarize()** seçilen sütunlar için her satırı kullanarak istatistikler hesaplar. - kaç satır olduğu - ortalamanın ne olduğu - toplamın ne olduğu - minumum ve maksimum değerlerin ne olduğu gibi.. --- ## summarize() fonksiyonları - Tek satırlık veri setini özetleyerek yeni bir veri seti oluşturan fonksiyondur. - **min(x)** x vektöründeki minumum değer - **max(x)** x vektöründeki maksimum değer - **mean(x)** x vektöründeki ortalama değer - **median(x)** x vektöründeki ortanca değer - **quantile(x, p)** x vektöründeki q. yuzdelik - **sd(x)** x vektöründeki standart sapma - **var(x)** x vektöründeki varyans - **diff(range(x))** x vektöründeki değiskenlik - **first(x)** x vektöründeki ilk eleman - **last(x)** x vektöründeki son eleman - **nth(x, n)** x vektöründeki n. eleman - **n()** x vektöründeki eleman sayısı - **n_distinct(x)** x vektöründeki farklı değerlerin sayısı --- .pull-left[ ## summarize() - PISA veri setindeki başarısı için hesaplanan 10 olası puan değerinden (plausible value) ilki kullanılmıştır. ```r PISA_OGR_2018 %>% summarise(mean(ODOKUMA1)) ``` ``` ## # A tibble: 1 x 1 ## `mean(ODOKUMA1)` ## <dbl> ## 1 464. ``` ] -- .pull-right[ ## isimlendirme - **summarise()** fonksiyonu içinde isimlendirme yapmazsanız, oluşan veri setinde isimlendirme fonksiyon adı/ları olacaktır. - isimlendirilmiş çıktı ```r PISA_OGR_2018 %>% summarise(ortalama=mean(ODOKUMA1)) ``` ``` ## # A tibble: 1 x 1 ## ortalama ## <dbl> ## 1 464. ``` ] --- ## summarize() - Özet bilgiler elde etmek için birden fazla özetleyici fonksiyon kullanabilirsiniz. ```r PISA_OGR_2018 %>% summarise(n = n(), ortalama=mean(ODOKUMA1), sd=sd(ODOKUMA1), min=min(ODOKUMA1), max=max(ODOKUMA1)) ``` ``` ## # A tibble: 1 x 5 ## n ortalama sd min max ## <int> <dbl> <dbl> <dbl> <dbl> ## 1 6890 464. 87.8 176. 772. ``` --- ## summarize() and group_by() - Özet bilgileri veri setinde yer alan alt gruplar için ise ayrı ayrı **group_by()** fonksiyonu ile hesaplayabilirsiniz. - **group_by()** dan sonra kullanılan fonksiyonlar her grup için hesaplanır. Fonksiyonu içinde sürekli değişken **kullanılmaz.** - Cinsiyete göre ODOKUMA1 puanlarına ilişkin istatistikler ```r PISA_OGR_2018 %>% group_by(CINSIYET) %>% summarise(n = n(),ortalama=mean(ODOKUMA1),sd=sd(ODOKUMA1),min=min(ODOKUMA1),max=max(ODOKUMA1)) ``` ``` ## # A tibble: 2 x 6 ## CINSIYET n ortalama sd min max ## <dbl+lbl> <int> <dbl> <dbl> <dbl> <dbl> ## 1 1 [Kiz] 3396 478. 83.7 236. 772. ## 2 2 [Erkek] 3494 451. 89.6 176. 747. ``` ??? siz de bu işlemi göçmenlik statüsüne göre yapınız. --- ## summarize() and group_by() - Özet bilgileri veri setinde yer alan birden fazla kategorik değişken içinde hesaplayabilirsiniz. - Öğrencilerin cinsiyet ve sınıf düzeylerine göre elde edilen betimsel istatistikleri ortalamaya göre sıralandırılmıştır. ```r betimsel <- PISA_OGR_2018 %>% group_by(CINSIYET,SINIF) %>% summarise(n = n(),ortalama=mean(ODOKUMA1),sd=sd(ODOKUMA1)) %>% arrange(desc(ortalama)) betimsel ``` ``` ## # A tibble: 12 x 5 ## # Groups: CINSIYET [2] ## CINSIYET SINIF n ortalama sd ## <dbl+lbl> <dbl+lbl> <int> <dbl> <dbl> ## 1 1 [Kiz] 10 [SINIF 10] 2707 482. 79.9 ## 2 1 [Kiz] 11 [SINIF 11] 124 473. 85.0 ## 3 1 [Kiz] 9 [SINIF 9] 548 462. 96.9 ## 4 2 [Erkek] 10 [SINIF 10] 2653 459. 85.0 ## 5 2 [Erkek] 11 [SINIF 11] 83 448. 87.9 ## 6 2 [Erkek] 9 [SINIF 9] 747 422. 98.7 ## 7 1 [Kiz] 12 [SINIF 12] 5 422. 96.6 ## 8 2 [Erkek] 8 [SINIF 8] 8 363. 82.8 ## 9 1 [Kiz] 8 [SINIF 8] 11 356. 62.5 ## 10 1 [Kiz] 7 [SINIF 7] 1 344. NA ## 11 2 [Erkek] 7 [SINIF 7] 2 330. 62.1 ## 12 2 [Erkek] 12 [SINIF 12] 1 322. NA ``` --- ## summarize() and group_by() - **group_by()** fonksiyonu ile elde ettiğiniz çıktılarda aşağıdaki gibi gruplandırılmış veri **Groups** çıktısı ile alınır. ```r # A tibble: 12 x 5 # Groups: CINSIYET [2] ``` --- ## summarize() and group_by() - Gruplandırılmış elde edilen veri setlerinde tekrar işlem yapmak istiyorsanız bunu **ungroup()** fonksiyonu ile yapabilirsiniz. ```r PISA_OGR_2018 %>% group_by(CINSIYET,SINIF) %>% summarise(n = n(),ortalama=mean(ODOKUMA1),sd=sd(ODOKUMA1)) %>% arrange(desc(ortalama)) %>% ungroup() ``` ``` ## # A tibble: 12 x 5 ## CINSIYET SINIF n ortalama sd ## <dbl+lbl> <dbl+lbl> <int> <dbl> <dbl> ## 1 1 [Kiz] 10 [SINIF 10] 2707 482. 79.9 ## 2 1 [Kiz] 11 [SINIF 11] 124 473. 85.0 ## 3 1 [Kiz] 9 [SINIF 9] 548 462. 96.9 ## 4 2 [Erkek] 10 [SINIF 10] 2653 459. 85.0 ## 5 2 [Erkek] 11 [SINIF 11] 83 448. 87.9 ## 6 2 [Erkek] 9 [SINIF 9] 747 422. 98.7 ## 7 1 [Kiz] 12 [SINIF 12] 5 422. 96.6 ## 8 2 [Erkek] 8 [SINIF 8] 8 363. 82.8 ## 9 1 [Kiz] 8 [SINIF 8] 11 356. 62.5 ## 10 1 [Kiz] 7 [SINIF 7] 1 344. NA ## 11 2 [Erkek] 7 [SINIF 7] 2 330. 62.1 ## 12 2 [Erkek] 12 [SINIF 12] 1 322. NA ``` --- ## summarize_at() - dplyr paket fonksiyonlarının **_at** **_if** **_all** uzantılı varyasyonları bulunmaktadır. - Sadece bir grup sütunun ortalamasını ve standart sapmasını hesaplamanız gerektiğinde **summarize_at()** fonksiyonunu kullanabilirsiniz. --- ## summarize_at() - **summarize_at()** fonksiyonu ile secilecek 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. ```r # adlandırmaya dikkat edin! PISA_OGR_2018 %>% summarize_at(vars(ODOKUMA1, ODFEN1), list(~mean(.), ~sd(.))) ``` ``` ## # A tibble: 1 x 4 ## ODOKUMA1_mean ODFEN1_mean ODOKUMA1_sd ODFEN1_sd ## <dbl> <dbl> <dbl> <dbl> ## 1 464. 467. 87.8 83.1 ``` --- ## summarize_all() ve summarize_if() - Elinizde tüm sütunları sayısal (numeric) olan bir veriseti olsun. Tum sütunların ortalamasını **summarize_all()** fonksiyonu ile hesaplayabilirsiniz. ```r veriseti %>% summarize_all(funs(mean, sd)) ``` - Elinizdeki bir veri setinin sayısal (numeric) olan sütunlarının ortalamasını **summarize_if()** fonksiyonu ile hesaplayabilirsiniz. ```r PISA_OGR_2018 %>% summarize_if(is.numeric, funs(mean, sd)) ``` ``` ## # A tibble: 1 x 1,322 ## OKULID_mean OGRENCIID_mean KITAPCIK_mean SINIF_mean DOGUMAY_mean CINSIYET_mean ## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 79200096. 79203623. 14.0 9.84 6.15 1.51 ## # ... with 1,316 more variables: ANNE_OKUL_mean <dbl>, ## # ANNE_LISANSUSTU_mean <dbl>, ANNE_LISANS_mean <dbl>, ## # ANNE_ONLISANS_mean <dbl>, BABA_OKUL_mean <dbl>, BABA_LISANSUSTU_mean <dbl>, ## # BABA_LISANS_mean <dbl>, BABA_ONLISANS_mean <dbl>, OLANAK_MASA_mean <dbl>, ## # OLANAK_ODA_mean <dbl>, OLANAK_SESSIZYER_mean <dbl>, ## # OLANAK_BILGISAYAR_mean <dbl>, OLANAK_YAZILIM_mean <dbl>, ## # OLANAK_INTERNET_mean <dbl>, OLANAK_KLASIKKITAP_mean <dbl>, ... ``` --- ## top_n() - **top_n()** fonksiyonu ile istediğiniz bir değişkenin **en yüksek** ya da **en düşük** değerlerine göre verisetinde seçim yapılabilir. ```r df <- data.frame(x = c(10, 4, 1, 6, 3, 1, 1)) df %>% top_n(2) ``` ``` ## Selecting by x ``` ``` ## x ## 1 10 ## 2 6 ``` --- ## top_n() - Okuma puanı **en yuksek** olan beş kız ve beş erkek öğrencinin bilgileri ```r PISA_OGR_2018 %>% select(CINSIYET,ODOKUMA1)%>% arrange(desc(ODOKUMA1))%>% group_by(CINSIYET) %>% top_n(5,ODOKUMA1) ``` ``` ## # A tibble: 10 x 2 ## # Groups: CINSIYET [2] ## CINSIYET ODOKUMA1 ## <dbl+lbl> <dbl> ## 1 1 [Kiz] 772. ## 2 1 [Kiz] 748. ## 3 2 [Erkek] 747. ## 4 1 [Kiz] 743. ## 5 2 [Erkek] 737. ## 6 1 [Kiz] 719. ## 7 1 [Kiz] 715. ## 8 2 [Erkek] 714. ## 9 2 [Erkek] 713. ## 10 2 [Erkek] 707. ``` --- --- ## top_n() & - operatoru - Okuma puanı **en düşük** olan beş kız ve beş erkek öğrencinin bilgileri ```r PISA_OGR_2018 %>% select(CINSIYET,ODOKUMA1)%>% arrange(desc(ODOKUMA1))%>% group_by(CINSIYET) %>% top_n(-5,ODOKUMA1) ``` ``` ## # A tibble: 10 x 2 ## # Groups: CINSIYET [2] ## CINSIYET ODOKUMA1 ## <dbl+lbl> <dbl> ## 1 1 [Kiz] 254. ## 2 1 [Kiz] 253. ## 3 1 [Kiz] 250. ## 4 1 [Kiz] 242. ## 5 1 [Kiz] 236. ## 6 2 [Erkek] 220. ## 7 2 [Erkek] 211. ## 8 2 [Erkek] 199. ## 9 2 [Erkek] 177. ## 10 2 [Erkek] 176. ``` --- ## DataEditR paketi Bu paketi paketin [github sayfasindan](https://github.com/DillonHammill/DataEditR) inceleyelim. --- .hand-large[teşekkürler !] -- .large[🍵] molası