seleccion dinamica de controlado para hacer correlaciones

parent cb64b21c
import pandas as pd
from dash import Dash, Input, Output, dcc, html
from dash import Dash, Input, Output, dcc, html, callback
import plotly.graph_objects as go
import plotly.express as px
import plotly.figure_factory as ff
......@@ -102,33 +102,7 @@ def imc_cat(datos):
return fig
def correlaciones(datos, controlado):
# filtramos solo a los que tienen datos del controlado
datos_fil = datos.loc[datos[controlado].notnull()]
datos_sorted = datos_fil.sort_values(by=controlado, ascending=True)
datos_sorted.reset_index(inplace=True)
metricas = ["imc", "age", "glucose", "hba1c"]
figura = make_subplots(rows=2, cols=2, shared_xaxes=True, vertical_spacing=0.1, subplot_titles=metricas)
lrow = 1
lcol = 1
for metrica in metricas:
datosfil = datos_sorted[np.abs(stats.zscore(datos_sorted[metrica], nan_policy='omit')) < 3]
figura.add_trace(
go.Scatter(x=datosfil.index, y=datosfil[metrica], name=metrica, mode='markers'),
row=lrow, col=lcol
)
figura.add_trace(
go.Scatter(x=datosfil.index, y=datosfil[metrica].rolling(5).mean(), name="PM(5)"),
row=lrow, col=lcol
)
corr = datos_sorted[[metrica]].corrwith(datos_sorted[controlado]).values[0]
figura.add_annotation(row=lrow, col=lcol, text="R = " + "{:.2f}".format(corr))
lcol = lcol + 1 if lcol < 2 else 1
lrow = lrow + (lcol % 2)
figura.update_layout(showlegend=False)
return figura
def correlaciones_v2(datos, controlado):
# filtramos solo a los que tienen datos del controlado
......@@ -506,11 +480,27 @@ app.layout = html.Div(children=[
# correlaciones
html.Div(children= [
html.Div(children= [html.H1("Relación de iAUC/Controlados con diversos índices", className = "header-title2")]), dcc.Graph(figure=correlaciones(visitas_incluidos, "Glucosa"))
html.Div(children= [html.H1("Relación de iAUC/Controlados (glucosa) con diversos índices", className = "header-title2")]),
html.Div(children=[
dcc.Dropdown(
id="selControlado",
options=[
{"label":"Pan", "value":"Pan"},
{"label":"Gelatina", "value":"Gelatina"},
{"label":"Glucosa", "value":"Glucosa"},
],
value="Gelatina",
clearable=False,
searchable=False,
className="dropdown",
),
], className="menu-title2"),
dcc.Graph(id="figCorrelaciones")
]),
# correlaciones transpuesta
html.Div(children= [
html.Div(children= [html.H1("Relación de iAUC/Controlados con diversos índices (traspuesta)", className = "header-title2")]), dcc.Graph(figure=correlaciones_v2(visitas_incluidos, "Glucosa"))
html.Div(children= [html.H1("Relación de iAUC/Controlados con diversos índices (traspuesta)", className = "header-title2")]),
dcc.Graph(figure=correlaciones_v2(visitas_incluidos, "Glucosa"))
]),
# areas de tres pacientes
......@@ -568,5 +558,42 @@ app.layout = html.Div(children=[
@callback(
Output("figCorrelaciones", "figure"),
Input("selControlado", "value"),
)
def update_correlacion(controlado):
# filtramos solo a los que tienen datos del controlado
datos = visitas_incluidos
datos_fil = datos.loc[datos[controlado].notnull()]
datos_sorted = datos_fil.sort_values(by=controlado, ascending=True)
datos_sorted.reset_index(inplace=True)
metricas = ["imc", "age", "glucose", "hba1c"]
figura = make_subplots(rows=2, cols=2, shared_xaxes=True, vertical_spacing=0.1, subplot_titles=metricas)
lrow = 1
lcol = 1
for metrica in metricas:
datosfil = datos_sorted[np.abs(stats.zscore(datos_sorted[metrica], nan_policy='omit')) < 3]
figura.add_trace(
go.Scatter(x=datosfil.index, y=datosfil[metrica], name=metrica, mode='markers'),
row=lrow, col=lcol
)
figura.add_trace(
go.Scatter(x=datosfil.index, y=datosfil[metrica].rolling(5).mean(), name="PM(5)"),
row=lrow, col=lcol
)
corr = datos_sorted[[metrica]].corrwith(datos_sorted[controlado]).values[0]
figura.add_annotation(row=lrow, col=lcol, text="R = " + "{:.2f}".format(corr))
lcol = lcol + 1 if lcol < 2 else 1
lrow = lrow + (lcol % 2)
figura.update_layout(showlegend=False)
return figura
if __name__ == "__main__":
app.run_server(debug=True, port=8051, host='0.0.0.0')
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