Otimizando suas consultas de dados com Pandas e Python
1
0

Otimizando suas consultas de dados com Pandas e Python

SisData
6 min
1
0
Email image

Você já teve que lidar com grandes conjuntos de dados no Pandas e sentiu que a sua consulta estava demorando muito tempo para ser processada? Se sim, saiba que você não está sozinho! Este é um desafio comum enfrentado por muitos cientistas de dados. Mas não se preocupe, pois este post traz dicas valiosas para melhorar a performance na consulta desses dados utilizando o poder do Python e do Pandas. Continue lendo e descubra como otimizar suas consultas, economizar tempo e tornar seu trabalho mais eficiente.

Introdução ao Pandas e Python para Consulta de Dados

Os Pandas são uma biblioteca de código aberto para análise de dados em Python. O projeto foi iniciado em 2008 pelo developer Wes McKinney e se tornou um dos principais projetos do Python para análise e manipulação de dados.

O Python é uma linguagem de programação interpretada, dinâmica e multi-plataforma com tipagem forte e semiautomática. Sua filosofia enfatiza a simplicidade e a elegância. O Python possui módulos, exceções, literais de tipos compostos, funções anônimas e classes internas.

Algumas das vantagens do Python sobre outras linguagens são:
- sua execução é rápida;
- possui um grande número de bibliotecas prontas para uso;
- é fácil de aprender e ler;
- tem menos linhas de código que outras linguagens;
- é multi-plataforma.

Otimizando as Consultas de Dados

Uma das principais vantagens do Pandas em relação a outras bibliotecas de Python para análise de dados é a sua eficiência na manipulação de grandes conjuntos de dados. No entanto, essa eficiência pode diminuir quando os conjuntos de dados são muito grandes para caber na memória do computador. Neste caso, é necessário otimizar as consultas para que elas sejam executadas o mais rápido possível.

Existem diversas formas de otimizar as consultas no Pandas. Uma delas é utilizar a vetorização em Python. A vetorização é uma técnica que permite realizar operações em um conjunto de dados sem usar loops explícitos. Em Python, a vetorização é amplamente utilizada com a biblioteca NumPy, que permite criar e manipular arrays multidimensionais.

Para este caso, vamos utilizar o dataset encontrado no Kaggle, onde o conjunto de dados contém informações detalhadas sobre os fatores de risco para doenças cardiovasculares. Ele pode ser encontrado neste link.

Primeiramente iremos importar as bibliotecas necessárias e exibir os dados do dataset.

import pandas as pd
import numpy as np
data = pd.read_csv('heart_data.csv')
data.head()

Como resultado teremos os seguintes dados:

Email image

Para testarmos o poder da vetorização, iremos utilizar o comando timeit, onde será exibido o tempo necessário para processar a consulta. Por exemplo, ao calcularmos o IMC (Índice de Massa Corpórea) sem a utilização de vetorização:

%%timeit
#Criando coluna sem vetorização
data['imc'] = 10000 * data['weight'] / (data['height'] * data['height'])
----------------------------------------------------------------------
1.52 ms ± 257 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

Quando utilizamos vetorização, temos um pequeno ganho de performance na execução do código, como mostra o código abaixo:

%%timeit
#Criando coluna sem vetorização (exemplo 1)
def calc_imc(row):
return 10000 * row['weight'] / (row['height'] * row['height'])
data['imc2'] = data.apply(calc_imc, axis=1)
---------------------------------------------------------------------
1.39 s ± 181 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Além disso, o NumPy oferece várias outras funções e recursos para trabalhar com arrays, incluindo operações de álgebra linear, geração de números aleatórios, e muito mais. A vetorização é uma técnica poderosa para acelerar o processamento de grandes conjuntos de dados, e o NumPy é uma biblioteca essencial para utilizá-la em Python.

Utilizando Pandas… 🐼

