Python para Análise de Dados: Introdução ao Pandas e NumPy

Introdução

Você já se perguntou como as empresas conseguem entender montanhas de dados para tomar decisões? Ou como cientistas extraem informações valiosas de pesquisas com milhares de participantes? A resposta está nas ferramentas de análise de dados, e o Python se tornou um dos principais aliados nessa tarefa.

Python conquistou uma posição de destaque no mundo da análise de dados por sua simplicidade e poder. Mesmo se você nunca programou antes, pode aprender a usar essa linguagem para entender dados de todos os tipos. Neste artigo, vamos explorar como o Python, especialmente com as bibliotecas Pandas e NumPy, pode transformar a maneira como você trabalha com informações.

A análise de dados não é mais exclusiva de especialistas em estatística ou programação avançada. Com as ferramentas certas, qualquer pessoa pode extrair conhecimento valioso de conjuntos de dados. Vamos descobrir como começar essa jornada de forma prática e acessível.

Por que Python para Análise de Dados?

Antes de mergulharmos nas bibliotecas específicas, vamos entender por que o Python se tornou tão popular para análise de dados:

Simplicidade de aprendizado: A sintaxe do Python é clara e legível, parecendo quase com o inglês cotidiano. Isso torna a curva de aprendizado muito menos íngreme que outras linguagens de programação.

Comunidade ativa: Milhões de usuários pelo mundo compartilham código, respondem dúvidas e criam tutoriais. Quando você encontrar um problema, provavelmente alguém já encontrou a solução.

Ecossistema rico: Python possui bibliotecas específicas para praticamente qualquer tarefa de análise de dados que você possa imaginar. Das mais básicas às mais avançadas.

Versatilidade: Além da análise de dados, Python serve para desenvolvimento web, automação, inteligência artificial e muito mais. Uma habilidade que abre muitas portas.

Gratuito e de código aberto: Não é necessário pagar licenças caras. Todo o ecossistema é gratuito e mantido pela comunidade.

Segundo uma pesquisa da Stack Overflow de 2023, Python continua sendo uma das linguagens de programação mais amadas pelos desenvolvedores, especialmente para ciência de dados. Isso se traduz em mais recursos disponíveis e melhores oportunidades profissionais para quem domina essas habilidades.

Preparando o Ambiente

Antes de começarmos a explorar as bibliotecas, precisamos configurar nosso ambiente de trabalho. Não se preocupe, é mais simples do que parece:

Instalação do Python

O primeiro passo é instalar o Python em seu computador. Recomendo a versão mais recente (3.10 ou superior), disponível no site oficial do Python.

Durante a instalação no Windows, marque a opção “Add Python to PATH”. Isso permitirá que você execute comandos Python de qualquer pasta do seu computador.

Ambiente Virtual (Recomendado)

Para manter seus projetos organizados, é recomendável criar um ambiente virtual para cada projeto. Pense nele como uma “sala limpa” onde você instala apenas o que precisa para aquele projeto específico. Para criar um:

Bash
# No Windows
python -m venv meu_ambiente

# No Mac/Linux
python3 -m venv meu_ambiente

# Para ativar (Windows)
meu_ambiente\Scripts\activate

# Para ativar (Mac/Linux)
source meu_ambiente/bin/activate

Instalando as Bibliotecas

Com o ambiente virtual ativado, podemos instalar as bibliotecas necessárias:

pip install numpy pandas matplotlib jupyter

Esta linha instala:

  • NumPy: para cálculos numéricos eficientes
  • Pandas: para manipulação e análise de dados
  • Matplotlib: para visualização de dados
  • Jupyter: para criar documentos interativos

Jupyter Notebook

Para seguir este tutorial de forma interativa, recomendo usar o Jupyter Notebook. Depois de instalá-lo conforme acima, você pode iniciá-lo com:

jupyter notebook

Isso abrirá uma janela do navegador onde você pode criar um novo notebook Python. Os notebooks permitem misturar código, resultados e explicações em um único documento, sendo ideais para aprendizado e experimentação.

NumPy: A Base da Pirâmide

NumPy (Numerical Python) é a biblioteca fundamental para computação científica em Python. Ela fornece estruturas de dados de alto desempenho e ferramentas para trabalhar com arrays multidimensionais.

O que é um Array?

Um array é simplesmente uma coleção de elementos do mesmo tipo, organizados em uma estrutura. Pense nele como uma tabela ou matriz que pode ter uma ou mais dimensões.

Vamos começar com alguns exemplos simples:

Python
import numpy as np

