top of page
  • Foto do escritorGabriel Quintella

Automatizando uma Rotina com Python

Atualizado: 3 de out. de 2023

Olá meu amigo, tudo bem?


Você sabia que uma atividade repetitiva pode ser automatizada? Ou melhor, deve ser automatizada!


No post de hoje vou explicar como a automatização de uma uma rotina melhorou o trabalho de um amigo.


Qual benefício você teria se poupasse 2 horas do seu dia todo dia?


Isso mesmo, tenho um amigo que trabalha em uma empresa de médio porte na área de transportes/logística atuando em 4 estados brasileiros. Você acredita que todos os dias ele precisava gerar um relatório para o setor de abastecimento com os preços dos combustíveis? E tem mais, esse bendito relatório levava em média 2 horas para ser gerado! Isso mesmo, 2 horas!


A sua rotina era a seguinte, acessar o site da ANP (Agência Nacional do Petróleo), realizar o download do arquivo, executar uma série de atividades para gerar o relatório e por último enviar para cada filial. Essa informação é vital pois influência diretamente no preço do frete cobrado de seus clientes. Como ele não possui conhecimentos avançados em TI, todo dia essa rotina consumia 2 horas do seu trabalho. Tempo esse que poderia ser aplicado em outas atividades.


Durante uma conversa, ele comentou que vem acompanhando o trabalho que venho desenvolvendo e questionou se poderia ser aplicado no caso dele. Partindo do principio que trata-se de atividade repetitiva, de cara, falei que poderia SIM, porém antes do parecer final, precisava rabiscar no papel uma possível solução e em seguida apresentaria para ele.


E ai me conta, você acha que podemos automatizar ou não?


Observe com calma todos os passos que mapeei.



- Origem da Informação



Após analisar bem essa página da ANP, percebi que existem informações históricas (2004 até 2022). Primeiro questionamento, é útil para o negócio possuir uma base com todo esse histórico ou vamos trabalhar apenas com um período?


A resposta foi a seguinte: Necessito apenas dos dados de 2022.


Diante disso, montei uma base com todos os dados de 2022. Quando você acessar o site, irá perceber que ele separa isso em dois momentos.


Em uma seção você encontra informações de Jan2022 à Jun2022.



E em outra seção informações do período atual.


Após realizar o download dos arquivos, comecei a monta o notebook.


Acompanha aqui comigo!


Primeiro passo definição das bibliotecas necessárias.



  • import warnings (Tratamento de Warnings)

  • import pandas (Importação de Arquivos)

  • import os (Leitura de Diretório)

  • import seaborn (Geração de Gráfico)

  • matplotlib.pyplot (Geração de Gráfico)


Após a seleção das bibliotecas, o desenvolvimento da rotina de importação dos arquivos é realizado (Segundo Passo).



Comentando o script acima:


  1. Definir o diretório (diretorioCombustivel) que contém os arquivos que serão trabalhados;

  2. Definir um DataFrame vazio;

  3. Implementar uma rotina de leitura do diretório (laço de repetição for);

  4. Comentando a função pd.read_csv():

    1. definimos o caminho do arquivo (pathCombustivel);

    2. o separador de colunas (sep);

    3. cabeçalho do arquivo (header);

    4. colunas do arquivo que serão usadas (usecols);

    5. novo nome que as colunas irão assumir (names);

    6. tipo de dado de cada coluna (dtype);

    7. coluna (deve-se informar a posição da coluna) que será carregada no formato datetime (parse_dates).


E por último a função pd.DataFrame.append(). Ela assume o papel de acrescentar cada iteração no DataFrame criado no inicio da rotina.


Concluída a importação, é hora de tratar os dados (Terceiro Passo).



Breve explanação:


  1. fillna() tratar valores nulos;

  2. dt.strftime() extrair Ano, Mês e o AnoMes de uma coluna Datetime;

  3. str.replace() substituir vírgula por ponto e por último astype() para conversão de datatype.


Após a carga e tratamento dos dados, visualizar a estrutura do DataFrame (Quarto Passo).



Seguindo o desenvolvimento, inicia a aplicação de regras de negócio. Momento de selecionar apenas os dados dos Estado e Munícipios de atuação da empresa (Quinto Passo).


A regra de negócio é a seguinte:

  • CE - Juazeiro do Norte

  • MA - Imperatriz

  • RJ - São Gonçalo

  • SP - Barueri



Quase finalizando!


Após a aplicação das regras de negócio, faz-se necessário transformar o DataFrame em um relatório.


Para isso possa ocorrer, é necessário transformar os registros da coluna AnoMes em colunas, essa técnica recebe o nome de pivot (transformar os valores exclusivos de uma coluna em várias colunas na saída).


Acompanha como que vai ficar (Sexto Passo).



Comentando o comando acima:


  1. Aplicação da função pivot();

  2. Nessa função definimos quais colunas não serão alteradas (index);

  3. Em columns define qual coluna (valores dela) será transformada em novas colunas;

  4. E em values define qual valor será associado para as novas colunas


Tudo pronto!


Hora de separar os dados em arquivos, um para cada filial (Sétimo Passo). Nos próximos passos, retornaremos nesse passo e vamos melhorar.



Rotina bem simples!


  1. Na rotina for foi feita uma seleção distinta dos valores na coluna UF (função unique());

  2. O nome arquivo assumiria o padrão 'C:\\Arquivo\\lista_{0}.csv'.format(lista_uf), onde {0} era o valor distinto no passo anterior (lista_uf);

  3. E por último, com a função to_csv() o arquivo é gerado.


Acompanhe o resultado!



Vamos fazer uma representação gráfica do resultado?


No penúltimo passo, defino a rotina para plotar o gráfico com as informações (Oitavo Passo).



Observe que montei apenas para a combinação UF = CE e Município = Juazeiro do Norte.



Após toda essa caminhada, chegamos no último passo! O envio do e-mail com o arquivo gerado (Nono e último passo).



Observe que utilizo as bibliotecas:


import smtplib

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

from email.mime.base import MIMEBase

from email import encoders


Inclui essa rotina dentro do fluxo de geração de arquivo para enviar o arquivo assim que ele for gerado.



Meu amigo, é isso ai, espero que tenha gostado!


Trouxe uma forma de automatizar uma atividade rotineira que consume um bom tempo de um profissional. Uma informação vital para o negócio! Agora deixo uma pergunta para você. É possível aplicar isso para alguma atividade na empresa que trabalha? Pensa nisso!


Agora deixo uma informação importante!


Infelizmente o site da ANP sofreu uma série de ataques hackers o que afetou a disponibilização dessa informação para muitas pessoas/empresas.


Essa matéria é do dia 05/08/2022, esse post foi publicado no dia 25/08/2022 e até esse dia o sistema ainda não havia sido normalizado.



O notebook desse post você encontra acessando o GitHub.


Grande abraço e aguardo você no próximo!

794 visualizações0 comentário

Posts recentes

Ver tudo

Comentarios


bottom of page