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
import plotly.graph_objects as go
import plotly.express as px
data = (
data_o = (
pd.read_csv("inventario.csv")
)
......@@ -16,9 +16,9 @@ Comidas_E3_e = 9
#Comidas_totales_e = Comidas_E1_e + Comidas_E2_e + Comidas_E3_e
Comidas_totales_e = 42
Glucometro_e = 14
Total_pacientes = len(data.index)
Total_incluidos = (data["incluido"] == 1 ).sum()
data = data.query("incluido == 1")
Total_pacientes = len(data_o.index)
data = data_o.query("incluido == 1")
Total_incluidos = len(data)
scat = px.scatter(data, x="Days_glucose", y="Selectedfoods",size="medibles")
external_stylesheets = [
{
......@@ -42,7 +42,7 @@ app.layout = html.Div(
),
html.P(
children=(
str(len(data.index)) + " participantes. "
str(Total_pacientes) + " participantes. "
),
className="header-description",
),
......@@ -56,8 +56,13 @@ app.layout = html.Div(
],
className="header",
),
html.Div(children=[
html.Div(children="Etapa", className="menu-title"),
html.Div(
children=[
html.H1("Avance en recolección", className="header-title2"),
html.Div(
children=[
html.Div(children="Etapa", className="menu-title"),
dcc.Dropdown(
id="etapaSel",
options=[
......@@ -79,7 +84,10 @@ app.layout = html.Div(
className="dropdown",
),
],
),
),
],
className="wrapper"
),
html.Div(children=[
html.Div(children=[
"Comidas",
......@@ -127,68 +135,123 @@ app.layout = html.Div(
),
html.Div(children=[
dcc.Graph(id="multi-chart")],
)],style={'display': 'flex', 'flexDirection': 'row'},
)
],style={'display': 'flex', 'flexDirection': 'row'},
className="wrapper"),
html.Div(
children=[
html.Div("Detalle por participante", className="wrapper"),
dcc.Graph(
figure={
"data": [
{
"y":data["Selectedfoods"],
"x":data["nutrid"],
"type":"bar"
},
],
"layout": {"title":"Comidas por paciente"}
}),
dcc.Graph(
figure={
"data": [
{
"y":data["Days_glucose"],
"x":data["nutrid"],
"type":"bar"
},
],
"layout": {"title":"Dias de glucómetro por paciente"}
}),
dcc.Graph(
figure={
"data": [
{
"y":data["medibles"],
"x":data["nutrid"],
"type":"bar"
},
],
"layout": {"title":"AUCs paciente"}
}),
dcc.Graph(
figure=scat),
html.H1("Detalle por participante", className="header-title2"),
html.Div(children=[
html.Div(
children=[
html.Div(
children=[
html.Div(children="Etapa", className="menu-title"),
dcc.Dropdown(
id="etapaDet",
options=[
{"label":1, "value":1},
{"label":2, "value":2},
{"label":3, "value":3},
{"label":"No-Clas.", "value":99}
],
value=1,
clearable=False,
searchable=False,
className="dropdown",
),
], className="wrapper"
),
html.Div(children=[
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"},
),
],
),
dcc.Graph(id="detalle_figura"),
# dcc.Graph(
# figure=scat),
],
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(
Output("multi-chart", "figure"),
Output("multi-chart", "figure"),
Output("detalle_figura", "figure"),
Output("multi-visitas", "figure"),
Output("mesurables", "figure"),
Input("etapaSel", "value"),
Input("min_comidas", "value"),
Input("min_glucosa", "value"),
Input("min_reloj", "value"),
Input("min_microbiota", "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)
gauges = {
'shape': "bullet",
......@@ -216,19 +279,19 @@ def update_charts(etapaSel,min_comidas, min_glucosa, min_reloj, min_microbiota,
visitas_data = data.loc[data["visita1"] != "0"]
microbiota_data = data.loc[data["MV1"] != 0]
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")
if etapaSel == 2:
visitas_data = data.loc[data["visita2"] != "0"]
microbiota_data = data.loc[data["MV2"] != 0]
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")
if etapaSel == 3:
visitas_data = data.loc[data["visita3"] != "0"]
microbiota_data = data.loc[data["MV3"] != 0]
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")
if etapaSel == 99:
comidas_data = data.query("Selectedfoods >= @min_comidas")
......@@ -293,7 +356,124 @@ def update_charts(etapaSel,min_comidas, min_glucosa, min_reloj, min_microbiota,
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__":
......
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