Integrando Python Pandas com ChatGPT: Uma nova fronteira

Utilizar bibliotecas poderosas como Pandas e integrá-las com ferramentas como ChatGPT pode aumentar substancialmente a produtividade e agilizar o processo de análise dos dados organizacionais.

🕒 Tempo estimado de leitura: 7 minutos

Nos últimos anos tenho ensinado Python e focado especificamente em Pandas. Recentemente, descobri um novo projeto interessante chamado PandasAI. Esta biblioteca inovadora permite que você escreva consultas em Português, que são então automaticamente traduzidas em comandos Python Pandas. Eu experimentei o PandasAI e descobri alguns resultados interessantes.

O PandasAI é ótimo para cientistas de dados, analistas e engenheiros que gostariam de se envolver com dados de forma mais rápida. Isso é especialmente útil se você for iniciante e não entender como SQL ou Python funcionam ou se você for capaz de passar semanas fazendo manipulação de dados. A eficiência de consulta de linguagem natural também é adicionada para profissionais experientes que também podem achar isso útil.

Todos os exemplos também são explicados aqui 👨‍🔬, um notebook Google Colab para tornar seu aprendizado ainda mais interativo.

O que é PandasAI?

O PandasAI é um software Python de código aberto para dados rotulados, que permite consultar seus dados com linguagem natural. Ele não apenas traduz suas perguntas em código Python Pandas, mas também tem vários outros recursos que tornam a análise de dados mais eficiente e também mais completa.

Principais recursos do PandasAI

  • Consulta em linguagem natural: permite que você faça perguntas em palavras simples, sem terminologias de alto nível.

  • Visualização de dados: ferramentas simples e eficazes que são úteis na geração de gráficos e tabelas para o esclarecimento dos dados com os quais você está lidando.

  • Limpeza de dados: é útil especialmente ao lidar com conjuntos de dados com valores ausentes.

  • Geração de recursos: melhora a qualidade dos dados inseridos criando novas variáveis.

  • Conectores de dados: há uma conexão com diferentes origens dados, como CSV, XLSX, PostgreSQL, MySQL, BigQuery, Databricks, Snowflake, etc.

Como funciona

O PandasAI usa um tipo de IA generativa que discerne o significado da pergunta de um usuário e a traduz em código Python e consultas SQL. Seus dados reais então são processados com esse código e fornecem os resultados que você deseja.

Projeto em Ação: Da Teoria à Prática

Os conjuntos de dados e exemplos de consulta apresentados aqui foram originalmente apresentados no artigo Trabalhando com dados em Python: do básico ao avançado. Se você ainda não se sente confortável com o Python Pandas, recomendo fortemente que revise esse artigo.

# Executar a seguinte linha instalará a biblioteca 'pandasai'
!pip install pandasai
# Importe a biblioteca pandas, comumente usada para manipulação e análise de dados
import pandas as pd

# Importe o módulo pyplot da biblioteca matplotlib, usado para plotagem e visualização
import matplotlib.pyplot as plt

# Importe a classe Agent do módulo pandasai, que pode interagir com modelos de linguagem grandes (LLMs)
from pandasai import Agent

# Importe a classe SmartDataframe do módulo pandasai, que adiciona recursos aprimorados de manipulação de dados
from pandasai import SmartDataframe

# Importe a classe OpenAI dentro do submódulo pandasai.llm.openai, que permite a interface com os modelos de linguagem do OpenAI
from pandasai.llm.openai import OpenAI

Após concluir a instalação, podemos começar nosso experimento PandasAI.

Ler Dados

# Leia dados de um arquivo CSV disponível na URL fornecida e armazene-os em um DataFrame chamado vendas_df
# A função read_csv busca os dados e os estrutura em um formato adequado para análise
vendas_df = pd.read_csv('https://infinitepy.s3.amazonaws.com/samples/dados_vendas.csv')

Inspecionar Dados

# 'head()' é um método embutido no DataFrame do pandas que retorna as primeiras n linhas.
# Por padrão, ele retorna as primeiras 5 linhas. Você pode especificar um número diferente como argumento, como 'head(10)' para as primeiras 10 linhas.
vendas_df.head()