Quando falamos da biblioteca Pandas, ela pode fornecer um conjunto de ferramentas para a manipulação e análise de dados em Python. Ele permite que você trabalhe com os seus dados de forma rápida e fácil, sem ter que aprender todos os detalhes da linguagem Python. Além disso, a biblioteca Pandas pode ser integrada com outras bibliotecas do Python, como o NumPy, para fornecer um ambiente completo para a análise de dados.

Para este caso iremos utilizar o dataset que fala sobre atrasos de voos e os principais motivos que podem estar ocasionando este problema. Ao exibirmos os dados do dataset temos as seguintes informações:

Head do dataset sobre atrasos de voos
Head do dataset sobre atrasos de voos

Então, verificamos os tipos de dados pertencentes ao conjuntos de informações deste dataset como o comando

Email image

Nota-se que os tipos de dados não estão bem otimizados para as informações que contém em cada coluna. Então utilizamos o pacote Python chamado dtype_diet, através dele podemos consultar qual o tipo de dados que tem melhor desempenho e otimização de memória. Utilizamos os comandos seguir:

from dtype_diet import report_on_dataframe
report_on_dataframe(flights)

No resultado da execução do código temos uma tabela que mostra cada tipo de dado e qual o que melhor se encaixa para reduzir o tempo e consumo de memória.

Email image

Podemos utilizar esse comando e fazer a alteração em cada campo do dataset, mas e se tivéssemos que fazer essa modificação de forma automática? Sim! Temos como!!! 🙌

Dentro do pacote dtype_diet temos o complemento optimize_dtypes, que facilitará nosso trabalho e irá fazer a modificação automaticamente, gerando uma redução fantástica no consumo de memória em suas consultas de datasets, como mostra o código a seguir:

# Importando a biblioteca
from dtype_diet import optimize_dtypes
# Salvando os tipos
otimizando_df = report_on_dataframe(flights, unit="MB")
flights_optimizes = optimize_dtypes(flights, otimizando_df)
#Analisando a diferença no consumo de memória
print(f'Dataset Original:
{flights.memory_usage(deep=True).sum()/1024/1024} MB')
print(f'Dataset Modificado:
{flights_optimizes.memory_usage(deep=True).sum()/1024/1024} MB')
---------------------------------------------------------------------------------------------
Dataset Original: 923.5110082626343 MB
Dataset Modificado: 116.86437797546387 MB

A redução no consumo de memória na consulta do dataset foi bem significativa, o que vai gerar melhor eficiência ao realizar seus modelos e análises de dados.

Como Automatizar o Processo de Consulta?

Uma das maneiras de automatizar o processo de consulta é criar um script Python. Se você souber como programar em Python, pode escrever um script que fará a consulta para você. O script Python será executado automaticamente e poderá ser configurado para executar a consulta sempre que o conjunto de dados for atualizado.

Outra maneira de automatizar o processo de consulta é usando um software chamado “Pandas Profiler”. O Pandas Profiler é um software que foi criado especificamente para analisar grandes conjuntos de dados do Pandas. Ele pode ser configurado para executar uma variedade de tarefas, incluindo a execução de consultas.

Conclusão

Ao trabalhar com grandes conjuntos de dados, é importante considerar algumas dicas para melhorar a performance. Neste artigo, apresentamos algumas maneiras de otimizar o uso do Pandas e do Python para analisar grandes conjuntos de dados.

Primeiro, quando estiver carregando os dados em um DataFrame, certifique-se de especificar o tipo de dado para cada coluna. Isso pode ser feito no momento da leitura dos dados ou após o carregamento, usando o método .astype(). Além disso, tente usar as funções nativas do Pandas sempre que possível. Por exemplo, a função .groupby() é implementada de forma eficiente e pode ser mais rápida que um loop for.

Outra dica importante é evitar a criação de novas colunas durante a manipulação dos dados. Em vez disso, tente manipular os dados existentes nas colunas para obter os resultados desejados.

Se quiser ler mais sobre tema veja estes artigos aqui>

Qualquer dúvida, opinião, sugestão ou correção, entre em contato comigo no LinkedIn!

Até mais! 😉