🚀 Pipeline ETL completo para análise avançada do catálogo Netflix
Demonstrando competências profissionais em Engenharia de Dados, Analytics e Arquitetura de Software
🎯 Visão Geral • 🏗️ Arquitetura • 🚀 Início Rápido • 📊 Resultados • 🤝 Contribuição
Pipeline de Engenharia de Dados de classe empresarial para processamento e análise do catálogo Netflix
Este projeto demonstra um pipeline ETL (Extract, Transform, Load) completo e profissional, desenvolvido com as melhores práticas de engenharia de dados. O sistema processa 8.807 títulos Netflix através de uma arquitetura modular, escalável e pronta para produção.
|
|
|
|
|
|
|
|
graph TD
A[📁 Netflix Dataset<br/>8,807 títulos] --> B[🔍 Extract<br/>Validação & Limpeza]
B --> C[⚙️ Transform<br/>Feature Engineering]
C --> D[💾 Load<br/>PostgreSQL]
D --> E[📈 Analytics<br/>Dashboards & KPIs]
E --> F[📋 Reports<br/>Insights Automáticos]
style A fill:#e74c3c,stroke:#2c3e50,stroke-width:2px,color:#fff
style B fill:#3498db,stroke:#2c3e50,stroke-width:2px,color:#fff
style C fill:#9b59b6,stroke:#2c3e50,stroke-width:2px,color:#fff
style D fill:#2ecc71,stroke:#2c3e50,stroke-width:2px,color:#fff
style E fill:#f39c12,stroke:#2c3e50,stroke-width:2px,color:#fff
style F fill:#1abc9c,stroke:#2c3e50,stroke-width:2px,color:#fff
📦 netflix-data-pipeline/
├── 🎯 src/
│ ├── ⚙️ config.py # Configurações centralizadas
│ ├── 🔍 extract.py # Extração robusta de dados
│ ├── ⚙️ transform.py # Feature engineering avançado
│ ├── 💾 load.py # Carregamento otimizado
│ ├── 📊 visualizations.py # Dashboards profissionais
│ ├── 🛠️ utils.py # Utilitários e logging
│ └── 🚀 pipeline.py # Orquestrador principal
├── 📊 data/ # Dados processados
├── 🎨 output/ # Visualizações e relatórios
├── 📝 logs/ # Sistema de logging
└── 📋 requirements.txt # Dependências
# 1️⃣ Clone o repositório
git clone https://github.com/Thiago-code-lab/netflix-data-pipeline.git
cd netflix-data-pipeline
# 2️⃣ Configurar ambiente virtual
python -m venv venv && source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# 3️⃣ Instalar dependências
pip install -r requirements.txt
# 4️⃣ Iniciar PostgreSQL (Docker)
docker-compose up -d
# 5️⃣ Executar pipeline completo
python src/pipeline.py# Execução apenas com visualizações (sem banco de dados)
python demo_pipeline.py|
Títulos processados |
69.6% do catálogo |
30.4% do catálogo |
Diversidade global |
Categorias únicas |
| 🎯 Insight | 📊 Métrica | 🔍 Impacto |
|---|---|---|
| Dominância Americana | 🇺🇸 36% do conteúdo | Estratégia de mercado focada |
| Crescimento Explosivo | 📈 70% pós-2015 | Expansão digital acelerada |
| Diversidade Global | 🌍 123 países | Alcance verdadeiramente mundial |
| Preferência por Filmes | 🎬 69.6% filmes | Modelo de consumo preferido |
| Gênero Dominante | 🎭 18% dramas | Preferência por narrativas |
- ✅ Detecção automática de encoding (UTF-8, Latin-1, ISO-8859-1)
- ✅ Validação robusta de estrutura específica para dados Netflix
- ✅ Tratamento avançado de exceções com logging detalhado
- ✅ Verificação de integridade em tempo real
- 🔧 Feature Engineering: 32 features derivadas de 12 originais
- 🧹 Limpeza inteligente: Tratamento de valores nulos e inconsistências
- 📅 Análise temporal: Décadas, idade do conteúdo, sazonalidade
- 🌍 Processamento geográfico: Normalização de países e regiões
- 📊 Métricas de qualidade: Monitoramento contínuo da qualidade
- 🚀 Bulk insert: Carregamento em lotes otimizado
- 🔗 Connection pooling: Gerenciamento eficiente de conexões
- ✅ Verificação de integridade: Validação pós-carregamento
- 📊 Indexação automática: Criação de índices para performance
- 🎨 4 dashboards completos: Análises multidimensionais
- 📈 Gráficos interativos: Plotly para exploração dinâmica
- 📋 Relatórios automáticos: Geração de insights em Markdown
- 🗄️ Biblioteca SQL: Consultas otimizadas pré-desenvolvidas
from src.extract import extract_netflix_data
from src.transform import transform_netflix_data
from src.load import load_to_postgres
from src.visualizations import generate_all_visualizations
# Pipeline completo em Python
def run_analysis():
# Extração
raw_data = extract_netflix_data()
print(f"✅ Extraídos {len(raw_data)} registros")
# Transformação
clean_data = transform_netflix_data(raw_data)
print(f"🔧 Processadas {clean_data.shape[1]} features")
# Carregamento
success = load_to_postgres(clean_data)
print(f"💾 Carregamento: {'✅ Sucesso' if success else '❌ Falha'}")
# Visualização
charts = generate_all_visualizations(clean_data)
print(f"📊 Gerados {len(charts)} dashboards")
# Executar análise
run_analysis()-- 🏆 Top 10 países por diversidade de gêneros
WITH country_genres AS (
SELECT
primary_country,
COUNT(DISTINCT primary_genre) as unique_genres,
COUNT(*) as total_titles
FROM netflix_titles
WHERE primary_country IS NOT NULL
AND primary_genre IS NOT NULL
GROUP BY primary_country
)
SELECT
primary_country,
unique_genres,
total_titles,
ROUND(unique_genres::numeric / total_titles * 100, 2) as diversity_ratio
FROM country_genres
WHERE total_titles >= 50
ORDER BY diversity_ratio DESC
LIMIT 10;
-- 📊 Evolução temporal com análise de tendências
SELECT
date_added_year,
COUNT(*) as titles_added,
LAG(COUNT(*)) OVER (ORDER BY date_added_year) as prev_year_count,
ROUND(
(COUNT(*) - LAG(COUNT(*)) OVER (ORDER BY date_added_year))::numeric /
NULLIF(LAG(COUNT(*)) OVER (ORDER BY date_added_year), 0) * 100, 2
) as growth_rate
FROM netflix_titles
WHERE date_added_year BETWEEN 2010 AND 2021
GROUP BY date_added_year
ORDER BY date_added_year;import matplotlib.pyplot as plt
import seaborn as sns
from src.utils import setup_plot_style
# Configurar estilo profissional
setup_plot_style()
# Análise de sazonalidade
def analyze_seasonality(data):
monthly_releases = (
data.groupby(['date_added_month', 'type'])
.size()
.unstack(fill_value=0)
)
fig, ax = plt.subplots(figsize=(14, 8))
monthly_releases.plot(kind='bar', ax=ax, width=0.8)
ax.set_title('📅 Padrão Sazonal de Lançamentos Netflix',
fontsize=16, fontweight='bold', pad=20)
ax.set_xlabel('Mês', fontsize=12)
ax.set_ylabel('Número de Títulos', fontsize=12)
ax.legend(title='Tipo de Conteúdo', frameon=True, fancybox=True)
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('output/seasonality_analysis.png', dpi=300, bbox_inches='tight')
return fig
# Executar análise
seasonality_chart = analyze_seasonality(processed_data)- 🔄 Processamento em chunks: Otimizado para grandes volumes
- 🗃️ Indexação inteligente: Índices automáticos baseados em uso
- 💾 Cache de resultados: Evita reprocessamento desnecessário
- ⚖️ Balanceamento de carga: Distribuição eficiente de recursos
- 📊 Logging estruturado: Logs JSON para análise automatizada
- 🎯 Métricas em tempo real: KPIs de qualidade e performance
- 🚨 Alertas inteligentes: Notificações automáticas de anomalias
- 📈 Dashboard de sistema: Monitoramento visual do pipeline
- ✅ Validação rigorosa: Múltiplas camadas de verificação
- 🔒 Gestão de credenciais: Variáveis de ambiente seguras
- 📝 Auditoria completa: Rastreamento de todas as operações
- 🔄 Recovery automático: Tratamento inteligente de falhas
# 1. Fork o projeto
gh repo fork Thiago-code-lab/netflix-data-pipeline
# 2. Clone seu fork
git clone https://github.com/seu-usuario/netflix-data-pipeline.git
# 3. Crie uma branch para sua feature
git checkout -b feature/nova-funcionalidade
# 4. Faça suas alterações
git add . && git commit -m "✨ feat: adiciona nova funcionalidade"
# 5. Push e abra um PR
git push origin feature/nova-funcionalidade| Categoria | Oportunidades | Impacto |
|---|---|---|
| 🤖 ML/IA | Algoritmos preditivos, recomendações | 🔥 Alto |
| 🌐 APIs | Conectores para streaming services | 🔥 Alto |
| 📊 Dashboards | Streamlit, Dash, Power BI | 🔥 Alto |
| 🧪 Testes | Unit tests, integration tests | 📈 Médio |
| 📚 Docs | Tutoriais, exemplos avançados | 📈 Médio |
| ⚡ Performance | Otimizações, paralelização | 🚀 Crítico |
| Canal | Uso | Resposta |
|---|---|---|
| 🐛 Issues | Bugs, problemas técnicos | 24-48h |
| 💬 Discussions | Dúvidas, ideias | 12-24h |
| 📖 Wiki | Documentação completa | Sempre atual |
Este projeto está licenciado sob a Licença MIT
Você é livre para usar, modificar e distribuir este código conforme os termos da licença MIT.
Mostre seu apoio dando uma estrela no repositório!
🚀 Desenvolvido com ❤️ por profissionais, para profissionais



