
Como el título lo indica, hablaremos de la biblioteca del Panel, que le permite convertir las computadoras portátiles Jupyter en aplicaciones web seguras, donde el relleno está oculto para los usuarios no técnicos, pero queda la libertad de manipular los parámetros internos, es decir, no solo reconstruir los datos, sino también realizar solicitudes al núcleo. TL; DR Brillante para Python.
Uno de los principales problemas de la analítica empresarial es que no importa cuán genial sea,
a menudo no llega al usuario que toma decisiones basadas en él. El CTO de IBM de AI y ciencia de datos
dice que solo el 13% de los proyectos en el campo de la ciencia de datos van a producción y una de las razones principales es la difícil cooperación de todos los involucrados en los proyectos. Al cerrar la brecha entre el datasatanist, el programador que implementa el proyecto y el analista del tema pueden aumentar significativamente el escape general, reducir el tiempo y hacer que el producto final sea más atento.
Este problema se resuelve con varios productos actualmente disponibles en este nicho.
Para una implementación buena y escalable, existe
Dash . En mi último
post hice un poco
Ilustración del ejemplo del análisis del mercado de automóviles usados. Para las ventajas de Dasha, debe pagar un precio en forma de una aplicación separada que debe escribirse por separado, Plotly es compatible con los gráficos, debe diseñar la interfaz, ajustar algunos CSS / HTML, y al actualizar el modelo de análisis, si está en cuadernos, debe admitir dos códigos, en general No es muy conveniente mientras el proyecto está en desarrollo.
Desde el otro extremo,
Voila y
Panel resuelven el problema (Voila necesita ser apresurada, en la voz de D'Artagnanowski, para decir: "¡Voila!"). Voila proviene de un bloc de notas y admite widgets interactivos Jupyter con los que puede comunicarse con un núcleo desde una aplicación web, independientemente de su idioma (los creadores hablan sobre la independencia del idioma, pero para R no es relevante que tengan Shiny, y no hay análisis de negocios en Julia ) Voila le permite hacer una aplicación interactiva en dos clics (sin contar la introducción, por ejemplo, ipywidgets, allí necesita clics decentes). Panel es una solución puramente de Python y va al mismo problema desde el otro lado: desde el servidor, mientras que el bloc de notas y Jupyter son opcionales. El modelo se puede guardar en un archivo Python normal y el servidor no requerirá todo el ecosistema Jupyter. El panel no está diseñado para una biblioteca específica para gráficos (se dan
ejemplos en matplotlib, bokeh, altair y plotly).
Ambas opciones: Panel y Voila no son óptimos para usar como aplicaciones cargadas, pero no están destinados a esto, la idea es hacer un análisis, archivar un tablero con los resultados, soltar el enlace al analista / gerente, dejar que jueguen con los parámetros y solicitudes, arreglar el intermedio resultado. Si de repente necesita presentar una solicitud de larga duración para una amplia gama de personas, puede transferir a Dash y fundir en bronce.
A continuación, una pequeña ilustración de cómo se ve el proceso. Hagamos un tablero simple basado en datos sobre el mercado de automóviles usados en Francia y Alemania (solo porque está a la mano, puede familiarizarse con los detalles del conjunto de datos en otra
publicación ). Desde lo funcional, será posible calcular los precios promedio según la edad y su desviación estándar en función de las estadísticas de las ofertas en modelos, y construir distribuciones de precios suavizadas por el ruido dentro de un año.
Primero, crea un tablero en el Panel, luego usa Voila. Los blocs de notas junto con los datos se pueden descargar desde el
repositorio o navegar a través de nbviewer (
panel ,
voila ).
Las acciones que no difieren del simple análisis en un cuaderno las dejaré sin detalles, se pueden ver en los cuadernos por enlaces, no hay nada nuevo allí.
Para comenzar, importamos las bibliotecas y los datos. Usaré Bokeh para gráficos, porque lo tengo estándar y hay espacios en blanco para copiar y pegar.
A continuación, prepararemos varias funciones:
wm y std para usarlos al agrupar datos en pandas
default_graph y default_bar_plot: crea espacios en blanco de gráficos vacíos
color_picker - para distribuir objetos seleccionados en la paleta de colores
En la parte principal, declaramos los widgets usados
A continuación, creamos una función que describe la interacción usando el decorador.
@pn.depends(multi_select.param.value, year_slider.param.value, checkbox.param.value) def update(models, year, checkbox_status):
Los widgets le permiten seleccionar una lista de modelos, seleccionar un año para ver la distribución de las ofertas por precio y también mostrar / ocultar la desviación estándar del precio del promedio del año en un gráfico de tendencia.
Dentro de la interacción, creamos nuestros espacios en blanco del gráfico, luego para todos los elementos seleccionados hacemos estadísticas, creamos elementos gráficos (líneas, marcadores, estadísticas de error),
junte todo y devuelva los gráficos como dos pestañas para una visualización compacta.
return pn.Tabs(('Distribution', bokehdist), ('Trend', bokehfig))
A continuación, creamos nuestro diseño colocando widgets y pestañas con gráficos en él.
El proceso agrada con su simplicidad y flexibilidad de roble, debido a una presentación tabular simple.
pn.Row(pn.Column('### Dashboard demo', multi_select, year_slider, checkbox), update).servable()
El método servable () hace que nuestro tablero esté disponible para que el servidor del panel se ejecute
independientemente de la línea de comando cambiando la configuración del servidor. Si continuamos trabajando con el bloc de notas, toda la funcionalidad interactiva está disponible para nosotros. Para una vista de prueba de cómo se verá la aplicación para un usuario externo, agregamos el método show (). En esto, todos nuestros esfuerzos adicionales han terminado, y no son significativamente diferentes de solo construir gráficos.
Así es como se ve un tablero en un cuaderno.

Si queremos que el panel de control sea accesible desde fuera del host local, se nos debe permitir atender las solicitudes desde el exterior, con una lista blanca cuidadosa o con un gesto amplio como
panel serve Dashboard_demo_panel.ipynb --allow-websocket-origin=*
La aplicación que verá el analista no es diferente de la del cuaderno

Los autores dicen que no permitirá que se ejecute código de terceros, pero
se dijo que el grado de protección en un
seminario web reciente
era algo evasivo. Para compartir con los analistas, es suficiente, no hay necesidad de que esas cosas recogidas en la rodilla sobresalgan.
Por último, comparemos cómo hacer lo mismo con Voila.
La versión con ipywidgets y bokeh no me funcionó, jurando javascript en la salida.
Por lo tanto, lo vi en gráficos estáticos matplotlib.
Para ensamblar la misma interfaz de ipywidgets con una lista desplegable, un control deslizante, una casilla de verificación y dos pestañas requirieron cierto esfuerzo y muletas, carecían de la misma flexibilidad de tabla. El cuerpo de la función principal tuvo que ser cortado para poder arrastrar los gráficos a través de las pestañas, es decir, el portátil tuvo que ajustarse mucho más que en el primer caso.
Para iniciar la aplicación web con la extensión instalada para Jupyter, basta con un clic. La imagen es bastante similar. Debido a la diferencia en la funcionalidad: el widget interactivo utilizado no calcula la función de manera predeterminada, por lo tanto, los gráficos aparecen solo después de la primera interacción con el usuario.

Personalmente, de acuerdo con mis sentimientos, el Panel claramente ganó en términos de usabilidad. Se obtuvo el mismo resultado para un número mucho menor de acciones y los esfuerzos adicionales para agregarlo al cuaderno son mínimos. ¡Entonces todo es amigable y se mueve alegremente al panel!