drguilhermeapolinario commited on
Commit
1835dcd
·
verified ·
1 Parent(s): 2ef1f56

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +103 -39
app.py CHANGED
@@ -15,7 +15,7 @@ from streamlit_extras.stylable_container import stylable_container
15
  from streamlit_folium import folium_static
16
  from streamlit_option_menu import option_menu
17
 
18
- from data_cleaning import criar_dataframe, iniciar, limpa_rci, separa_grupos
19
 
20
  st.set_page_config(
21
  page_title="Dashboard UBS Flamengo",
@@ -43,60 +43,67 @@ def processar_arquivo(file):
43
 
44
 
45
  # Inicializar variáveis dos DataFrames como None
 
 
46
  DF_IDADE = None
47
  DF_GENERO = None
48
  DF_COR = None
49
  DF_DEFICIENCIA = None
50
  DF_DOENCAS = None
 
 
51
 
52
  # Upload de arquivo CSV na barra lateral
53
  uploaded_file = st.sidebar.file_uploader("Escolha um arquivo CSV", type="csv")
54
 
 
 
 
 
 
55
  if uploaded_file is not None:
56
  dataframes = processar_arquivo(uploaded_file)
57
 
58
  # Atribuir os DataFrames a variáveis específicas para uso posterior
 
 
59
  DF_IDADE = dataframes.get("Idade")
60
  DF_GENERO = dataframes.get("genero")
61
  DF_COR = dataframes.get("cor")
62
  DF_DEFICIENCIA = dataframes.get("deficiencia")
63
  DF_DOENCAS = dataframes.get("doencas")
 
 
64
 
65
  # Aplicar capitalização à coluna "Descrição" em cada DataFrame
66
- if DF_IDADE is not None:
67
- DF_IDADE["Descrição"] = DF_IDADE["Descrição"].str.capitalize()
68
-
69
- if DF_GENERO is not None:
70
- DF_GENERO["Descrição"] = DF_GENERO["Descrição"].str.capitalize()
71
-
72
- if DF_COR is not None:
73
- DF_COR["Descrição"] = DF_COR["Descrição"].str.capitalize()
74
-
75
- if DF_DEFICIENCIA is not None:
76
- DF_DEFICIENCIA["Descrição"] = DF_DEFICIENCIA["Descrição"].str.capitalize()
77
-
78
- if DF_DOENCAS is not None:
79
- DF_DOENCAS["Descrição"] = DF_DOENCAS["Descrição"].str.capitalize()
80
  else:
81
  st.sidebar.info("Adicione um arquivo .csv.")
82
 
83
-
84
  def gerar_resumo_df():
85
  """
86
  Generates a summary of the dataframes.
87
-
88
  This function iterates over the local and global variables to check if any of them
89
- are named "DF_IDADE", "DF_GENERO", "DF_COR", "DF_DEFICIENCIA", or "DF_DOENCAS".
 
90
  If a dataframe is found, it generates a summary of the dataframe by printing its
91
  column names and the count of each unique value in the "Descrição" column.
92
-
93
  Returns:
94
  str: A string containing the summary of the dataframes.
95
  """
96
  resumo = ""
97
 
 
 
 
 
 
 
 
 
98
  if "DF_IDADE" in locals() or "DF_IDADE" in globals():
99
- # Assumindo que DF_IDADE tem colunas 'Faixa_Etaria', 'Masculino', 'Feminino'
100
  resumo += "Resumo DF_IDADE:\n"
101
  resumo += DF_IDADE.to_string(index=False) + "\n\n"
102
 
@@ -107,15 +114,22 @@ def gerar_resumo_df():
107
  resumo += f"Resumo DF_COR:\n{DF_COR.value_counts().to_string()}\n\n"
108
 
109
  if "DF_DEFICIENCIA" in locals() or "DF_DEFICIENCIA" in globals():
110
- resumo += (
111
- f"Resumo DF_DEFICIENCIA:\n{DF_DEFICIENCIA.value_counts().to_string()}\n\n"
112
- )
113
 
114
  if "DF_DOENCAS" in locals() or "DF_DOENCAS" in globals():
115
  resumo += f"Resumo DF_DOENCAS:\n{DF_DOENCAS.value_counts().to_string()}\n\n"
116
 
 
 
 
 
 
 
117
  return resumo
118
 
 
 
 
119
 
120
  #######################################
121
  #######################################
@@ -289,22 +303,50 @@ st.markdown(
289
  ## Dados de saúde Relatório de cadastro individual.
290
  """
291
  )
 
 
 
 
 
 
 
292
 
293
 
294
- # Função para criar gráficos de barras personalizados
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
295
  def criar_grafico_personalizado(df, x_col, y_col, titulo):
296
  """
297
  Generates a custom bar chart using Plotly Express.
298
-
299
  Args:
300
  df (pandas.DataFrame): The input dataframe.
301
  x_col (str): The column name to be used as the x-axis.
302
  y_col (str): The column name to be used as the y-axis.
303
  titulo (str): The title of the chart.
304
-
305
  Returns:
306
  plotly.graph_objects.Figure: The generated bar chart.
307
-
308
  """
309
  fig = px.bar(
310
  df,
@@ -331,11 +373,11 @@ def criar_grafico_personalizado(df, x_col, y_col, titulo):
331
  )
332
  return fig
333
 
334
- with st.expander(" Adicione o arquivo .csv ao lado para visuzalização", expanded=True):
335
  selected_tab = option_menu(
336
  menu_title=None,
337
- options=["Faixa Etária", "Gênero", "Cor", "Deficiência", "Doenças"],
338
- icons=["person", "gender-female", "person-plus", "person-wheelchair", "capsule-pill"],
339
  menu_icon="cast",
340
  default_index=0,
341
  orientation="horizontal",
@@ -355,19 +397,13 @@ with st.expander(" Adicione o arquivo .csv ao lado para visuzalização", expand
355
  # Exibição dos DataFrames com base na aba selecionada
356
  if selected_tab == "Faixa Etária" and DF_IDADE is not None:
357
  st.subheader("Distribuição por Faixa Etária")
358
-
359
-
360
-
361
  col1, col2 = st.columns(2)
362
  with col1:
363
  st.dataframe(DF_IDADE, hide_index=True)
364
  with col2:
365
  # Criar o gráfico de pirâmide etária
366
- # Preparar os dados para o gráfico de pirâmide etária
367
- DF_IDADE["Masculino"] = (
368
- DF_IDADE["Masculino"].astype(int) * -1
369
- ) # Valores negativos para o lado masculino
370
- DF_IDADE["Feminino"] = DF_IDADE["Feminino"].astype(int)
371
  fig_idade = px.bar(
372
  DF_IDADE,
373
  x=["Masculino", "Feminino"],
@@ -441,6 +477,35 @@ with st.expander(" Adicione o arquivo .csv ao lado para visuzalização", expand
441
  titulo="Distribuição por Doenças"
442
  )
443
  st.plotly_chart(fig_doencas)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
444
  add_vertical_space()
445
 
446
  st.info(
@@ -531,4 +596,3 @@ with st.expander(" Converse com o 🤖 Zé Flamengo", expanded=True):
531
  # Adicione este código fora do expander para evitar a reexecução do script ao pressionar Enter
532
  if "USER_CHAT_input" in st.session_state and st.session_state.USER_CHAT_input:
533
  st.session_state.USER_CHAT_input = ""
534
-
 
15
  from streamlit_folium import folium_static
16
  from streamlit_option_menu import option_menu
17
 
18
+ from data_cleaning import criar_dataframe, iniciar, limpa_rci1, limpa_rci2, separa_grupos, renomear_escola, limpar_dfs, processar_arquivo
19
 
20
  st.set_page_config(
21
  page_title="Dashboard UBS Flamengo",
 
43
 
44
 
45
  # Inicializar variáveis dos DataFrames como None
46
+ DF_DATA = None
47
+ DF_HEAD = None
48
  DF_IDADE = None
49
  DF_GENERO = None
50
  DF_COR = None
51
  DF_DEFICIENCIA = None
52
  DF_DOENCAS = None
53
+ DF_ESCOLA = None
54
+ DF_TRANSGEN = None
55
 
56
  # Upload de arquivo CSV na barra lateral
57
  uploaded_file = st.sidebar.file_uploader("Escolha um arquivo CSV", type="csv")
58
 
59
+ def processar_arquivo(uploaded_file):
60
+ # Função que processa o arquivo CSV e retorna os DataFrames
61
+ # (Esta função deve ser importada ou definida aqui)
62
+ pass
63
+
64
  if uploaded_file is not None:
65
  dataframes = processar_arquivo(uploaded_file)
66
 
67
  # Atribuir os DataFrames a variáveis específicas para uso posterior
68
+ DF_DATA = dataframes.get("Data")
69
+ DF_HEAD = dataframes.get("Head")
70
  DF_IDADE = dataframes.get("Idade")
71
  DF_GENERO = dataframes.get("genero")
72
  DF_COR = dataframes.get("cor")
73
  DF_DEFICIENCIA = dataframes.get("deficiencia")
74
  DF_DOENCAS = dataframes.get("doencas")
75
+ DF_ESCOLA = dataframes.get("Escola")
76
+ DF_TRANSGEN = dataframes.get("transgen")
77
 
78
  # Aplicar capitalização à coluna "Descrição" em cada DataFrame
79
+ for df in [DF_IDADE, DF_GENERO, DF_COR, DF_DEFICIENCIA, DF_DOENCAS, DF_ESCOLA, DF_TRANSGEN]:
80
+ if df is not None:
81
+ df["Descrição"] = df["Descrição"].str.capitalize()
 
 
 
 
 
 
 
 
 
 
 
82
  else:
83
  st.sidebar.info("Adicione um arquivo .csv.")
84
 
 
85
  def gerar_resumo_df():
86
  """
87
  Generates a summary of the dataframes.
 
88
  This function iterates over the local and global variables to check if any of them
89
+ are named "DF_DATA", "DF_HEAD", "DF_IDADE", "DF_GENERO", "DF_COR", "DF_DEFICIENCIA",
90
+ "DF_DOENCAS", "DF_ESCOLA", or "DF_TRANSGEN".
91
  If a dataframe is found, it generates a summary of the dataframe by printing its
92
  column names and the count of each unique value in the "Descrição" column.
 
93
  Returns:
94
  str: A string containing the summary of the dataframes.
95
  """
96
  resumo = ""
97
 
98
+ if "DF_DATA" in locals() or "DF_DATA" in globals():
99
+ resumo += "Resumo DF_DATA:\n"
100
+ resumo += DF_DATA.to_string(index=False) + "\n\n"
101
+
102
+ if "DF_HEAD" in locals() or "DF_HEAD" in globals():
103
+ resumo += "Resumo DF_HEAD:\n"
104
+ resumo += DF_HEAD.to_string(index=False) + "\n\n"
105
+
106
  if "DF_IDADE" in locals() or "DF_IDADE" in globals():
 
107
  resumo += "Resumo DF_IDADE:\n"
108
  resumo += DF_IDADE.to_string(index=False) + "\n\n"
109
 
 
114
  resumo += f"Resumo DF_COR:\n{DF_COR.value_counts().to_string()}\n\n"
115
 
116
  if "DF_DEFICIENCIA" in locals() or "DF_DEFICIENCIA" in globals():
117
+ resumo += f"Resumo DF_DEFICIENCIA:\n{DF_DEFICIENCIA.value_counts().to_string()}\n\n"
 
 
118
 
119
  if "DF_DOENCAS" in locals() or "DF_DOENCAS" in globals():
120
  resumo += f"Resumo DF_DOENCAS:\n{DF_DOENCAS.value_counts().to_string()}\n\n"
121
 
122
+ if "DF_ESCOLA" in locals() or "DF_ESCOLA" in globals():
123
+ resumo += f"Resumo DF_ESCOLA:\n{DF_ESCOLA.value_counts().to_string()}\n\n"
124
+
125
+ if "DF_TRANSGEN" in locals() or "DF_TRANSGEN" in globals():
126
+ resumo += f"Resumo DF_TRANSGEN:\n{DF_TRANSGEN.value_counts().to_string()}\n\n"
127
+
128
  return resumo
129
 
130
+ # Mostrar o resumo no Streamlit
131
+ st.text(gerar_resumo_df())
132
+
133
 
134
  #######################################
135
  #######################################
 
303
  ## Dados de saúde Relatório de cadastro individual.
304
  """
305
  )
306
+ #
307
+ #
308
+ #
309
+ #
310
+ #
311
+ #
312
+ #
313
 
314
 
315
+ if uploaded_file is not None:
316
+ dataframes = processar_arquivo(uploaded_file)
317
+
318
+ # Atribuir os DataFrames a variáveis específicas para uso posterior
319
+ DF_DATA = dataframes.get("Data")
320
+ DF_HEAD = dataframes.get("Head")
321
+ DF_IDADE = dataframes.get("Idade")
322
+ DF_GENERO = dataframes.get("genero")
323
+ DF_COR = dataframes.get("cor")
324
+ DF_DEFICIENCIA = dataframes.get("deficiencia")
325
+ DF_DOENCAS = dataframes.get("doencas")
326
+ DF_ESCOLA = dataframes.get("Escola")
327
+ DF_TRANSGEN = dataframes.get("transgen")
328
+
329
+ # Aplicar capitalização à coluna "Descrição" em cada DataFrame
330
+ for df in [DF_IDADE, DF_GENERO, DF_COR, DF_DEFICIENCIA, DF_DOENCAS, DF_ESCOLA, DF_TRANSGEN]:
331
+ if df is not None:
332
+ df["Descrição"] = df["Descrição"].str.capitalize()
333
+ else:
334
+ st.sidebar.info("Adicione um arquivo .csv.")
335
+ #
336
+ #
337
+ #
338
+ #
339
+
340
  def criar_grafico_personalizado(df, x_col, y_col, titulo):
341
  """
342
  Generates a custom bar chart using Plotly Express.
 
343
  Args:
344
  df (pandas.DataFrame): The input dataframe.
345
  x_col (str): The column name to be used as the x-axis.
346
  y_col (str): The column name to be used as the y-axis.
347
  titulo (str): The title of the chart.
 
348
  Returns:
349
  plotly.graph_objects.Figure: The generated bar chart.
 
350
  """
351
  fig = px.bar(
352
  df,
 
373
  )
374
  return fig
375
 
376
+ with st.expander(" Adicione o arquivo .csv ao lado para visualização", expanded=True):
377
  selected_tab = option_menu(
378
  menu_title=None,
379
+ options=["Faixa Etária", "Gênero", "Cor", "Deficiência", "Doenças", "Escolaridade", "Identidade de Gênero"],
380
+ icons=["person", "gender-female", "person-plus", "person-wheelchair", "capsule-pill", "school", "transgender"],
381
  menu_icon="cast",
382
  default_index=0,
383
  orientation="horizontal",
 
397
  # Exibição dos DataFrames com base na aba selecionada
398
  if selected_tab == "Faixa Etária" and DF_IDADE is not None:
399
  st.subheader("Distribuição por Faixa Etária")
 
 
 
400
  col1, col2 = st.columns(2)
401
  with col1:
402
  st.dataframe(DF_IDADE, hide_index=True)
403
  with col2:
404
  # Criar o gráfico de pirâmide etária
405
+ DF_IDADE["Masculino"] = DF_IDADE["Masculino"].astype(int) * -1 # Valores negativos para o lado masculino
406
+ DF_IDADE["Feminino"] = DF_IDADE["Feminino"].astype(int)
 
 
 
407
  fig_idade = px.bar(
408
  DF_IDADE,
409
  x=["Masculino", "Feminino"],
 
477
  titulo="Distribuição por Doenças"
478
  )
479
  st.plotly_chart(fig_doencas)
480
+
481
+ elif selected_tab == "Escolaridade" and DF_ESCOLA is not None:
482
+ st.subheader("Distribuição por Escolaridade")
483
+ col1, col2 = st.columns(2)
484
+ with col1:
485
+ st.dataframe(DF_ESCOLA, hide_index=True)
486
+ with col2:
487
+ fig_escola = criar_grafico_personalizado(
488
+ DF_ESCOLA,
489
+ x_col="Descrição",
490
+ y_col="Valor",
491
+ titulo="Distribuição por Escolaridade"
492
+ )
493
+ st.plotly_chart(fig_escola)
494
+
495
+ elif selected_tab == "Identidade de Gênero" and DF_TRANSGEN is not None:
496
+ st.subheader("Distribuição por Identidade de Gênero")
497
+ col1, col2 = st.columns(2)
498
+ with col1:
499
+ st.dataframe(DF_TRANSGEN, hide_index=True)
500
+ with col2:
501
+ fig_transgen = criar_grafico_personalizado(
502
+ DF_TRANSGEN,
503
+ x_col="Descrição",
504
+ y_col="Valor",
505
+ titulo="Distribuição por Identidade de Gênero"
506
+ )
507
+ st.plotly_chart(fig_transgen)
508
+
509
  add_vertical_space()
510
 
511
  st.info(
 
596
  # Adicione este código fora do expander para evitar a reexecução do script ao pressionar Enter
597
  if "USER_CHAT_input" in st.session_state and st.session_state.USER_CHAT_input:
598
  st.session_state.USER_CHAT_input = ""