Shiny Uygulamalarına Giriş

Onlarca satır yazıp tablolar ve grafikler oluşturdunuz. Elinizdeki sonuçları başkaları ile paylaşmak istiyorsunuz. Ancak, paylaşmak istediğiniz insanlar bu R kodlarını nasıl kullanacağını veya parametreleri nasıl değiştirebileceğini bilmiyor. Tam da bu noktada, Shiny adını verdiğimiz web uygulamaları yardımınıza yetişiyor. Shiny, kullanıcı dostu arayüzlere sahip arayüzler tasarlamanıza olanak veren bir R paketi. Ve bu paket ile kullanıcıların kolaylıkla parametreleri değiştirip grafikler, tablolar veya analiz sonuçları oluşturabileceği web uygulamaları hazırlayabiliyorsunuz.

Shiny ile kod üzerinde değişiklik yapmadan; sadece belirlediğiniz butonlara basarak parametreleri değiştirebileceğiniz ve otomatik olarak görsellerin veya tabloların oluşturabileceği web uygulamalarını kolayca yazmak mümkün. Konu oldukça derin olduğu için öncelikle temelden başlayacağız.

Proje Oluşturma

Her ne kadar RStudio ile birlikte gelse de, Shiny uygulamaları tasarlamak için Shiny paketine ihtiyacımız var. Bunun için öncelikle paketimizi yükleyelim.

install.packages("shiny")

Paketi kurduktan sonra,  File / New File / Shiny Web App.. yolu ile ilk projemizi oluşturalım. Bu süreçte çıkan pencerede uygulamanıza koyacağınız adı belirleyebilirsiniz. 

Bir sonraki basamakta web uygulamanızın dosya tipine karar vermeniz gerekiyor.  Application Type seçeneğinde Shiny, kullanıcıların göreceği arayüzü (ui.R dosyası) ve arkaplanda çalışacak algoritmaları barındıran dosyayı (server.R dosyası) ayrı ayrı tutmak isteyip istemediğinizi soruyor. Ayrı tutmak isterseniz Multiple File seçeneğini seçebilirsiniz. Alternatif olarak bu iki dosyayı aynı dosya içinden de yönetmek isterseniz Single File (app.R) seçeneğini seçebilirsiniz. Kişisel olarak küçük uygulamalarda tek dosya üzerinde çalışmayı daha rahat buluyorum. Create dediğinizde ilk uygulamanızı oluşturacaktır.

Not: Dosya isimlerini olduğu gibi bırakın. Dosya isimleri varsayılan değerlerdir. Adlarını değiştirmeniz programınızın çalışmayacaktır.

İlk Uygulama ve Temiz Bir Başlangıç

Sayfa açıldığında, demo bir Shiny uygulaması otomatik olarak karşınıza gelecektir. Şimdilik kod içeriğini göz ardı edin ve sayfanın sağ üst tarafında yer alan  Run App butonuna basın.

Yeni bir pencere içinde ilk Shiny uygulamanızı çalıştırmış olacaksınız. Çubuğu kaydırarak yeni grafiğin oluşturulmasını test edebilirsiniz. Basit ama harika değil mi?

Şimdi kendi arayüzümüzü tasarlamaya başlayalım. Demo ile birlikte gelen kodlar ilk başta biraz karmaşık gelebilir. O yüzden onu tamamen silin. Onun yerine, her zaman kullanabileceğiniz temiz bir şablonu paylaşıyorum. İster ilk uygulamanız olsun, ister 1000. uygulamanız olsun, her defasında bu şablonu kullanabilirsiniz.

Temiz Şablon:
library(shiny)

