RStudio Shiny: Responzivni dizajn i reaktivni model programiranja u R
Dr Goran S. Milovanović,
Data Scientist, DiploFoundation
Programski jezik R polako ali sigurno postaje lingua franca savremene Data Science. Do pre samo nekoliko godina viđen kao ekstravagancija sa tek određenom ulogom u akademskim krugovima matematičke i primenjene statistike, jaka zajednica u razvoju jezgra samog jezika i ogromnog broja R paketa uspela je da ga pozicionira na praktično centralno mesto u čitavoj mreži jezika i alata koji predstavljaju podršku savremenom menadžmentu podacima i kvantitativnoj analitici.
Pored mnogih dobrih strana i prednosti, programskom jeziku R je svakako moguće uputiti i brojne kritike. Jedna od njih se svakako odnosi na činjenicu da se R ne skalira lako na rad sa velikim podacima. Međutim, od vremena kada je ovo bilo tačno, zajednica je razvila veliki broj paketa koji podržavaju integraciju R-a sa sistemima za menadžment i procesiranje ovog tipa. Druga, da je razvoj R-a bio fokusiran oko pretpostavke rada na jednoprocesorskom sistemu, zbog čega je dugo ovaj moćan programski jezik pogrešno interpretiran kao nešto što je više u kontinuitetu sa platformama za statističke analize poput SPSS, Statistica, i sl. Danas smo svedoci činjenice da sam Microsoft kupuje Revolutions – sada dostupnu pod imenom Microsoft R Open – distribuciju ovog programskog jezika koja se prirodno prilagođava višeprocesorskim platformama. Svaki put kada bi se razvoj jezika našao pred ovakvim ili sličnim izazovima, zajednica koja učestvuje u njegovom razvoju uspevala je da odgovori najčešće razvojem više, ne tek jednog, odgovora koji bi širio kompetencije R-a. Paket Shiny, razvijen od strane RStudio – što je ujedno ime najpopularnijeg R IDE – predstavlja novo, značajno proširenje kompetencija R-a, ovog puta u pravcu brzog i fleksibilnog razvoja responzivnog dizajna, odn. laku izgradnju interaktivnih web-aplikacija sa prirodnom podrškom za sve analitičke i vizuelne kapacitete koje vam R pruža.
O RStudio Shiny smo razgovarali na Meetup Data Science zajednice Srbije 21. marta 2016 u prostorijama Startita. Neke mogućnosti od ovog paketa, posebno proširenje kroz shinydashboard paket, diskutovane su tada; video Meetup-a je, zahvaljujući Startitu, dostupan na Youtube. Iskoristio bih ovu priliku da podvučem možda samo najznačajnije informacije koje sam tada pokušao da predstavim i diskutujem.
Shiny počiva na reaktivnom modelu programiranja, koji neće biti intuitivan kada se prvi put susretnete sa njim. Reaktivni model neće ograničiti vaše mogućnosti u izgradnji responzivnog dizajna, ali će do vas zahtevati vrstu kognitivne organizacije koja nije karakteristična za uobičajene paradigme poput proceduralne, objektno-orijentisane i drugih. Svaki razvoj Shiny web-aplikacije podrazumeva (praktično) paralelni razvoj najmanje dva R skripta – standardna imena su im UI.R i server.R – pored mogućnosti da zbog urednijeg skopinga razvijate uporedo i tzv. global.R skript. Dizajn samog interfejsa aplikacije se daje u deskriptivnoj paradigmi i čini sadržaj UI.R. Sama sintaksa koju koristite za razvoj interfejsa aplikacije dakle nije sintaksa programskog jezika R u onom smislu reči u kome ste navikli da je koristite. Međutim, deskriptivni razvoj interfejsa je krajnje jednostavan i elegantan. Funkcije koje su vam na raspolaganju – a njih broj praktično svakodnevno raste – mahom su funkcije iz JS okruženja, tako da je Shiny zapravo ispravno posmatrati kao apstrakciju nad JS, CSS, i HTML. Sa druge strane, paralelno sa razvojem interfejsa, razvija se server.R skripta, koja se na podignutom Shiny serveru automatski povezuje sa UI.R skriptom u reaktivnom modelu. To znači sledeći: svaki dizajnirani kontejner sadržaja koji ćete prikazati korisniku automatski je povezan sa odgovarajućom funkcijom opisanom u server.R skriptu. Veze između elemenata inputa i autputa koje definišete na UI.R i funkcija – čiji je sadržaj bilo koja ekspresija programskog jezika R podržana ma kojim raspoloživim R paketom – odvijaju se preko tzv. reaktivnih konduktora koji automatski apdejtuju vrednosti svih varijabli čija je koordinacija neophodna za uspešan rad aplikacije.
Model reaktivnog programiranja u Shiny je, prema mom iskustvu, izuzetno dobar kada je u pitanju razvoj jednostavnih aplikacija, dok počinje da zahteva daleko više planiranja nego što ste možda navikli pri svakom pokušaju da se u Shiny razvije kompleksnija web-aplikacija. Ovo nije oštra kritika Shiny: moj sud je da u Shiny možete da razvijete fantastične web-aplikacije podržane od strane R, ali da kompleksnost razvoja jednostavno dolazi sa cenom u jedinicama ergonomije; to ne implicira da rad u Shiny nije vredan truda, već naprotiv – da je trud veliki, ali isplativ. Posebno ako ste posle učenja većeg broja R paketa koji su vam neophodni za analitički deo rada u Data Science dovoljno prezasićeni da vam ne treba i postajanje web-developerom kako biste vaš rad plasirali klijentima koje interesuje jednostavan point-and-click na sve što radite. U suštini, R nikada nije bio ovako jak na strani produkcije kao sada kada je tu RStudio paket Shiny.
Upotreba Open verzije Shiny Server, koji ćete koristiti da plasirate vašu aplikaciju online, dolazi uz neprijatna ograničenja koja ćete morati da prevazilazite. Naime, pod Open Source Shiny možete hostovati koliko god hoćete aplikacija, ali će svakoj od njih biti dodeljen maksimalno jedan R proces pod vašim OS. U tom slučaju, ako ste npr. zainteresovani da skalirate Shiny aplikaciju na veći broj korisnika, moraćete da udaljite kompjutaciono zahtevne procese što više možete od same aplikacije, što je protivno početnoj logici po kojoj bi Shiny sve to trebalo da integriše (analitiku sa interfejsom, izveštavanjem i vizuelizacijom). Postoji više načina da taj problem u R rešite, ali u svakom slučaju raditi sa jednim R procesom po aplikaciji donosi bitna ograničenja. Shiny Server Pro će ukinuti ovo ograničenje, ali za ne mali iznos godišnje licence koji ćete morati da platite RStudio da biste ga koristili. Treće rešenje je hostovanje Shiny aplikacija u cloud-u na shinyapps.io, koje će vas rešiti i mnogih administrativnih poslova, ali koje takođe ne stiže besplatno – i opet ne ukida sva ograničenja u okviru standardno ponuđenih paketa usluga. Procena je da ćete sa Open verzijom Shiny Server najčešće tražiti klijente koji zahtevaju elegantan interfejs ka analitici ali nemaju potrebe za velikim brojem konkurentnih korisnika. To nije malo tržište. Ipak, ideja da kroz Shiny razvijate web-aplikaciju namenjenu širokoj publici, samo na osnovu podrške Open verzije servera, nije dobra.
Shiny je ambiciozan i mlad R projekat, tako da je rano davati sudove o tome šta nosi budućnost za njega i kakvu će poziciju u R zajednici i na tržištu izboriti za sebe. Činjenica je da jednom kada savladate rad u njemu počinjete R da gledate drugim očima. Shiny će učiniti da svu podršku za vizuelizaciju podataka, kojom se R odlikuje u izobilju, lako i brzo integrišete sa elegantnim responzivnim dizajnom. Finalni proizvodi, uverio sam se, mogu da izgledaju doslovce fascinantno (pogledajte tek neke od jednostavnijih primera ovde). Cena ni za šta tako dobro, po pravilu, nije niska.
Na kraju, ne želim da propustim priliku da se zahvalim Data Science zajednici Srbije, a posebno Branku i Milošu ovog puta, za to što su mi pružili priliku da popularizujem R pred našom publikom i dobijem sijaset interesantnih, korisnih, i konstruktivnih pitanja 21. marta u Startitu. Hvala svima koji su uzeli učešća!