# Criando um array unidimensional (vetor)
vetor = np.array([1, 2, 3, 4, 5])
print(vetor)
# Saída: [1 2 3 4 5]

# Criando um array bidimensional (matriz)
matriz = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matriz)
# Saída:
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]

Vantagens dos Arrays NumPy

Os arrays NumPy oferecem várias vantagens sobre as listas comuns do Python:

Eficiência de memória: Os arrays NumPy armazenam dados de forma compacta, usando menos memória que listas Python.

Velocidade: Operações em arrays são muito mais rápidas, especialmente para grandes conjuntos de dados.

Vetorização: Você pode aplicar operações em todo o array de uma vez, sem precisar usar loops.

Funções matemáticas integradas: NumPy vem com centenas de funções matemáticas otimizadas.

Operações Básicas com NumPy

Vamos explorar algumas operações comuns:

Python
# Arrays com valores específicos
zeros = np.zeros(5)  # Array de 5 zeros
print(zeros)  # [0. 0. 0. 0. 0.]

ones = np.ones((2, 3))  # Matriz 2x3 de uns
print(ones)
# [[1. 1. 1.]
#  [1. 1. 1.]]

# Sequências
sequencia = np.arange(0, 10, 2)  # De 0 a 10, pulando de 2 em 2
print(sequencia)  # [0 2 4 6 8]

# Operações matemáticas em arrays
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

print(a + b)  # [5 7 9]
print(a * b)  # [4 10 18]
print(a ** 2)  # [1 4 9] (elevado ao quadrado)

# Funções estatísticas
dados = np.array([15, 23, 42, 37, 18, 25])
print(np.mean(dados))  # Média: 26.666666666666668
print(np.median(dados))  # Mediana: 24.0
print(np.std(dados))  # Desvio padrão: 10.13

Indexação e Fatiamento

A maneira como acessamos elementos em arrays NumPy é poderosa e flexível:

Python
# Considere esta matriz
m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Acessando um elemento específico (linha, coluna)
print(m[0, 1])  # 2

# Selecionando uma linha inteira
print(m[1])  # [4 5 6]

# Selecionando uma coluna inteira
print(m[:, 2])  # [3 6 9]

# Fatiamento (slicing)
print(m[0:2, 1:3])  
# [[2 3]
#  [5 6]]

Aplicação Prática: Análise de Temperatura

Vamos usar NumPy para analisar dados de temperatura mensal:

Python
# Temperaturas médias mensais em uma cidade (em °C)
temperaturas = np.array([22, 24, 25, 23, 21, 18, 16, 17, 19, 21, 22, 23])
meses = ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"]

# Estatísticas básicas
print(f"Temperatura média anual: {np.mean(temperaturas):.1f}°C")
print(f"Mês mais quente: {meses[np.argmax(temperaturas)]} ({np.max(temperaturas)}°C)")
print(f"Mês mais frio: {meses[np.argmin(temperaturas)]} ({np.min(temperaturas)}°C)")

# Comparando com a média
acima_da_media = temperaturas > np.mean(temperaturas)
meses_quentes = [meses[i] for i in range(len(meses)) if acima_da_media[i]]
print(f"Meses acima da média: {meses_quentes}")

Esta análise simples já mostra o poder do NumPy para trabalhar com dados numéricos. Na vida real, você poderia usar isso para identificar padrões climáticos ou planejar atividades sazonais.

Pandas: Domando Seus Dados

Enquanto o NumPy é excelente para cálculos numéricos, o Pandas brilha na manipulação e análise de dados estruturados. O nome “Pandas” vem de “Panel Data” (dados em painel), refletindo sua capacidade de lidar com dados tabulares.

As Estruturas Principais do Pandas

O Pandas possui duas estruturas de dados principais:

Series: Uma coluna única de dados, semelhante a um array unidimensional com índices.

DataFrame: Uma tabela de dados bidimensional com linhas e colunas nomeadas, semelhante a uma planilha Excel ou uma tabela SQL.

Vamos explorar ambas:

Python
import pandas as pd

# Criando uma Series
idades = pd.Series([25, 30, 35, 40], index=["Ana", "Bruno", "Carla", "Daniel"])
print(idades)
# Ana       25
# Bruno     30
# Carla     35
# Daniel    40
# dtype: int64

# Acessando valores
print(idades["Carla"])  # 35

# Criando um DataFrame
dados = {
    "Nome": ["Ana", "Bruno", "Carla", "Daniel"],
    "Idade": [25, 30, 35, 40],
    "Cidade": ["São Paulo", "Rio de Janeiro", "Belo Horizonte", "Brasília"]
}

