4 secciones por etapas y/o mediciones.

con esto queda lista una primera versión de producción de este
dashboard.
parent 22d9223d
...@@ -3,7 +3,7 @@ from dash import Dash, Input, Output, dcc, html ...@@ -3,7 +3,7 @@ from dash import Dash, Input, Output, dcc, html
import plotly.graph_objects as go import plotly.graph_objects as go
import plotly.express as px import plotly.express as px
data = ( data_o = (
pd.read_csv("inventario.csv") pd.read_csv("inventario.csv")
) )
...@@ -16,9 +16,9 @@ Comidas_E3_e = 9 ...@@ -16,9 +16,9 @@ Comidas_E3_e = 9
#Comidas_totales_e = Comidas_E1_e + Comidas_E2_e + Comidas_E3_e #Comidas_totales_e = Comidas_E1_e + Comidas_E2_e + Comidas_E3_e
Comidas_totales_e = 42 Comidas_totales_e = 42
Glucometro_e = 14 Glucometro_e = 14
Total_pacientes = len(data.index) Total_pacientes = len(data_o.index)
Total_incluidos = (data["incluido"] == 1 ).sum() data = data_o.query("incluido == 1")
data = data.query("incluido == 1") Total_incluidos = len(data)
scat = px.scatter(data, x="Days_glucose", y="Selectedfoods",size="medibles") scat = px.scatter(data, x="Days_glucose", y="Selectedfoods",size="medibles")
external_stylesheets = [ external_stylesheets = [
{ {
...@@ -42,7 +42,7 @@ app.layout = html.Div( ...@@ -42,7 +42,7 @@ app.layout = html.Div(
), ),
html.P( html.P(
children=( children=(
str(len(data.index)) + " participantes. " str(Total_pacientes) + " participantes. "
), ),
className="header-description", className="header-description",
), ),
...@@ -56,7 +56,12 @@ app.layout = html.Div( ...@@ -56,7 +56,12 @@ app.layout = html.Div(
], ],
className="header", className="header",
), ),
html.Div(children=[ html.Div(
children=[
html.H1("Avance en recolección", className="header-title2"),
html.Div(
children=[
html.Div(children="Etapa", className="menu-title"), html.Div(children="Etapa", className="menu-title"),
dcc.Dropdown( dcc.Dropdown(
id="etapaSel", id="etapaSel",
...@@ -80,6 +85,9 @@ app.layout = html.Div( ...@@ -80,6 +85,9 @@ app.layout = html.Div(
), ),
], ],
), ),
],
className="wrapper"
),
html.Div(children=[ html.Div(children=[
html.Div(children=[ html.Div(children=[
"Comidas", "Comidas",
...@@ -127,68 +135,123 @@ app.layout = html.Div( ...@@ -127,68 +135,123 @@ app.layout = html.Div(
), ),
html.Div(children=[ html.Div(children=[
dcc.Graph(id="multi-chart")], dcc.Graph(id="multi-chart")],
)],style={'display': 'flex', 'flexDirection': 'row'}, )
],style={'display': 'flex', 'flexDirection': 'row'},
className="wrapper"), className="wrapper"),
html.Div( html.Div(
children=[ children=[
html.Div("Detalle por participante", className="wrapper"), html.H1("Detalle por participante", className="header-title2"),
dcc.Graph( html.Div(children=[
figure={ html.Div(
"data": [ children=[
{ html.Div(
"y":data["Selectedfoods"], children=[
"x":data["nutrid"], html.Div(children="Etapa", className="menu-title"),
"type":"bar" dcc.Dropdown(
}, id="etapaDet",
], options=[
"layout": {"title":"Comidas por paciente"} {"label":1, "value":1},
}), {"label":2, "value":2},
dcc.Graph( {"label":3, "value":3},
figure={ {"label":"No-Clas.", "value":99}
"data": [
{
"y":data["Days_glucose"],
"x":data["nutrid"],
"type":"bar"
},
], ],
"layout": {"title":"Dias de glucómetro por paciente"} value=1,
}), clearable=False,
dcc.Graph( searchable=False,
figure={ className="dropdown",
"data": [ ),
{ ], className="wrapper"
"y":data["medibles"], ),
"x":data["nutrid"], html.Div(children=[
"type":"bar" html.Div(children="Medida", className="menu-title"),
}, dcc.Dropdown(
id="medidaDet",
options=[
{"label":"Comidas", "value":1},
{"label":"Glucómetro", "value":2},
{"label":"Reloj", "value":3},
{"label":"Visitas", "value":4},
], ],
value=1,
clearable=False,
searchable=False,
className="dropdown",
),
], className="wrapper",
),
], style={"display":"flex", "flexDirection": "row"},
),
"layout": {"title":"AUCs paciente"}
}),
dcc.Graph( ],
figure=scat), ),
dcc.Graph(id="detalle_figura"),
# dcc.Graph(
# figure=scat),
], ],
className="wrapper" className="wrapper"
),
html.Div(
children=[
html.H1("Detalle de visitas", className="header-title2"),
html.P("..en construcción..", style={"color":"red", "font-style":"italic"}),
dcc.Graph(id="multi-visitas")],
className="wrapper",
),
html.Div(
children=[
html.H1("Comidas Analizables", className="header-title2"),
html.P("..en construcción..", style={"color":"red", "font-style":"italic"}),
html.Div(
children=[
html.Div(children="Etapa", className="menu-title"),
dcc.Dropdown(
id="mesurableEt",
options=[
{"label":"1", "value":1},
{"label":"2", "value":2},
{"label":"3", "value":3},
{"label":"No-Clas.", "value":4},
{"label":"Total", "value":5},
],
value=1,
clearable=False,
searchable=False,
className="dropdown",
),
], className="wrapper"
),
dcc.Graph(id="mesurables")
], className="wrapper"
) )
] ]
) )
@app.callback( @app.callback(
Output("multi-chart", "figure"), Output("multi-chart", "figure"),
Output("detalle_figura", "figure"),
Output("multi-visitas", "figure"),
Output("mesurables", "figure"),
Input("etapaSel", "value"), Input("etapaSel", "value"),
Input("min_comidas", "value"), Input("min_comidas", "value"),
Input("min_glucosa", "value"), Input("min_glucosa", "value"),
Input("min_reloj", "value"), Input("min_reloj", "value"),
Input("min_microbiota", "value"), Input("min_microbiota", "value"),
Input("min_visitas", "value"), Input("min_visitas", "value"),
Input("medidaDet", "value"),
Input("etapaDet", "value"),
Input("mesurableEt", "value"),
) )
def update_charts(etapaSel,min_comidas, min_glucosa, min_reloj, min_microbiota, min_visitas): def update_charts(etapaSel,min_comidas, min_glucosa, min_reloj, min_microbiota, min_visitas, medidaDet, etapaDet, mesurableEt):
total_data = len(data.index) total_data = len(data.index)
gauges = { gauges = {
'shape': "bullet", 'shape': "bullet",
...@@ -216,19 +279,19 @@ def update_charts(etapaSel,min_comidas, min_glucosa, min_reloj, min_microbiota, ...@@ -216,19 +279,19 @@ def update_charts(etapaSel,min_comidas, min_glucosa, min_reloj, min_microbiota,
visitas_data = data.loc[data["visita1"] != "0"] visitas_data = data.loc[data["visita1"] != "0"]
microbiota_data = data.loc[data["MV1"] != 0] microbiota_data = data.loc[data["MV1"] != 0]
glucosa_data = data.query("glucosa_e1 >= @min_glucosa") glucosa_data = data.query("glucosa_e1 >= @min_glucosa")
comidas_data = data.query("Comidas_FoodsE1 >= @min_comidas") comidas_data = data.query("Comidas_e1 >= @min_comidas")
reloj_data = data.query("pasos_e1 >= @min_reloj") reloj_data = data.query("pasos_e1 >= @min_reloj")
if etapaSel == 2: if etapaSel == 2:
visitas_data = data.loc[data["visita2"] != "0"] visitas_data = data.loc[data["visita2"] != "0"]
microbiota_data = data.loc[data["MV2"] != 0] microbiota_data = data.loc[data["MV2"] != 0]
glucosa_data = data.query("glucosa_e2 >= @min_glucosa") glucosa_data = data.query("glucosa_e2 >= @min_glucosa")
comidas_data = data.query("Comidas_FoodsE2 >= @min_comidas") comidas_data = data.query("Comidas_e2 >= @min_comidas")
reloj_data = data.query("pasos_e2 >= @min_reloj") reloj_data = data.query("pasos_e2 >= @min_reloj")
if etapaSel == 3: if etapaSel == 3:
visitas_data = data.loc[data["visita3"] != "0"] visitas_data = data.loc[data["visita3"] != "0"]
microbiota_data = data.loc[data["MV3"] != 0] microbiota_data = data.loc[data["MV3"] != 0]
glucosa_data = data.query("glucosa_e3 >= @min_glucosa") glucosa_data = data.query("glucosa_e3 >= @min_glucosa")
comidas_data = data.query("Comidas_FoodsE3 >= @min_comidas") comidas_data = data.query("Comidas_e3 >= @min_comidas")
reloj_data = data.query("pasos_e3 >= @min_reloj") reloj_data = data.query("pasos_e3 >= @min_reloj")
if etapaSel == 99: if etapaSel == 99:
comidas_data = data.query("Selectedfoods >= @min_comidas") comidas_data = data.query("Selectedfoods >= @min_comidas")
...@@ -293,7 +356,124 @@ def update_charts(etapaSel,min_comidas, min_glucosa, min_reloj, min_microbiota, ...@@ -293,7 +356,124 @@ def update_charts(etapaSel,min_comidas, min_glucosa, min_reloj, min_microbiota,
gauge = gauges gauge = gauges
)) ))
return multi if etapaDet == 99:
etapaDet = "out"
else:
etapaDet = "e" + str(etapaDet)
if medidaDet == 1:
medCadena = "Comidas_"
title = "Comidas"
if medidaDet == 2:
medCadena = "glucosa_"
title = "Glucómetro"
if medidaDet == 3:
medCadena = "pasos_"
title = "Reloj"
if medidaDet == 4:
medCadena = "Nvisitas"
title = "Visitas"
etapaDet = ""
medCadena = medCadena + etapaDet
detalle_figura = {
"data": [
{
"x": data["nutrid"],
"y": data[medCadena],
"type": "bar",
}
],
"layout": {
"title": {"text": title + " Etapa " + str(etapaDet)}
}
}
multiV = go.Figure()
multiV.add_trace(go.Indicator(
value = 100 * len(comidas_data.index) / Total_incluidos,
domain = {'x': [0.25, 1], 'y': [0.90, 1]},
title = {'text': "Antropometría"},
mode = modes,
number = numbers,
gauge = gauges,
))
multiV.add_trace(go.Indicator(
value = 100 * len(comidas_data.index) / Total_incluidos,
domain = {'x': [0.25, 1], 'y': [0.80, 0.9]},
title = {'text': "QS"},
mode = modes,
number = numbers,
gauge = gauges,
))
multiV.add_trace(go.Indicator(
value = 100 * len(comidas_data.index) / Total_incluidos,
domain = {'x': [0.25, 1], 'y': [0.7, 0.8]},
title = {'text': "Hormonales"},
mode = modes,
number = numbers,
gauge = gauges,
))
multiV.add_trace(go.Indicator(
value = 100 * len(comidas_data.index) / Total_incluidos,
domain = {'x': [0.25, 1], 'y': [0.6, 0.7]},
title = {'text': "C.Corporal"},
mode = modes,
number = numbers,
gauge = gauges,
))
multiV.add_trace(go.Indicator(
value = 100 * len(comidas_data.index) / Total_incluidos,
domain = {'x': [0.25, 1], 'y': [0.5, 0.6]},
title = {'text': "Cuestionarios"},
mode = modes,
number = numbers,
gauge = gauges,
))
multiV.add_trace(go.Indicator(
value = 100 * len(comidas_data.index) / Total_incluidos,
domain = {'x': [0.25, 1], 'y': [0.4, 0.5]},
title = {'text': "AUCs"},
mode = modes,
number = numbers,
gauge = gauges,
))
por_pasos = 1
por_rcard = 1
if mesurableEt < 4:
columna = "medibles_e" + str(mesurableEt)
por_glucosa = data[columna].sum()
if mesurableEt == 4:
por_glucosa = data["medibles_out"].sum()
if mesurableEt == 5:
por_glucosa = data["medibles_e1"].sum() + \
data["medibles_e2"].sum() + \
data["medibles_e3"].sum() + \
data["medibles_out"].sum()
datos_mesurables = [ por_glucosa, por_pasos, por_rcard]
mesurables = {
"data": [
{
"x": ["Glucosa", "Pasos", "RCard"],
"y": datos_mesurables,
"type": "bar",
}
],
"layout": {
"title": {"text": "Comidas Analizables"}
}
}
return multi, detalle_figura, multiV, mesurables
if __name__ == "__main__": if __name__ == "__main__":
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment