Aplicando boas práticas de programação em Data Science
Tags: mlops, cleancode, python, datascience
Published: 2022-05-19 13:01:13

##Introdução
Este post é referente a uma atividade da disciplina de MLOPS ministrada pelo professor Ivanovitch Silva na Universidade Federal do Rio Grande do Norte. O objetivo desde projeto consiste em continuar a apresentação sobre outras habilidades relacionadas com o código limpo, nomeadamente: captura e manipulação de erros, testes, registros (logging). O código do que foi feito está disponível no [Github](https://github.com/eBetcel/analise-dolar-presidentes).

## Análise valor Dólar Real por Presidentes

Nesse projeto desenvolvemos uma visualização baseada no curso [Storytelling Data Visualization on Exchange Rates](www.dataquest.io). Nela selecionamos o valor Dólar-Real de 1996 até maio de 2022, apontando as crises que ocorreram ao longo do tempo e também os presidentes no período.
## Dados
Os dados do Dólar foram coletados no Portal Brasileiro de Dados Abertos e as informações destacadas foram coletadas na Wikipedia.
O data set com os dados possue informações do valor que o dólar foi fechado em cada dia, contudo para melhorar a visualização optamos por fazer a média mensal desses valores e suavizamos o gráfico utlizando o método `rolling(3)`. Após isso selecionamos os períodos dos presidentes que foram:
- Fernando Henrique Cardoso de 01/1995 até 01/2003;
- Lula                      de 01/2003 até 01/2011;
- Dilma Rousseff            de 01/2011 até 08/2016;
- Michel Temer              de 08/2016 até 01/2019;
- Jair Bolsonaro            de 01/2019 até 05/2022.

## Visualização
A visualização consiste em gráficos de linhas que representam o valor do dólar temporalmente, eles são divididos em cores cada cor se refere ao presidente daquele período, alguns presidentes possuem pouco tempo de mandato o que acabou dificultando a organização da figura. Além dissos a figura dispõe de algumas linhas verticais e cada cor representa o início de uma crise no Brasil de acordo com [Lista de crises econômicas no Brasil](https://pt.wikipedia.org/wiki/Lista_de_crises_econ%C3%B4micas_no_Brasil). Abaixo você pode ver o resultado que obtivemos:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q6c8irdafikuw24cdup7.jpg)

## Script .py e guia de estilo PEP8
Após finalizar o Jupyter Notebook que gerava o gráfico, convertemos o arquivo .ipynb em um script .py e utilizamos o autopep8 para adequação às diretrizes de estilo do PEP8 em conjunto com o Pylint, analisador de código.

A instalação do autopep8 pode ser feita através do pip, preferencialmente em um ambiente virtual:

`$ pip install --upgrade autopep8`

Para modificar um arquivo o comando é:

`$ autopep8 --in-place --aggressive --aggressive <filename>`

De forma similar, instalamos e executamos o pylint:

`$ pip install pylint --upgrade`

`$ pylint <filename>`

E seguimos as recomendações do linter como documentação de módulos e funções, melhorando o estilo e nomes de variáveis até obter a nota 10 no código.

## Modularização, captura e manipulação de erros, testes e logging
Nesta parte do projeto tivemos como objetivo inserir boas práticas de engenharia de software. Começamos modularizando quebrando algumas partes do código em funções, inserimos captura de erros com blocos de try/except e utilizamos o logging para fazer registros. Fizemos uma pequena função de teste para simular um caso de teste apenas para demonstração, todavia o ideal para casos reais era a criação de arquivos de testes no pytest.

Exemplo de código:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ao9g3nu5k6j9wb0yaqoa.png)

## Deploy
Por fim, foi utilizado o Streamlit para construir o data app que gera o gráfico. Esta biblioteca tem como objetivo transformar scripts em web apps sem requisitar experiência de frontend.

Instalamos e executamos com

`$ pip install streamlit`

`$ streamlit run app.py`
 
## Conclusão
Assim, concluímos o projeto transformando um jupyter notebook, que podemos considerar como um protótipo, em um web app compartilhável que pode ser hospedado em qualquer plataforma como Heroku, AWS etc.