---
# System prepended metadata

title: Untitled

---

![](https://hackmd.io/_uploads/H1ZOOXMRh.png)
<center><h4>Projeto I - Aplicação de Métodos de Aprendizagem de Máquina</h4></center>
<span align='left'>

| Matrícula   | Nome do Acadêmico          |
| ----------- | -------------------------- |
| **1975660** | Felipe Paes de Lima        |
| **3972217** | Marlon Luciano da Silva    |
| **4469827** | Nazaré Aline Sá de Azevedo |
| **4518087** | Roger da Rosa Szortyka     |
| **4525523** | Sandro Loch                |
</span>


<center><h1> Previsão de Epidemias de Dengue Utilizando Modelos de Aprendizado de Máquina: Um Estudo com Dados do Sistema Infodengue</h1></center>


  A **dengue** é uma doença viral transmitida pelo mosquito Aedes aegypti, que se espalhou rapidamente por todas as regiões do mundo, principalmente nas regiões tropicais e subtropicais. A doença é considerada um grave problema de saúde pública, com impacto significativo na qualidade de vida das pessoas e na economia dos países afetados. Segundo a Organização Mundial da Saúde (OMS), a dengue é a arbovirose urbana mais prevalente nas Américas, com um aumento significativo no número de casos nas últimas décadas. A dengue é uma doença complexa, com múltiplos fatores que influenciam sua transmissão e disseminação. A falta de tratamentos específicos e vacinas eficazes torna a prevenção e o controle da doença ainda mais desafiadores. Nesse contexto, a aplicação de técnicas de Machine Learning pode ser uma ferramenta valiosa para a previsão e prevenção de surtos de dengue. Este trabalho tem como objetivo apresentar um estudo sobre a dengue e a aplicação de técnicas de Machine Learning para previsão e prevenção de surtos da doença. Serão apresentados estudos científicos que discutem a aplicação de técnicas de Machine Learning para previsão e prevenção de surtos de dengue.


## Objetivo

O objetivo principal deste projeto é desenvolver modelos de aprendizado de máquina capazes de prever incidências de dengue com base em dados históricos do Sistema Infodengue.

## Especificação Técnica

**Métodos de Pré-processamento:** Um dos principais destaques nas tarefas de pré-processamento deste projeto foi a extração e transformação necessárias para obtenção deste conjunto de dados (detalhes na seção *Metodologia para Extração de Dados*). Em posse dos dados, outras operações de pré-processamento foram necessárias, destacando-se:
  - [Metodologia para Extração de Dados]()
  - [Agrupamento e/ou categorização dos dados]()
  - [Tarefas de Aprendizado de Máquina]()
  - [Métricas de Avaliação dos metodos de Aprendizado de Máquina]()


---

## Metodologia para Extração de Dados 
### 1. Extração, Transformação e Inserção de Dados de Notificações de Casos no Banco de Dados do Infodengue
#### Sistema Infodengue usando a API do PySUS por meio do script AlertaDengue

Nesta seção, descreveremos detalhadamente o processo de pré-processamento de dados realizado pelo script [AlertaDengue](https://github.com/AlertaDengue/AlertaDengue/blob/main/AlertaDengue/dbf/pysus.py), Os dados são coletados do [DataSUS](https://datasus.saude.gov.br/) por meio da  biblioteca [PySUS](https://github.com/AlertaDengue/pysus), abordando a coleta, tratamento e inserção dos dados, passando por várias transformações que são, por fim, inseridos no banco de dados da dengue no sistema [Infodengue](https://info.dengue.mat.br/informacoes/), utilizando o PostgreSQL como mecanismo de gerenciamento de banco de dados.

- **Coleta de Dados** : O script inicia o processo de pré-processamento coletando dados do DataSUS. Isso envolve a aquisição de informações sobre casos de doenças específicas, como dengue, chikungunya e zika, para um determinado ano.
- **Cálculo de Campos Relevantes** : Os dados coletados não estão prontos para serem inseridos no banco de dados do sistema Infodengue. Portanto, o script executa uma série de cálculos para criar campos adicionais e corrigir dados inconsistentes ou mal formatados. Isso inclui o cálculo da data de nascimento com base na idade do paciente, a adição de dígitos verificadores aos geocódigos municipais e a correção de códigos CID10 de doenças.
- **Transformação de Dados** : O script realiza transformações nos dados para garantir que eles atendam aos requisitos do sistema Infodengue. Isso inclui a padronização de campos, como a representação da semana epidemiológica brasileira.
- **Inserção no Banco de Dados** : Após a coleta e transformação dos dados, o script estabelece uma conexão com o banco de dados PostgreSQL do sistema Infodengue. Ele insere os dados pré-processados no banco de dados, seguindo uma estratégia de inserção que evita a duplicação de registros. Isso garante que os dados estejam prontos para análises futuras e disponíveis para consulta no sistema Infodengue.
- **Registro de Erros**: Durante o processo de pré-processamento e inserção, o script monitora possíveis erros ou exceções. Em caso de erro, ele registra informações detalhadas em um arquivo de log para fins de depuração e auditoria.

### Bibliotecas Usadas no AlertaDengue (Notificações de Casos):
#### **Para realizar essas operações, o [script](https://github.com/AlertaDengue/AlertaDengue/blob/main/AlertaDengue/dbf/pysus.py) faz uso das seguintes bibliotecas**:

- **numpy (np)** : Esta biblioteca é amplamente usada para cálculos matemáticos e operações em arrays multidimensionais. No contexto deste script, o numpy é utilizado para efetuar cálculos em campos como idade e geocódigos municipais.

- **pandas (pd)** : O pandas é uma biblioteca poderosa para manipulação e análise de dados. Aqui, o pandas é empregado para estruturar e limpar os dados, incluindo a seleção de colunas relevantes, ajuste de tipos de dados e tratamento de valores ausentes.

- **psycopg2** : Essa biblioteca possibilita a conexão com um banco de dados PostgreSQL. O script a utiliza para se conectar ao banco de dados do sistema Infodengue e inserir os dados processados.

- **pathlib** : A biblioteca pathlib é usada para lidar com caminhos de arquivo e diretório de forma eficiente. Ela auxilia na organização e manipulação de arquivos, incluindo a leitura de arquivos Parquet e a criação de diretórios para armazenamento temporário.

- **datetime e timedelta** : Essas bibliotecas nativas do Python são usadas para manipulação de datas e horários. São fundamentais para calcular datas de nascimento a partir da idade dos pacientes e para calcular datas epidemiológicas.

- **glob** : A biblioteca glob é útil para pesquisa de arquivos em um diretório com base em padrões de nome de arquivo. Aqui, ela é usada para encontrar e processar múltiplos arquivos Parquet com dados do DataSUS.

- **logging** : O módulo de logging é usado para registrar informações relevantes durante a execução do script, auxiliando na depuração e no monitoramento.

- **settings (AlertaDengue.ad_main)** : Essa importação específica refere-se a configurações personalizadas definidas nas conficurações principais do projeto AlertaDengue. Essas configurações incluem detalhes de conexão com o banco de dados PostgreSQL.

- **episem (AlertaDengue.dados.episem)** : A biblioteca episem é utilizada para cálculos relacionados a semanas epidemiológicas, que são cruciais para a análise de dados relacionados à dengue.

- **SINAN (pysus.online_data)** : SINAN é uma ferramenta que permite o acesso a dados online, ncluindo a obtenção de dados do DataSUS. Neste contexto, ele é usado para baixar dados relacionados à dengue.

### 2. Extração, Transformação e Inserção de Dados Climáticos no Banco de Dados do Infodengue
#### Sistema Infodengue usando a API do Copernicus por meio do script Satellite-Weather-Downloader

O [Satellite-Weather-Downloader](https://github.com/osl-incubator/satellite-weather-downloader) captura os dados meteorológicos da API [Copernicus](https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels). Esta biblioteca oferece funcionalidades para capturar, converter e processar os dados para uso em análises meteorológicas no contexto brasileiro.

Os principais componentes e funcionalidades do [script](https://github.com/osl-incubator/satellite-weather-downloader/blob/main/satellite/weather/copebr.py#L230
) Satellite-Weather-Downloader incluem:

- **CopeBRDatasetExtension** : Esta classe é uma extensão para objetos xr.Dataset que permite adicionar funcionalidades específicas do Brasil para dados meteorológicos.

- **Métodos como to_dataframe e to_sql** : Permitem converter os dados do conjunto de dados xarray em estruturas de dados como DataFrames do Pandas e inseri-los em um banco de dados SQL, respectivamente.

- **Métodos como _geocode_ds e _geocode_to_dataframe** : São usados para processar e extrair dados meteorológicos específicos para uma localização geográfica (identificada pelo IBGE geocode).

- **_convert_to_br_units** : É usado para converter unidades de medidas para padrões brasileiros, como a conversão de Kelvin para Celsius, metros para milímetros e Pascal para ATM.

- **_get_latlons** : Extrai as coordenadas de latitude e longitude para um determinado geocode IBGE de uma cidade brasileira.

*Destacamos a **função _convert_to_br_units** que é responsável por converter unidades de medidas em um conjunto de dados xarray para padrões brasileiros. Isso é importante porque as unidades de medidas usadas em dados meteorológicos podem variar dependendo da origem dos dados, e é útil padronizá-las para uma análise mais consistente no contexto brasileiro.*

#### Explicação passo a passo do que esta função faz:

  1. Recebe um conjunto de dados xr.Dataset como entrada.
  2. Verifica quais variáveis de dados estão presentes no conjunto de dados (por meio da lista de nomes das variáveis vars).
  3. Para cada variável presente no conjunto de dados, verifica se ela corresponde a alguma variável específica de acordo com seu nome (por exemplo, "t2m" para temperatura em Kelvin, "tp" para precipitação em metros, "msl" para pressão em Pascal).
  4. Se uma variável corresponder a alguma dessas variáveis específicas, a função realiza as seguintes conversões de unidades:
  5. Para "t2m" (temperatura em Kelvin), ela converte para Celsius subtraindo 273.15 e define as unidades e o nome longo apropriados.
  6. Para "d2m" (temperatura do ponto de orvalho em Kelvin), ela realiza o mesmo cálculo de conversão para Celsius e também calcula a umidade relativa do ar em porcentagem usando a fórmula de Buck.
  7. Para "tp" (precipitação em metros), ela converte para milímetros multiplicando por 1000 e arredonda para 5 casas decimais. Também define as unidades e o nome longo apropriados.
  8. Para "msl" (pressão ao nível do mar em Pascal), ela converte para ATM multiplicando por um fator específico e define as unidades e o nome longo apropriados.

*A função retorna o conjunto de dados resultante com as unidades convertidas e os nomes convencionados.*

### Bibliotecas Usadas no Satellite-Weather-Downloader (Captura de dados Climáticos):
#### Para realizar essas operações, o script faz uso das seguintes bibliotecas:


- **dask** : Utilizado para computação paralela e assíncrona, útil para processamento eficiente de grandes volumes de dados.

- **dask.array** : Oferece suporte para arrays Dask, que são úteis para computação paralela em dados multidimensionais, como dados climáticos.

- **dask.dataframe** : Usado para trabalhar com estruturas de dados semelhantes a DataFrames em um ambiente Dask.

- **numpy** : Amplamente utilizado para cálculos matemáticos e operações em arrays multidimensionais.

- **xarray** : Essencial para trabalhar com dados multidimensionais, como dados climáticos, de forma eficiente.

- **loguru** : Biblioteca de registro de eventos usada para registrar informações durante a execução do script, auxiliando na depuração e no monitoramento.

- **sqlalchemy.engine.Connectable** : Usado para estabelecer conexões com bancos de dados SQL, como o PostgreSQL, para inserir dados processados.

**Essas bibliotecas desempenham papéis essenciais no processamento e preparação dos dados antes de serem inseridos no sistema Infodengue, garantindo que estejam prontos para análise e consulta.**

Em resumo, o pré-processamento de dados realizado pelos scripts é uma etapa crítica que visa garantir a qualidade, consistência e integridade dos dados coletados antes de serem incorporados ao banco de dados do sistema Infodengue.

---

## Agrupamento e/ou categorização dos dados
### Consulta no banco de dados Infodengue e exportação do conjunto de dados em formato CSV
Para a obtenção dos dados relevantes necessários para o treinamento dos modelos de machine learning, foi criado uma função **weather_notific** especifica no script do repositório [ml-dengue-predict](https://github.com/esloch/ml-dengue-predict) para selecionar e filtrar os campos e dados pertinentes em uma série temporal. Essa série temporal abrange um período significativo, de 2010 a 2023, e envolve quatro estados e, os campos selecionados incluem informações de Notificações e Varáveis Climáticas.

Após a recuperação desses dados, eles são exportados para um arquivo CSV. Esse arquivo CSV contém os dados que serão usados no treinamento dos modelos de machine learning, permitindo análises avançadas e a criação de modelos preditivos relacionados à dengue e outras doenças transmitidas por vetores. 
![](https://hackmd.io/_uploads/By2jxBa03.png)


Para isso e script [fetchinfodata.py](https://github.com/esloch/ml-dengue-predict/blob/main/fetchinfodata/fetchinfodata.py) é responsável por recuperar dados de clima e notificação para um estado específico e um intervalo de datas fornecido. Ele realiza uma consulta que envolve várias junções de tabelas para combinar dados meteorológicos e de notificação relevantes para análises posteriores.

### Detalhes do conjunto de dados (Dataset)

- Import pandas as *pd* and use the **read_csv** function to open the dataset

    ![](https://hackmd.io/_uploads/ry71hMfR2.png)
        <small>fonte: *pandas.read_csv /* [pandas.pydata.org](https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html#pandas-read-csv) </small>
    
- Prints information about a DataFrame including the index dtype and columns, non-null values and memory usage 


    ![](https://hackmd.io/_uploads/SJK6NMzR3.png)
    <small>fonte: *pandas.DataFrame.info /* [pandas.pydata.org](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.info.html#pandas-dataframe-info) </small>

 - Returns the first n rows for the object based on position: 

    ![](https://hackmd.io/_uploads/rJIEDfz0h.png)
    <small>fonte: *pandas.DataFrame.head /* [pandas.pydata.org](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.head.html#pandas-dataframe-head) </small>

**Descrição das Features**: A tabela abaixo fornece mais detalhes sobre a composição do conjunto de dados que será utilizado no treinamento dos modelos de machine learning. 

| **Coluna**     | **Tipo**         | **Descrição**                                                           | **Exemplo**  |
|----------------|------------------|-------------------------------------------------------------------------|--------------|
| uf             | texto (str)      | Nome da unidade federativa do Brasil                                    | Santa Catarina |
| geocodigo      | número (int64)   | Código IBGE associado aos município brasileiros composto por 7 digitos  | 4209102      |
| nome_municipio | texto (str)      | Nome do município                                                       | Joinville    |
| dt_notific     | data (Timestamp) | Data da notificação em format ISO 8601                                  | 2020-07-22   |
| se_notif       | número (int64)   | Semana em que ocorreu a notificação                                     | 18           |
| ano_notif      | número (int64)   | Ano em que ocorreu a notificação                                        | 2022         |
| temp_med       | número (float64) | Temperatura média em graus Celsius                                      | 20.466202    |
| precip_med     | número (float64) | Precipitação média                                                      | 0.035414     |
| pressao_med    | número (float64) | Pressão atmosférica média                                               | 1.005391     |
| umid_med       | número (float64) | Umidade relativa do ar média                                            | 87.35066     |



---
## Avaliação dos Metodos de aprendizado de máquina
**Modo de Aprendizado**: Supervisionado

**Tarefa de Aprendizado:** Será aplicada a tarefa de Regressão

**Algoritmos Avaliados:** Random Forest, Lasso, Linear Regression  

**Métricas Utilizadas:** Erro quadrático médio (MSE, do inglês mean squared error), raiz do erro quadrático médio (RMSE, do inglês Root Mean Squared Error) e erro absoluto médio (MAE, do inglês median absolute error). (Nogueira, 2020. p. 132)