df = pd.DataFrame(dados)
print(df)
#      Nome  Idade          Cidade
# 0     Ana     25       São Paulo
# 1   Bruno     30  Rio de Janeiro
# 2   Carla     35  Belo Horizonte
# 3  Daniel     40        Brasília

Importando Dados

Uma das funcionalidades mais úteis do Pandas é a capacidade de importar dados de várias fontes:

Python
# Importar de CSV
# df = pd.read_csv("dados.csv")

# Importar de Excel
# df = pd.read_excel("dados.xlsx")

# Importar de uma URL
url = "https://raw.githubusercontent.com/datasets/covid-19/master/data/countries-aggregated.csv"
covid_df = pd.read_csv(url)

Para este exemplo, vamos criar um DataFrame manualmente que simula dados de vendas:

Python
# Dados de vendas mensais por produto
dados_vendas = {
    "Data": pd.date_range(start="2023-01-01", periods=12, freq="M"),
    "Produto A": [120, 135, 145, 125, 115, 140, 150, 160, 165, 175, 185, 190],
    "Produto B": [90, 85, 100, 110, 115, 125, 130, 140, 135, 145, 150, 155],
    "Produto C": [60, 70, 75, 65, 80, 85, 90, 95, 100, 110, 115, 120]
}

vendas_df = pd.DataFrame(dados_vendas)
vendas_df["Data"] = vendas_df["Data"].dt.strftime("%Y-%m")
print(vendas_df.head())

Explorando os Dados

O Pandas oferece muitas ferramentas para explorar e entender seus dados:

Python
# Informações sobre o DataFrame
print(vendas_df.info())

# Estatísticas resumidas
print(vendas_df.describe())

# Primeiras e últimas linhas
print(vendas_df.head(3))  # 3 primeiras linhas
print(vendas_df.tail(3))  # 3 últimas linhas

# Colunas e dimensões
print(vendas_df.columns)
print(vendas_df.shape)  # (12, 4) - 12 linhas, 4 colunas

Selecionando e Filtrando Dados

Vamos explorar como selecionar partes específicas dos dados:

Python
# Selecionando uma coluna
print(vendas_df["Produto A"])

# Selecionando múltiplas colunas
print(vendas_df[["Data", "Produto A"]])

# Filtrando linhas com condições
vendas_altas = vendas_df[vendas_df["Produto A"] > 150]
print(vendas_altas)

# Filtrando com múltiplas condições
filtro = (vendas_df["Produto A"] > 150) & (vendas_df["Produto B"] > 140)
vendas_filtradas = vendas_df[filtro]
print(vendas_filtradas)

Manipulando Dados

O Pandas facilita a transformação e manipulação de dados:

Python
# Adicionando uma nova coluna
vendas_df["Total"] = vendas_df["Produto A"] + vendas_df["Produto B"] + vendas_df["Produto C"]
print(vendas_df[["Data", "Total"]].head())

# Calculando o percentual de cada produto no total
for produto in ["Produto A", "Produto B", "Produto C"]:
    vendas_df[f"{produto} (%)"] = (vendas_df[produto] / vendas_df["Total"] * 100).round(1)

print(vendas_df.head())

Agrupamento e Resumo

Uma das operações mais poderosas do Pandas é o agrupamento de dados:

Python
# Criando um DataFrame com categorias
vendas_categoria = pd.DataFrame({
    "Data": pd.date_range(start="2023-01-01", periods=12, freq="M").strftime("%Y-%m"),
    "Categoria": ["Eletrônicos", "Roupas", "Alimentos", "Eletrônicos", 
                  "Roupas", "Alimentos", "Eletrônicos", "Roupas", 
                  "Alimentos", "Eletrônicos", "Roupas", "Alimentos"],
    "Vendas": [5000, 3000, 2000, 5500, 3200, 2100, 
               6000, 3500, 2300, 6200, 3800, 2500]
})

# Agrupando por categoria e calculando a média
media_por_categoria = vendas_categoria.groupby("Categoria")["Vendas"].mean()
print(media_por_categoria)

# Agrupando e aplicando múltiplas funções
resumo = vendas_categoria.groupby("Categoria")["Vendas"].agg(["sum", "mean", "min", "max"])
print(resumo)

Tratando Dados Ausentes

Dados do mundo real frequentemente têm valores ausentes. O Pandas tem ferramentas para lidar com isso:

Python
# Criando dados com valores ausentes
dados_incompletos = pd.DataFrame({
    "A": [1, 2, None, 4, 5],
    "B": [None, 2, 3, None, 5],
    "C": [1, 2, 3, 4, 5]
})

# Verificando valores ausentes
print(dados_incompletos.isna().sum())

