Obtaining data from IBGE

[1]:
import pandas as pd
from pysus.online_data import IBGE

import ipywidgets as widgets
%matplotlib inline

Listing Subject Areas

IBGE makes available data from a number of surveys on different subjects. We can find out what is available, before downloading data.

[2]:
ag = IBGE.list_agregados()
ag
Fetching Data groupings from https://servicodados.ibge.gov.br/api/v3/agregados?
[2]:
id nome agregados
0 D5 Áreas Urbanizadas [{'id': '8418', 'nome': 'Áreas urbanizadas, Lo...
1 CL Cadastro Central de Empresas [{'id': '1732', 'nome': 'Dados gerais das empr...
2 CA Censo Agropecuário [{'id': '1278', 'nome': 'Agroindústria rural n...
3 ME Censo Comum do Mercosul, Bolívia e Chile [{'id': '2059', 'nome': 'Domicílios e Populaçã...
4 CD Censo Demográfico [{'id': '1301', 'nome': 'Área e Densidade demo...
... ... ... ...
62 VS Produção da Extração Vegetal e da Silvicultura [{'id': '5930', 'nome': 'Área total existente ...
63 PO Produção de Ovos de Galinha [{'id': '915', 'nome': 'Número de informantes,...
64 IO Produto Interno Bruto dos Municípios [{'id': '599', 'nome': 'Índice de Gini do prod...
65 XE Projeção da População [{'id': '7362', 'nome': 'Esperança de vida ao ...
66 SI Sistema Nacional de Pesquisa de Custos e Índic... [{'id': '33', 'nome': 'Custo de projeto m², po...

67 rows × 3 columns

Let’s look at the datasets (called “agregados”) available within the category of “Censo Demografico”.

[3]:
pd.DataFrame(ag[ag.id=='CM'].agregados.iloc[0])
[3]:
id nome
0 479 Chefes de domicílios particulares permanentes ...
1 798 Domicílios particulares ocupados por sexo da p...
2 482 Domicílios particulares permanentes por sexo d...
3 580 Domicílios particulares permanentes, População...
4 579 Domicílios particulares permanentes, População...
5 797 Domicílios recenseados por espécie de domicílio
6 319 Média de moradores por domicílio particular pe...
7 553 Média de moradores por domicílio particular pe...
8 481 Média de moradores por domicílio particular pe...
9 552 Média de moradores por domicílio particular pe...
10 476 Pessoas de 4 anos ou mais de idade por frequên...
11 473 Pessoas de 4 anos ou mais de idade por grupos ...
12 477 Pessoas de 4 anos ou mais que frequentam escol...
13 484 Pessoas não residentes no município de residên...
14 478 Pessoas não residentes no município de residên...
15 794 População recenseada por situação do domicílio...
16 793 População residente
17 305 População residente em domicílios particulares...
18 475 População residente por grupos de idade, sexo ...
19 472 População residente por idade, forma de declar...
20 480 População residente por relação com o chefe do...

Again for population projections

[4]:
pd.DataFrame(ag[ag.id=='XE'].agregados.iloc[0])
[4]:
id nome
0 7362 Esperança de vida ao nascer e Taxa de mortalid...
1 7360 Indicadores implícitos na projeção da população
2 7358 População, por sexo e idade
3 7365 Proporção de pessoas, por grupo de idade
4 7363 Taxa específica de fecundidade, por grupo de i...

Downloading data

Before downloading the data, it may be useful to look at the metadata of the dataset we are interested in.

[5]:
opts= [(r.nome, int(r.id)) for r in pd.DataFrame(ag[ag.id=='CM'].agregados.iloc[0]).itertuples()]
ds = widgets.Dropdown(
    options=opts,
    value=475,
    description='Number:',
)
display(ds)
IBGE.metadados(ds.value)
[5]:
{'id': 475,
 'nome': 'População residente por grupos de idade, sexo e situação',
 'URL': 'https://sidra.ibge.gov.br/tabela/475',
 'pesquisa': 'Contagem da População ',
 'assunto': 'Pessoas',
 'periodicidade': {'frequencia': 'anual', 'inicio': 1996, 'fim': 1996},
 'nivelTerritorial': {'Administrativo': ['N102',
   'N1',
   'N10',
   'N2',
   'N8',
   'N9',
   'N6',
   'N3'],
  'Especial': [],
  'IBGE': []},
 'variaveis': [{'id': 93,
   'nome': 'População residente',
   'unidade': 'Pessoas',
   'sumarizacao': []},
  {'id': 1000093,
   'nome': 'População residente - percentual do total geral',
   'unidade': '%',
   'sumarizacao': []}],
 'classificacoes': [{'id': 58,
   'nome': 'Grupo de idade',
   'sumarizacao': {'status': True, 'excecao': []},
   'categorias': [{'id': 0, 'nome': 'Total', 'unidade': None, 'nivel': 0},
    {'id': 1140, 'nome': '0 a 4 anos', 'unidade': None, 'nivel': 1},
    {'id': 1141, 'nome': '5 a 9 anos', 'unidade': None, 'nivel': 1},
    {'id': 1142, 'nome': '10 a 14 anos', 'unidade': None, 'nivel': 1},
    {'id': 1143, 'nome': '15 a 19 anos', 'unidade': None, 'nivel': 1},
    {'id': 1144, 'nome': '20 a 24 anos', 'unidade': None, 'nivel': 1},
    {'id': 1145, 'nome': '25 a 29 anos', 'unidade': None, 'nivel': 1},
    {'id': 1146, 'nome': '30 a 34 anos', 'unidade': None, 'nivel': 1},
    {'id': 1147, 'nome': '35 a 39 anos', 'unidade': None, 'nivel': 1},
    {'id': 1148, 'nome': '40 a 44 anos', 'unidade': None, 'nivel': 1},
    {'id': 1149, 'nome': '45 a 49 anos', 'unidade': None, 'nivel': 1},
    {'id': 1150, 'nome': '50 a 54 anos', 'unidade': None, 'nivel': 1},
    {'id': 1151, 'nome': '55 a 59 anos', 'unidade': None, 'nivel': 1},
    {'id': 1152, 'nome': '60 a 64 anos', 'unidade': None, 'nivel': 1},
    {'id': 1153, 'nome': '65 a 69 anos', 'unidade': None, 'nivel': 1},
    {'id': 3244, 'nome': '70 anos ou mais', 'unidade': None, 'nivel': 1},
    {'id': 3245, 'nome': 'Idade ignorada', 'unidade': None, 'nivel': 1}]},
  {'id': 2,
   'nome': 'Sexo',
   'sumarizacao': {'status': True, 'excecao': []},
   'categorias': [{'id': 0, 'nome': 'Total', 'unidade': None, 'nivel': 0},
    {'id': 4, 'nome': 'Homens', 'unidade': None, 'nivel': 1},
    {'id': 5, 'nome': 'Mulheres', 'unidade': None, 'nivel': 1}]},
  {'id': 1,
   'nome': 'Situação do domicílio',
   'sumarizacao': {'status': True, 'excecao': []},
   'categorias': [{'id': 0, 'nome': 'Total', 'unidade': None, 'nivel': 0},
    {'id': 1, 'nome': 'Urbana', 'unidade': None, 'nivel': 1},
    {'id': 2, 'nome': 'Rural', 'unidade': None, 'nivel': 1}]}]}
[6]:
IBGE.lista_periodos(475)
[6]:
id literals modificacao
0 1996 [1996] 24/05/2005
[7]:
IBGE.localidades_por_agregado(475, nivel='N3')
[7]:
id nome nivel
0 11 Rondônia {'id': 'N3', 'nome': 'Unidade da Federação'}
1 12 Acre {'id': 'N3', 'nome': 'Unidade da Federação'}
2 13 Amazonas {'id': 'N3', 'nome': 'Unidade da Federação'}
3 14 Roraima {'id': 'N3', 'nome': 'Unidade da Federação'}
4 15 Pará {'id': 'N3', 'nome': 'Unidade da Federação'}
5 16 Amapá {'id': 'N3', 'nome': 'Unidade da Federação'}
6 17 Tocantins {'id': 'N3', 'nome': 'Unidade da Federação'}
7 21 Maranhão {'id': 'N3', 'nome': 'Unidade da Federação'}
8 22 Piauí {'id': 'N3', 'nome': 'Unidade da Federação'}
9 23 Ceará {'id': 'N3', 'nome': 'Unidade da Federação'}
10 24 Rio Grande do Norte {'id': 'N3', 'nome': 'Unidade da Federação'}
11 25 Paraíba {'id': 'N3', 'nome': 'Unidade da Federação'}
12 26 Pernambuco {'id': 'N3', 'nome': 'Unidade da Federação'}
13 27 Alagoas {'id': 'N3', 'nome': 'Unidade da Federação'}
14 28 Sergipe {'id': 'N3', 'nome': 'Unidade da Federação'}
15 29 Bahia {'id': 'N3', 'nome': 'Unidade da Federação'}
16 31 Minas Gerais {'id': 'N3', 'nome': 'Unidade da Federação'}
17 32 Espírito Santo {'id': 'N3', 'nome': 'Unidade da Federação'}
18 33 Rio de Janeiro {'id': 'N3', 'nome': 'Unidade da Federação'}
19 35 São Paulo {'id': 'N3', 'nome': 'Unidade da Federação'}
20 41 Paraná {'id': 'N3', 'nome': 'Unidade da Federação'}
21 42 Santa Catarina {'id': 'N3', 'nome': 'Unidade da Federação'}
22 43 Rio Grande do Sul {'id': 'N3', 'nome': 'Unidade da Federação'}
23 50 Mato Grosso do Sul {'id': 'N3', 'nome': 'Unidade da Federação'}
24 51 Mato Grosso {'id': 'N3', 'nome': 'Unidade da Federação'}
25 52 Goiás {'id': 'N3', 'nome': 'Unidade da Federação'}
26 53 Distrito Federal {'id': 'N3', 'nome': 'Unidade da Federação'}

To actually download the data after chosing the dataset, we can use the FetchData class, which will fetch the data and make it available both in JSON format and Dataframe as exemplified below.

[8]:
ds = IBGE.FetchData(475,periodos=1996,variavel=93,localidades='N3[all]',
                              classificacao='58[all]|2[4,5]|1[all]',view='flat')
ds.JSON[0]
Fetching https://servicodados.ibge.gov.br/api/v3/agregados/475/periodos/1996/variaveis/93?localidades=N3[all]&classificacao=58[all]|2[4,5]|1[all]&view=flat
[8]:
{'NC': 'Nível Territorial (Código)',
 'NN': 'Nível Territorial',
 'MC': 'Unidade de Medida (Código)',
 'MN': 'Unidade de Medida',
 'V': 'Valor',
 'D1C': 'Unidade da Federação (Código)',
 'D1N': 'Unidade da Federação',
 'D2C': 'Ano (Código)',
 'D2N': 'Ano',
 'D3C': 'Variável (Código)',
 'D3N': 'Variável',
 'D4C': 'Grupo de idade (Código)',
 'D4N': 'Grupo de idade',
 'D5C': 'Sexo (Código)',
 'D5N': 'Sexo',
 'D6C': 'Situação do domicílio (Código)',
 'D6N': 'Situação do domicílio'}
[9]:
ds.to_dataframe()
[9]:
NC NN MC MN V D1C D1N D2C D2N D3C D3N D4C D4N D5C D5N D6C D6N
0 Nível Territorial (Código) Nível Territorial Unidade de Medida (Código) Unidade de Medida Valor Unidade da Federação (Código) Unidade da Federação Ano (Código) Ano Variável (Código) Variável Grupo de idade (Código) Grupo de idade Sexo (Código) Sexo Situação do domicílio (Código) Situação do domicílio
1 3 Unidade da Federação 45 Pessoas 633594 11 Rondônia 1996 1996 93 População residente 0 Total 4 Homens 0 Total
2 3 Unidade da Federação 45 Pessoas 380119 11 Rondônia 1996 1996 93 População residente 0 Total 4 Homens 1 Urbana
3 3 Unidade da Federação 45 Pessoas 253475 11 Rondônia 1996 1996 93 População residente 0 Total 4 Homens 2 Rural
4 3 Unidade da Federação 45 Pessoas 595712 11 Rondônia 1996 1996 93 População residente 0 Total 5 Mulheres 0 Total
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2750 3 Unidade da Federação 45 Pessoas 1073 53 Distrito Federal 1996 1996 93 População residente 3245 Idade ignorada 4 Homens 1 Urbana
2751 3 Unidade da Federação 45 Pessoas 94 53 Distrito Federal 1996 1996 93 População residente 3245 Idade ignorada 4 Homens 2 Rural
2752 3 Unidade da Federação 45 Pessoas 1381 53 Distrito Federal 1996 1996 93 População residente 3245 Idade ignorada 5 Mulheres 0 Total
2753 3 Unidade da Federação 45 Pessoas 1286 53 Distrito Federal 1996 1996 93 População residente 3245 Idade ignorada 5 Mulheres 1 Urbana
2754 3 Unidade da Federação 45 Pessoas 95 53 Distrito Federal 1996 1996 93 População residente 3245 Idade ignorada 5 Mulheres 2 Rural

2755 rows × 17 columns

Using the SIDRA endpoint

IBGE also has a simpler API at https://api.sidra.ibge.gov.br that PySUS also gives access through a simple function. Below we have table 200, which is a sample from the resident population. classification 2 is sex, of which I am fetching all categories: total, Homens, and Mulheres. Terrotorial level 6 is municipality.

[10]:
df = IBGE.get_sidra_table(200,territorial_level=6,classification=2, categories='all')
df
Requesting data from https://apisidra.ibge.gov.br/values/t/200/n6/all/c2/all
[10]:
NC NN MC MN V D1C D1N D2C D2N D3C D3N D4C D4N D5C D5N D6C D6N
0 Nível Territorial (Código) Nível Territorial Unidade de Medida (Código) Unidade de Medida Valor Município (Código) Município Sexo (Código) Sexo Ano (Código) Ano Variável (Código) Variável Situação do domicílio (Código) Situação do domicílio Grupo de idade (Código) Grupo de idade
1 6 Município 45 Pessoas 24392 1100015 Alta Floresta D'Oeste - RO 0 Total 2010 2010 93 População residente 0 Total 0 Total
2 6 Município 45 Pessoas 12656 1100015 Alta Floresta D'Oeste - RO 4 Homens 2010 2010 93 População residente 0 Total 0 Total
3 6 Município 45 Pessoas 11736 1100015 Alta Floresta D'Oeste - RO 5 Mulheres 2010 2010 93 População residente 0 Total 0 Total
4 6 Município 45 Pessoas 90353 1100023 Ariquemes - RO 0 Total 2010 2010 93 População residente 0 Total 0 Total
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
16691 6 Município 45 Pessoas 2689 5222302 Vila Propício - GO 4 Homens 2010 2010 93 População residente 0 Total 0 Total
16692 6 Município 45 Pessoas 2456 5222302 Vila Propício - GO 5 Mulheres 2010 2010 93 População residente 0 Total 0 Total
16693 6 Município 45 Pessoas 2570160 5300108 Brasília - DF 0 Total 2010 2010 93 População residente 0 Total 0 Total
16694 6 Município 45 Pessoas 1228880 5300108 Brasília - DF 4 Homens 2010 2010 93 População residente 0 Total 0 Total
16695 6 Município 45 Pessoas 1341280 5300108 Brasília - DF 5 Mulheres 2010 2010 93 População residente 0 Total 0 Total

16696 rows × 17 columns

Suppose we just wanted a single municipality, Balneário Rincão (SC): Unfortunately for this one there is no data available, thus the ... in the column Valor. Try another one.

[11]:
single = IBGE.get_sidra_table(200,territorial_level=6, geocode=4220000,period='last',classification=2, categories='all')
single
Requesting data from https://apisidra.ibge.gov.br/values/t/200/n6/4220000/p/last/c2/all
[11]:
NC NN MC MN V D1C D1N D2C D2N D3C D3N D4C D4N D5C D5N D6C D6N
0 Nível Territorial (Código) Nível Territorial Unidade de Medida (Código) Unidade de Medida Valor Município (Código) Município Ano (Código) Ano Sexo (Código) Sexo Variável (Código) Variável Situação do domicílio (Código) Situação do domicílio Grupo de idade (Código) Grupo de idade
1 6 Município 45 Pessoas ... 4220000 Balneário Rincão (SC) 2010 2010 0 Total 93 População residente 0 Total 0 Total
2 6 Município 45 Pessoas ... 4220000 Balneário Rincão (SC) 2010 2010 4 Homens 93 População residente 0 Total 0 Total
3 6 Município 45 Pessoas ... 4220000 Balneário Rincão (SC) 2010 2010 5 Mulheres 93 População residente 0 Total 0 Total
[ ]: