Instituto Brasileiro de Geografia e Estatística¶
Obtendo séries¶
Usar o módulo do IBGE não é tão simples quanto o uso dos módulos do BCB e IPEA.
Isso porque uma série temporal para a API de agregados do IBGE é uma variável que pertence a um agregado (ou tabela), que, por sua vez, pertence a uma pesquisa.
Além disso, é possível obter dados por localidade (municípios, estados etc.), classificações (grupo, por exemplo tipo de produto) e categorias (subgrupo de uma classificação, por exemplo um produto para alimentação), além de filtrar por período.
Por isso, a função seriesbr.ibge.get_series()
aceita muito mais
argumentos.
É recomendado usar a seção de Acervo do site do Sidra para obter os identificadores das tabelas, localidades, classificações, categorias etc.
Para ilustrar o uso do módulo, vamos reproduzir uma visualização do IPCA no site do Sidra.
O identificador da tabela do IPCA é 7060 e nós vamos querer as variáveis de variação mensal e acumulada no ano.
In [1]: import matplotlib
In [2]: import matplotlib.pyplot as plt
In [3]: import matplotlib.ticker as ticker
In [4]: from seriesbr import ibge
In [5]: ipca_by_product = ibge.get_series(
...: 7060,
...: last_n=1,
...: classifications={315: [7170, 7445, 7486, 7558, 7625, 7660, 7712, 7766, 7786]},
...: )
...:
In [6]: ipca_by_product
Out[6]:
Valor ... Geral, grupo, subgrupo, item e subitem
Date ...
2021-12-01 0.8400 ... 1.Alimentação e bebidas
2021-12-01 0.7400 ... 2.Habitação
2021-12-01 1.3700 ... 3.Artigos de residência
2021-12-01 2.0600 ... 4.Vestuário
2021-12-01 0.5800 ... 5.Transportes
2021-12-01 0.7500 ... 6.Saúde e cuidados pessoais
2021-12-01 0.5600 ... 7.Despesas pessoais
2021-12-01 0.0500 ... 8.Educação
2021-12-01 0.3400 ... 9.Comunicação
2021-12-01 7.9400 ... 1.Alimentação e bebidas
2021-12-01 13.0500 ... 2.Habitação
2021-12-01 12.0700 ... 3.Artigos de residência
2021-12-01 10.3100 ... 4.Vestuário
2021-12-01 21.0300 ... 5.Transportes
2021-12-01 3.7000 ... 6.Saúde e cuidados pessoais
2021-12-01 4.7300 ... 7.Despesas pessoais
2021-12-01 2.8100 ... 8.Educação
2021-12-01 1.3800 ... 9.Comunicação
2021-12-01 7.9400 ... 1.Alimentação e bebidas
2021-12-01 13.0500 ... 2.Habitação
2021-12-01 12.0700 ... 3.Artigos de residência
2021-12-01 10.3100 ... 4.Vestuário
2021-12-01 21.0300 ... 5.Transportes
2021-12-01 3.7000 ... 6.Saúde e cuidados pessoais
2021-12-01 4.7300 ... 7.Despesas pessoais
2021-12-01 2.8100 ... 8.Educação
2021-12-01 1.3800 ... 9.Comunicação
2021-12-01 20.6914 ... 1.Alimentação e bebidas
2021-12-01 16.1406 ... 2.Habitação
2021-12-01 3.8485 ... 3.Artigos de residência
2021-12-01 4.2809 ... 4.Vestuário
2021-12-01 21.9210 ... 5.Transportes
2021-12-01 12.3881 ... 6.Saúde e cuidados pessoais
2021-12-01 9.8961 ... 7.Despesas pessoais
2021-12-01 5.5989 ... 8.Educação
2021-12-01 5.2345 ... 9.Comunicação
[36 rows x 5 columns]
In [7]: current_date = ipca_by_product.index.unique().strftime("%b/%Y").values[0].title()
In [8]: ipca_by_product.pivot_table(
...: index="Geral, grupo, subgrupo, item e subitem", columns="Variável", values="Valor"
...: ).drop("IPCA - Peso mensal", axis="columns").sort_values(
...: "IPCA - Variação acumulada no ano"
...: ).plot(
...: kind="barh", title="IPCA por Produto / Serviço - " + current_date, figsize=(10, 8)
...: )
...:
Out[8]: <AxesSubplot:title={'center':'IPCA por Produto / Serviço - Dec/2021'}, ylabel='Geral, grupo, subgrupo, item e subitem'>
In [9]: plt.ylabel("");
In [10]: plt.tight_layout()
In [11]: plt.gca().xaxis.set_major_formatter(ticker.PercentFormatter())
É possível ainda filtrar por localidades.
Por exemplo, eis o mesmo gráfico mas para a capital do Rio de Janeiro (cujo identificador é 33001 e o do estado do Rio é 33, como é possível de se verificar na API de localidades do IBGE).
In [12]: ipca_by_product_rio = ibge.get_series(
....: 7060,
....: last_n=1,
....: classifications={315: [7170, 7445, 7486, 7558, 7625, 7660, 7712, 7766, 7786]},
....: locations={"municipalities": {33: 33001}}
....: )
....:
In [13]: ipca_by_product_rio.pivot_table(
....: index="Geral, grupo, subgrupo, item e subitem", columns="Variável", values="Valor"
....: ).drop("IPCA - Peso mensal", axis="columns").sort_values(
....: "IPCA - Variação acumulada no ano"
....: ).plot(
....: kind="barh", title="IPCA por Produto / Serviço na cidade do Rio - " + current_date, figsize=(10, 8)
....: )
....:
Out[13]: <AxesSubplot:title={'center':'IPCA por Produto / Serviço na cidade do Rio - Dec/2021'}, ylabel='Geral, grupo, subgrupo, item e subitem'>
In [14]: plt.ylabel("");
In [15]: plt.tight_layout()
In [16]: plt.gca().xaxis.set_major_formatter(ticker.PercentFormatter())
Obtendo metadados¶
Pode ser útil obter metadados sobre uma série específica:
In [17]: metadata = ibge.get_metadata(7060)
In [18]: metadata.keys()
Out[18]: dict_keys(['id', 'nome', 'URL', 'pesquisa', 'assunto', 'periodicidade', 'nivelTerritorial', 'variaveis', 'classificacoes'])
Por exemplo, para obter os identificadores dos grupos da classificação “Geral, grupo, subgrupo, item e subitem” do IPCA, que foi a lista usada no exemplo anterior:
In [19]: classification = metadata["classificacoes"][0]
In [20]: classification["id"]
Out[20]: 315
In [21]: [categoria["id"] for categoria in classification["categorias"] if categoria["nivel"] == 1]
Out[21]: [7170, 7445, 7486, 7558, 7625, 7660, 7712, 7766, 7786]