# Preenchendo valores ausentes
preenchido_media = dados_incompletos.fillna(dados_incompletos.mean())
print(preenchido_media)

# Removendo linhas com valores ausentes
sem_nulos = dados_incompletos.dropna()
print(sem_nulos)

Aplicação Prática: Análise de Vendas

Vamos usar o Pandas para extrair insights dos dados de vendas que criamos:

Python
# Calculando o crescimento mensal
vendas_df["Crescimento Total"] = vendas_df["Total"].pct_change() * 100
print(vendas_df[["Data", "Total", "Crescimento Total"]].dropna())

# Identificando o melhor mês para cada produto
melhor_mes = {}
for produto in ["Produto A", "Produto B", "Produto C"]:
    indice_max = vendas_df[produto].idxmax()
    melhor_mes[produto] = vendas_df.loc[indice_max, "Data"]

print("Melhor mês de vendas por produto:")
for produto, mes in melhor_mes.items():
    print(f"{produto}: {mes}")

# Análise de tendência
print("\nTendência de vendas (primeiro vs último trimestre):")
primeiro_tri = vendas_df.iloc[0:3]["Total"].mean()
ultimo_tri = vendas_df.iloc[-3:]["Total"].mean()
variacao = ((ultimo_tri - primeiro_tri) / primeiro_tri) * 100
print(f"Crescimento trimestral: {variacao:.1f}%")

Integração NumPy e Pandas

Embora tenhamos discutido NumPy e Pandas separadamente, eles trabalham muito bem juntos. Na verdade, o Pandas usa o NumPy por baixo dos panos.

Python
# Convertendo DataFrame para array NumPy
array_vendas = vendas_df[["Produto A", "Produto B", "Produto C"]].to_numpy()
print(array_vendas)

# Aplicando funções NumPy em DataFrames Pandas
vendas_df["Média Móvel"] = pd.Series(
    np.convolve(vendas_df["Total"], np.ones(3)/3, mode='valid'),
    index=vendas_df.index[2:]
)
print(vendas_df[["Data", "Total", "Média Móvel"]].tail())

Visualização de Dados

A visualização é uma parte essencial da análise de dados. Vamos usar o Matplotlib, que funciona bem com NumPy e Pandas:

Python
import matplotlib.pyplot as plt

# Visualização simples
plt.figure(figsize=(12, 6))
plt.plot(vendas_df["Data"], vendas_df["Produto A"], label="Produto A")
plt.plot(vendas_df["Data"], vendas_df["Produto B"], label="Produto B")
plt.plot(vendas_df["Data"], vendas_df["Produto C"], label="Produto C")
plt.title("Vendas Mensais por Produto")
plt.xlabel("Mês")
plt.ylabel("Unidades Vendidas")
plt.legend()
plt.grid(True)
plt.xticks(rotation=45)
plt.tight_layout()

# Para mostrar o gráfico no Jupyter Notebook
# plt.show()

Ou podemos usar os métodos de visualização integrados do Pandas:

Python
# Gráfico de barras com Pandas
vendas_por_categoria = vendas_categoria.groupby("Categoria")["Vendas"].sum()
ax = vendas_por_categoria.plot.bar(
    title="Vendas Totais por Categoria",
    figsize=(10, 6)
)
ax.set_ylabel("Vendas (R$)")
ax.set_xlabel("Categoria")

# Para mostrar o gráfico no Jupyter Notebook
# plt.show()

Casos de Uso Reais

Vamos explorar alguns casos de uso reais para mostrar como NumPy e Pandas podem resolver problemas práticos:

Análise de Dados Financeiros

Python
# Simulando dados de ações
datas = pd.date_range(start="2023-01-01", periods=252, freq="B")  # Dias úteis
np.random.seed(42)  # Para resultados reproduzíveis

precos = pd.DataFrame({
    "Data": datas,
    "PETR4": 100 + np.cumsum(np.random.normal(0.05, 1, 252)),
    "VALE3": 200 + np.cumsum(np.random.normal(0.08, 1.2, 252)),
    "ITUB4": 50 + np.cumsum(np.random.normal(0.03, 0.8, 252))
})

# Calculando retornos diários
for acao in ["PETR4", "VALE3", "ITUB4"]:
    precos[f"Retorno_{acao}"] = precos[acao].pct_change() * 100

# Volatilidade (desvio padrão dos retornos)
volatilidade = precos[["Retorno_PETR4", "Retorno_VALE3", "Retorno_ITUB4"]].std()
print("Volatilidade das ações:")
print(volatilidade)

