Tabela 34
Gerar extração de dados
Preços medianos, por materiais e serviços (série encerrada em dezembro de 2002)
Já tem uma URL do SIDRA? Cole aqui para carregar a seleção.
URL de requisição da API SIDRA (/values).
https://apisidra.ibge.gov.br/values/t/34/n3/all/v/all/p/all/c42/all/h/y/f/a/d/m
Sem dependências Quantilica — apenas requests e pandas.
# Dados da Tabela 34 do IBGE SIDRA (https://apisidra.ibge.gov.br)
# Requisitos: pip install requests pandas
# A seleção completa excede o limite de 100.000 valores por requisição da API;
# baixamos um período por vez e concatenamos.
import pandas as pd
import requests
periodos = [
"199001", "199002", "199003", "199004", "199005", "199006", "199007", "199008",
"199009", "199010", "199011", "199012", "199101", "199102", "199103", "199104",
"199105", "199106", "199107", "199108", "199109", "199110", "199111", "199112",
"199201", "199202", "199203", "199204", "199205", "199206", "199207", "199208",
"199209", "199210", "199211", "199212", "199301", "199302", "199303", "199304",
"199305", "199306", "199307", "199308", "199309", "199310", "199311", "199312",
"199401", "199402", "199403", "199404", "199405", "199406", "199407", "199408",
"199409", "199410", "199411", "199412", "199501", "199502", "199503", "199504",
"199505", "199506", "199507", "199508", "199509", "199510", "199511", "199512",
"199601", "199602", "199603", "199604", "199605", "199606", "199607", "199608",
"199609", "199610", "199611", "199612", "199701", "199702", "199703", "199704",
"199705", "199706", "199707", "199708", "199709", "199710", "199711", "199712",
"199801", "199802", "199803", "199804", "199805", "199806", "199807", "199808",
"199809", "199810", "199811", "199812", "199901", "199902", "199903", "199904",
"199905", "199906", "199907", "199908", "199909", "199910", "199911", "199912",
"200001", "200002", "200003", "200004", "200005", "200006", "200007", "200008",
"200009", "200010", "200011", "200012", "200101", "200102", "200103", "200104",
"200105", "200106", "200107", "200108", "200109", "200110", "200111", "200112",
"200201", "200202", "200203", "200204", "200205", "200206", "200207", "200208",
"200209", "200210", "200211", "200212",
]
quadros = []
for periodo in periodos:
url = f"https://apisidra.ibge.gov.br/values/t/34/n3/all/v/all/p/{periodo}/c42/all/h/y/f/a/d/m"
resposta = requests.get(url, timeout=120)
resposta.raise_for_status()
linhas = resposta.json()
quadros.append(pd.DataFrame(linhas[1:]).rename(columns=linhas[0]))
df = pd.concat(quadros, ignore_index=True)
print(df.head())
Usa o sidra-fetcher
(construtor de URL tipado) + httpx + polars.
# Dados da Tabela 34 do IBGE SIDRA via sidra-fetcher
# https://github.com/Quantilica/sidra-fetcher
# Requisitos: pip install httpx polars
# pip install "sidra-fetcher @ git+https://github.com/Quantilica/sidra-fetcher.git"
# A seleção completa excede o limite de 100.000 valores por requisição da API;
# baixamos um período por vez e concatenamos.
import httpx
import polars as pl
from sidra_fetcher.sidra import Parametro
parametro = Parametro(
agregado="34",
territorios={"3": ["all"]},
variaveis=["all"],
periodos=["all"],
classificacoes={"42": ["all"]},
)
periodos = [
"199001", "199002", "199003", "199004", "199005", "199006", "199007", "199008",
"199009", "199010", "199011", "199012", "199101", "199102", "199103", "199104",
"199105", "199106", "199107", "199108", "199109", "199110", "199111", "199112",
"199201", "199202", "199203", "199204", "199205", "199206", "199207", "199208",
"199209", "199210", "199211", "199212", "199301", "199302", "199303", "199304",
"199305", "199306", "199307", "199308", "199309", "199310", "199311", "199312",
"199401", "199402", "199403", "199404", "199405", "199406", "199407", "199408",
"199409", "199410", "199411", "199412", "199501", "199502", "199503", "199504",
"199505", "199506", "199507", "199508", "199509", "199510", "199511", "199512",
"199601", "199602", "199603", "199604", "199605", "199606", "199607", "199608",
"199609", "199610", "199611", "199612", "199701", "199702", "199703", "199704",
"199705", "199706", "199707", "199708", "199709", "199710", "199711", "199712",
"199801", "199802", "199803", "199804", "199805", "199806", "199807", "199808",
"199809", "199810", "199811", "199812", "199901", "199902", "199903", "199904",
"199905", "199906", "199907", "199908", "199909", "199910", "199911", "199912",
"200001", "200002", "200003", "200004", "200005", "200006", "200007", "200008",
"200009", "200010", "200011", "200012", "200101", "200102", "200103", "200104",
"200105", "200106", "200107", "200108", "200109", "200110", "200111", "200112",
"200201", "200202", "200203", "200204", "200205", "200206", "200207", "200208",
"200209", "200210", "200211", "200212",
]
quadros = []
for periodo in periodos:
p = parametro.assign("periodos", [periodo])
resposta = httpx.get(p.url(), timeout=120)
resposta.raise_for_status()
linhas = resposta.json()
quadros.append(pl.DataFrame(linhas[1:]).rename(linhas[0]))
df = pl.concat(quadros)
print(df.head())
O sidra-sql sempre baixa
todos os períodos da tabela (uma requisição por período) — a seleção de períodos acima
não se aplica a este bloco. Filtre períodos no SQL de transformação.
Bloco [[tabelas]] para um catálogo de pipelines do sidra-sql.
[[tabelas]]
tabela_sidra = "34"
variables = ["allxp"]
territories = {3 = []}
classifications = {42 = ["allxt"]}
Cole o bloco acima em um fetch.toml existente do seu plugin sidra-sql,
ou instale e rode um pipeline novo já configurado para esta tabela:
sidra-sql plugin install <url-do-seu-repo> --alias meu_plugin
sidra-sql run meu_plugin tabela_34
sidra-sql export meu_plugin tabela_34
Pressupõe o schema normalizado do sidra-sql
(
ibge_sidra) já carregado via sidra-sql run para esta tabela.
Consulta filtrada pela seleção acima.
-- Tabela 34 — Preços medianos, por materiais e serviços (série encerrada em dezembro de 2002)
-- Consulta ao banco carregado pelo sidra-sql (schema ibge_sidra)
-- https://github.com/Quantilica/sidra-sql
-- Pressupõe `sidra-sql run` já executado para a tabela 34.
SELECT
p.codigo AS periodo,
p.ano,
l.nc AS nivel_territorial,
l.d1c AS localidade_codigo,
l.d1n AS localidade_nome,
dim.d2c AS variavel_codigo,
dim.d2n AS variavel,
dim.mn AS unidade,
dim.d4c AS materiais_e_servicos_codigo,
dim.d4n AS materiais_e_servicos,
CASE WHEN d.v ~ '^-?[0-9]' THEN d.v::numeric END AS valor
FROM ibge_sidra.dados AS d
JOIN ibge_sidra.periodo AS p ON d.periodo_id = p.id
JOIN ibge_sidra.dimensao AS dim ON d.dimensao_id = dim.id
JOIN ibge_sidra.localidade AS l ON d.localidade_id = l.id
WHERE d.tabela_sidra_id = '34'
AND d.ativo = TRUE
AND (l.nc = '3')
ORDER BY p.codigo, l.d1c;