R’da başta shiny olmak üzere flexboard ve crosstalk paketleri dinamik tablo oluşturmada kullanılan paketlerden bazılarıdır. Bu çalışmada ise bir önceki çalışmadan farklı olarak crosstalk ve datatable paketleri birlikte kullanılarak adım adım uygulama üzerinde gösterilecektir. Önceki çalışmamızda oluşturulan dinamik tabloya ek olarak bu çalışmada aynı zamanda farklı formatlarda verinin indirilmesine ve yazdırılmasına imkan tanınmıştır. Bu tür çalışmaların bulut üzerinde de barındırılabilmesi ve html (web sayfası) olarak kaydedilebilmesi veri üzerinde zamandan ve mekandan bağımsız olarak çalışmamıza ve veri sunumları yapabilmemize imkan tanımaktadır.
Uygulamada R kod bloklarını R Studio arayüzünde yazdım. Çalışmada kullanılan veri seti TÜİK veri tabanından alınan 15 yaş üstü nüfusun yıllara ve illere göre dağılımını içermektedir. 15 yaş üstü nüfus, Adrese Dayalı Kayıt Sistemi (ADKS)’ne göre elde edilen verilerden oluşmakta olup, 2008-2019 dönemlerini kapsamaktadır.
Kısaca örnek uygulamada kullanılacak veri seti hakkında bilgi verdikten sonra R adım adım uygulamaya geçebiliriz. Öncelikle uygulamada kullanmak üzere oluşturduğum veri seti xlsx uzantılı olarak aşağıda verilmiştir.
Gerekli kütüphanelerin yüklenmesi
Aşağıda uygulamada ihtiyacınız olacak kütüphanelerden fazlasını verdim. Bunun nedeni bundan sonra da yapacağınız çalışmalarda sizlere fayda sağlayacak olmasıdır.
kütüphaneler<-c("reactable","crosstalk","dplyr","tibble","tidyr","ggplot2","formattable","ggthemes","DT","readr","readxl","ggpubr","formattable", "ggstance")
yükle<-sapply(kütüphaneler, require, character.only = TRUE)
yükle
Yukarıdaki R kod bloğu çalıştırıldıktan sonra kütüphanelerin yüklenme durumu gösteren aşağıdaki mantıksal operatörleri elde ederiz. Yani ilgili kütüphane yüklenmişse TRUE, yüklenmemişse FALSE sonucu göreceksiniz. Sonuçların tamamı TRUE geldiğine göre bütün kütüphaneleri yüklemiş olduk.
Eğer sonuç FALSE gelirse bu durum sizin daha önce bu paketleri kurmadığını göstermektedir. Onun için kolaylık sağlaması adına aşağıdaki R kod bloğunda yazılan kodu çalıştırarak bütün paketleri veya ilgili paketleri aynı anda kurabilirsiniz.
paketler<-c("reactable","crosstalk","dplyr","tibble","tidyr","ggplot2","formattable","ggthemes","readr","readxl","ggpubr","formattable","DT", "ggstance")
install.packages(paketler)
Veri setinin R ortamına yüklenmesi ve analize uygun hale getirilmesi
Burada ilk olarak veri seti okunmuş ardından tibble tablo düzenine alınmıştır. Ardından veri setindeki format geniş düzende olduğu için pivot_longer() fonksiyonu ile uzun formata dönüştürülmüştür. Yani önceki düzen (geniş format)’de “Toplam”, “Kadın” ve “Erkek” değişkenlerinin olduğu sütunlar yeni düzen (uzun format)’de Cinsiyet değişkeni altında toplanmıştır. Önceki düzendeki değişkenlerin değerleri ise Nüfus değişkeni altında toplanmıştır.
df<-read_excel("nufus.xlsx") %>% as_tibble() %>% pivot_longer(
cols = Toplam:Kadın,
names_to = "Cinsiyet",
values_to = "Nüfus"
) %>% mutate(Nüfus=format(Nüfus, big.mark=".", decimal.mark=","))#Nüfus değişkeni burada karakter formatında yani nominal olarak alınmıştır.
df
İlk 10 kaydın tablo formatında gösterilmesi
#ilk 10 kaydın tablo formatında gösterilmesi
df %>% head(10) %>% formattable()
Yukarıdaki R kod bloğunun çalıştırılmasından sonra veri setindeki ilk 10 gözlem tablo formatında aşağıda verilmiştir.
Veri setindeki değişkenlerin veri tipinin ve gözlem sayısının kontrol edilmesi
glimpse(df)
Yukarıdaki R kod bloğunun çalıştırılmasından sonra elde edilen sonuçlar aşağıda verilmiş olup, veri setinin 4 değişkenden ve 2916 gözlemden oluştuğu görülmektedir.
Observations: 2,916
Variables: 4
$ Yıl <dbl> 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 20...
$ İl <chr> "Adana", "Adana", "Adana", "Adıyaman", "Adıyaman", "Adıy...
$ Cinsiyet <chr> "Toplam", "Erkek", "Kadın", "Toplam", "Erkek", "Kadın", ...
$ Nüfus <chr> " 1.667.391", " 825.056", " 842.335", " 443.356", ...
Dinamik Tablo Oluşturma
Aşağıdaki R kod bloğunda filter_checkbox() fonksiyonu ile cinsiyet seçeneklerinin olduğu check list oluşturulmuştur. filter_select () fonksiyonu ile içerisinde illerin olduğu liste oluşturulmuştur. filter_slider() fonksiyonu ile ise yılların alt ve üst limitinin olduğu bir band oluşturulmuştur. datatable () fonksiyonu ile yukarıda oluşturulan fonksiyonlara duyarlı, filtreleme yapılabilen ve sayfadaki gözlem sayısının 20 (pageLength) olduğu bir tablo oluşturulmuştur. Aynı fonksiyon içerisinde indirilecek dosya eklentileriyle birlikte kopyalama ve yazdır özelliklerine yer verilmiştir. searchHighlight = TRUE bileşeni ise tablo üzerinde seçtiğiniz satır üzerinde vurgu yapmanızı sağlar.
n<-SharedData$new(df)
bscols(widths = c(3, 9),
list(
filter_checkbox("cinsiyet", "Cinsiyet", n, ~Cinsiyet, inline = F),
filter_select("il", "İli Seçiniz", n, ~İl, multiple = TRUE),
filter_slider("yil", "Yılı Seçiniz", n, ~Yıl, width = "100%")),
datatable(n, caption="15 Yaş Üstü Nüfusun İllere Göre Dağılımı", extensions = 'Buttons', options = list(dom = 'Bfrtip',searchHighlight = TRUE,pageLength = 20, paging = T, buttons = c('copy', 'csv', 'excel', 'pdf', 'print'))))
Yukarıdaki R kod bloğunu çalıştırılmasından sonra elde edilen görüntü png formatında aşağıda verilmiştir.
Yapılan bu çalışmayı RPubs üzerinde yayınlayabileceğiniz gibi localhost olarak da görüntüleyebilir ve ayrıca web sayfası olarak kaydedebilirsiniz.
RPubs üzerinde yayınladığım bu çalışmanın linkine aşağıdan ulaşabilirsiniz.
https://rpubs.com/tevfik1461/dinamiktablo2
Bir önceki çalışmaya ise aşağıdaki linkten erişebilirsiniz.
https://rpubs.com/tevfik1461/dinamiktablo
Eğer yapılan çalışmayı paylaşmak istemiyorsanız ve daha sonra kullanmak üzere web sayfası olarak kaydetmek (Save as Web Page) isterseniz R’da aşağıda ekran görüntüsünü verdiğim yerden bu işlemi yapabilirsiniz. Bu çalışmayı web sayfası olarak da kaydettim ancak sitem html dosya yüklenmesini desteklemediği için yüklemedim.
Yapılan bu çalışmanın özellikle veri bilimi (data science) ile ilgilenen akademi ve saha çalışanlarına önemli bir katkı sunacağı düşünülmektedir.
Faydalı olması ve farkındalık oluşturması dileğiyle.
Bilimle ve teknolojiyle kalınız.
Saygılarımla.
Not: Kaynak gösterilmeden alıntı yapılamaz veya kopyalanamaz.
Note: It can not be cited or copied without referencing.
Yararlanılan Kaynaklar
- http://www.tuik.gov.tr/PreTablo.do?alt_id=1059
- https://www.r-project.org/
- https://rstudio.cloud/
- https://rpubs.com/tevfik1461/dinamiktablo2
- https://rpubs.com/tevfik1461/dinamiktablo
- https://rstudio.github.io/DT/options.html
- https://cran.r-project.org/web/packages/crosstalk/index.html
- https://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.html
- https://cran.r-project.org/web/packages/data.table/index.html
- https://cran.r-project.org/web/packages/data.table/data.table.pdf
- http://163.25.93.92/shiny/DT.html