├── 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 | [![goodtables.io](https://goodtables.io/badge/github/dadosgovbr/catalogos-dados-brasil.svg)](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 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | "
SoluçãoTipo de LicençaURLConceito
0CKANabertahttp://ckan.org/https://www.wikidata.org/wiki/Q977484
1ArcGISproprietáriahttps://www.arcgis.comhttps://www.wikidata.org/wiki/Q513297
2InternaNoneNonehttps://www.wikidata.org/wiki/Q29256
\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 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | "
TítuloURLMunicípioUFEsferaPoderSolução
0Alagoas em dados e informaçõeshttp://dados.al.gov.br/NoneALEstadualExecutivoCKAN
1Fortaleza Dados Abertoshttp://dados.fortaleza.ce.gov.br/FortalezaCEMunicipalExecutivoCKAN
2Dados abertos – TCM-CEhttp://api.tcm.ce.gov.br/NoneCEEstadualLegislativoInterna
3Dados abertos Distrito Federalhttp://dados.df.gov.br/NoneDFEstadualExecutivoCKAN
4Dados abertos – Governo do EShttps://transparencia.es.gov.br/DadosAbertos/B...NoneESEstadualExecutivoInterna
\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 | "![gráfico de barras por solução](img/solucao.png)" 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 | "![gráfico de rosca por poder](img/poder.png)" 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 | "![gráfico de rosca por esfera](img/esfera.png)" 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 | "![gráfico de barras por uf](img/uf.png)" 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 | --------------------------------------------------------------------------------