# dash_example.py
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash()
app.layout = html.Div(children=[
html.Div(children='Demo chart'),
dcc.Graph(
id='graphss',
figure={
'data': [
{'x':[1,2,3,4,5,6,7], 'y':[11,12,22,23,24,44,55], 'type':'line', 'name':'Energy'},
{'x':[1,2,3,4,5,6,7], 'y':[13,15,26,27,34,44,65], 'type':'bar', 'name':'Time'},
],
'layout': {
'title': 'Graph for Time and Energy'
}
}
)
])
Si on a peu ou pas besoin de la réactivité offerte par Shiny ou si on est prêt à écrire quelques lignes de codes supplémentaires, on pourra commencer à utiliser de "vrais" frameworks web comme Python en offre :
Dans ce cas, des bibliothèques puissantes existent notamment pour :
En R des solutions comme plumber
vont permettre d'exposer facilement des fonctionnalités R en les annotant :
# with_plumber.R
#* @get /mean
normalMean <- function(samples=10){
data <- rnorm(samples)
mean(data)
}
#* @post /sum
addTwo <- function(a, b){
as.numeric(a) + as.numeric(b)
}
# main.R
library(plumber)
r <- plumb("with_plumber.R")
r$run(port=8080)
Des solutions similaires existent en Python.
L'exemple précédent pourra par exemple être écrit de la façon suivante en utilisant ce framework et en utilisant des décorateurs sur nos fonctions.
Installation requise de hug
au préalable :
pip3 install hug
# with_hug.py
import hug
import numpy as np
@hug.get(examples='samples=100')
def mean(samples: hug.types.number = 10):
data = np.random.randn(samples)
return data.mean()
@hug.post()
def sum(a: hug.types.number, b: hug.types.number):
return a + b
Dans un terminal :
hug -f with_hug.py
gunicorn with_hug:__hug_wsgi__
curl -X POST -F "a=1" -F "b=12" localhost:8000/sum