Qual Formato de Arquivo Usar para Analisar os Seus Dados no Pandas?

Big Data Brasil
Big Data Blog
Published in
7 min readDec 3, 2020
Photo by Lukas Blazek on Unsplash

por Murilo Soave, Estagiário em Ciência de Dados na Big Data.

O Pandas é uma das bibliotecas que dispensam introdução no campo de Ciência de Dados. Se em algum momento você já trabalhou com análise de dados utilizando Python, certamente um dos primeiros módulos importados foi o Pandas, e essa popularidade não é em vão. Ele fornece um desempenho de ponta, uma API fácil de trabalhar e com uma infinidade de ferramentas que te permitem fazer absolutamente qualquer coisa que te vier à cabeça com os dados. Apesar de tantas qualidades, o Pandas foi desenhado para trabalhar com conjuntos de dados não tão grandes, e é justamente no aumento do volume que os problemas começam a aparecer.

Quando isso acontece, o processo de escrever os dados no disco e trazê-los de volta à memória torna-se extremamente custoso e essa limitação passa a ser um real problema, nos obrigando a ter cada vez mais memória RAM e tempo disponível. Muitas vezes, procurar meios de otimizar esse processo acaba sendo a alternativa que nos sobra.

Uma das formas menos trabalhosas de fazer isso é escolhendo um formato de arquivo adequado para salvar os dados. De longe, os formatos mais comuns para esse fim são CSV e XLSX, mas, apesar de muito utilizados, não necessariamente são os que apresentam melhor desempenho. Neste artigo serão apresentadas alternativas de formato para lidar com este problema e um breve estudo comparativo avaliando algumas métricas de desempenho.

Formatos Avaliados

Os formatos abaixo foram selecionados por serem amplamente difundidos em projetos de análise de dados e poderem ser utilizados para armazenamento tanto entre sessões de trabalho quanto para registro permanente de projetos.

CSV

O comma-separated values, mais conhecido como CSV, é um formato consistentemente empregado no armazenamento de dados tabulares. Como o próprio nome já introduz, de forma bastante simples, os dados são armazenados de maneira em que as colunas são distinguidas por um separador, em geral, a vírgula, como no exemplo abaixo:

Nome, Ano, Cidade
Joao, 2018, São Paulo
Fernando, 2019, São Carlos
Maria, 2020, Belo Horizonte

As principais vantagens do seu uso estão no fato de ser suportado por praticamente qualquer software que manipule dados tabulares, como o Excel ou LibreOffice, e ser interpretável por humanos, pois não passa por nenhuma forma de compressão, o que facilita a sua manipulação. Sua principal desvantagem é que seu armazenamento restringe-se apenas aos valores de cada observação, não registrando o formato de cada coluna. Logo, pode haver situações nas quais o tipo do dado é interpretado de forma errônea, o que culmina na distorção da informação transmitida pelos dados. Um caso bem comum é quando dados de texto são interpretados como números inteiros, o que pode gerar problemas, como a perda de zeros à esquerda.

XLSX

O XLSX é um dos formatos possíveis para se salvar as planilhas do Excel. Fazendo-se valer do XML(Extensible Markup Language), ele apresenta suporte a todas as fórmulas do Excel, não tendo suporte somente às macros VBA. No fim, uma workbook salva como XLSX nada mais é do que uma coleção de arquivos de texto, tanto é que se renomear de .xlsx para .zip, é possível abri-lo e ver a sua estrutura interna, podendo ser útil para identificar qual aba está gerando gargalo na manipulação do arquivo. Como vantagem, está o fato de ser o único formato desenvolvido para o Excel que é aberto pela Microsoft. Portanto, ele tende a ter um bom comportamento mesmo em outros softwares que trabalham com planilhas. Como desvantagem há o fato dele ter sido originalmente desenhado para trabalhar com conjuntos de dados não tão grandes — como ficará explícito nos testes desenvolvidos.

Prova disso é a limitação de trabalhar com no máximo 1.048.576 linhas e 16.384 colunas. Recentemente um caso curioso chamou atenção: os resultados dos testes de COVID-19 realizados por uma agência do Departamento de Saúde da Inglaterra eram analisados através de planilhas no Excel. Após meses de testes, a planilha com os dados superou os um milhão de linhas e eles não se atentaram a isso, o que resultou em uma perda de 15.841 testes positivos, potencialmente levando cerca de 50.000 pessoas infectadas a não se isolarem e tomarem os devidos cuidados.

HDF5

