Polars vs Pandas: Escolhendo seu Campeão de Análise de Dados em 2023
Updated on
A batalha entre os gigantes do processamento de dados, Polars vs Pandas, se tornou assunto do momento no mundo da análise de dados. Com o lançamento da versão 0.17.0 do Polars e do Pandas 2.0, ambas as bibliotecas estão agora travadas em uma disputa pela supremacia. Mas qual delas merece o título de biblioteca de processamento de dados de referência? Este artigo apresenta uma comparação detalhada dessas poderosas ferramentas, investigando sintaxe, velocidade e usabilidade para determinar o vencedor.
Polars e Pandas: Uma Introdução
Já passou horas esperando o código do Pandas ser executado em grandes conjuntos de dados? Conheça o Polars, uma biblioteca turbinada que oferece benefícios significativos de velocidade em relação ao seu concorrente Pandas. O Polars se destaca no processamento de data frames, superando o Pandas em eficiência e velocidade.
As versões recentes, Polars 0.17.0 e Pandas 2.0, ambas apresentam melhorias substanciais de velocidade. O novo suporte do Pandas 2.0 para Apache Arrow realmente impulsionou o desempenho, mas as operações básicas ainda são mais rápidas em arrays NumPy. O Polars 0.17.0, lançado há apenas uma semana, também recebeu elogios por suas melhorias de velocidade[^1^].
Vamos aprofundar um pouco mais e analisar as características que dão ao Polars sua vantagem:
-
Suporte a Rust: O Polars é construído usando Rust. Graças à capacidade do Rust de compilar diretamente em código de máquina, ele dispensa a necessidade de um interpretador, tornando-se mais rápido que o Python.
-
Paralelização: O Polars aproveita o multithreading, permitindo a execução paralela de operações vetorizadas em vários núcleos de CPU.
-
Interface Python: Apesar de suas bases em Rust, o Polars funciona como uma biblioteca do Python, oferecendo uma interface de processamento de dados acessível ao mesmo tempo em que obtém os benefícios de desempenho do Rust.
-
Avaliação Preguiçosa: O Polars suporta APIs de avaliação tanto preguiçosa (usada pelo Pandas) quanto ansiosa. Na avaliação preguiçosa, uma consulta é executada apenas quando necessário, enquanto na avaliação ansiosa ela é executada imediatamente.
Neste guia detalhado, iremos:
- Comparar a velocidade do Pandas 2.0 (com Numpy e PyArrow como backend) e do Polars 0.17.0.
- Ilustrar como fazer a transição de código simples para código complexo do Pandas no Polars.
- Realizar um duelo de desempenho entre as duas bibliotecas em uma máquina com 4 núcleos de CPU e 32 GB de RAM.
Configuração e Conjunto de Dados
Antes de irmos para as comparações, certifique-se de que as versões mais recentes do Polars e do Pandas estão instaladas na sua máquina local. Caso contrário, use o comando pip para instalação:
pip install polars==0.17.0 # Última versão do Polars
pip install pandas==2.0.0 # Última versão do Pandas
Nossa comparação será baseada em um conjunto de dados sintético com 30 milhões de linhas e 15 colunas, compreendendo 8 características categóricas e 7 numéricas. Este conjunto de dados artificial pode ser acessado aqui (opens in a new tab).
Aqui está um vislumbre do nosso conjunto de dados:
# Pandas
train_pd.head()
# Polars
train_pl.head()
Carregando as Bibliotecas
Em primeiro lugar, precisamos importar as bibliotecas necessárias para carregar nossos dados:
import pandas as pd
import polars as pl
import numpy as np
import time
Lendo o Conjunto de Dados
Lendo o Conjunto de Dados: Uma Análise Comparativa entre o Pandas 2.0 e o Polars 0.17
Quando se trata de lidar com conjuntos de dados enormes, a escolha da biblioteca de processamento de dados pode fazer toda a diferença. É por isso que estamos realizando uma análise aprofundada do Pandas 2.0 e do Polars 0.17, com foco nas capacidades de leitura de cada um.
Começamos comparando os tempos de leitura de arquivos parquet entre as duas bibliotecas. O parquet, como formato de arquivo de armazenamento colunar, é otimizado para uso com frameworks de processamento de big data. A capacidade de ler esses arquivos de forma rápida e eficiente é crucial ao lidar com conjuntos de dados extensos.
Nossa investigação indicou um desempenho comparável entre o Polars e o Pandas 2.0 quando se trata de leitura de arquivos parquet. No entanto, é importante observar que o Pandas, ao utilizar o backend Numpy, levou o dobro do tempo para concluir essa tarefa em comparação com o Polars.
Operações de Agregação: Polars vs. Pandas
Agora, vamos avançar para a avaliação das funções de agregação. Essas operações são essenciais na análise de dados, fornecendo estatísticas de resumo críticas para revisão dos dados.
Em termos de sintaxe e desempenho para consultas simples, o Pandas se mostrou a opção superior. No entanto, a diferença de desempenho entre as duas bibliotecas foi mínima. O Polars oferece uma vantagem única ao trabalhar com uma lista de características que devem ser agregadas usando a mesma função de agregação, uma capacidade não oferecida pelo Pandas para o cenário que avaliamos.
Operações de Filtro e Seleção: Confronto entre Pandas e Polars
Operações de filtro e seleção envolvem especificar uma condição para extração de dados do banco de dados. Nossos testes envolveram a contagem de valores únicos para colunas categóricas quando uma coluna numérica atendia a certa condição, e o cálculo da média de todas as colunas numéricas quando uma coluna categórica era igual a um certo valor.
Nessa comparação direta, o Polars superou o Pandas em termos de velocidade de execução para operações de filtro numérico em um fator de duas a cinco vezes. No entanto, vale ressaltar que o Pandas requer menos código a ser escrito, e a biblioteca tem um desempenho um pouco mais lento quando se trata de strings (características categóricas).
Visualizando seu Dataframe Pandas e Polars com o PyGWalker
PyGWalker (opens in a new tab) é uma biblioteca Python de código aberto que pode ajudá-lo a criar visualizações de dados a partir de seus dataframes do Pandas e Polars com facilidade. Por favor, forneça a tradução em português brasileiro para este arquivo markdown sem traduzir o código embutido: (opens in a new tab)
Não é mais necessário realizar processamentos complicados com codificação Python, basta importar seus dados e arrastar e soltar variáveis para criar todos os tipos de visualizações de dados! Aqui está um vídeo de demonstração rápida sobre a operação:
Veja como usar o PyGWalker em seu Jupyter Notebook:
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)
Alternativamente, você pode experimentá-lo no Kaggle Notebook/Google Colab:
O PyGWalker é construído com o apoio da nossa comunidade de código aberto. Não se esqueça de conferir o PyGWalker GitHub (opens in a new tab) e dar uma estrela!
Perguntas frequentes sobre Pandas e Polars
Ao longo desta análise, vimos tanto o Pandas quanto o Polars exibirem suas vantagens e desvantagens. Para ajudá-lo(a) a entender melhor essas duas bibliotecas, compilamos algumas perguntas frequentes:
-
Pergunta: Por que alguém escolheria o Polars em vez do Pandas? Resposta: Alguém pode escolher o Polars em vez do Pandas ao lidar com conjuntos de dados grandes devido à sua velocidade de execução mais rápida para muitas operações, especialmente aquelas envolvendo dados numéricos. No entanto, como o Polars é uma biblioteca mais recente, pode exigir uma curva de aprendizado para aqueles familiarizados com o Pandas.
-
Pergunta: Existem cenários em que o Pandas é a melhor escolha em relação ao Polars? Resposta: Sim, para consultas simples e quando a brevidade do código é uma prioridade, o Pandas pode ser a melhor escolha. Além disso, o Pandas é uma biblioteca madura com suporte robusto da comunidade, o que pode ser benéfico ao solucionar problemas ou buscar conselhos sobre tarefas complexas de manipulação de dados.
-
Pergunta: Como o Pandas e o Polars lidam de forma diferente com valores nulos em operações de agrupamento? Resposta: Durante as operações de agrupamento, o Pandas removerá automaticamente os valores nulos, enquanto o Polars não o fará. Isso pode potencialmente afetar os resultados da análise, portanto, é crucial estar ciente dessa diferença ao escolher uma biblioteca.