Pular para o conteúdo
murad.guide

Banco de Dados

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.

Resultado de referência do capítulo 24

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.

  1. Qual o objetivo deste capítulo?

  2. Os dados podem ir para produção?

  3. Onde fica a referência pronta?

Antes de avançar

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")