Commit 2d930a2c by Jose Luis Gordillo Ruiz

Merge branch 'clickhouse'

parents aee77169 a726da15
...@@ -11,10 +11,13 @@ from scipy import stats ...@@ -11,10 +11,13 @@ from scipy import stats
from ast import literal_eval from ast import literal_eval
from funciones_comidas import readGlucosa from funciones_comidas import readGlucosa
from funciones_comidas import readVisitas from funciones_comidas import readVisitas
from nutri_utils import setTipo
from nutri_utils import dominantes
import test_ch_2_b
import flask import flask
server = flask.Flask(__name__) server = flask.Flask(__name__)
def update_correlacion_macro_iauc(): def update_correlacion_macro_iauc():
...@@ -255,29 +258,31 @@ def comidas_auc_paciente(datos): ...@@ -255,29 +258,31 @@ def comidas_auc_paciente(datos):
return figura return figura
comidas = pd.read_csv("todos-foods.csv", usecols=["hc_total", "kcal_total", "fiber_total",\ df_total = test_ch_2_b.foods()
"protein_total", "lipids_total","fecha_hora", "patient", "visita", "fecha_visita",\ # hay dos gráficas exploratorias que usan el contenido de 'foods'.
"glucosa_basal_area", "glucosa_estimulo_area",\ # hay que revisar los foods de las foods que vienen de los recordotorios -no se dejan convertir de string a list-, y ver que hacer
"glucosa_area_efectiva","glucosa_area_relativa","foods","dominante", "dominante_category"]) # con las comidas de WA -porque no tienen foods todavía.
# mientras, trabajamos las estadísticas solo con las que vienen de la APP.
comidas["foods"] = comidas["foods"].apply(literal_eval) df_estadisticas = df_total.loc[df_total["Source"] == "app"]
df_estadisticas["foods"] = df_estadisticas["foods"].apply(literal_eval)
comidas = comidas[comidas["visita"] == "e1"] first_id = df_total["patient"].min()
comidas = comidas[comidas["hc_total"]>0] last_id = df_total["patient"].max()
comidas.rename(columns={"glucosa_basal_area":"pre-AUC", "glucosa_estimulo_area":"post-AUC", "glucosa_area_efectiva":"iAUC"}, inplace=True)
comidas["iAUC"] = comidas["post-AUC"] - comidas["pre-AUC"] * 2
df_total = pd.read_csv("test.csv")
#df_total = df_total[df_total["etapas"] == "e1"]
id_patients = set(range(30,217))
ids_presentes = set(df_total['patient']) ids_presentes = set(df_total['patient'])
ids_faltantes = list(id_patients - ids_presentes)
df_total['FH_salto'] = pd.to_datetime(df_total['FH_salto']) df_total['FH_salto'] = pd.to_datetime(df_total['FH_salto'])
df_total['FH_reportada'] = pd.to_datetime(df_total['FH_reportada']) df_total['FH_reportada'] = pd.to_datetime(df_total['FH_reportada'])
df_total['FH_foto'] = pd.to_datetime(df_total['FH_foto']) df_total['FH_foto'] = pd.to_datetime(df_total['FH_foto'])
# convertimos las comidas de df_estadisticas a un formato que entienden las gráficas
df_fotos = pd.read_csv("delasfotos.csv") # de estadisticas .. luego, si es conveniente, iremos haciendo los cambios para usar un
df_fotos['fecha_hora'] = pd.to_datetime(df_fotos['fecha_hora']) # único DF para todas las gráficas. (de todos modos, el entrenamiento de modelos usa
# archivos en el formato en cuestión)
comidas = setTipo( "reportada", df_estadisticas.copy())
comidas[["foods", "Source"]] = df_estadisticas[["foods","Source"]]
comidas.rename(columns={"glucosa_basal_area":"pre-AUC", "glucosa_estimulo_area":"post-AUC", "glucosa_area_efectiva":"iAUC"}, inplace=True)
comidas["iAUC"] = comidas["post-AUC"] - comidas["pre-AUC"] * 2
resultado = pd.DataFrame()
resultado = pd.DataFrame(comidas["foods"].apply(dominantes).values.tolist())
resultado.index = comidas.index
comidas = pd.concat([comidas, resultado], axis=1)
external_stylesheets = [ external_stylesheets = [
{ {
...@@ -323,8 +328,8 @@ app.layout = html.Div(children=[ ...@@ -323,8 +328,8 @@ app.layout = html.Div(children=[
), ),
dcc.Graph(id='glucosa-graph'), dcc.Graph(id='glucosa-graph'),
dcc.Slider( dcc.Slider(
min=30, max=216, step=1, marks={i: str(i) for i in range(30, 217, 18)}, min=first_id, max=last_id, step=1, marks={i: str(i) for i in range(first_id, last_id, 18)},
value=30, tooltip={'always_visible': True}, updatemode='drag', id='slider-patient' value=first_id, tooltip={'always_visible': True}, updatemode='drag', id='slider-patient'
), ),
html.Div(children= [ html.Div(children= [
html.Div(children= [html.H1("iAUCs de las comidas reportadas", className = "header-title2")]), html.Div(children= [html.H1("iAUCs de las comidas reportadas", className = "header-title2")]),
...@@ -387,18 +392,18 @@ app.layout = html.Div(children=[ ...@@ -387,18 +392,18 @@ app.layout = html.Div(children=[
Input('rango', 'value')], Input('rango', 'value')],
) )
def update_graph(selected_pat, rango_str): def update_graph(selected_pat, rango_str):
if selected_pat in ids_faltantes: if selected_pat not in ids_presentes:
return go.Figure() return go.Figure()
if not selected_pat or not rango_str: if not selected_pat or not rango_str:
return {} return {}
patient_foods = df_total.loc[df_total['patient'] == selected_pat] patient_foods = df_total.loc[df_total['patient'] == selected_pat]
patient_foods_app = patient_foods[patient_foods["Source"] == "app"]
patient_foods_Wapp = patient_foods[patient_foods["Source"] == "WA"]
patient_foods_recalls = patient_foods[patient_foods["Source"] == "Recalls"]
glucosa = readGlucosa(selected_pat) glucosa = readGlucosa(selected_pat)
#visita = readVisitas(1) #visita = readVisitas(1)
#fecha_visita1 = pd.to_datetime(visita.loc[visita['id'] == selected_pat, 'visit_date'].iloc[0]) #fecha_visita1 = pd.to_datetime(visita.loc[visita['id'] == selected_pat, 'visit_date'].iloc[0])
#patient_fotos = df_fotos.loc[(df_fotos['patient'] == selected_pat) & (df_fotos['fecha_hora'] < fecha_visita1 + pd.Timedelta(days=15))]
patient_fotos = df_fotos.loc[df_fotos['patient'] == selected_pat]
if glucosa.empty: if glucosa.empty:
return go.Figure() return go.Figure()
#filtered_glucosa = glucosa[(glucosa['date_time'] >= fecha_visita1) & #filtered_glucosa = glucosa[(glucosa['date_time'] >= fecha_visita1) &
...@@ -413,21 +418,24 @@ def update_graph(selected_pat, rango_str): ...@@ -413,21 +418,24 @@ def update_graph(selected_pat, rango_str):
mode='lines', mode='lines',
name='Glucosa del paciente')) name='Glucosa del paciente'))
fig.update_layout(yaxis=dict(range=[50,200])) fig.update_layout(yaxis=dict(range=[50,200]))
y_foods = np.interp(patient_foods['FH_reportada'], (glucosa['date_time']), glucosa['value']) # interpolar fecha de las comidas con glucosa y_foods = np.interp(patient_foods_app['FH_reportada'], (glucosa['date_time']), glucosa['value']) # interpolar fecha de las comidas con glucosa
distancias = abs((patient_foods['FH_salto'] - patient_foods['FH_reportada']).dt.total_seconds()) / 60 distancias = abs((patient_foods['FH_salto'] - patient_foods['FH_reportada']).dt.total_seconds()) / 60
distancias_df = pd.concat([distancias,patient_foods['FH_reportada'], patient_foods['FH_foto']], axis=1, ignore_index=True) distancias_df = pd.concat([distancias,patient_foods['FH_reportada'], patient_foods['FH_foto']], axis=1, ignore_index=True)
distancias_df.columns = ['Distancia','FH_reportada', 'FH_foto'] distancias_df.columns = ['Distancia','FH_reportada', 'FH_foto']
y_foto = np.interp(pd.to_numeric(patient_foods['FH_foto']), pd.to_numeric(glucosa['date_time']), # interpolar fecha de la foto con glucosa y_foto = np.interp(pd.to_numeric(patient_foods_app['FH_foto']), pd.to_numeric(glucosa['date_time']), # interpolar fecha de la foto con glucosa
glucosa['value']) glucosa['value'])
y_fotos_wpp = np.interp(pd.to_numeric(patient_fotos['fecha_hora']), pd.to_numeric(glucosa['date_time']), # interpolar fecha de la foto con glucosa y_fotos_wpp = np.interp(pd.to_numeric(patient_foods_Wapp['fecha_hora']), pd.to_numeric(glucosa['date_time']), # interpolar fecha de la foto con glucosa
glucosa['value']) glucosa['value'])
y_fotos_recalls = np.interp(pd.to_numeric(patient_foods_recalls['fecha_hora']), pd.to_numeric(glucosa['date_time']), # interpolar fecha de la foto con glucosa
glucosa['value'])
# valores del dropdown y separarlos para convertirlos en una lista # valores del dropdown y separarlos para convertirlos en una lista
if rango_str == '0': if rango_str == '0':
fig.add_trace(go.Scatter(x=patient_foods['FH_reportada'], y=y_foods, mode='markers', name = 'Comida completa', marker=dict(color='red', size=10))) fig.add_trace(go.Scatter(x=patient_foods_app['FH_reportada'], y=y_foods, mode='markers', name = 'Comida completa', marker=dict(color='red', size=10)))
fig.add_trace(go.Scatter(x=patient_foods['FH_foto'], y=y_foto, mode='markers', name = 'Foto app', marker=dict(color='yellow', size=8))) fig.add_trace(go.Scatter(x=patient_foods_app['FH_foto'], y=y_foto, mode='markers', name = 'Foto app', marker=dict(color='yellow', size=8)))
fig.add_trace(go.Scatter(x=patient_fotos['fecha_hora'], y=y_fotos_wpp, mode='markers', name = 'Foto whatsapp', marker=dict(color='purple', size=8))) fig.add_trace(go.Scatter(x=patient_foods_Wapp['fecha_hora'], y=y_fotos_wpp, mode='markers', name = 'Whatsapp', marker=dict(color='blue', size=8)))
fig.add_trace(go.Scatter(x=patient_foods_recalls['fecha_hora'], y=y_fotos_recalls, mode='markers', name = 'Recordatorios', marker=dict(color='purple', size=8)))
return fig return fig
elif rango_str == '[>120]': elif rango_str == '[>120]':
...@@ -447,10 +455,10 @@ def update_graph(selected_pat, rango_str): ...@@ -447,10 +455,10 @@ def update_graph(selected_pat, rango_str):
name='Comida completa', name='Comida completa',
marker=dict(color='red', size= 10))) marker=dict(color='red', size= 10)))
fig.add_trace(go.Scatter(x=fotos_wfoods.values, y=y_foto_wfood, mode='markers', name = 'Foto app', marker=dict(color='yellow', size=8))) fig.add_trace(go.Scatter(x=fotos_wfoods.values, y=y_foto_wfood, mode='markers', name = 'Foto app', marker=dict(color='yellow', size=8)))
fig.add_trace(go.Scatter(x=patient_fotos['fecha_hora'], y=y_fotos_wpp, mode='markers', name = 'Foto whatsapp', marker=dict(color='purple', size=8))) fig.add_trace(go.Scatter(x=patient_foods_Wapp['fecha_hora'], y=y_fotos_wpp, mode='markers', name = 'Foto whatsapp', marker=dict(color='purple', size=8)))
fig.update_layout(transition_duration=500) fig.update_layout(transition_duration=500)
return fig return fig
if __name__ == "__main__": if __name__ == "__main__":
app.run_server(debug=True, port=8051, host='0.0.0.0') app.run_server(debug=True, port=8051, host='0.0.0.0')
\ No newline at end of file
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