Python tornou-se uma das linguagens mais utilizadas para análise de dados, ciência de dados e computação científica, graças a um ecossistema robusto de bibliotecas especializadas. Nesta aula, vamos explorar as bibliotecas fundamentais para manipulação e análise de dados — NumPy e Pandas — e entender quando utilizá-las, além de conhecer o contexto mais amplo do ecossistema científico que as cerca.

Dominar essas ferramentas é essencial para qualquer profissional que deseje trabalhar com dados de forma eficiente. Elas fornecem estruturas de dados otimizadas, funções matemáticas de alto desempenho e integração com outras bibliotecas, permitindo desde a limpeza e transformação de dados até análises estatísticas complexas e visualizações.

NumPy e Pandas (panorama)

NumPy (Numerical Python) é a biblioteca fundamental para computação numérica em Python. Ela introduz o objeto ndarray, um array multidimensional homogêneo que oferece operações vetorizadas de alta performance, muito mais rápidas que listas nativas do Python para cálculos numéricos. NumPy também fornece funções matemáticas, geração de números aleatórios, álgebra linear e transformadas de Fourier, entre outros.

Pandas é construída sobre o NumPy e oferece estruturas de dados de alto nível, como Series (vetor unidimensional com rótulos) e DataFrame (tabela bidimensional com linhas e colunas rotuladas). Essas estruturas facilitam a manipulação de dados tabulares, com funcionalidades para indexação, seleção, filtragem, agrupamento, junção e tratamento de valores ausentes. Enquanto NumPy foca em arrays numéricos, Pandas é voltada para dados estruturados e heterogêneos, comuns em arquivos CSV, Excel e bancos de dados.

import numpy as np
import pandas as pd

# Criando um array NumPy
arr = np.array([1, 2, 3, 4])
print(arr * 2)  # [2 4 6 8]

# Criando uma Series Pandas
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s)

# Criando um DataFrame
df = pd.DataFrame({
    'nome': ['Ana', 'Bruno', 'Carla'],
    'idade': [25, 30, 35]
})
print(df)

Quando usar

A escolha entre NumPy, Pandas ou outras bibliotecas depende do tipo de dado e da operação que você precisa realizar. Use NumPy quando estiver lidando com arrays numéricos homogêneos e precisar de operações matemáticas eficientes, como multiplicação de matrizes, álgebra linear ou transformações numéricas. É a base para muitas outras bibliotecas, então é comum usá-lo em conjunto.

Use Pandas quando seus dados forem tabulares, com tipos mistos (números, strings, datas), e você precisar de funcionalidades de manipulação de dados, como agregações, filtros, junções ou tratamento de dados faltantes. Pandas é a ferramenta ideal para a fase de preparação e limpeza de dados, antes de análises estatísticas ou modelagem. Em resumo: se você tem uma planilha ou tabela, Pandas é a escolha natural; se você tem arrays numéricos e precisa de performance matemática, NumPy é mais adequado.

# Exemplo: quando usar Pandas (dados heterogêneos)
import pandas as pd

dados = {
    'produto': ['Notebook', 'Mouse', 'Teclado'],
    'preco': [3500.00, 120.50, 250.00],
    'estoque': [10, 50, 30]
}
df = pd.DataFrame(dados)

# Filtrando produtos com preço acima de 200
print(df[df['preco'] > 200])

# Agrupando por produto e somando estoque
print(df.groupby('produto')['estoque'].sum())

Ecossistema científico

NumPy e Pandas são peças centrais de um ecossistema maior de bibliotecas científicas em Python. Este ecossistema inclui SciPy (para computação científica avançada, como otimização e integração), Matplotlib e Seaborn (para visualização de dados), scikit-learn (para aprendizado de máquina), Statsmodels (para estatísticas e modelagem econométrica) e muitos outros. Essas bibliotecas são projetadas para trabalhar em conjunto: Pandas pode fornecer DataFrames, que são facilmente convertidos em arrays NumPy para alimentar algoritmos de scikit-learn, e os resultados podem ser visualizados com Matplotlib.

Além disso, ferramentas como Jupyter Notebook e JupyterLab proporcionam um ambiente interativo que integra código, visualizações e texto, tornando-se o padrão de fato para análise de dados em Python. O ecossistema é mantido por comunidades ativas e organizações como NumFOCUS, que apoiam o desenvolvimento sustentável dessas bibliotecas.

# Exemplo de integração: NumPy + Pandas + Matplotlib
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Dados com NumPy
x = np.linspace(0, 10, 100)
y = np.sin(x)

# Criando um DataFrame
df = pd.DataFrame({'x': x, 'y': y})

# Plotando com Matplotlib
plt.plot(df['x'], df['y'])
plt.title('Seno de x')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.grid(True)
plt.show()

Recursos

Para aprofundar seus conhecimentos, existem inúmeros recursos online, incluindo documentação oficial, tutoriais, cursos e livros. A documentação oficial de NumPy e Pandas é extremamente detalhada e repleta de exemplos. Além disso, sites como Real Python, Towards Data Science e Kaggle oferecem artigos e notebooks práticos. Livros como "Python para Análise de Dados" de Wes McKinney (criador do Pandas) são leituras recomendadas.

É importante também praticar com conjuntos de dados reais, como os disponíveis no Kaggle ou no UCI Machine Learning Repository. A comunidade Python é muito ativa, e fóruns como Stack Overflow podem ajudar a resolver dúvidas específicas. Participar de grupos locais ou online também é uma ótima forma de aprender e trocar experiências.

Boas práticas

Ao trabalhar com bibliotecas de dados, algumas boas práticas podem melhorar a eficiência e a legibilidade do seu código. Primeiro, sempre importe as bibliotecas com aliases convencionais (como import numpy as np e import pandas as pd) para manter o código conciso. Use métodos vetorizados do NumPy em vez de loops Python sempre que possível, pois são muito mais rápidos. No Pandas, prefira operações de vectorized string e groupby a iterações com for.

Além disso, mantenha seus dados organizados: use nomes de colunas claros, defina índices adequados e documente as transformações. Ao lidar com dados ausentes, decida conscientemente entre remoção, preenchimento ou interpolação, justificando a escolha. Por fim, explore a documentação e o código-fonte das bibliotecas para entender melhor o funcionamento interno e descobrir funcionalidades avançadas.

Exercícios

  1. Crie um array NumPy com os números de 1 a 10 e calcule a média, a soma e o produto de todos os elementos.

    ✓ Resposta:
    import numpy as np
    arr = np.arange(1, 11)
    print("Média:", arr.mean())
    print("Soma:", arr.sum())
    print("Produto:", arr.prod())
  2. Usando Pandas, crie um DataFrame com 3 colunas (nome, idade, cidade) e 4 linhas de dados fictícios. Em seguida, filtre as linhas onde a idade é maior que 30.

    ✓ Resposta:
    import pandas as pd
    
    df = pd.DataFrame({
        'nome': ['Ana', 'Bruno', 'Carla', 'Diego'],
        'idade': [25, 35, 28, 32],
        'cidade': ['SP', 'RJ', 'BH', 'POA']
    })
    
    filtro = df[df['idade'] > 30]
    print(filtro)
  3. Explique a diferença fundamental entre um array NumPy e uma Series do Pandas, e dê um exemplo de situação em que você preferiria usar cada um.

    ✓ Resposta:

    Um array NumPy é uma estrutura de dados homogênea e multidimensional, otimizada para operações numéricas vetorizadas. Uma Series do Pandas é um vetor unidimensional com rótulos (índice), que pode conter dados de tipos diferentes (heterogêneos) e possui métodos de manipulação de dados mais convenientes. Prefira NumPy para cálculos numéricos intensivos (ex.: multiplicação de matrizes) e Pandas para dados rotulados ou tabulares, como séries temporais ou dados de planilhas.

  4. Escreva um código que leia um arquivo CSV chamado 'dados.csv' usando Pandas, exiba as primeiras 5 linhas e a contagem de valores nulos em cada coluna.

    ✓ Resposta:
    import pandas as pd
    
    df = pd.read_csv('dados.csv')
    print(df.head())
    print(df.isnull().sum())
  5. Como você integraria NumPy, Pandas e Matplotlib em um fluxo de análise de dados? Descreva um exemplo concreto, incluindo código.

    ✓ Resposta:

    Exemplo: carregar dados com Pandas, realizar cálculos com NumPy e visualizar com Matplotlib.

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    # Carregar dados
    df = pd.read_csv('vendas.csv')
    
    # Calcular média móvel com NumPy
    media_movel = np.convolve(df['vendas'], np.ones(7)/7, mode='valid')
    
    # Plotar
    plt.plot(df['data'][6:], media_movel)
    plt.title('Média móvel de vendas')
    plt.show()

Referências