Tableros

Tableau Ejemplo Tableau

Power BI Ejemplo Power BI

y muchos otros

La página de data México es un ejmplo de visualización con tableros múltiples enlace

PyViz Es una plataforma abierta para ayudar a los usuarios a decidir cuáles son las mejores herramientas de visualización de datos de Python de código abierto (OSS) para sus propósitos, con enlaces, descripciones generales, comparaciones y ejemplos. PyViz

En este laboratorio nos enfocamos en tableros. Algunas herramientas son las siguientes:

Dash es un marco productivo de Python para crear aplicaciones de análisis web. Compatible con Julia y R (muy parecido a shiny de R) dash

Ejemplo Dash

Panel es una biblioteca de Python de código abierto que le permite crear aplicaciones web interactivas y paneles de control conectando widgets definidos por el usuario a gráficos, imágenes, tablas o texto. panel

Ejemplo Panel

Bokeh simplifica la creación de gráficos comunes, pero también puede manejar casos de uso personalizados o especializados: gráficos, paneles y aplicaciones Bokeh

Ejemplo Bokeh

HoloViews es una biblioteca de Python de código abierto diseñada para hacer que el análisis y la visualización de datos sean perfectos y sencillos. HoloViews

  • instalación de panel conda install -c pyviz panel

  • instalación bokeh conda install bokeh

  • instalación holoviews conda install -c pyviz holoviews bokeh (en la instalción incluye la instlación de bokeh, si este ta esra instalado no es necesario instalarlo nuevamente)

import panel as pn
pn.extension()
pn.pane.Markdown('''
# H1
## H2
### H3
''')
png = pn.panel('https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png', width=300)
png
column = pn.Column('# Título', pn.widgets.FloatSlider())
column.append('* Anotación 1\n* Anotación 2')
column.extend([pn.widgets.TextInput(), pn.widgets.Checkbox(name=' Activar!')])
column[3] = pn.widgets.Button(name='Ejecutar simulación')
column
from bokeh.plotting import figure

p1 = figure(width=300, height=300)
p1.line([1, 2, 3], [1, 2, 3])

tabs = pn.Tabs(p1)

# Add a tab
tabs.append(('Slider', pn.widgets.FloatSlider()))

# Add multiple tabs
tabs.extend([
    ('Text', pn.widgets.TextInput()),
    ('Color', pn.widgets.ColorPicker())
])

tabs
import holoviews as hv
import holoviews.plotting.bokeh

from bokeh.plotting import figure

fig = figure()
fig.scatter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 2, 1, 0, -1, -2, -3])

gspec = pn.GridSpec(sizing_mode='stretch_both', max_height=800)

gspec[0, :3] = pn.Spacer(background='#FF0000')
gspec[1:3, 0] = pn.Spacer(background='#0000FF')
gspec[1:3, 1:3] = fig
gspec[3:5, 0] = hv.Curve([1, 2, 3])
gspec[3:5, 1] = 'https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png'
gspec[4:5, 2] = pn.Column(
    pn.widgets.FloatSlider(),
    pn.widgets.ColorPicker(),
    pn.widgets.Toggle(name='Picale!'))

gspec
import pandas as pd
import plotly.express as px
pn.extension('plotly')
WARNING:param.panel_extension: A HoloViz extension was loaded previously. This means the extension is already initialized and the following Panel extensions could not be properly loaded: ['plotly']. If you are loading custom extensions with pn.extension(...) ensure that this is called before any other HoloViz extension such as hvPlot or HoloViews.
data = pd.DataFrame([
    ('Monday', 7), ('Tuesday', 4), ('Wednesday', 9), ('Thursday', 4),
    ('Friday', 4), ('Saturday', 4), ('Sunay', 4)], columns=['Day', 'Orders']
)

fig = px.line(data, x="Day", y="Orders")
fig.update_traces(mode="lines+markers", marker=dict(size=10), line=dict(width=4))
fig.layout.autosize = True

responsive = pn.pane.Plotly(fig, config={'responsive': True})

pn.Column('# Gráfica ajustada', responsive, sizing_mode='stretch_width')
import panel as pn
import numpy as np
import holoviews as hv

pn.extension()
bootstrap = pn.template.BootstrapTemplate(title='Bootstrap Template')

pn.config.sizing_mode = 'stretch_width'

xs = np.linspace(0, np.pi)
freq = pn.widgets.FloatSlider(name="Frequency", start=0, end=10, value=2)
phase = pn.widgets.FloatSlider(name="Phase", start=0, end=np.pi)

@pn.depends(freq=freq, phase=phase)
def sine(freq, phase):
    return hv.Curve((xs, np.sin(xs*freq+phase))).opts(
        responsive=True, min_height=400)

@pn.depends(freq=freq, phase=phase)
def cosine(freq, phase):
    return hv.Curve((xs, np.cos(xs*freq+phase))).opts(
        responsive=True, min_height=400)

bootstrap.sidebar.append(freq)
bootstrap.sidebar.append(phase)

bootstrap.main.append(
    pn.Row(
        pn.Card(hv.DynamicMap(sine), title='Sine'),
        pn.Card(hv.DynamicMap(cosine), title='Cosine')
    )
)

bootstrap.show()
Launching server at http://localhost:61706
<bokeh.server.server.Server at 0x7ff793186520>

Construcción de un tablero

import panel as pn
import plotly.express as px
pn.extension('plotly')
WARNING:param.panel_extension: A HoloViz extension was loaded previously. This means the extension is already initialized and the following Panel extensions could not be properly loaded: ['plotly']. If you are loading custom extensions with pn.extension(...) ensure that this is called before any other HoloViz extension such as hvPlot or HoloViews.
gapminder = px.data.gapminder()


ano = pn.widgets.Select(name='Año', 
                        options= gapminder.year.unique().tolist(),
                        background='#f0f0f0',
                        margin=(25, 25, 10, 25))
pais = pn.widgets.Select(name='País',
                         options= gapminder.country.unique().tolist(),
                         background='#f0f0f0',
                        margin=(10, 25, 25, 25))





@pn.depends(pais=pais)
def grafica(pais):
    datos = gapminder[gapminder.country==pais]
    return px.scatter(datos, x="year", y="gdpPercap", color="lifeExp", size="pop", size_max=60)


@pn.depends(ano=ano)
def continente(ano):
    datos = gapminder[gapminder.year==ano]
    return px.scatter(datos, x="gdpPercap", y="lifeExp", color="continent", size="pop", size_max=60)


gspec = pn.GridSpec(sizing_mode='stretch_both', max_height=800, background='#f0f0f0')

gspec[0, :] = pn.Row(pn.pane.Markdown(''' # Tablero \n Este tablero es una práctica ''',style={'font-family': "serif"}),
                    margin=(25, 25, 25, 25))

gspec[1:3, 0:0] = pn.Column(ano,pais,
                          background='#3f3f3f',
                           margin=(25, 25, 25, 25))

gspec[1:5, 1:3] = pn.Tabs(("Por País",grafica),("Fija continente y año",continente),
                         background='#3f3f3f',
                       margin=(25, 25, 25, 25))


gspec