Zastanawiałem się, czy tegoroczna konferencja useR zwiastowała jakąś gigantyczną, przełomową zmianę w świecie R.
Poprzednia konferencja useR zadziałała jak katalizator dla pakietu dplyr
i operatora %>%
. Środowisko (szczególnie kalifornijskie) znało oba rozwiązania już od kilku miesięcy, ale useR 2014 rozlał zachwyt pipe’ami ze wczesnych użytkowników na całą społeczność.
A co przełomowego objawiło się podczas useR w tym roku? Problem z rewolucjami jest taki, że nie widać ich gdy się dzieją, łatwo za to je obserwować z perspektywy czasu. Zaryzykuję jednak i pobawię się we wróżbitę.
Dla mnie czarnym koniem są htmlwidgets
.
Dlaczego?
Ok, słowo wyjaśnienia co to w ogóle jest (a jeżeli wyjaśnienie nie wyjaśnia, to można zajrzeć na stronę projektu i zobaczyć tam). htmlwidgets
to framework pozwalający na tworzenie z poziomu R interaktywnych widgets (i jak to przetłumaczyć gdy słownik mówi: ,,mała rzecz, której nazwa jest nieznana” ;-)) opartych o java script. Takie wtyczki można osadzać w HTML5 (a więc na slajdach w prezentacjach, w dokumencie knitra, w aplikacji shiny). Jednocześnie, ponieważ wtyczki są w java script do interaktywności nie potrzebują działającego w backendzie R (a shiny potrzebuje, więc trzeba szukać serwera, dbać o spójność bibliotek).
Niby nic, trochę kodu ułatwiającego osadzanie java scriptu na stronie HTML produkowanej przez R.
Z drugiej jednak strony, widać olbrzymią rosnącą popularność pakietu shiny. W połączeniu z dockerem jest to genialne narzędzie do tworzenia bardziej złożonych eksploratorów danych. Ale ma jedną wielką wadę, cała interakcja oparta jest o komunikacje z serwerem R. A to potrafi być zasobożerne, potrafi paść gdy serwer napotka gorszy moment, generuje straszny narzut. Dobre do prototypowania, ale w produkcji ryzykowne (chyba, że mamy jakiś skalowalny backend osadzony na AWS czy innej nieskończonej maszynie).
htmlwidgets
eliminuje konieczność posiadania silnika R. Obiekty z R są renderowane do java script. Praktycznie za darmo dostaje się możliwość korzystania z rosnącej bazy różnych bibliotek w tym prawie wszystkiego co bazuje na D3.
Przykładowo te dwie liniki kodu w R generują poniższy rysunek, który można osadzić na blogu (ten wykres jest interaktywny, punkty można obracać).
library(threejs) scatterplot3js(iris$Sepal.Length, iris$Sepal.Width, iris$Petal.Length, color=c("red","blue","green")[iris$Species]) |
A te trzy linijki robią mapę ciepła gotową do umieszczenia na www bez żadnego dodatkowego serwera.
library(PogromcyDanych) rownames(koty_ptaki) <- koty_ptaki[,1] d3heatmap(koty_ptaki[,c(2,3,4,6)], scale="column", colors="Blues") |
Więcej o tym pakiecie można wyczytać z prezentacji Joe Chenga z RStudio.
Zgadzam się w 100% z myślą przewodnią, żeby więcej uwagi poświęcać JavaScript. Zdroworozsądkowym działaniem jest zwolnienie serwera z części pracy, oddając ją użytkownikowi. Związek z js to idealna para i nieprzypadkowe jest osadzenie shiny na node.js.
Ja sam cieszę się w duchu, że tyle rzeczy jest już możliwych bezpośrednio z R.
Na dokładkę polecam zapoznanie się z openCPU. Dzięki temu projektowi możemy stworzyć aplikację, która przy pomocy REST API komunikuje się z serwerem (nie koniecznie własnym).
@Gonzo, zgoda, ajax + opencpu do przemyslowych rozwiazan jest lepszy niz gole shiny. Ale rozwiazania oparte o java script mozna hostowac np na github pages. Dobrze zrzucic co sie da na klienta.
„widgets (i jak to przetłumaczyć gdy słownik mówi: ,,mała rzecz, której nazwa jest nieznana” ;-))”
Wihajster. Od niemieckiego „wie heisst er?”, czyli „jak mu tam?”.
@Michal, html-wihajster, podoba mi sie
Zgadzam się w pełni z treścią notki i pozwolę sobie na małe uzupełnienie o moje ulubione pakiety związane z htmlwidgets.
mermaid zaimplementowany w pakiecie jest prostszy w użyciu niż pakiet diagram, a bokeh potrafi rzeczy z którymi ggvis sobie jeszcze nie radzi.
@Michal, dzięki, pakiet rbokeh wygląda obiecująco, przyjrzę mu się bliżej.
Wygląda naprawdę świetnie, ale w jaki sposób można to wstawić do prezentacji, np. do Power Pointa?
Czy ktoś wie w jaki sposób można zmieniać położenie legendy w mapach ciepła – w pakiecie d3heatmaps(z prawej strony na lewą, z dołu na górę), bardzo mi zależy, dzięki