├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── dados
├── catalogos.csv
└── solucao.csv
├── datapackage.json
└── scripts
├── exportacao
└── dataportals.org
│ ├── README.md
│ └── dataportals.org-export.py
└── uso
├── como-usar-com-o-pandas.ipynb
├── img
├── esfera.png
├── poder.png
├── solucao.png
└── uf.png
└── requirements.txt
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | Saiba como contribuir com o projeto.
2 |
3 | Contribuições são bem vindas! Se você encontrou um catálogo de dados, verifique
4 | primeiro se ele atende aos critérios de qualificação abaixo. Confira também se
5 | ele já está na planilha em [dados/catalogos.csv](/dados/catalogos.csv).
6 | Para propor a inclusão de um novo catálogo de dados, edite a planilha e faça um
7 | *[pull request](https://help.github.com/articles/about-pull-requests/)*.
8 |
9 | Certifique-se de manter a estrutura da planilha (delimitador de campos, uso de
10 | aspas, etc.), de modo que o commit apenas acrescente a(s) linha(s) que pretende
11 | contribuir e não altere todo o arquivo.
12 |
13 | Se encontrou algum problema no reposítório, você também pode abrir uma
14 | *[issue](../../issues)* no Github.
15 |
16 | ## Critérios de qualificação
17 |
18 | Para fazer parte dessa lista, a iniciativa deve satisfazer as seguintes condições:
19 |
20 | * ser de responsabilidade de algum órgão público brasileiro;
21 | * o órgão público não ser vinculado ou subordinado a uma instituição superior que também possui iniciativa de dados abertos (nesses casos, os dados devem ser agregados no portal desta instituição e este, por sua vez, será incluído na base);
22 | * conter um catálogo ou portal com múltiplos [conjuntos de dados](http://dados.gov.br/paginas/faq/#q10), dos quais uma expressiva parte possam ser considerados [dados abertos](http://dados.gov.br/pagina/dados-abertos) e que abranjam uma expressiva parte do portfólio da instituição pública;
23 | * conter metadados relevantes que contextualizem os dados, tais como título, descrição, informação de quem são os responsáveis pelos dados, etc.
24 |
25 | Em especial, são exemplos de sites que não se qualificam:
26 |
27 | * um único conjunto de dados;
28 | * repositórios de arquivos sem os respectivos metadados que os contextualizem;
29 | * APIs de dados abertos, quando representarem um único conjunto de dados de
30 | uma única área específica dentro da instituição;
31 | * portais da transparência ou outros que contenham informações, mas não dados
32 | brutos e estruturados (estes estão catalogados no
33 | [levantamento de portais de transparência e dados abertos](https://github.com/augusto-herrmann/transparencia-dados-abertos-brasil/blob/master/LEIAME.md);
34 | * portais de dados que contenham predominantemente dados não abertos ou com
35 | licença restritiva;
36 | * portais de dados abertos de órgãos públicos vinculados ou subordinados a
37 | outros que também possam portais de dados abertos (nesses casos, os dados
38 | devem ser agregados no portal desta instituição e este, por sua vez, será
39 | incluído na base);
40 | * portais que contenham apenas catálogo de bases de dados, sem disponibilizar
41 | downloads de dados abertos relacionados a essas bases;
42 | * visualizações, painéis de *business intelligence/analytics* ou similares.
43 |
44 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 dados.gov.br
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Catálogos de dados abertos no Brasil
2 |
3 | Um mapeamento de iniciativas (e catálogos) de dados abertos governamentais no Brasil.
4 |
5 | [](https://goodtables.io/github/dadosgovbr/catalogos-dados-brasil)
6 |
7 | ## Definição
8 |
9 | Um catálogo de dados é uma coleção curada de metadados a respeito de conjuntos de dados. Essa é a definição especificada pelo [*Data Catalog Vocabulary* (DCAT)](https://www.w3.org/TR/vocab-dcat/#class-catalog).
10 |
11 | Exemplos de catálogos de dados são: o portal de dados abertos da prefeitura do município X, o portal de dados abertos da assembleia legislativa do estado Y, etc.
12 |
13 | ## Como usar
14 |
15 | Há várias maneiras possíveis de utilizar os dados.
16 |
17 | * Pela web: a visualização do
18 | [Portal Brasileiro de Dados Abertos](http://dados.gov.br/pagina/outras-iniciativas)
19 | é sincronizada com este repositório.
20 | * Pelo Github: veja a pré-visualização da
21 | [tabela](dados/catalogos.csv) que o próprio Github oferece.
22 | * Pelo seu computador: faça clone do repositório e use a sua ferramenta
23 | favorita para abrir o arquivo CSV: Libreoffice Calc, Excel, etc.
24 | * Pelo Jupyer Notebook / Jupyter Lab: veja o nosso
25 | [exemplo / tutorial](scripts/uso/como-usar-com-o-pandas.ipynb) de como usar.
26 |
27 | ## Como contribuir
28 |
29 | Que contribuir com informações? Excelente! Leia o nosso
30 | [guia de contribuição](CONTRIBUTING.md).
31 |
32 | ## Padronização
33 |
34 | Os dados deste repositório estão descritos conforme o padrão
35 | *[Tabular Data Packages](https://frictionlessdata.io/specs/tabular-data-package/)*
36 | do *[Frictionless Data](https://frictionlessdata.io/)* (dados sem fricção).
37 |
38 | Isto significa que, a cada atualização no repositório, os dados são validados
39 | automaticamente conforme o esquema definido no arquivo
40 | [datapackage.json](datapackage.json). O serviço de validação é oferecido pelo
41 | site [goodtables.io](http://goodtables.io),
42 | [fornecido pela Open Knowledge](https://discuss.okfn.org/t/launching-goodtables-io-tell-us-what-you-think/5165).
43 |
44 |
--------------------------------------------------------------------------------
/dados/catalogos.csv:
--------------------------------------------------------------------------------
1 | Título,URL,Município,UF,Esfera,Poder,Solução
2 | Alagoas em dados e informações,http://dados.al.gov.br/,,AL,Estadual,Executivo,CKAN
3 | Fortaleza Dados Abertos,http://dados.fortaleza.ce.gov.br/,Fortaleza,CE,Municipal,Executivo,CKAN
4 | Dados abertos – TCM-CE,http://api.tcm.ce.gov.br/,,CE,Estadual,Legislativo,Interna
5 | Dados abertos Distrito Federal,http://dados.df.gov.br/,,DF,Estadual,Executivo,CKAN
6 | Dados abertos – Governo do ES,https://transparencia.es.gov.br/DadosAbertos/BaseDeDados#,,ES,Estadual,Executivo,Interna
7 | Dados abertos – Goiás Transparente,http://www.transparencia.go.gov.br/portaldatransparencia/institucional/dados-abertos,,GO,Estadual,Executivo,Interna
8 | Dados abertos – Assembleia de Minas,http://dadosabertos.almg.gov.br/ws/ajuda/sobre,,MG,Estadual,Legislativo,Interna
9 | Dados abertos – Estado de MG,http://www.dados.mg.gov.br,,MG,Estadual,Executivo,CKAN
10 | Dados abertos do SAGRES – TCE/PB,http://portal.tce.pb.gov.br/dados-abertos-do-sagres-tcepb/,,PB,Estadual,Legislativo,Interna
11 | Dados abertos – Governo de Pernambuco,http://www.dadosabertos.pe.gov.br/,,PE,Estadual,Executivo,Interna
12 | Dados Recife,http://dados.recife.pe.gov.br,Recife,PE,Municipal,Executivo,CKAN
13 | Dados Abertos Curitiba,http://www.curitiba.pr.gov.br/dadosabertos/,Curitiba,PR,Municipal,Executivo,Interna
14 | data.rio,http://data.rio/,Rio de Janeiro,RJ,Municipal,Executivo,CKAN
15 | Dados Geográficos Abertos da Cidade do Rio de Janeiro,http://portalgeo.pcrj.opendata.arcgis.com/,Rio de Janeiro,RJ,Municipal,Executivo,ArcGIS
16 | Dados RS,http://dados.rs.gov.br/,,RS,Estadual,Executivo,CKAN
17 | Dados Abertos SC,https://dados.sc.gov.br/,Santa Catarina,SC,Estadual,Executivo,CKAN
18 | Dados Abertos POA,https://dados.portoalegre.rs.gov.br/,Porto Alegre,RS,Municipal,Executivo,CKAN
19 | Governo Aberto SP,http://www.governoaberto.sp.gov.br/,,SP,Estadual,Executivo,CKAN
20 | Programa de Dados Abertos do Parlamento,http://www.camara.sp.gov.br/transparencia/dados-abertos/,São Paulo,SP,Municipal,Legislativo,Interna
21 | Dados Abertos Legislativos – Senado Federal,http://dadosabertos.senado.gov.br/,,,Federal,Legislativo,Interna
22 | Dados abertos da Câmara dos Deputados,https://dadosabertos.camara.leg.br/,,,Federal,Legislativo,Interna
23 | Dados Abertos TCE-RS,http://dados.tce.rs.gov.br/,,RS,Estadual,Legislativo,CKAN
24 | Dados Abertos MPRS,http://dados.mprs.mp.br/,,RS,Estadual,,Interna
25 | Portal da Transparência Municipal,http://transparencia.tce.sp.gov.br/,,SP,Municipal,Legislativo,Interna
26 | Portal dos Dados Abertos TCE/RN,http://apidadosabertos.tce.rn.gov.br/,,RN,Estadual,Legislativo,Interna
27 | Portal de Dados Abertos da Cidade de São Paulo,http://dados.prefeitura.sp.gov.br/,São Paulo,SP,Municipal,Executivo,CKAN
28 | Câmara de Itabira – Dados Abertos,http://www.itabira.cam.mg.gov.br/dados-abertos,Itabira,MG,Municipal,Legislativo,Interna
29 | Portal dos Dados Abertos da Alesp – al.sp.gov.br,https://www.al.sp.gov.br/dados-abertos/,,SP,Estadual,Legislativo,Interna
30 | Transparência Anápois – Dados Abertos,http://www.transparencia.anapolis.go.gov.br:8091/transparencia/dadosAbertos.jsf,Anápolis,GO,Municipal,Executivo,Interna
31 | Download de Bases – TRANSPARÊNCIA,http://www.transparencia.mt.gov.br/downloads-de-bases,,MT,Estadual,Executivo,Interna
32 | Dados PB,http://dados.pb.gov.br,,PB,Estadual,Executivo,Interna
33 | Portal da Transparência – Dados Abertos,http://transparencia.campinas.sp.gov.br/,Campinas,SP,Municipal,Executivo,Interna
34 | Dados Abertos – TCEMG,https://dadosabertos.tce.mg.gov.br/,,MG,Estadual,Legislativo,Interna
35 | Dados Abertos – Cerará Transparente,https://cearatransparente.ce.gov.br/portal-da-transparencia/dados-abertos/conjuntos-de-dados?locale=pt-BR,,CE,Estadual,Executivo,Interna
36 | Portal da Transparência e Mobilidade Urbana de Natal,http://dados.natal.br/,Natal,RN,Municipal,Executivo,CKAN
37 | Dados Abertos – Portal da Transparência de Pernambuco,http://web.transparencia.pe.gov.br/dados-abertos/,,PE,Estadual,Executivo,CKAN
38 | Dados Abertos – Tribunal de Contas do Estado de Pernambuco,https://www.tce.pe.gov.br/internet/index.php/dados-abertos,,PE,Estadual,Legislativo,Interna
39 | Portal de Dados Abertos – Prefeitura de Belo Horizonte,https://dados.pbh.gov.br/,Belo Horizonte,MG,Municipal,Executivo,CKAN
40 | Portal de Dados Abertos da Câmara Legislativa do Distrito Federal,http://dadosabertos.cl.df.gov.br/,,DF,Estadual,Legislativo,Interna
41 |
--------------------------------------------------------------------------------
/dados/solucao.csv:
--------------------------------------------------------------------------------
1 | Solução,Tipo de Licença,URL,Conceito
2 | CKAN,aberta,http://ckan.org/,https://www.wikidata.org/wiki/Q977484
3 | ArcGIS,proprietária,https://www.arcgis.com,https://www.wikidata.org/wiki/Q513297
4 | Interna,,,https://www.wikidata.org/wiki/Q29256
5 |
--------------------------------------------------------------------------------
/datapackage.json:
--------------------------------------------------------------------------------
1 | {
2 | "profile": "tabular-data-package",
3 | "resources": [
4 | {
5 | "path": "dados/solucao.csv",
6 | "profile": "tabular-data-resource",
7 | "name": "solucao",
8 | "format": "csv",
9 | "mediatype": "text/csv",
10 | "encoding": "utf-8",
11 | "schema": {
12 | "fields": [
13 | {
14 | "name": "Solução",
15 | "type": "string",
16 | "format": "default",
17 | "description": "Nome da solução de software utilizada. Caso seja uma solução desenvolvida especialmente para o portal específico, sem utilizar parte de uma solução pronta, usar o valor 'interna'."
18 | },
19 | {
20 | "name": "Tipo de Licença",
21 | "type": "string",
22 | "format": "default",
23 | "description": "Se a licença é 'aberta' ou 'proprietária'. Considerar o conceito de aberto da Open Source Initiative."
24 | },
25 | {
26 | "name": "URL",
27 | "type": "string",
28 | "format": "uri",
29 | "description": "Endereço onde a solução de software pode ser encontrada, se houver."
30 | },
31 | {
32 | "name": "Conceito",
33 | "type": "string",
34 | "format": "uri",
35 | "description": "URI de referência no Wikidata ou DBPedia ao conceito do software utilizado."
36 | }
37 | ],
38 | "primarykey" : "Solução",
39 | "missingValues": [
40 | ""
41 | ]
42 | }
43 | },
44 | {
45 | "path": "dados/catalogos.csv",
46 | "profile": "tabular-data-resource",
47 | "name": "catalogos",
48 | "format": "csv",
49 | "mediatype": "text/csv",
50 | "encoding": "utf-8",
51 | "schema": {
52 | "fields": [
53 | {
54 | "name": "Título",
55 | "type": "string",
56 | "format": "default",
57 | "description": "Título do catálogo"
58 | },
59 | {
60 | "name": "URL",
61 | "type": "string",
62 | "format": "uri",
63 | "description": "URL do catálogo"
64 | },
65 | {
66 | "name": "Município",
67 | "type": "string",
68 | "format": "default",
69 | "description": "Nome do município, caso a esfera seja 'Municipal'"
70 | },
71 | {
72 | "name": "UF",
73 | "type": "string",
74 | "format": "default",
75 | "description": "Sigla IBGE-2-letras da Unidade da Federação, quando a esfera se aplica ('Estadual' ou 'Municipal')"
76 | },
77 | {
78 | "name": "Esfera",
79 | "type": "string",
80 | "format": "default",
81 | "description": "Esfera do ente federativo brasileiro: 'Municipal', 'Estadual' ou 'Federal'"
82 | },
83 | {
84 | "name": "Poder",
85 | "type": "string",
86 | "format": "default",
87 | "description": "Espécie de poder do ente público: 'Executivo', 'Legislativo', 'Judiciário', ou 'Ministério Público'"
88 | },
89 | {
90 | "name": "Solução",
91 | "type": "string",
92 | "format": "default",
93 | "description": "Nome da solução utilizada no catálogo (presente na tabela solucao.csv)"
94 | }
95 | ],
96 | "primarykey": "URL",
97 | "missingValues": [
98 | ""
99 | ],
100 | "foreignKeys": [
101 | {
102 | "fields": "Solução",
103 | "reference": {
104 | "resource": "solucao",
105 | "fields": "Solução"
106 | }
107 | }
108 | ]
109 | }
110 | }
111 | ],
112 | "keywords": [
113 | "dados abertos",
114 | "open data",
115 | "data catalogs",
116 | "portais de dados"
117 | ],
118 | "title": "Catálogos de dados abertos no Brasil",
119 | "description": "Um mapeamento de iniciativas (e catálogos) de dados abertos governamentais no Brasil.\n\nSão registradas apenas fontes oficiais.",
120 | "homepage": "http://dados.gov.br/pagina/outras-iniciativas"
121 | }
122 |
--------------------------------------------------------------------------------
/scripts/exportacao/dataportals.org/README.md:
--------------------------------------------------------------------------------
1 | This script exports data from `dados/catalogos.csv` into the format used by
2 | the [Dataportals.org](https://dataportals.org/) project website. In this way,
3 | both projects can keep their respectives catalogs of catalogs in sync.
4 |
5 | For more information on Dataportals.org, see the
6 | [github repo](https://github.com/okfn/dataportals.org/).
7 |
8 | ## Usage
9 |
10 | ```
11 | python dataportals.org-export.py
12 | ```
13 |
14 |
--------------------------------------------------------------------------------
/scripts/exportacao/dataportals.org/dataportals.org-export.py:
--------------------------------------------------------------------------------
1 | import csv
2 | from urllib.parse import urljoin
3 | from datetime import datetime
4 | import unicodedata, re
5 |
6 | fieldnames = ['name',
7 | 'title',
8 | 'url',
9 | 'author',
10 | 'publisher',
11 | 'issued',
12 | 'publisher_classification',
13 | 'description',
14 | 'tags',
15 | 'license_id',
16 | 'license_url',
17 | 'place',
18 | 'location',
19 | 'country',
20 | 'language',
21 | 'status',
22 | 'metadatacreated',
23 | 'generator',
24 | 'api_endpoint',
25 | 'api_type',
26 | 'full_metadata_download']
27 |
28 | def slug(name):
29 | 'Creates a slug identifier from a name'
30 | slug = unicodedata.normalize('NFKD', name)
31 | slug = slug.lower()
32 | slug = re.sub(' ','-',slug)
33 | slug = re.sub('[^a-z0-9-]+', '', slug).strip('-')
34 | slug = re.sub('[-]+', '-', slug)
35 | return slug
36 |
37 | def is_other(name):
38 | 'Takes a guess whether or not the name refers to a another kind of entity, e.g. court of accounts.'
39 | other = False
40 | if 'tribunal' in name.lower():
41 | other = True
42 | elif 'tce' in name.lower():
43 | other = True
44 | elif 'tcm' in name.lower():
45 | other = True
46 | elif 'mp' in name.lower():
47 | other = True
48 | return other
49 |
50 | def description(name, municipality, state, power):
51 | 'Try to guess a description in some cases, if possible.'
52 | if is_other(name):
53 | return ''
54 | if municipality and state and power == 'Executivo':
55 | return 'Open Data portal of the city of {}, {}, in Brazil'.format(municipality, state)
56 | if state and power == 'Executivo':
57 | return 'Open Data portal of the state of {}, in Brazil'.format(state)
58 | if municipality and state and power == 'Legislativo':
59 | return 'Open Data portal of the local parliament of the city of {}, {}, in Brazil'.format(municipality, state)
60 | if state and power == 'Legislativo':
61 | return 'Open Data portal of the local parliament of the state of {}, in Brazil'.format(state)
62 | return ''
63 |
64 | # Read the data from the Brazilian repository of data catalogs
65 |
66 | with open('../../../dados/catalogos.csv') as br_csv:
67 | br_catalogs = csv.DictReader(br_csv)
68 | with open ('portals.csv', 'w') as portals_csv:
69 | br_dataportals = csv.DictWriter(portals_csv, fieldnames=fieldnames)
70 | br_dataportals.writeheader()
71 | for br_catalog in br_catalogs:
72 | # Prepare a blank line
73 | new_portal = dict(map(lambda key: (key, ''),fieldnames))
74 | # Map values
75 | new_portal['name'] = slug(br_catalog.get('Título',''))
76 | new_portal['title'] = br_catalog.get('Título','')
77 | new_portal['url'] = br_catalog['URL']
78 | new_portal['country'] = 'BR'
79 | new_portal['language'] = 'pt'
80 | new_portal['status'] = 'active'
81 | new_portal['publisher_classification'] = 'Government'
82 | tags = []
83 | # Is it a city catalog?
84 | if br_catalog.get('Município','') and br_catalog.get('UF',''):
85 | new_portal['place'] = ', '.join((br_catalog['Município'], br_catalog['UF'], 'Brazil'))
86 | new_portal['description'] = description(
87 | br_catalog.get('Título',''),
88 | br_catalog.get('Município',''),
89 | br_catalog.get('UF',''),
90 | br_catalog.get('Poder','')
91 | )
92 | tags.append('city')
93 | tags.append('local-government')
94 | tags.append('br-' + br_catalog['UF'])
95 | tags.append(br_catalog['Município'])
96 | # or is it a state catalog?
97 | elif br_catalog.get('UF',''):
98 | new_portal['place'] = ', '.join((br_catalog['UF'], 'Brazil'))
99 | new_portal['description'] = description(
100 | br_catalog.get('Título',''),
101 | br_catalog.get('Município',''),
102 | br_catalog.get('UF',''),
103 | br_catalog.get('Poder','')
104 | )
105 | tags.append('local-government')
106 | tags.append('br-' + br_catalog['UF'])
107 | # Does it use CKAN?
108 | if br_catalog.get('Solução','') == 'CKAN':
109 | tags.append(br_catalog['Solução'])
110 | new_portal['generator'] = br_catalog['Solução']
111 | new_portal['api_endpoint'] = urljoin(br_catalog['URL'], '/api/3')
112 | new_portal['api_type'] = 'CKAN API'
113 | new_portal['tags'] = ','.join(tags)
114 | new_portal['metadatacreated'] = datetime.now().isoformat(timespec='seconds')+'Z'
115 | br_dataportals.writerow(new_portal)
116 |
117 |
--------------------------------------------------------------------------------
/scripts/uso/como-usar-com-o-pandas.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Como usar com o Pandas"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "Os catálogos de dados abertos podem ser consultados facilmente com a ferramenta\n",
15 | "Pandas, com ou sem Jupyter Notebook.\n",
16 | "\n",
17 | "Esse tutorial inspirado na\n",
18 | "[demonstração](https://github.com/okfn/okfn.github.com/blob/master/resources/using-data-packages-with-pandas.ipynb)\n",
19 | "do Open Knowledge Labs."
20 | ]
21 | },
22 | {
23 | "cell_type": "markdown",
24 | "metadata": {},
25 | "source": [
26 | "## Pacotes necessários"
27 | ]
28 | },
29 | {
30 | "cell_type": "markdown",
31 | "metadata": {},
32 | "source": [
33 | "### Frictionless Data"
34 | ]
35 | },
36 | {
37 | "cell_type": "markdown",
38 | "metadata": {},
39 | "source": [
40 | "Além do Pandas, será necessário instalar alguns pacotes para trabalhar com [Frictionless Data](https://frictionlessdata.io/). Para isso,\n",
41 | "execute:\n",
42 | "\n",
43 | "`pip install datapackage tableschema-pandas`"
44 | ]
45 | },
46 | {
47 | "cell_type": "markdown",
48 | "metadata": {},
49 | "source": [
50 | "Para maiores informações sobre como usar esses pacotes, veja o exemplo contido\n",
51 | "no repositório do\n",
52 | "[tableschema-pandas](https://github.com/frictionlessdata/tableschema-pandas-py/)."
53 | ]
54 | },
55 | {
56 | "cell_type": "markdown",
57 | "metadata": {},
58 | "source": [
59 | "### Plotly e Plotly Express"
60 | ]
61 | },
62 | {
63 | "cell_type": "markdown",
64 | "metadata": {},
65 | "source": [
66 | "Para visualizar os dados, utilizaremos Plotly e Plotly Express.\n",
67 | "Entretanto, sinta-se à vontade para usar a biblioteca de visualização de sua\n",
68 | "preferência.\n",
69 | "\n",
70 | "Para instalar:\n",
71 | "\n",
72 | "`pip install plotly plotly_express`"
73 | ]
74 | },
75 | {
76 | "cell_type": "markdown",
77 | "metadata": {},
78 | "source": [
79 | "### Versões"
80 | ]
81 | },
82 | {
83 | "cell_type": "markdown",
84 | "metadata": {},
85 | "source": [
86 | "Para este tutorial, estamos usando a versão `1.10.0` do `datapackage`, a\n",
87 | "versão `1.1.0` do `tableschema-pandas`. Quanto às bibliotecas de\n",
88 | "visualização, usamos Plotly versão `4.1.0` e Plotly Express versão `0.4.1`.\n",
89 | "\n",
90 | "Para saber a sua versão, após ter instalado, use os comandos\n",
91 | "\n",
92 | "```\n",
93 | "pip freeze | grep datapackage\n",
94 | "pip freeze | grep tableschema\n",
95 | "pip freeze | grep plotly\n",
96 | "```\n",
97 | "\n",
98 | "Se desejar instalar essas versões exatas, é possível executar o comando\n",
99 | "\n",
100 | "`pip install -r requirements.txt`\n",
101 | "\n",
102 | "pois esse arquivo já contém as versões afixadas."
103 | ]
104 | },
105 | {
106 | "cell_type": "code",
107 | "execution_count": 1,
108 | "metadata": {},
109 | "outputs": [],
110 | "source": [
111 | "import pandas as pd\n",
112 | "\n",
113 | "# Para trabalhar com Frictionless Data – frictionlessdata.io\n",
114 | "from tableschema import Storage\n",
115 | "from datapackage import Package\n",
116 | "\n",
117 | "# Para visualização\n",
118 | "import plotly_express as px\n",
119 | "import plotly as py, plotly.graph_objects as go"
120 | ]
121 | },
122 | {
123 | "cell_type": "markdown",
124 | "metadata": {},
125 | "source": [
126 | "## Lendo o pacote de dados"
127 | ]
128 | },
129 | {
130 | "cell_type": "markdown",
131 | "metadata": {},
132 | "source": [
133 | "É possível ler o pacote de dados diretamente a partir da URL:"
134 | ]
135 | },
136 | {
137 | "cell_type": "code",
138 | "execution_count": 2,
139 | "metadata": {},
140 | "outputs": [
141 | {
142 | "data": {
143 | "text/plain": [
144 | "True"
145 | ]
146 | },
147 | "execution_count": 2,
148 | "metadata": {},
149 | "output_type": "execute_result"
150 | }
151 | ],
152 | "source": [
153 | "# Gravar no Pandas\n",
154 | "\n",
155 | "url = 'https://github.com/dadosgovbr/catalogos-dados-brasil/raw/master/datapackage.json'\n",
156 | "\n",
157 | "storage = Storage.connect('pandas')\n",
158 | "package = Package(url)\n",
159 | "package.save(storage=storage)"
160 | ]
161 | },
162 | {
163 | "cell_type": "markdown",
164 | "metadata": {},
165 | "source": [
166 | "Um pacote de dados pode conter uma quantidade de *recursos*. Pense em um\n",
167 | "recurso como uma tabela em um banco de dados. Cada um é um arquivo CSV.\n",
168 | "\n",
169 | "No contexto do armazenamento dos dados, esses recursos também são chamados de *buckets* (numa tradução livre, \"baldes\")."
170 | ]
171 | },
172 | {
173 | "cell_type": "code",
174 | "execution_count": 3,
175 | "metadata": {},
176 | "outputs": [
177 | {
178 | "data": {
179 | "text/plain": [
180 | "['catalogos', 'solucao']"
181 | ]
182 | },
183 | "execution_count": 3,
184 | "metadata": {},
185 | "output_type": "execute_result"
186 | }
187 | ],
188 | "source": [
189 | "storage.buckets"
190 | ]
191 | },
192 | {
193 | "cell_type": "markdown",
194 | "metadata": {},
195 | "source": [
196 | "Que são também Dataframes do Pandas:"
197 | ]
198 | },
199 | {
200 | "cell_type": "code",
201 | "execution_count": 4,
202 | "metadata": {},
203 | "outputs": [
204 | {
205 | "data": {
206 | "text/plain": [
207 | "pandas.core.frame.DataFrame"
208 | ]
209 | },
210 | "execution_count": 4,
211 | "metadata": {},
212 | "output_type": "execute_result"
213 | }
214 | ],
215 | "source": [
216 | "type(storage['catalogos'])"
217 | ]
218 | },
219 | {
220 | "cell_type": "markdown",
221 | "metadata": {},
222 | "source": [
223 | "Por isso, funcionam todas as operações que podem ser feitas com um DataFrames\n",
224 | "do Pandas:"
225 | ]
226 | },
227 | {
228 | "cell_type": "code",
229 | "execution_count": 5,
230 | "metadata": {},
231 | "outputs": [
232 | {
233 | "data": {
234 | "text/html": [
235 | "
\n",
236 | "\n",
249 | "
\n",
250 | " \n",
251 | " \n",
252 | " | \n",
253 | " Solução | \n",
254 | " Tipo de Licença | \n",
255 | " URL | \n",
256 | " Conceito | \n",
257 | "
\n",
258 | " \n",
259 | " \n",
260 | " \n",
261 | " 0 | \n",
262 | " CKAN | \n",
263 | " aberta | \n",
264 | " http://ckan.org/ | \n",
265 | " https://www.wikidata.org/wiki/Q977484 | \n",
266 | "
\n",
267 | " \n",
268 | " 1 | \n",
269 | " ArcGIS | \n",
270 | " proprietária | \n",
271 | " https://www.arcgis.com | \n",
272 | " https://www.wikidata.org/wiki/Q513297 | \n",
273 | "
\n",
274 | " \n",
275 | " 2 | \n",
276 | " Interna | \n",
277 | " None | \n",
278 | " None | \n",
279 | " https://www.wikidata.org/wiki/Q29256 | \n",
280 | "
\n",
281 | " \n",
282 | "
\n",
283 | "
"
284 | ],
285 | "text/plain": [
286 | " Solução Tipo de Licença URL \\\n",
287 | "0 CKAN aberta http://ckan.org/ \n",
288 | "1 ArcGIS proprietária https://www.arcgis.com \n",
289 | "2 Interna None None \n",
290 | "\n",
291 | " Conceito \n",
292 | "0 https://www.wikidata.org/wiki/Q977484 \n",
293 | "1 https://www.wikidata.org/wiki/Q513297 \n",
294 | "2 https://www.wikidata.org/wiki/Q29256 "
295 | ]
296 | },
297 | "execution_count": 5,
298 | "metadata": {},
299 | "output_type": "execute_result"
300 | }
301 | ],
302 | "source": [
303 | "storage['solucao']"
304 | ]
305 | },
306 | {
307 | "cell_type": "markdown",
308 | "metadata": {},
309 | "source": [
310 | "Como, por exemplo, mostrar o início da tabela."
311 | ]
312 | },
313 | {
314 | "cell_type": "code",
315 | "execution_count": 6,
316 | "metadata": {},
317 | "outputs": [
318 | {
319 | "data": {
320 | "text/html": [
321 | "\n",
322 | "\n",
335 | "
\n",
336 | " \n",
337 | " \n",
338 | " | \n",
339 | " Título | \n",
340 | " URL | \n",
341 | " Município | \n",
342 | " UF | \n",
343 | " Esfera | \n",
344 | " Poder | \n",
345 | " Solução | \n",
346 | "
\n",
347 | " \n",
348 | " \n",
349 | " \n",
350 | " 0 | \n",
351 | " Alagoas em dados e informações | \n",
352 | " http://dados.al.gov.br/ | \n",
353 | " None | \n",
354 | " AL | \n",
355 | " Estadual | \n",
356 | " Executivo | \n",
357 | " CKAN | \n",
358 | "
\n",
359 | " \n",
360 | " 1 | \n",
361 | " Fortaleza Dados Abertos | \n",
362 | " http://dados.fortaleza.ce.gov.br/ | \n",
363 | " Fortaleza | \n",
364 | " CE | \n",
365 | " Municipal | \n",
366 | " Executivo | \n",
367 | " CKAN | \n",
368 | "
\n",
369 | " \n",
370 | " 2 | \n",
371 | " Dados abertos – TCM-CE | \n",
372 | " http://api.tcm.ce.gov.br/ | \n",
373 | " None | \n",
374 | " CE | \n",
375 | " Estadual | \n",
376 | " Legislativo | \n",
377 | " Interna | \n",
378 | "
\n",
379 | " \n",
380 | " 3 | \n",
381 | " Dados abertos Distrito Federal | \n",
382 | " http://dados.df.gov.br/ | \n",
383 | " None | \n",
384 | " DF | \n",
385 | " Estadual | \n",
386 | " Executivo | \n",
387 | " CKAN | \n",
388 | "
\n",
389 | " \n",
390 | " 4 | \n",
391 | " Dados abertos – Governo do ES | \n",
392 | " https://transparencia.es.gov.br/DadosAbertos/B... | \n",
393 | " None | \n",
394 | " ES | \n",
395 | " Estadual | \n",
396 | " Executivo | \n",
397 | " Interna | \n",
398 | "
\n",
399 | " \n",
400 | "
\n",
401 | "
"
402 | ],
403 | "text/plain": [
404 | " Título \\\n",
405 | "0 Alagoas em dados e informações \n",
406 | "1 Fortaleza Dados Abertos \n",
407 | "2 Dados abertos – TCM-CE \n",
408 | "3 Dados abertos Distrito Federal \n",
409 | "4 Dados abertos – Governo do ES \n",
410 | "\n",
411 | " URL Município UF \\\n",
412 | "0 http://dados.al.gov.br/ None AL \n",
413 | "1 http://dados.fortaleza.ce.gov.br/ Fortaleza CE \n",
414 | "2 http://api.tcm.ce.gov.br/ None CE \n",
415 | "3 http://dados.df.gov.br/ None DF \n",
416 | "4 https://transparencia.es.gov.br/DadosAbertos/B... None ES \n",
417 | "\n",
418 | " Esfera Poder Solução \n",
419 | "0 Estadual Executivo CKAN \n",
420 | "1 Municipal Executivo CKAN \n",
421 | "2 Estadual Legislativo Interna \n",
422 | "3 Estadual Executivo CKAN \n",
423 | "4 Estadual Executivo Interna "
424 | ]
425 | },
426 | "execution_count": 6,
427 | "metadata": {},
428 | "output_type": "execute_result"
429 | }
430 | ],
431 | "source": [
432 | "storage['catalogos'].head()"
433 | ]
434 | },
435 | {
436 | "cell_type": "markdown",
437 | "metadata": {},
438 | "source": [
439 | "Ou ver quantos portais existem por tipo de solução, ou por UF, ou por poder,\n",
440 | "etc."
441 | ]
442 | },
443 | {
444 | "cell_type": "markdown",
445 | "metadata": {},
446 | "source": [
447 | "### Por tipo de solução"
448 | ]
449 | },
450 | {
451 | "cell_type": "code",
452 | "execution_count": 7,
453 | "metadata": {},
454 | "outputs": [
455 | {
456 | "data": {
457 | "text/plain": [
458 | "Solução\n",
459 | "ArcGIS 1\n",
460 | "CKAN 15\n",
461 | "Interna 23\n",
462 | "Name: quantidade, dtype: int64"
463 | ]
464 | },
465 | "execution_count": 7,
466 | "metadata": {},
467 | "output_type": "execute_result"
468 | }
469 | ],
470 | "source": [
471 | "tipo_solucao = storage['catalogos'].groupby('Solução').count()['URL'].rename('quantidade')\n",
472 | "tipo_solucao"
473 | ]
474 | },
475 | {
476 | "cell_type": "code",
477 | "execution_count": null,
478 | "metadata": {},
479 | "outputs": [],
480 | "source": [
481 | "px.bar(\n",
482 | " pd.DataFrame(tipo_solucao).reset_index(),\n",
483 | " x = 'Solução',\n",
484 | " y = 'quantidade',\n",
485 | " color = 'Solução',\n",
486 | " color_discrete_sequence = py.colors.qualitative.Set2\n",
487 | ")"
488 | ]
489 | },
490 | {
491 | "cell_type": "markdown",
492 | "metadata": {},
493 | "source": [
494 | ""
495 | ]
496 | },
497 | {
498 | "cell_type": "markdown",
499 | "metadata": {},
500 | "source": [
501 | "### Por poder da república"
502 | ]
503 | },
504 | {
505 | "cell_type": "code",
506 | "execution_count": 9,
507 | "metadata": {},
508 | "outputs": [
509 | {
510 | "data": {
511 | "text/plain": [
512 | "Poder\n",
513 | "Executivo 24\n",
514 | "Legislativo 14\n",
515 | "Name: quantidade, dtype: int64"
516 | ]
517 | },
518 | "execution_count": 9,
519 | "metadata": {},
520 | "output_type": "execute_result"
521 | }
522 | ],
523 | "source": [
524 | "poder = storage['catalogos'].groupby('Poder').count()['URL'].rename('quantidade')\n",
525 | "poder"
526 | ]
527 | },
528 | {
529 | "cell_type": "code",
530 | "execution_count": null,
531 | "metadata": {},
532 | "outputs": [],
533 | "source": [
534 | "go.Figure(\n",
535 | " data=go.Pie(\n",
536 | " labels=poder.index,\n",
537 | " values=poder.values,\n",
538 | " hole=.4\n",
539 | " )\n",
540 | ").show()"
541 | ]
542 | },
543 | {
544 | "cell_type": "markdown",
545 | "metadata": {},
546 | "source": [
547 | ""
548 | ]
549 | },
550 | {
551 | "cell_type": "markdown",
552 | "metadata": {},
553 | "source": [
554 | "### Por esfera"
555 | ]
556 | },
557 | {
558 | "cell_type": "code",
559 | "execution_count": 11,
560 | "metadata": {},
561 | "outputs": [
562 | {
563 | "data": {
564 | "text/plain": [
565 | "Esfera\n",
566 | "Estadual 22\n",
567 | "Federal 2\n",
568 | "Municipal 15\n",
569 | "Name: quantidade, dtype: int64"
570 | ]
571 | },
572 | "execution_count": 11,
573 | "metadata": {},
574 | "output_type": "execute_result"
575 | }
576 | ],
577 | "source": [
578 | "esfera = storage['catalogos'].groupby('Esfera').count()['URL'].rename('quantidade')\n",
579 | "esfera"
580 | ]
581 | },
582 | {
583 | "cell_type": "code",
584 | "execution_count": null,
585 | "metadata": {},
586 | "outputs": [],
587 | "source": [
588 | "go.Figure(\n",
589 | " data=go.Pie(\n",
590 | " labels=esfera.index,\n",
591 | " values=esfera.values,\n",
592 | " hole=.4\n",
593 | " )\n",
594 | ").show()"
595 | ]
596 | },
597 | {
598 | "cell_type": "markdown",
599 | "metadata": {},
600 | "source": [
601 | ""
602 | ]
603 | },
604 | {
605 | "cell_type": "markdown",
606 | "metadata": {},
607 | "source": [
608 | "### Por unidade federativa"
609 | ]
610 | },
611 | {
612 | "cell_type": "code",
613 | "execution_count": 13,
614 | "metadata": {},
615 | "outputs": [
616 | {
617 | "data": {
618 | "text/plain": [
619 | "UF\n",
620 | "AL 1\n",
621 | "CE 3\n",
622 | "DF 2\n",
623 | "ES 1\n",
624 | "GO 2\n",
625 | "MG 5\n",
626 | "MT 1\n",
627 | "PB 2\n",
628 | "PE 4\n",
629 | "PR 1\n",
630 | "RJ 2\n",
631 | "RN 2\n",
632 | "RS 5\n",
633 | "SP 6\n",
634 | "Name: quantidade, dtype: int64"
635 | ]
636 | },
637 | "execution_count": 13,
638 | "metadata": {},
639 | "output_type": "execute_result"
640 | }
641 | ],
642 | "source": [
643 | "uf = storage['catalogos'].groupby('UF').count()['URL'].rename('quantidade')\n",
644 | "uf"
645 | ]
646 | },
647 | {
648 | "cell_type": "code",
649 | "execution_count": null,
650 | "metadata": {},
651 | "outputs": [],
652 | "source": [
653 | "px.bar(\n",
654 | " pd.DataFrame(uf).reset_index(),\n",
655 | " x = 'UF',\n",
656 | " y = 'quantidade',\n",
657 | " color = 'UF',\n",
658 | " color_discrete_sequence = py.colors.qualitative.Set3\n",
659 | ")"
660 | ]
661 | },
662 | {
663 | "cell_type": "markdown",
664 | "metadata": {},
665 | "source": [
666 | ""
667 | ]
668 | },
669 | {
670 | "cell_type": "markdown",
671 | "metadata": {},
672 | "source": [
673 | "**Obs.:** Neste caderno usamos imagens estáticas em vez das saídas interativas\n",
674 | "do Plotly, considerando que estas ocupariam um espaço imenso no repositório.\n",
675 | "Além disso, o Github não mostra as saídas interativas na pré-visualização dos\n",
676 | "cadernos ao ver um repositório. Entretanto, ao baixar e executar o caderno, as\n",
677 | "visualizações interativas estarão disponíveis."
678 | ]
679 | }
680 | ],
681 | "metadata": {
682 | "kernelspec": {
683 | "display_name": "Python 3",
684 | "language": "python",
685 | "name": "python3"
686 | },
687 | "language_info": {
688 | "codemirror_mode": {
689 | "name": "ipython",
690 | "version": 3
691 | },
692 | "file_extension": ".py",
693 | "mimetype": "text/x-python",
694 | "name": "python",
695 | "nbconvert_exporter": "python",
696 | "pygments_lexer": "ipython3",
697 | "version": "3.6.8"
698 | }
699 | },
700 | "nbformat": 4,
701 | "nbformat_minor": 4
702 | }
703 |
--------------------------------------------------------------------------------
/scripts/uso/img/esfera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dadosgovbr/catalogos-dados-brasil/3c8d3f3c40f2488068d3c68f57377a3015b72228/scripts/uso/img/esfera.png
--------------------------------------------------------------------------------
/scripts/uso/img/poder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dadosgovbr/catalogos-dados-brasil/3c8d3f3c40f2488068d3c68f57377a3015b72228/scripts/uso/img/poder.png
--------------------------------------------------------------------------------
/scripts/uso/img/solucao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dadosgovbr/catalogos-dados-brasil/3c8d3f3c40f2488068d3c68f57377a3015b72228/scripts/uso/img/solucao.png
--------------------------------------------------------------------------------
/scripts/uso/img/uf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dadosgovbr/catalogos-dados-brasil/3c8d3f3c40f2488068d3c68f57377a3015b72228/scripts/uso/img/uf.png
--------------------------------------------------------------------------------
/scripts/uso/requirements.txt:
--------------------------------------------------------------------------------
1 | datapackage==1.10.0
2 | tableschema-pandas==1.1.0
3 | plotly==4.1.0
4 | plotly-express==0.4.1
5 |
6 |
--------------------------------------------------------------------------------