Como otimizei um Arquivo de 1.6 GB para 9 MB usando Python

De 22.344.848 Linhas para 247.246, exclusivamente com Pandas Contextualizando a Situação No meu papel como analista de dados em uma concessionária de rodovias, enfrentei recentemente o desafio de extrair dados específicos de câmeras de tráfego ao longo de um trecho crucial em São Paulo. Essas câmeras, conhecidas como SAT, registram passagem por passagem de cada veículo, fornecendo dados cruciais para nosso estudo de perfil de tráfego.

Uma demanda recente exigiu a extração de dados de alguns SATs selecionados para todo o ano de 2023. Considerando o volume de informações necessárias, sabia que enfrentaria um desafio considerável.

O Processo de Consulta Trabalhando predominantemente com o Microsoft Power BI, decidi explorar a análise de dados com Python para esta tarefa. A ideia era extrair dados diretamente do SQL, salvá-los em CSV e enviá-los ao requisitante.

Entretanto, ao realizar a consulta no SQL Server Management Studio (SSMS), deparei-me com um desafio logístico: mais de 22 milhões de linhas foram retornadas, resultando em um arquivo CSV com 1.6 GB.

A Solução Criativa Após uma conversa com o requisitante, percebi que a necessidade era consolidar os dados por data e hora, não manter o detalhamento passagem por passagem. Com o arquivo CSV em mãos, decidi utilizar o Python e a biblioteca Pandas para agregar os dados conforme solicitado.

Criei um Jupyter Notebook no Visual Studio Code para tratar o arquivo:

Importação da Biblioteca

Comecei importando a biblioteca necessária para o tratamento do arquivo:

  1. Carregamento do Arquivo

Em seguida, carreguei o arquivo como um dataframe do diretório de rede da empresa:

Alterei o caminho devido a informações sigilosas.

  1. Criação de uma Nova Coluna com Apenas a Hora

Adicionei uma coluna ao dataframe, retendo apenas a informação da hora de cada passagem:

Utilizei df.head() para verificar a correta execução da tratativa.

  1. Agrupamento de Dados

Após a criação da coluna com as horas, procedi com a agregação da quantidade de passagens por data, hora, tipo de veículo e sentido:

  1. Salvamento do Novo Arquivo CSV

Finalmente, salvei o novo dataframe em um arquivo CSV menor, pronto para ser compartilhado:

Conclusão Essa abordagem transformou um arquivo de 22 milhões de linhas e 1.6 GB em um arquivo com cerca de 200 mil linhas e 9 MB, representando uma redução de quase 99% no tamanho.

Embora existam métodos para realizar essa agregação diretamente no SQL, esta solução com Python foi a mais eficiente dado o contexto. Se você achou essa técnica útil, compartilhe com seus colegas e deixe sua opinião nos comentários! Sua experiência pode inspirar outros profissionais da ciência de dados.

Cara! Que solução!

Como analista de dados em uma empresa também com bases gigantescas comumente temos que nos virar com soluções assim.

Quase sempre vai surgir alguma adaptação de acordo com a necessidade do solicitante mas as vezes não tem muito o que fazer.

Como um colega já mencionou as vezes o uso de outras tecnologias pode ser favorável, como por exemplo o já citado Polars, eu fiz um post aqui compilando as diferenças e usos do pandas X polars fique a vontade para conferir!

Também aproveitando a oportunidade gostaria se puder, como profissional da mesma área, que visse e talvez um possivel feedback do meu Portfólio, grato desde já!

Parabéns pela solução novamente, vale algumas tabcoins ahah

Boa! parabéns pela solução, para dica e aprendizado: da uma olhada na utilização de polars ou duckdb no lugar do pandas, vai ter ganhos consideráveis na velocidade de processamento.

E como mesmo falou também, fazer esses processamentos direto no SQL economiza algumas etapas desse processo.

Obrigado, vou dar uma pesquisada aqui

Parabéns amigo, não trabalho com dados, sou um desenvolvedor java, mas seu texto está muito bem detalhado e sua solução foi excelente. Brinquei um pouco com python com o jupiter e achei muito interessante a abordagem. Parabéns novamente pela sua solução e entrega de conhecimento, abraços.

Obrigado, acabei de ver que no artigo não foram as imagens com os exemplos do código vou editar ele pra colocar

massa demais! eu trabalho em banco. esse é sempre uma demanda recorrente para nós! conseguir lidar com uma quantidade massiva de dados de forma ágil e gerando valor, pro chefe poder tomar a decisão mais acertada sempre!

A solução foi muito criativa. Imagino que a redução deva ser grande pelo tamanho da base também. Eu tentei fazer uma simulação com 22.000.000, um pouco menor do que você chegou a fazer, mas já ajudou bastante a reduzir.

Eu fiz meus testes e coloquei eles aqui caso alguém queira ver: https://www.tabnews.com.br/matheus1714/otimizacao-de-arquivos-grandes-com-pandas