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())
../_images/ipca_by_product.png

É 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())
../_images/ipca_by_product_rio.png

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]