Capítulo 24
SQL R e Python juntos
3 min de leitura 532 palavras 1 gravura
Neste capítulo você vai exportar consultas SQL e continuar a analise. O projeto de estudo é o Observatório do Recife, um núcleo fictício de monitoramento urbano e climático.
Seu ponto de partida
O exemplo deste capítulo é 24-ponte-dados, no pacote que acompanha o volume; pratique sobre uma cópia da pasta inicio/. A raiz do exemplo é a referência desta etapa. Abrir ou rodar localmente não publica nada. Servidor, se precisar, só em 127.0.0.1.
Como praticar
Leia, confira o código, mude uma coisa, preveja, salve, rode de novo e confira. Investigue o erro antes de avançar.

Um resultado antes de outro conceito
O script Python lê dados locais do Observatório e imprime um resultado que você pode conferir.
Faça na sua cópia
A implementação completa está no pacote de exemplos que acompanha este volume.
# Capítulo 24 — ponte SQL -> pandas
import sqlite3
from pathlib import Path
import pandas as pd
root = Path(__file__).resolve().parent
# monta banco a partir dos CSV se precisar
import csv
db = root / "observatorio.db"
Mude uma coisa e preveja
Altere um parâmetro (limiar, coluna ou random_state) e preveja a mudança.
Anote o que espera observar antes de salvar e rodar de novo.
Recarregue e confira
A saída no terminal reflete só a mudança pedida.
Se não acontecer
Confira se salvou a cópia certa e se o caminho dos dados aponta para dados/ dentro da pasta do exemplo.
Ambiente local
Use Python 3 na sua máquina. Pacotes extras só quando o capítulo pedir. Nada de conta cloud obrigatória.
Faça na sua cópia
A implementação completa está no pacote de exemplos que acompanha este volume.
python analise.py
Mude uma coisa e preveja
Rode duas vezes seguidas. A saída deve ser estável (salvo gráficos com relógio).
Anote o que espera observar antes de salvar e rodar de novo.
Recarregue e confira
Scripts determinísticos com random_state fixo ajudam a conferência.
Se não acontecer
Confira se salvou a cópia certa e se o caminho dos dados aponta para dados/ dentro da pasta do exemplo.
Erro comum
Faltar pacote (pandas, sklearn) ou apontar CSV errado. Instale no venv local e confira dados/.
Faça na sua cópia
A implementação completa está no pacote de exemplos que acompanha este volume.
pip install pandas matplotlib scikit-learn
Mude uma coisa e preveja
Liste os arquivos em dados/ antes de rodar.
Anote o que espera observar antes de salvar e rodar de novo.
Recarregue e confira
Você deve ver bairros, estacoes, leituras e alertas.
Se não acontecer
Confira se salvou a cópia certa e se o caminho dos dados aponta para dados/ dentro da pasta do exemplo.
Atividades
Responda antes de olhar as respostas comentadas no final.
-
Qual o objetivo deste capítulo?
-
Os dados podem ir para produção?
-
Onde fica a referência pronta?
Antes de avançar
- Você conseguiu exportar consultas SQL e continuar a analise.
- A cópia
inicio/roda sem depender de conta paga. - Você distingue arquivo local, resultado na tela e publicação pública.
Respostas comentadas
Atividade 1
exportar consultas SQL e continuar a analise
Atividade 2
Não — são fictícios e só para estudo.
Atividade 3
Na raiz da pasta do exemplo; pratique em inicio/.
O arquivo completo
Referência do exemplo 24-ponte-dados, reproduzida aqui para que você possa conferir sem sair da página.
analise.py
# Capítulo 24 — ponte SQL -> pandas
import sqlite3
from pathlib import Path
import pandas as pd
root = Path(__file__).resolve().parent
# monta banco a partir dos CSV se precisar
import csv
db = root / "observatorio.db"
con = sqlite3.connect(db)
# se o banco ja existir do exemplo SQL, usa; senao cria vista simples via CSV
q = '''
SELECT e.codigo, ROUND(AVG(l.temp_c),1) AS media
FROM estacoes e
JOIN leituras l ON l.estacao_id = e.estacao_id
GROUP BY e.codigo
ORDER BY media DESC
'''
try:
df = pd.read_sql_query(q, con)
except Exception:
leituras = pd.read_csv(root / "dados" / "leituras.csv")
estacoes = pd.read_csv(root / "dados" / "estacoes.csv")
j = leituras.merge(estacoes, on="estacao_id")
df = j.groupby("codigo", as_index=False)["temp_c"].mean().rename(columns={"temp_c": "media"})
df["media"] = df["media"].round(1)
df = df.sort_values("media", ascending=False)
con.close()
print(df)
df.to_csv(root / "export-medias.csv", index=False)
print("Exportado export-medias.csv")