ui <- fluidPage(# kullanıcıların göreceği arayüzdeki her şey burada yere alacak.)

server <- function(input, output) {# arayüzde görülen tüm nesneler burada tanımlanacak.}

shinyApp(ui = ui, server = server)

Shiny uygulamalarının her zaman iki tarafı var. Bunun birisi arayüzde göreceğiniz tüm nesneleri göreceğiniz user interface (ui) denilen kullanıcı arayüzü ve arayüzde göstereceğiniz bu nesnelere (grafik, tablo vs) ait hesaplamaların ve tanımlamaların yapılacağı server adı verilen kısım.

user interface (ui) içinde değiştirdiğiniz ve girdiğiniz değerler, server kısmında değerlendirilir/hesaplanır ardından tekrar ui içine gönderilip kullanıcıya sunulur.

Kullanıcı arayüzünde yer alan öğeleri ui <- fluidPage() ifadesi içine yazıyoruz. Bu öğeler, kullanıcı tarafından girilecek değerler (input) veya kullanıcıya gösterilecek (output) bir grafik olabilir.

Kullanıcı tarafından girilebilecek değerler, yazı, sayı, tarih veya bir dosya olabilir. Shiny, her bir tip input için size hazır widget’lar sunmakta. Örneğin, yazı girilmesini istediğiniz bir kutu koymak isterseniz textInput() fonksiyonunu koymanız yeterli oluyor. Eğer tarih girmek isterseniz dateInput(), çoktan seçimli menü koymak isterseniz selectInput() koyabilirsiniz. Bu şekilde onlarca seçenek var.

Her bir input ve output fonksiyonunun olmazsa olmazı bir id değeri bulunuyor. Bu id değeri uygulamanız içinde eşi olmamalı. Bu id değerlerinin kullanarak uygulama içinde atıf yapılıyor.

Uygulama

Daha fazla karmaşıklaştırmadan hemen uygulamaya dökelim. Boş bir sayfa içine bir slider yerleştirelim. Bunun için ui kısmı içine ilgili slider komutu olan sliderInput() komutunu yerleştirmemiz yeterli.

library(shiny)

ui <- fluidPage(
  sliderInput(inputId = "slider1","Slider 1",
              min = 0, max = 100, value = 10))

server <- function(input, output) {}

shinyApp(ui = ui, server = server)

Bu fonksiyona özgü olan max ve min parametreleri ile slider’ın hangi değerler arasında olacağını; value parametresi ile başlangıçta alacağı belirtiyoruz. Yukarıdaki kodu yazıp çalıştırdığınızda ilk Shiny uygulamanızı oluşturmuş olacaksınız.

Kullanıcı tarafından girilecek değişkenimizi girdik. Şimdi de uygulama çıktılarını yerleştirelim. Önce basit bir örnek olsun. Öyle ki, uygulama, slider ile girdiğimiz değerin karesini alarak bize göstersin. Bu durum artık hesaplama yapmamızı gerektiriyor. Bu sebeple server kısmına geçiş yapıyoruz.

Server kısmında hesaplamasını yapacağımız bir değeri, sonuç olarak sistemde göstermek istiyorsak output$deger_adi şeklinde tanımlıyoruz. Örneğin output$kare gibi..

library(shiny)

ui <- fluidPage(
  sliderInput(inputId = "slider1","Slider 1",
              min = 0, max = 100, value = 10))

server <- function(input, output) {
  output$kare <- reactive({ input$slider1^2 })
}

shinyApp(ui = ui, server = server)

Buradaki örnekte, kare adlı bir değişkeni tanımladık.  Bu değişkenin tanımını slider1 input değerinin karesini alacak şekilde belirledik. Şu ana kadar hazırladığınız R kodlarından farklı olarak, tanımladığınız nesne (kare), sabit bir değer olmadığı için (slider1 değeri değiştiğinde kare de güncelleneceği için) reactive({}) ifadesi içine tanımımızı yazdık. Bu amaçla reactive() veya render() gibi fonskiyonları kullanılabiliyor.

Yukarıdaki ifadeyi çalıştırdığımızda, muhtemelen sayfanızda kare ifadesini göremeyeceksiniz. Çünkü henüz kare nesnesini arayüz (ui) içinde nasıl göstereceğimizi belirtmedik. Bunun için textOutput() komutunu kullanacağız. Bu komut içindeki outputId parametresi ile hangi değişkeni çağırmak istediğimizi (örneğimizde kare oluyor) belirteceğiz.

library(shiny)

ui <- fluidPage(
  sliderInput(inputId = "slider1","Slider 1",
              min = 0, max = 100, value = 10),
  textOutput(outputId = "kare"))

server <- function(input, output) {
  output$kare <- reactive({ input$slider1^2 })
}

shinyApp(ui = ui, server = server)

Eğer yukarıdaki kodu çalıştırırsanız, ilk fonksiyonel shiny uygulamanızı yazmış olacaksınız. Elde edeceğiniz görüntü de şuna benzeyecektir.

Shiny içinde, farklı tipte çıktıları göstermek için farklı output komutları da bulunuyor. Tablo çıktısı isterseniz tableOutput() veya bir grafik çıktısını göstermek isterseniz plotOutput() kullanabilirsiniz. Bunlara da ilerideki yazılarda değineceğiz.


Bu yazıda, Shiny uygulamalarının mantığına giriş yapıp ilk uygulama denemesine başladık. Shiny, oldukça derin ve bir o kadar da esnek bir konu. Bu sebeple, tek bir yazı yeterli olmayacaktır. Gelecek yazılarda, Shiny ile ilgili daha ileri örneklere de yer vereceğiz.

Moleküler Biyolog ve Genetikçi.İstanbul Teknik Üniversitesi'nde doktora öğrencisi. 5 yıldır biyoinformatik ve yeni nesil dizileme üzerine çalışıyor. Genetik ve biyoinformatik üzerine Variant adlı blogda yazıyor.

Yorum bırakın:

Your email address will not be published.

Site Footer

Sliding Sidebar

Hakkımda

Hakkımda

Moleküler Biyolog ve Genetikçi. İstanbul Teknik Üniversitesi'nde doktora öğrencisi. 5 yıldır biyoinformatik ve yeni nesil dizileme üzerine çalışıyor.

Tweets

Please check your internet connection.