# Correlação entre os ativos
correlacao = precos[["PETR4", "VALE3", "ITUB4"]].corr()
print("\nCorrelação entre as ações:")
print(correlacao)

Análise de Dados de Marketing

Python
# Simulando dados de campanhas de marketing
campanhas = pd.DataFrame({
    "Campanha": ["A", "B", "C", "A", "B", "C", "A", "B", "C"],
    "Canal": ["Email", "Email", "Email", "Social", "Social", "Social", "Search", "Search", "Search"],
    "Investimento": [1000, 1500, 2000, 3000, 3500, 4000, 2000, 2500, 3000],
    "Impressoes": [5000, 6000, 7500, 15000, 17000, 20000, 8000, 9000, 10000],
    "Cliques": [250, 300, 375, 450, 510, 600, 400, 450, 500],
    "Conversoes": [20, 25, 30, 35, 40, 45, 30, 35, 40]
})

# Calculando métricas
campanhas["CTR"] = (campanhas["Cliques"] / campanhas["Impressoes"] * 100).round(2)
campanhas["Taxa_Conversao"] = (campanhas["Conversoes"] / campanhas["Cliques"] * 100).round(2)
campanhas["CPA"] = (campanhas["Investimento"] / campanhas["Conversoes"]).round(2)

# Análise por canal
metricas_por_canal = campanhas.groupby("Canal").agg({
    "CTR": "mean",
    "Taxa_Conversao": "mean",
    "CPA": "mean"
}).round(2)

print("Métricas por Canal:")
print(metricas_por_canal)

# Melhor campanha por métrica
melhor_ctr = campanhas.loc[campanhas["CTR"].idxmax()]
melhor_conversao = campanhas.loc[campanhas["Taxa_Conversao"].idxmax()]
melhor_cpa = campanhas.loc[campanhas["CPA"].idxmin()]

print("\nMelhor CTR:")
print(f"Campanha {melhor_ctr['Campanha']} no canal {melhor_ctr['Canal']}: {melhor_ctr['CTR']}%")

print("\nMelhor Taxa de Conversão:")
print(f"Campanha {melhor_conversao['Campanha']} no canal {melhor_conversao['Canal']}: {melhor_conversao['Taxa_Conversao']}%")

print("\nMelhor CPA (menor é melhor):")
print(f"Campanha {melhor_cpa['Campanha']} no canal {melhor_cpa['Canal']}: R${melhor_cpa['CPA']}")

Dicas para Aprofundamento

Para continuar seu aprendizado em análise de dados com Python, aqui estão algumas dicas:

Recursos Online Gratuitos

Conclusão

Neste artigo, exploramos o básico do Python para análise de dados, com foco nas bibliotecas NumPy e Pandas. Vimos como o NumPy fornece estruturas eficientes para cálculos numéricos, enquanto o Pandas oferece ferramentas poderosas para manipulação de dados estruturados.

A jornada de aprendizado em análise de dados é contínua, e estas ferramentas são apenas o começo. À medida que você se torna mais confortável com elas, poderá explorar técnicas mais avançadas como aprendizado de máquina, visualizações interativas e análises estatísticas complexas.

O mais importante é aplicar esses conhecimentos a problemas reais. Comece com questões simples e vá aumentando a complexidade gradualmente. Os dados estão em toda parte, esperando para revelar suas histórias – e agora você tem as ferramentas para começar a descobri-las.

Com prática consistente e curiosidade, você logo estará transformando dados brutos em informações valiosas, seja para uso pessoal, acadêmico ou profissional. O mundo da análise de dados espera por você!

Artigos recentes

Aprenda Python do Zero

Domine Python de forma prática e objetiva com um curso completo pensado para você

Cadastro gratuito

Conteúdo do artigo

    Aprenda Python Hoje Mesmo!

    Comece Gratuitamente!

    Cadastre-se e experimente algumas aulas grátis do nosso curso de Python. Sem compromisso!

    © Academify 2020-2025. Todos os direitos reservados.

    Informe seus dados e continue para o pagamento

    Suas informações estão 100% seguras

    Informe seus dados e continue para o pagamento

    Suas informações estão 100% seguras

    Teste gratuitamente as aulas do curso completo de Python

    🔒 Acesso imediato, sem spam e sem compromisso

    Experimente algumas aulas grátis!

    Digite seu e-mail e tenha acesso imediato a algumas aulas do Curso Completo de Python.

    🔒 Acesso imediato, sem spam e sem compromisso

    Abrir bate-papo
    1
    Tire suas dúvidas com a nossa equipe!
    Olá! 👋 Está com dúvidas sobre o curso? Fale com a nossa equipe!