Os catálogos de dados abertos podem ser consultados facilmente com a ferramenta Pandas, com ou sem Jupyter Notebook.
Esse tutorial inspirado na demonstração do Open Knowledge Labs.
Além do Pandas, será necessário instalar alguns pacotes para trabalhar com Frictionless Data. Para isso, execute:
pip install datapackage tableschema-pandas
Para maiores informações sobre como usar esses pacotes, veja o exemplo contido no repositório do tableschema-pandas.
Para visualizar os dados, utilizaremos Plotly e Plotly Express. Entretanto, sinta-se à vontade para usar a biblioteca de visualização de sua preferência.
Para instalar:
pip install plotly plotly_express
Para este tutorial, estamos usando a versão 1.10.0
do datapackage
, a
versão 1.1.0
do tableschema-pandas
. Quanto às bibliotecas de
visualização, usamos Plotly versão 4.1.0
e Plotly Express versão 0.4.1
.
Para saber a sua versão, após ter instalado, use os comandos
pip freeze | grep datapackage
pip freeze | grep tableschema
pip freeze | grep plotly
Se desejar instalar essas versões exatas, é possível executar o comando
pip install -r requirements.txt
pois esse arquivo já contém as versões afixadas.
In [1]:
import pandas as pd
# Para trabalhar com Frictionless Data – frictionlessdata.io
from tableschema import Storage
from datapackage import Package
# Para visualização
import plotly_express as px
import plotly as py, plotly.graph_objects as go
É possível ler o pacote de dados diretamente a partir da URL:
In [2]:
# Gravar no Pandas
url = 'https://github.com/dadosgovbr/catalogos-dados-brasil/raw/master/datapackage.json'
storage = Storage.connect('pandas')
package = Package(url)
package.save(storage=storage)
Out[2]:
Um pacote de dados pode conter uma quantidade de recursos. Pense em um recurso como uma tabela em um banco de dados. Cada um é um arquivo CSV.
No contexto do armazenamento dos dados, esses recursos também são chamados de buckets (numa tradução livre, "baldes").
In [3]:
storage.buckets
Out[3]:
Que são também Dataframes do Pandas:
In [4]:
type(storage['catalogos'])
Out[4]:
Por isso, funcionam todas as operações que podem ser feitas com um DataFrames do Pandas:
In [5]:
storage['solucao']
Out[5]:
Como, por exemplo, mostrar o início da tabela.
In [6]:
storage['catalogos'].head()
Out[6]:
Ou ver quantos portais existem por tipo de solução, ou por UF, ou por poder, etc.
In [7]:
tipo_solucao = storage['catalogos'].groupby('Solução').count()['URL'].rename('quantidade')
tipo_solucao
Out[7]:
In [ ]:
px.bar(
pd.DataFrame(tipo_solucao).reset_index(),
x = 'Solução',
y = 'quantidade',
color = 'Solução',
color_discrete_sequence = py.colors.qualitative.Set2
)
In [9]:
poder = storage['catalogos'].groupby('Poder').count()['URL'].rename('quantidade')
poder
Out[9]:
In [ ]:
go.Figure(
data=go.Pie(
labels=poder.index,
values=poder.values,
hole=.4
)
).show()
In [11]:
esfera = storage['catalogos'].groupby('Esfera').count()['URL'].rename('quantidade')
esfera
Out[11]:
In [ ]:
go.Figure(
data=go.Pie(
labels=esfera.index,
values=esfera.values,
hole=.4
)
).show()
In [13]:
uf = storage['catalogos'].groupby('UF').count()['URL'].rename('quantidade')
uf
Out[13]:
In [ ]:
px.bar(
pd.DataFrame(uf).reset_index(),
x = 'UF',
y = 'quantidade',
color = 'UF',
color_discrete_sequence = py.colors.qualitative.Set3
)
Obs.: Neste caderno usamos imagens estáticas em vez das saídas interativas do Plotly, considerando que estas ocupariam um espaço imenso no repositório. Além disso, o Github não mostra as saídas interativas na pré-visualização dos cadernos ao ver um repositório. Entretanto, ao baixar e executar o caderno, as visualizações interativas estarão disponíveis.