Extraindo dados do IBGE
[1]:
import pandas as pd
from pysus.online_data import IBGE
import ipywidgets as widgets
%matplotlib inline
Listando Grupos de dados
O IBGE disponibiliza dados de várias pesquisas sobre diferentes assuntos. Podemos descobrir o que está disponível antes de baixar os dados.
[3]:
ag = IBGE.list_agregados()
ag
Fetching Data groupings from https://servicodados.ibge.gov.br/api/v3/agregados?
[3]:
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
Vamos dar uma olhada nos conjuntos de dados (chamados «agregados») disponíveis dentro da categoria de «Censo Demográfico».
[4]:
pd.DataFrame(ag[ag.id=='CM'].agregados.iloc[0])
[4]:
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... |
Novamente para projeções populacionais
[5]:
pd.DataFrame(ag[ag.id=='XE'].agregados.iloc[0])
[5]:
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... |
Extraindo dados
Antes de baixar os dados, pode ser útil olhar para os metadados do conjunto de dados que estamos interessados.
[6]:
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)
[6]:
{'id': 475,
'nome': 'População residente por grupos de idade, sexo e situação',
'URL': 'http://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}]}]}
[7]:
IBGE.lista_periodos(475)
[7]:
id | literals | |
---|---|---|
0 | 1996 | [1996] |
[8]:
IBGE.localidades_por_agregado(475, nivel='N3')
[8]:
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'} |
Para baixar os dados depois de escolher o conjunto de dados, podemos usar a classe FetchData, que irá buscar os dados e disponibilizá-los tanto em formato JSON quanto em Dataframe, conforme exemplificado abaixo.
[19]:
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
[19]:
{'NC': 'Nível Territorial (Código)',
'NN': 'Nível Territorial',
'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',
'MC': 'Unidade de Medida (Código)',
'MN': 'Unidade de Medida',
'V': 'Valor'}
[17]:
ds.to_dataframe()
[17]:
NC | NN | D1C | D1N | D2C | D2N | D3C | D3N | D4C | D4N | D5C | D5N | D6C | D6N | MC | MN | V | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Nível Territorial (Código) | Nível Territorial | 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 | Unidade de Medida (Código) | Unidade de Medida | Valor |
1 | 3 | Unidade da Federação | 11 | Rondônia | 1996 | 1996 | 93 | População residente | 0 | Total | 4 | Homens | 0 | Total | 45 | Pessoas | 633594 |
2 | 3 | Unidade da Federação | 11 | Rondônia | 1996 | 1996 | 93 | População residente | 0 | Total | 4 | Homens | 1 | Urbana | 45 | Pessoas | 380119 |
3 | 3 | Unidade da Federação | 11 | Rondônia | 1996 | 1996 | 93 | População residente | 0 | Total | 4 | Homens | 2 | Rural | 45 | Pessoas | 253475 |
4 | 3 | Unidade da Federação | 11 | Rondônia | 1996 | 1996 | 93 | População residente | 0 | Total | 5 | Mulheres | 0 | Total | 45 | Pessoas | 595712 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2750 | 3 | Unidade da Federação | 53 | Distrito Federal | 1996 | 1996 | 93 | População residente | 3245 | Idade ignorada | 4 | Homens | 1 | Urbana | 45 | Pessoas | 1073 |
2751 | 3 | Unidade da Federação | 53 | Distrito Federal | 1996 | 1996 | 93 | População residente | 3245 | Idade ignorada | 4 | Homens | 2 | Rural | 45 | Pessoas | 94 |
2752 | 3 | Unidade da Federação | 53 | Distrito Federal | 1996 | 1996 | 93 | População residente | 3245 | Idade ignorada | 5 | Mulheres | 0 | Total | 45 | Pessoas | 1381 |
2753 | 3 | Unidade da Federação | 53 | Distrito Federal | 1996 | 1996 | 93 | População residente | 3245 | Idade ignorada | 5 | Mulheres | 1 | Urbana | 45 | Pessoas | 1286 |
2754 | 3 | Unidade da Federação | 53 | Distrito Federal | 1996 | 1996 | 93 | População residente | 3245 | Idade ignorada | 5 | Mulheres | 2 | Rural | 45 | Pessoas | 95 |
2755 rows × 17 columns
Usando o endpoint SIDRA
O IBGE também possui uma API mais simples em https://api.sidra.ibge.gov.br que o PySUS também acessa através de uma função simples. Abaixo temos a tabela 200, que é uma amostra da população residente. A classificação 2 é o sexo, do qual estou buscando todas as categorias: total, Homens e Mulheres. O nível territorial 6 é o município.
[4]:
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
[4]:
NC | NN | D1C | D1N | D2C | D2N | D3C | D3N | D4C | D4N | D5C | D5N | D6C | D6N | MC | MN | V | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Nível Territorial (Código) | Nível Territorial | 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 | Unidade de Medida (Código) | Unidade de Medida | Valor |
1 | 6 | Município | 1100015 | Alta Floresta D'Oeste - RO | 0 | Total | 2010 | 2010 | 93 | População residente | 0 | Total | 0 | Total | 45 | Pessoas | 24392 |
2 | 6 | Município | 1100015 | Alta Floresta D'Oeste - RO | 4 | Homens | 2010 | 2010 | 93 | População residente | 0 | Total | 0 | Total | 45 | Pessoas | 12656 |
3 | 6 | Município | 1100015 | Alta Floresta D'Oeste - RO | 5 | Mulheres | 2010 | 2010 | 93 | População residente | 0 | Total | 0 | Total | 45 | Pessoas | 11736 |
4 | 6 | Município | 1100023 | Ariquemes - RO | 0 | Total | 2010 | 2010 | 93 | População residente | 0 | Total | 0 | Total | 45 | Pessoas | 90353 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
16691 | 6 | Município | 5222302 | Vila Propício - GO | 4 | Homens | 2010 | 2010 | 93 | População residente | 0 | Total | 0 | Total | 45 | Pessoas | 2689 |
16692 | 6 | Município | 5222302 | Vila Propício - GO | 5 | Mulheres | 2010 | 2010 | 93 | População residente | 0 | Total | 0 | Total | 45 | Pessoas | 2456 |
16693 | 6 | Município | 5300108 | Brasília - DF | 0 | Total | 2010 | 2010 | 93 | População residente | 0 | Total | 0 | Total | 45 | Pessoas | 2570160 |
16694 | 6 | Município | 5300108 | Brasília - DF | 4 | Homens | 2010 | 2010 | 93 | População residente | 0 | Total | 0 | Total | 45 | Pessoas | 1228880 |
16695 | 6 | Município | 5300108 | Brasília - DF | 5 | Mulheres | 2010 | 2010 | 93 | População residente | 0 | Total | 0 | Total | 45 | Pessoas | 1341280 |
16696 rows × 17 columns
Suponha que quiséssemos apenas um município, Balneário Rincão (SC): Infelizmente, para este não há dados disponíveis, portanto, há um … na coluna Valor. Tente outro município.
[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 | D1C | D1N | D2C | D2N | D3C | D3N | D4C | D4N | D5C | D5N | D6C | D6N | MC | MN | V | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Nível Territorial (Código) | Nível Territorial | 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 | Unidade de Medida (Código) | Unidade de Medida | Valor |
1 | 6 | Município | 4220000 | Balneário Rincão (SC) | 2010 | 2010 | 0 | Total | 93 | População residente | 0 | Total | 0 | Total | 45 | Pessoas | ... |
2 | 6 | Município | 4220000 | Balneário Rincão (SC) | 2010 | 2010 | 4 | Homens | 93 | População residente | 0 | Total | 0 | Total | 45 | Pessoas | ... |
3 | 6 | Município | 4220000 | Balneário Rincão (SC) | 2010 | 2010 | 5 | Mulheres | 93 | População residente | 0 | Total | 0 | Total | 45 | Pessoas | ... |
[ ]: