🐍 Python para Análise de Dados

Seu guia completo para dominar análise de dados com Python

Explore as principais bibliotecas, aprenda dicas valiosas e acelere seus projetos de dados

Todas as Bibliotecas

Pandas
Principal biblioteca para manipulação de dados em tabelas (DataFrames). Essencial para limpeza, transformação e análise exploratória de dados. Ler arquivos .csv, arquivos excel (.xls) e etc.

# Lendo um arquivo .csv
import pandas as pd
df = pd.read_csv('dados.csv')
print(df.head())

# Lendo um arquivo .xlsx (Excel)
df_excel = pd.read_excel('seuarquivo.xlsx')

# Se o seu arquivo tiver mais de uma aba e você quiser ler uma aba específica,
# pode usar o parâmetro 'sheet_name'. Pode ser o nome da aba ou o índice (0 para a primeira aba, 1 para a segunda, etc.).
# df_excel_aba = pd.read_excel('seuarquivo.xlsx', sheet_name='NomeDaMinhaAba')
# ou
# df_excel_aba_indice = pd.read_excel('seuarquivo.xlsx', sheet_name=0)

print(df_excel.head())
📖 Documentação
NumPy
Base para computação científica em Python. Oferece arrays multidimensionais e funções matemáticas de alto desempenho.

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(np.mean(arr))
📖 Documentação
PyPDF2 & pdfplumber (Extração de PDF)
Ferramentas para extrair texto, metadados e tabelas de documentos PDF. PyPDF2 é ideal para texto e manipulação de páginas, enquanto pdfplumber é excelente para tabelas e texto com posições.

import PyPDF2
import pdfplumber

# Exemplo com PyPDF2 (texto simples)
def extract_text_pypdf2(pdf_path):
    text = ""
    with open(pdf_path, 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        for page in reader.pages:
            text += page.extract_text()
    return text

# Exemplo com pdfplumber (texto e tabelas)
def extract_data_pdfplumber(pdf_path):
    extracted_text = ""
    extracted_tables = []
    with pdfplumber.open(pdf_path) as pdf:
        for page in pdf.pages:
            extracted_text += page.extract_text() + "\n"
            tables = page.extract_tables()
            if tables:
                extracted_tables.extend(tables)
    return extracted_text, extracted_tables

pdf_text_pypdf2 = extract_text_pypdf2('documento.pdf')
# text, tables = extract_data_pdfplumber('documento_com_tabelas.pdf')
print("Texto PyPDF2 (trecho):", pdf_text_pypdf2[:200])
📖 Doc PyPDF2 📖 Doc pdfplumber
PyTesseract (OCR para PDF)
Utiliza o motor Tesseract OCR para converter imagens e PDFs escaneados em texto. Essencial para extrair informações de documentos que não possuem texto selecionável.

import pytesseract
import fitz # PyMuPDF para manipular PDFs
from PIL import Image
import io

# ATENÇÃO: Verifique se o Tesseract OCR está instalado no seu sistema!
# Especifique o caminho se necessário (ex: Windows):
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

def extract_text_from_scanned_pdf(pdf_path):
    text = ""
    pdf_document = fitz.open(pdf_path)
    for page_num in range(len(pdf_document)):
        page = pdf_document.load_page(page_num)
        pix = page.get_pixmap()
        img = Image.open(io.BytesIO(pix.pil_tobytes(format="png")))
        text += pytesseract.image_to_string(img, lang='por') # 'por' para português
    return text

scanned_pdf_content = extract_text_from_scanned_pdf('documento_digitalizado.pdf')
print("Texto OCR (trecho):", scanned_pdf_content[:200])
📖 Doc PyTesseract 📖 Doc PyMuPDF
Polars
Alternativa moderna ao Pandas, extremamente rápida para grandes volumes de dados. Utiliza Rust internamente.

import polars as pl
df = pl.read_csv('dados.csv')
print(df.head())
📖 Documentação
SciPy
Biblioteca científica com algoritmos e funções matemáticas avançadas para otimização, álgebra linear e estatística.

from scipy import stats
data = [1, 2, 3, 4, 5]
print(stats.describe(data))
📖 Documentação
DateTime
Biblioteca nativa do Python para manipulação de datas e horários. Essencial para análise temporal.

from datetime import datetime
now = datetime.now()
print(now.strftime('%Y-%m-%d'))
📖 Documentação
Missingno
Visualização e análise de dados faltantes em datasets. Oferece gráficos intuitivos para entender padrões de dados ausentes.

import missingno as msno
msno.matrix(df)
msno.bar(df)
📖 Documentação
Matplotlib
Biblioteca fundamental para criação de gráficos estáticos, animados e interativos em Python.

import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 2, 3])
plt.show()
📖 Documentação
Seaborn
Interface de alto nível para Matplotlib, especializada em visualizações estatísticas atrativas e informativas.

import seaborn as sns
sns.histplot(data=df, x='idade')
plt.show()
📖 Documentação
Plotly
Criação de gráficos interativos e dashboards. Ideal para visualizações web e apresentações dinâmicas.

import plotly.express as px
fig = px.bar(df, x='ano', y='vendas')
fig.show()
📖 Documentação
SweetViz
Gera relatórios de análise exploratória automática com visualizações comparativas entre datasets.

import sweetviz as sv
report = sv.analyze(df)
report.show_html()
📖 Documentação
D-Tale
Interface web interativa para visualização e análise de DataFrames do Pandas. Permite exploração visual intuitiva.

import dtale
d = dtale.show(df)
d.open_browser()
📖 Documentação
Scikit-learn
Principal biblioteca para machine learning em Python. Oferece algoritmos de classificação, regressão, clustering e mais.

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)
📖 Documentação
Statsmodels
Biblioteca para modelagem estatística, testes de hipóteses e análise econométrica.
import statsmodels.api as sm model = sm.OLS(y, X).fit() print(model.summary())
📖 Documentação
XGBoost
Implementação otimizada de gradient boosting, extremamente eficaz em competições de machine learning.

import xgboost as xgb
model = xgb.XGBRegressor()
model.fit(X_train, y_train)
                        
📖 Documentação
LightGBM
Framework de gradient boosting rápido e eficiente em memória, ideal para grandes datasets.

import lightgbm as lgb
model = lgb.LGBMRegressor()
model.fit(X_train, y_train)
                        
📖 Documentação
TensorFlow
Poderosa biblioteca de código aberto desenvolvida pelo Google para Deep Learning, redes neurais e computação numérica em larga escala.

import tensorflow as tf
from tensorflow import keras
model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')
                        
📖 Documentação
PyTorch
Framework de código aberto para Deep Learning desenvolvido pelo Facebook, conhecido por sua flexibilidade e "Pythonic approach".

import torch
import torch.nn as nn
model = nn.Linear(10, 1)
loss_fn = nn.MSELoss()
                        
📖 Documentação
Keras
API de alto nível para construção e treinamento de modelos de Deep Learning. Funciona como interface para TensorFlow, PyTorch ou JAX.

from tensorflow import keras
model = keras.Sequential([keras.layers.Dense(units=64, activation='relu', input_shape=(X_train.shape[1],)), keras.layers.Dense(units=1)])
model.compile(optimizer='adam', loss='mse')
                        
📖 Documentação
Category Encoders
Biblioteca especializada em codificação de variáveis categóricas para machine learning.

import category_encoders as ce
encoder = ce.OneHotEncoder()
X_encoded = encoder.fit_transform(X)
📖 Documentação
MLxtend
Extensões úteis para machine learning, incluindo algoritmos de associação, seleção de features e visualizações.

from mlxtend.frequent_patterns import apriori
frequent_itemsets = apriori(df, min_support=0.1)
📖 Documentação
Scikit-learn (SVM)
Implementação de Support Vector Machines (SVM) para classificação, regressão e detecção de outliers. Poderoso para dados com muitas dimensões e casos onde a margem de separação é importante.

from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=100, n_features=4, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

model_svm = svm.SVC(kernel='linear') # Support Vector Classifier
model_svm.fit(X_train, y_train)
print(model_svm.score(X_test, y_test))
                        
📖 Documentação
Scikit-learn (Árvore de Decisão)
Um algoritmo de aprendizado supervisionado para tarefas de classificação e regressão, que usa uma estrutura de árvore de decisões para modelar dados. Intuitivo e fácil de interpretar.

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

model_dt = DecisionTreeClassifier(random_state=42)
model_dt.fit(X_train, y_train)
print(model_dt.score(X_test, y_test))
                        
📖 Documentação
Scikit-learn (Random Forest)
Um método de aprendizado em conjunto para classificação e regressão, que constrói múltiplas árvores de decisão e combina suas previsões para melhorar a acurácia e controlar o overfitting.

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

model_rf = RandomForestClassifier(n_estimators=100, random_state=42)
model_rf.fit(X_train, y_train)
print(model_rf.score(X_test, y_test))
📖 Documentação
Scikit-learn (Regressão Linear)
Um dos modelos mais básicos e amplamente utilizados para regressão, que modela a relação linear entre uma variável dependente e uma ou mais variáveis independentes.

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_regression

X, y = make_regression(n_samples=100, n_features=1, noise=0.5, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

model_lr = LinearRegression()
model_lr.fit(X_train, y_train)
print(model_lr.score(X_test, y_test))
📖 Documentação
Scikit-learn (Clusterização - K-Means)
Algoritmos de aprendizado não supervisionado para agrupar dados em clusters com base em sua similaridade. O K-Means é um dos algoritmos de clusterização mais populares.

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

X, y = make_blobs(n_samples=300, centers=4, random_state=42)

kmeans = KMeans(n_clusters=4, random_state=42, n_init='auto')
kmeans.fit(X)
labels = kmeans.labels_
# plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
# plt.show()
📖 Documentação
Scikit-learn (Classificação)
Variedade de algoritmos para problemas de classificação, onde o objetivo é prever uma categoria ou classe discreta. Inclui regressão logística, SVM, árvores de decisão, Naive Bayes, e muitos outros.

from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer

data = load_breast_cancer()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

model_logreg = LogisticRegression(max_iter=1000, random_state=42)
model_logreg.fit(X_train, y_train)
print(f"Logistic Regression Accuracy: {model_logreg.score(X_test, y_test)}")
📖 Documentação
Efficient Apriori
Implementação eficiente do algoritmo Apriori para mineração de regras de associação.

from efficient_apriori import apriori
itemsets, rules = apriori(transactions, min_support=0.1)
📖 Documentação
SQLAlchemy
ORM e toolkit SQL mais popular do Python. Facilita conexões e operações com bancos de dados relacionais.

from sqlalchemy import create_engine
engine = create_engine('postgresql://user:pass@localhost/db')
df.to_sql('tabela', engine)
📖 Documentação
Psycopg2
Adaptador PostgreSQL mais popular para Python. Permite conexão direta e eficiente com bancos PostgreSQL.

import psycopg2
conn = psycopg2.connect("host=localhost dbname=test")
cur = conn.cursor()
                        
📖 Documentação
PyODBC
Interface Python para ODBC, permitindo conexão com SQL Server, MySQL, PostgreSQL e outros bancos.

import pyodbc
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=test')
cursor = conn.cursor()
📖 Documentação
OpenPyXL
Biblioteca para leitura e escrita de arquivos Excel (.xlsx). Suporta formatação avançada e fórmulas.

import openpyxl
wb = openpyxl.load_workbook('arquivo.xlsx')
ws = wb.active 
📖 Documentação
Dask
Computação paralela para análise de dados que não cabem na memória. Interface similar ao Pandas.

import dask.dataframe as dd
df = dd.read_csv('arquivo_grande.csv')
resultado = df.groupby('coluna').sum().compute()
📖 Documentação
Chardet
Detecção automática de codificação de caracteres em arquivos de texto. Útil para dados internacionais.

import chardet
with open('arquivo.txt', 'rb') as f:
    resultado = chardet.detect(f.read())
📖 Documentação
IPython-SQL
Extensão mágica para executar queries SQL diretamente em notebooks Jupyter de forma intuitiva.

%load_ext sql
%sql postgresql://user:pass@localhost/db
%%sql
SELECT * FROM tabela LIMIT 10
📖 Documentação
Pandas DataReader
Importação de dados financeiros e econômicos de fontes como Yahoo Finance, FRED, World Bank.

import pandas_datareader as pdr
data = pdr.get_data_yahoo('AAPL', start='2020-01-01')
📖 Documentação
NLTK
Kit de ferramentas abrangente para processamento de linguagem natural (NLP), com corpus e algoritmos clássicos.

import nltk
tokens = nltk.word_tokenize("Olá mundo!")
tagged = nltk.pos_tag(tokens)
📖 Documentação
spaCy
Biblioteca NLP industrial com foco em performance. Oferece modelos pré-treinados e pipelines eficientes.

import spacy
nlp = spacy.load("pt_core_news_sm")
doc = nlp("Olá mundo!")
📖 Documentação
TextBlob
API simples para tarefas comuns de NLP como análise de sentimento, tradução e correção ortográfica.

from textblob import TextBlob
blob = TextBlob("Bom dia!")
print(blob.sentiment)
📖 Documentação
Requests
Biblioteca elegante e simples para requisições HTTP. Essencial para consumir APIs e fazer web scraping.

import requests
response = requests.get('https://api.exemplo.com/dados')
data = response.json()
📖 Documentação
OpenAI
Cliente oficial para a API da OpenAI, permitindo integração com GPT, DALL-E e outros modelos de IA.

import openai
response = openai.Completion.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "Olá!"}]
)
📖 Documentação
Google GenerativeAI
Cliente Python para a API do Google Gemini, permitindo integração com modelos de IA generativa do Google.

import google.generativeai as genai
genai.configure(api_key="sua_api_key")
model = genai.GenerativeModel('gemini-pro')
response = model.generate_content("Olá!")
📖 Documentação
Watermark
Extensão IPython para mostrar informações do sistema, versões de bibliotecas e metadados dos notebooks.

%load_ext watermark
%watermark -v -m -p pandas,numpy -g
                        
📖 Documentação
💡

Dicas Essenciais para Análise de Dados

🚀 Otimização de Performance

Use Pandas de forma eficiente: Prefira operações vetorizadas ao invés de loops. Use df.apply() ao invés de for loops quando possível.
Gerencie memória: Use df.dtypes para verificar tipos de dados e pd.to_numeric() com downcast para otimizar o uso de memória.
Para grandes datasets: Considere usar Dask ou Polars ao invés do Pandas tradicional para melhor performance.

🧹 Limpeza e Preparação de Dados

Sempre explore primeiro: Use df.info(), df.describe() e df.head() para entender seus dados antes de começar a análise.
Trate dados faltantes: Use missingno para visualizar padrões de dados ausentes e escolha a estratégia apropriada (remoção, imputação, etc.).
Validação de dados: Sempre valide a qualidade dos seus dados após transformações usando assert statements.

📊 Visualização Eficaz

Escolha o gráfico certo: Barras para categorias, linhas para séries temporais, scatter para correlações, histogramas para distribuições.
Use cores com propósito: Aplique cores para destacar insights, não apenas por estética. Considere daltonismo na escolha de paletas.
Interatividade: Use Plotly para dashboards e apresentações, mas Matplotlib/Seaborn para análises exploratórias rápidas.

🤖 Machine Learning

Validação cruzada: Sempre use cross_val_score ou KFold para avaliar modelos de forma robusta.
Feature engineering: Invista tempo criando features relevantes. Use category_encoders para variáveis categóricas.
Baseline simples: Comece sempre com modelos simples (regressão linear, árvore de decisão) antes de partir para algoritmos complexos.

🔧 Melhores Práticas

Ambiente virtual: Sempre use venv ou conda para isolar dependências dos seus projetos.
Documentação: Use docstrings nas suas funções e mantenha um README.md atualizado em seus projetos.
Controle de versão: Use Git para versionar código e DVC (Data Version Control) para versionar datasets.
Notebooks organizados: Use células markdown para explicar seu raciocínio e mantenha código limpo e comentado.

📚 Recursos de Aprendizado

Documentação oficial: Sempre consulte a documentação oficial das bibliotecas - são os recursos mais confiáveis e atualizados.
Kaggle Learn: Cursos gratuitos e práticos sobre Data Science, com certificados e exercícios hands-on.
Stack Overflow: Para dúvidas específicas, mas sempre entenda a solução ao invés de apenas copiar e colar.
GitHub: Explore repositórios de projetos de análise de dados para aprender boas práticas e técnicas avançadas.