Inspecionar Dados.

🤖 Criando um SmartDataframe

SmartDataframe é uma classe da biblioteca pandasai.llm.openai, que faz parte do ecossistema PandasAI. Esta classe em particular aproveita os recursos de Large Language Models (LLMs), como o GPT da OpenAI, para executar operações avançadas de data frame que normalmente exigem um profundo entendimento do contexto de dados ou podem ser muito complexas para implementar usando métodos tradicionais. Isso permite que você execute operações e consultas complexas em seus data frames usando comandos de linguagem natural.

Caso você não tenha uma chave de API OpenAI, neste artigo aqui, nós o guiaremos pelo processo de geração de sua chave de API OpenAI para ChatGPT.

# Importando o módulo 'userdata' do google.colab, que permite que você acesse dados específicos do usuário.
from google.colab import userdata

# Buscando a chave da API OpenAI dos dados do usuário armazenados no Google Colab.
api_token = userdata.get('OPENAI_API_KEY')

# Criando uma instância da classe OpenAI passando o token da API.
# Esta instância será usada para interagir com o modelo de linguagem do OpenAI (LLM).
llm = OpenAI(api_token=api_token)

# Encapsulando um DataFrame existente (vendas_df) em um objeto SmartDataframe.
# Passamos a instância 'llm' como parte da configuração para habilitar recursos de linguagem natural ou outros recursos alimentados pelo modelo OpenAI.
vendas_smart_df = SmartDataframe(vendas_df, config={"llm": llm})

Agora que configuramos tudo, vamos começar nossa comparação entre a maneira tradicional de trabalhar com o Python Pandas 🐼 e a abordagem inovadora de Consulta em Linguagem Natural com o PandasAI 🤖.

1️⃣ Remover duplicatas e preencher valores ausentes

🐼 Método tradicional
# Remova linhas duplicadas do DataFrame 'vendas_df' no local.
# Isso significa que quaisquer linhas duplicadas serão removidas diretamente do objeto 'vendas_df', e nenhuma cópia do DataFrame será criada.
vendas_df.drop_duplicates(inplace=True)

# Preencha quaisquer valores ausentes (NaN) no DataFrame 'vendas_df' com 0.
# O parâmetro 'inplace=True' significa que o DataFrame será modificado diretamente, sem criar uma cópia.
vendas_df.fillna(0, inplace=True)
vendas_df
🤖 Consulta em linguagem natural com PandasAI
vendas_smart_df.chat("Remover duplicatas e preencha valores ausentes")

2️⃣ Calcular vendas totais por região

🐼 Método tradicional
# Use groupby() para agrupar os dados pela coluna 'Região'
# Em seguida, encadeie .sum() para calcular as vendas totais para cada região
total_vendas_por_regiao = vendas_df.groupby('Região')['Vendas'].sum()

# Imprime o resultado que mostra as vendas totais por região
total_vendas_por_regiao
🤖 Consulta em linguagem natural com PandasAI
vendas_smart_df.chat("Calcular vendas totais por região")

Vendas totais por região.

Total de vendas por região.

3️⃣ Encontrar os 5 principais produtos por vendas

🐼 Método tradicional
# Agrupe os dados de vendas pelo 'Produto' e some as 'Vendas' para cada produto.
vendas_por_produtos_df = vendas_df.groupby('Produto')['Vendas'].sum()

# Ordene as vendas somadas em ordem decrescente para obter os produtos mais vendidos no topo.
vendas_ordenadas_por_produtos_mais_vendidos_df = vendas_por_produtos_df.sort_values(ascending=False)

# Selecione os 5 principais produtos com as maiores vendas.
cinco_produtos_com_mais_vendas_df = vendas_ordenadas_por_produtos_mais_vendidos_df.head(5)

# Imprime o resultado para ver os nomes e as vendas dos 5 principais produtos.
cinco_produtos_com_mais_vendas_df

5 principais produtos por vendas.