O HDF5 tem como principal característica o armazenamento dos dados de forma hierarquizada, sendo desenvolvido para trabalhar com conjunto de dados grandes. Originalmente, ele foi estruturado para a manipulação de dados científicos, mas, em pouco tempo, foi abraçado pela comunidade de ciência de dados por duas grandes vantagens: cumpre com a sua premissa de trabalhar bem com grandes volumes e a capacidade de armazenar uma infinidade de formatos distintos de dados. Podendo, por exemplo, armazenar imagens para os processamentos da Computação Visual e até mesmo registros de áudio. Como desvantagem, não é suportado por nenhum editor de planilhas (até mesmo pelos tipos de dados que ele tem o suporte para armazenar) e é um arquivo binário, não permitindo a leitura direta por humanos.

Parquet

O Parquet é um formato Open Source construído para o ecossistema Hadoop destinado ao armazenamento de dados estruturados. Assim como o HDF5, ele surge com a ambição de trabalhar com conjuntos de dados massivos, tendo em seu funcionamento uma abordagem diferente da tradicional orientada por linhas, onde cada linha armazena uma observação distinta. No Parquet, em cada linha é registrado todos os valores da coluna, o que permite uma compreensão mais eficiente, sendo, portanto, pouco custoso no disco. Fazendo uma analogia com o CSV, fica assim:

Nome, Joao, Fernando, Maria
Ano, 2018, 2019, 2020
Cidade, São Paulo, São Carlos, Belo Horizonte

Como desvantagem, sobressai o fato do formato restringir-se a dados estruturados, sendo menos flexível que o HDF5, o arquivo ser binário e a não existência de suporte em editores de planilhas. Então, se os dados precisarem ser analisados não só no Pandas, mas, também no Excel, certamente não é uma opção viável.

Agora que temos os formatos que serão avaliados, vamos ao benchmark.

Como o teste foi feito

Para realizar a comparação, foram gerados cinco datasets aleatórios com 700 mil linhas separadas em 100 colunas, sendo 50 variáveis numéricas com distribuição normal, 30 variáveis categóricas dividas em três categorias com distribuição uniforme e 20 variáveis binárias.

Estes datasets foram salvos em cada um dos formatos supracitados e o desempenho avaliado sobre duas execuções independentes de cada conjunto, considerando as seguintes métricas:

  • save_ram_peak: Pico de memória RAM utilizada pelo Pandas para salvar o Data Frame no disco.
  • load_ram_peak: Pico de Memória RAM utilizada pelo Pandas para carregar o arquivo na memória.
  • save_time: Tempo necessário para salvar o Data Frame no disco.
  • load_time: Tempo necessário para carregar o arquivo na memória.
  • size: Tamanho que o arquivo contendo o Data Frame ocupa em disco.

Resultados

A figura abaixo nos mostra a média do pico de memória RAM utilizada durante o processo de leitura e escrita do conjunto de dados. Uma observação interessante neste gráfico é como o XLSX se sobressai dos demais, chegando a precisar de quase 10GB para colocar o Data Frame no disco, em contraste com o CSV que precisou de somente 7MB adicionais.

Outro resultado curioso é o HDF5, que por mais que ele tenha sido desenvolvido visando o armazenamento de grandes volumes de dados, mostrou-se mais custoso em termos de RAM do que o CSV e o Parquet, que tiveram um ótimo desempenho.

Quando nos voltamos para o tempo de leitura e escrita, o cenário não muda muito para o XLSX, ele permanece tendo o pior desempenho disparado, levando cerca de 70 minutos para ler e 50 minutos para salvar o Data Frame, o que é suficiente para descartá-lo nas condições que estamos avaliando. Desta forma, a figura abaixo exibe somente os formatos restantes que tiveram resultados mais competitivos a fim de facilitar a visualização.

Aqui o Parquet permanece performando muito bem, acompanhado por uma melhora do HDF5, ambos levaram menos de cinco segundos, em média, na leitura/escrita. Já o CSV fica para trás, precisando de um pouco mais de 3 minutos para a escrita dos dados.

Por fim, vamos olhar para o espaço que cada um ocupa em disco. Novamente, os melhores desempenhos ficam com o Parquet e HDF5, indicando uma superioridade em relação às demais opções. Apesar disso, vale ressaltar a compressão do XLSX tendo efeito, ocupando menos espaço que o CSV.

Conclusão

Considerando os resultados obtidos, o Parquet se coroa como a melhor alternativa, pois: apresentou um tempo de leitura e escrita baixo, foi o que menos precisou de espaço em disco para ser armazenado e apresentou baixo custo no processo de carregar os dados de volta para a memória.

Entretanto, é válido ressaltar que o estudo levou em consideração somente alternativas que atendem a algumas hipóteses e métricas específicas, portanto, não significa que a conclusão aqui apresentada seja a melhor para qualquer situação. Por exemplo, em ocasiões nas quais os dados precisam ser armazenado por breves períodos de tempo, formatos como Pickle e Feather podem apresentar ótimas performances. De qualquer modo, o parquet atende com robustez a maioria das situações e deve ser sempre levado em consideração no momento em que for escolher qual formato será utilizado para salvar os seus dados.

--

--