Transforme dados em gráficos com Matplotlib e Plotly, consuma CSV, GeoJSON e APIs REST com requests e construa uma aplicação web completa com autenticação e deploy usando Django.
Ouça o episódio complementar direto por aqui para conectar geração de gráficos com Matplotlib e Plotly, consumo de APIs JSON e a arquitetura completa de aplicações web com Django.
Do lado esquerdo, dados brutos em CSV e JSON viram gráficos; do lado direito, o Django organiza Models, Views e Templates na web.
OFICINA 01 · CAPÍTULO 15
Gerando Dados com Matplotlib & Passeios Aleatórios
O Matplotlib é a biblioteca clássica para gráficos estáticos e publicação científica. Com plt.subplots(), você separa a figura (fig) dos eixos (ax), controlando títulos, rótulos, estilos (plt.style.use('seaborn-v0_8')) e dispersão (ax.scatter()) com mapas de cores.
Python · Gráfico de linha e dispersão com Matplotlib
import matplotlib.pyplot as plt
x_values = range(1, 101)
y_values = [x**2 for x in x_values]
plt.style.use('seaborn-v0_8')
fig, ax = plt.subplots()
ax.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, s=12)
ax.set_title('Quadrados', fontsize=18)
ax.set_xlabel('Valor', fontsize=12)
ax.set_ylabel('Quadrado', fontsize=12)
plt.savefig('squares_plot.png', bbox_inches='tight')
OFICINA 02 · CAPÍTULOS 15 E 16
Plotly Interativo, CSV e Mapas GeoJSON
Enquanto o Matplotlib gera imagens estáticas, o Plotly Express cria gráficos HTML interativos com zoom e tooltips. No Capítulo 16, você combina isso com leitura de arquivos reais via pathlib, csv.reader() (temperaturas históricas) e json.loads() (terremotos globais em GeoJSON plotados com px.scatter_geo()).
Python · Leitura segura de CSV com pathlib e módulo csv
from pathlib import Path
import csv
path = Path('weather_data/sitka_weather_2021_simple.csv')
lines = path.read_text(encoding='utf-8').splitlines()
reader = csv.reader(lines)
header_row = next(reader)
highs = [int(row[4]) for row in reader if row[4]]
OFICINA 03 · CAPÍTULO 17
Consumindo APIs REST com requests
Em vez de baixar arquivos manualmente, você pode consultar dados vivos diretamente pela rede usando a biblioteca requests. O fluxo padrão no Capítulo 17 (com as APIs do GitHub e Hacker News) segue quatro passos:
Definir a URL da API e cabeçalhos (headers = {"Accept": "application/vnd.github.v3+json"}).
Fazer a chamada r = requests.get(url, headers=headers) e checar r.status_code == 200.
Converter a resposta JSON em dicionário Python com response_dict = r.json().
Monitorar limites de taxa (rate limits) e plotar os repositórios mais populares com tooltips clicáveis no Plotly.
OFICINA 04 · CAPÍTULO 18
Introdução ao Django: Models, Views, URLs & Templates
Nos Capítulos 18 a 20, você constrói o projeto Learning Log com Django — um framework web completo ("baterias inclusas") que separa claramente dados, lógica e apresentação:
Arquitetura prática do projeto Learning Log no Django
Camada
Arquivo Típico
Responsabilidade
Model
models.py
Define tabelas do banco em Python (ex.: Topic e Entry com ForeignKey) e gera migrações (makemigrations / migrate).
URLs
urls.py
Mapeia rotas (ex.: topics/<int:topic_id>/) para a view correspondente.
View
views.py
Consulta o ORM, processa formulários (POST/GET) e envia o contexto ao template.
Template
templates/*.html
Renderiza HTML dinâmico com herança ({% extends "base.html" %}).
Terminal · Fluxo essencial de projeto e migrações Django
Contas de Usuário, Formulários & Proteção de Dados
Para que cada pessoa cadastre seus próprios tópicos e anotações sem invadir os dados de outros usuários, o Capítulo 19 implementa um app dedicado (accounts) com:
ModelForm: gera formulários HTML seguros automaticamente a partir dos modelos Topic e Entry (com proteção CSRF nativa via {% csrf_token %}).
@login_required: decorador que bloqueia visitantes anônimos e redireciona para a tela de login.
Posse de dados (owner): vincular Topic a User via ForeignKey e validar if topic.owner != request.user: raise Http404 garante que ninguém acesse ou edite registros alheios pela URL.
OFICINA 06 · CAPÍTULO 20
Estilização com Bootstrap 5 & Deploy em Produção
No capítulo final, o Learning Log ganha visual profissional com django-bootstrap5 (barra de navegação responsiva, jumbotron e cartões estilizados) e vai para a nuvem com Git + Platform.sh:
Regra de ouro antes do deploy: nunca suba DEBUG = True nem chaves secretas fixas no código para produção. Use variáveis de ambiente, configure ALLOWED_HOSTS e trate erros 404/500 com templates dedicados.
LABORATÓRIO INTERATIVO · CAPÍTULOS 15 A 20
Simulador de Stack Python para Projetos Reais
Escolha a fonte de dados, o tipo de saída e a necessidade de autenticação para receber a arquitetura recomendada do livro.
Biblioteca / Framework
Django + requests
Camada de Dados
ORM + JSON API
Segurança Essencial
@login_required + owner
Para aplicações web com login e dados por usuário alimentados por API, use Django com Models ligados a User, validação de posse (Http404) e requests para consumir endpoints JSON.
VERIFICAÇÃO DE DOMÍNIO · 4 QUESTÕES
Teste Rápido da Etapa 5
Valide os conceitos dos Capítulos 15 a 20 para encerrar a trilha Python na Prática.
1. Qual é a diferença principal entre usar Matplotlib e Plotly Express nos Capítulos 15–16?
2. Ao consumir uma API REST com requests.get(url), qual método transforma o corpo JSON em dicionário Python?
3. Depois de criar ou alterar uma classe em models.py no Django, quais dois comandos atualizam o banco de dados?
4. Como o Capítulo 19 impede que um usuário logado acesse o tópico privado de outro usuário digitando o ID na URL?
CONCLUSÃO DO CURSO
Checklist Final & Exportação
Marque cada marco concluído para fechar as 5 etapas de Python na Prática.
TRILHA CONCLUÍDA · 5 DE 5 ETAPAS
Jornada Python na Prática Completa!
Você foi dos fundamentos de variáveis e listas até o jogo Alien Invasion em Pygame, visualização de dados, APIs REST e aplicações web completas com Django.