diff --git a/README.md b/README.md index b54bd9d..4c3ffa7 100644 --- a/README.md +++ b/README.md @@ -1,82 +1,12 @@ -# Dashboard de Unidades Básicas de Saúde (UBS) +## Integrantes do Grupo +Eric Akio Uchiyamada +RA: 10395287 -Este projeto é um **dashboard interativo** desenvolvido com **Streamlit** para visualizar a frequência das **Unidades Básicas de Saúde (UBS)** por estado no Brasil. +Oliver Kieran Galvão McCormack +RA: 10395672 -## 🏗️ Funcionalidades -- **Gráfico de barras** interativo mostrando a frequência de UBS por estado. -- **Filtro** para visualizar dados de estados específicos. -- **Visualização de dados** filtrados diretamente na interface. +Pedro Machado Gomes Caixeta +RA: 10314309 -## 📂 Estrutura do Projeto -``` -├── ubs_dashboard.py # Código do dashboard em Streamlit -├── ubs_atualizado.csv # Arquivo de dados atualizado -├── requirements.txt # Dependências necessárias -└── README.md # Documentação do projeto -``` - -## 🚀 Como Executar -### 1️⃣ Clonar o repositório -```bash -git clone https://github.com/seu-usuario/ubs-dashboard.git -cd ubs-dashboard -``` - -### 2️⃣ Criar um ambiente virtual (opcional, mas recomendado) -```bash -python -m venv env -source env/bin/activate # Para Linux/Mac -env\Scripts\activate # Para Windows -``` - -### 3️⃣ Instalar as dependências -```bash -pip install -r requirements.txt -``` - -### 4️⃣ Executar a aplicação -```bash -streamlit run ubs_dashboard.py -``` - -## 📦 Dependências -As principais bibliotecas utilizadas no projeto são: -- `streamlit` → Interface do dashboard -- `pandas` → Manipulação de dados -- `plotly` → Visualização de gráficos interativos - - - -# 📌 Exercício de Refatoração do BI - Dashboard de UBS - -## 🎯 Objetivo -Refatorar e aprimorar o **Dashboard de Unidades Básicas de Saúde (UBS)**, implementando **três novas visualizações** e garantindo que a entrega seja feita corretamente no **GitHub**. - ---- - -## 🚀 Tarefas - -### 1️⃣ Mapa Interativo das UBS por Estado -- Criar um **mapa de dispersão** usando `latitude` e `longitude` para plotar a localização das UBS. -- Adicionar um **filtro por estado** para exibir apenas UBS da região desejada. - -### 2️⃣ Gráfico de Pizza da Distribuição de UBS por Estado -- Criar um **gráfico de pizza** mostrando opercentual de UBS por estado. -- Utilizar `plotly.express.pie()` para exibir os dados. - -### 3️⃣ Histograma da Quantidade de UBS por Município -- Criar um **histograma** que exiba a **quantidade de UBS por município**. -- Utilizar `plotly.express.histogram()` agrupando os municípios por contagem de UBS. -- Adicionar um controle deslizante (`st.slider()`) para filtrar municípios com um número mínimo de UBS. - ---- - -## 📦 Entrega -- A implementação deve ser realizada em um **repositório GitHub do grupo**. -- O repositório deve conter: - - Código-fonte do dashboard (`.py`). - - Arquivo de dados atualizado (`.csv`). - - Arquivo `README.md` contendo: - - Descrições adicionais - - **Nome dos integrantes do grupo**. - - Dependências do projeto (adicionar no requirements.txt). +## Observações Adicionais +Foi necessário tirar a versão específica do numpy pra conseguir rodar localmente na minha máquina, entao deixei pra pegar qualquer versão no requirements.txt diff --git a/ubs_dashboard.py b/ubs_dashboard.py index 8419b78..2eaa1fa 100644 --- a/ubs_dashboard.py +++ b/ubs_dashboard.py @@ -5,23 +5,69 @@ # Carregar o arquivo atualizado df = pd.read_csv("ubs_atualizado.csv", sep=";") -# Contar a frequência de UBS por estado -df_freq = df['Nome_UF'].value_counts().reset_index() -df_freq.columns = ['Estado', 'Frequência'] +# Exercicio 1: Mapa Interativo das UBS por Estado +df['LATITUDE'] = pd.to_numeric(df['LATITUDE'].str.replace(',', '.'), errors='coerce') +df['LONGITUDE'] = pd.to_numeric(df['LONGITUDE'].str.replace(',', '.'), errors='coerce') -# Criar o dashboard -st.title("Dashboard de Unidades Básicas de Saúde (UBS)") +# Remover linhas com valores inválidos após a conversão +df = df.dropna(subset=['LATITUDE', 'LONGITUDE']) -# Gráfico de barras -grafico = px.bar(df_freq, x='Estado', y='Frequência', - title='Frequência de UBS por Estado', - labels={'Estado': 'Estado', 'Frequência': 'Número de UBS'}, - text_auto=True) +# Verifica se as colunas de latitude e longitude existem +if 'LATITUDE' in df.columns and 'LONGITUDE' in df.columns: + # Criar o dashboard + st.title("Dashboard de Unidades Básicas de Saúde (UBS)") + + # Contar a frequência de UBS por estado + df_freq = df['Nome_UF'].value_counts().reset_index() + df_freq.columns = ['Estado', 'Frequência'] + + # Gráfico de barras + grafico = px.bar(df_freq, x='Estado', y='Frequência', + title='Frequência de UBS por Estado', + labels={'Estado': 'Estado', 'Frequência': 'Número de UBS'}, + text_auto=True) + st.plotly_chart(grafico) + + # Filtro para estados específicos + estados = st.multiselect("Selecione os estados", df_freq['Estado'].unique()) + + if estados: + df_filtrado = df[df['Nome_UF'].isin(estados)] + st.write(df_filtrado) + + # Criar um mapa com os pontos das UBS filtradas + df_mapa = df_filtrado[['LATITUDE', 'LONGITUDE']] + st.map(df_mapa) + else: + # Se nenhum estado for selecionado, mostrar todas as UBS no mapa + df_mapa = df[['LATITUDE', 'LONGITUDE']] + st.map(df_mapa) +else: + st.error("As colunas 'latitude' e 'longitude' não foram encontradas no dataset.") + +#Exercicio 2: Gráfico de Pizza da Distribuição de UBS por Estado +grafico = px.pie(df_freq, names='Estado', values='Frequência', title='UBS por Estado') st.plotly_chart(grafico) -# Filtro para estados específicos -estados = st.multiselect("Selecione os estados", df_freq['Estado'].unique()) -if estados: - df_filtrado = df[df['Nome_UF'].isin(estados)] - st.write(df_filtrado) +#Exercicio 3: Histograma da Quantidade de UBS por Município +# Contar a quantidade de UBS por município +df_municipios = df['Nome_Município'].value_counts().reset_index() +df_municipios.columns = ['Município', 'Quantidade_UBS'] + +# Controle deslizante para filtrar municípios com um número mínimo de UBS +min_ubs = st.slider("Selecione o número mínimo de UBS por município", + min_value=int(df_municipios['Quantidade_UBS'].min()), + max_value=int(df_municipios['Quantidade_UBS'].max()), + value=int(df_municipios['Quantidade_UBS'].min())) + +# Filtrar os municípios +df_filtrado = df_municipios[df_municipios['Quantidade_UBS'] >= min_ubs] + +# Criar gráfico de barras para visualizar os municípios com o filtro aplicado +grafico_barras = px.bar(df_filtrado, x='Município', y='Quantidade_UBS', + title="Número de UBS por Município", + labels={'Município': 'Município', 'Quantidade_UBS': 'Número de UBS'}, + text_auto=True) + +st.plotly_chart(grafico_barras) \ No newline at end of file