🤖 Consulta em linguagem natural com PandasAI

Ao executar essa consulta em Português, ocorreu o seguinte erro.

Unfortunately, I was not able to get your answers, because of the following error:

The query contains references to io or os modules or b64decode method which can be used to execute or access system resources in unsafe ways.

Tentei reformular a frase de várias maneiras, mas o erro persistiu. Exemplos de reformulação:

  • Ordenar por ordem de vendas os produtos mais vendidos.

  • Quais foram os 5 produtos mais vendidos.

  • Encontrar os 5 principais produtos mais vendidos.

No entanto, quando a consulta foi executada em Inglês com os dados também em Inglês, funcionou perfeitamente, conforme apresentado aqui.

4️⃣ Calculando a tendência de vendas mensalmente para cada região

🐼 Método tradicional
# Descartar duplicatas e encaminhar preencher valores faltantes
vendas_df.drop_duplicates(inplace=True)
vendas_df.fillna(method='ffill', inplace=True)

# Definir a ordem cronológica correta para os meses
month_order = ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro']

# Converter a coluna 'Mês' para um tipo categórico com a ordem especificada
vendas_df['Mês'] = pd.Categorical(vendas_df['Mês'], categories=month_order, ordered=True)

# Tabela dinâmica para calcular o total de vendas por mês para cada região
monthly_sales = vendas_df.pivot_table(index='Mês', columns='Região', values='Vendas', aggfunc='sum')

# Filtrar o DataFrame para incluir apenas dados de janeiro a junho
filtered_monthly_vendas_df = monthly_sales.loc['Janeiro':'Junho']

# Plotar a tendência de vendas mensal para cada região
fig, ax = plt.subplots(figsize=(12, 8))
filtered_monthly_vendas_df.plot(kind='line', marker='o', ax=ax)
plt.title('Tendência de vendas mensal por região (janeiro a Junho)')
plt.xlabel('Mês')
plt.ylabel('Vendas')
plt.legend(title='Região')
plt.xticks(rotation=45)
plt.grid(True)
plt.show()
🤖 Consulta em linguagem natural com PandasAI
vendas_smart_df.chat("Calcular até o mês de junho, a tendência de vendas mensalmente para cada região")

Tendência de vendas mensal por região (janeiro a Junho).

5️⃣ Participação nas vendas por produto

🐼 Método tradicional
# Calcular a participação nas vendas de cada produto
sales_share = vendas_df.groupby('Produto')['Vendas'].sum() / vendas_df['Vendas'].sum() * 100

# Plotar a participação nas vendas como um gráfico de pizza
sales_share.plot(kind='pie', autopct='%1.1f%%', figsize=(8, 8))
plt.title('Participação nas vendas por produto')
plt.ylabel('') # Ocultar o rótulo y
plt.show()
🤖 Consulta em linguagem natural com PandasAI
vendas_smart_df.chat("Gráfico de pizza da participação nas vendas por produto")

Participação nas vendas por produto.

Conclusão

A integração entre Pandas e ChatGPT por meio do PandasAI possibilita a criação de soluções de processamento de dados eficientes e interativas, simplificando cálculos complexos de aprendizado de máquina com uma interface de linguagem natural.

Passamos pelas etapas básicas de carregamento de dados com Pandas e avançamos até análises mais complexas utilizando o ChatGPT, oferecendo um recurso tanto para iniciantes quanto para especialistas. Este guia visa ajudar você a gerenciar e aproveitar ao máximo ambas as tecnologias.

Na prática, essa integração é altamente promissora, permitindo que analistas de dados e desenvolvedores obtenham insights mais ricos e detalhados em menos tempo. Continue experimentando com diferentes conjuntos de dados e prompts para explorar as vastas possibilidades que a combinação dessas ferramentas pode oferecer.

🔔 Assine o InfinitePy Newsletter para mais recursos e uma abordagem passo a passo para aprender Python, e fique atualizado com as últimas tendências e dicas práticas.

InfinitePy Newsletter - Sua fonte de aprendizado e inspiração em Python.