useR 2015 a htmlwidgets

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.

8 thoughts on “useR 2015 a htmlwidgets”

  1. 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).

    1. @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.

  2. „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?”.

  3. Wygląda naprawdę świetnie, ale w jaki sposób można to wstawić do prezentacji, np. do Power Pointa?

  4. 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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *