Dados abertos, do wikipedia ao governo.
http://www.paraondefoiomeudinheiro.com.br/
Thiago Rondon - @thiagorondon
Fórum Internacional de Software Livre 12 Porto Alegre/Brasil, Jun/2011.
Agenda
Agenda
• Dados Abertos
Agenda
• Dados Abertos
• DBpedia
Agenda
• Dados Abertos
• DBpedia
• Dados do governo.
Agenda
• Dados Abertos
• DBpedia
• Dados do governo.
• Técnicas de manipulação de dados.
Agenda
• Dados Abertos
• DBpedia
• Dados do governo.
• Técnicas de manipulação de dados.
• Infografia.
Agenda
• Dados Abertos
• DBpedia
• Dados do governo.
• Técnicas de manipulação de dados.
• Infografia.
• Projetos nacionais.
Dados
• Números
• Palavras
• Imagens
• Métricas
• Conjuntos
Dados fechados
Dados fechados
• Informações em um banco de dados ou um website que apenas usuários registrados podem acessar os dados. // captcha
Dados fechados
• Informações em um banco de dados ou um website que apenas usuários registrados podem acessar os dados. // captcha
• Copyright, Licença ou Patentes para proibir a reutilização da informação.
Dados fechados
• Informações em um banco de dados ou um website que apenas usuários registrados podem acessar os dados. // captcha
• Copyright, Licença ou Patentes para proibir a reutilização da informação.
• Tempo de limite para o uso dos dados.
Dados fechados
• Informações em um banco de dados ou um website que apenas usuários registrados podem acessar os dados. // captcha
• Copyright, Licença ou Patentes para proibir a reutilização da informação.
• Tempo de limite para o uso dos dados.
• Uso de uma tecnologia proprietária em protocolos ou criptografia para disponibilizar os dados.
Dados abertos
Dados abertos
• se o dado não pode ser encontrado e indexado na web, ele não existe.
Dados abertos
• se o dado não pode ser encontrado e indexado na web, ele não existe.
• se não estiver aberto e disponível em formato compreensível por máquina, ele não pode ser reaproveitado.
Dados abertos
• se o dado não pode ser encontrado e indexado na web, ele não existe.
• se não estiver aberto e disponível em formato compreensível por máquina, ele não pode ser reaproveitado.
• Padrões e formatos abertos.
Dados abertos governamentais.
Dados abertos governamentais.
• Se algum dispositivo legal não permitir sua replicação, ele não é útil.
Dados abertos governamentais.
• Se algum dispositivo legal não permitir sua replicação, ele não é útil.
• Atuais, os dados são disponibilizados tão rápidamente quanto necessário.
Dados abertos governamentais.
• Se algum dispositivo legal não permitir sua replicação, ele não é útil.
• Atuais, os dados são disponibilizados tão rápidamente quanto necessário.
• Não discriminatórios, proprietários, livres de licenças e acessíveis.
Dados abertos governamentais.
• Se algum dispositivo legal não permitir sua replicação, ele não é útil.
• Atuais, os dados são disponibilizados tão rápidamente quanto necessário.
• Não discriminatórios, proprietários, livres de licenças e acessíveis.
• Completos e primários.
Padrões de meta-dados
Padrões de meta-dados
• MARC - Catalogação bibliográfica.
Padrões de meta-dados
• MARC - Catalogação bibliográfica.
• Dublin Core - dados sobre documentos eletrônicos.
Padrões de meta-dados
• MARC - Catalogação bibliográfica.
• Dublin Core - dados sobre documentos eletrônicos.
• RDF - Resource Description Framework.
Dados “ligados” na Web // LinkedData
• Os nomes de “coisas” devem começar com HTTP.
• Eu irei encontrar informações em formatos padrões, e iremos manipular elas de forma trivial.
• Estas informações de retorno, terão relacionamento com outras que terão nomes que começam com HTTP.
DBpedia
• Permitir que os usuários façam buscas relacionadas de conteúdo baseado nas propriedades utilizadas nos recursos do Wikipedia.
• Janeiro de 2011, > 3.5 milhões de ‘coisas’.
• Pode ser acessada via SPARQL.
RDF
• Linguagem para interoperabilidade, sem perca de significado.
• Meta-dados sobre os recursos na WEB.
• Identificação via URI.
• Informações em triplas.
Esquema RDF.
• Sujeito da afirmação.
• Predicado da afirmação.
• Objeto da afirmação.
• Grupos de afirmações, conjunção.
Serialização
• RDF/Turtle
• RDF/XML
• RDF/JSON
• (....)
DBpedia
Larry Wall é o autor do Perl.
Larry Wall é o autor do Perl.
http://dbpedia.org/page/Perl
Larry Wall é o autor do Perl.
http://dbpedia.org/page/Perl
http://dbpedia.org/property/developer
Larry Wall é o autor do Perl.
http://dbpedia.org/page/Perl
http://dbpedia.org/page/Larry_Wall
http://dbpedia.org/property/developer
Larry Wall é o autor do Perl.
http://dbpedia.org/page/Perl
http://dbpedia.org/page/Larry_Wall
http://dbpedia.org/property/developer
Qual a ligação entre Larry Wall e Barack Obama ?
http://dbpedia.org/page/Perl dbdrop:developer
http://dbpedia.org/page/Perl dbdrop:developer
http://dbpedia.org/page/Larry_Wall
http://dbpedia.org/page/Perl dbdrop:developer
http://dbpedia.org/page/Larry_Wall
foaf:homepagefoaf:depiction
dbpprop:hasPhotoCollection
dbpprop:nationality
http://dbpedia.org/page/Perl dbdrop:developer
http://dbpedia.org/page/Larry_Wall
foaf:homepagefoaf:depiction
dbpprop:hasPhotoCollection
dbpprop:nationality
http://www.wall.org/~larry/
http://dbpedia.org/page/United_States
http://dbpedia.org/page/Perl dbdrop:developer
http://dbpedia.org/page/Larry_Wall
foaf:homepagefoaf:depiction
dbpprop:hasPhotoCollection
dbpprop:nationality
geo:lat geo:longdbpedia-owl:leaderName
http://www.wall.org/~larry/
http://dbpedia.org/page/United_States
http://dbpedia.org/page/Perl dbdrop:developer
http://dbpedia.org/page/Larry_Wall
foaf:homepagefoaf:depiction
dbpprop:hasPhotoCollection
dbpprop:nationality
geo:lat geo:longdbpedia-owl:leaderName
38.883335 -77.016670
http://dbpedia.org/page/Barack_Obama
http://www.wall.org/~larry/
http://dbpedia.org/page/United_States
Como ?
my $url = 'http://dbpedia.org/resource/Larry_Wall';
RDF::Trine::Parser->parse_url_into_model( $url, $model );my $label = RDF::Trine::Node::Resource->new('http://www.w3.org/2000/01/rdf-schema#comment');
my $iterator = $model->get_statements(undef, $label, undef);
RDF Schema (RDFS)
• Definir classes, hierarquia de classes, propriedades de classes.
• Vocabulário estendido ao vocabulário RDF.
• É uma apenas uma descrição adicional dos recursos.
• Aplicação que define o comportamento.
dados abertos no governo brasileiro.
CSV
• Valores separados por um delimitador em comum, e um registro por linha.
• Identificação por posição.
• Não há atributos, classes ou conjunções.
Brasil
Brasil
• Falta de definição de vocabulários.
Brasil
• Falta de definição de vocabulários.
• Falta de lei para exigir dados abertos.
Brasil
• Falta de definição de vocabulários.
• Falta de lei para exigir dados abertos.
• Falta de estrutura de distribuição dos dados.
Brasil
• Falta de definição de vocabulários.
• Falta de lei para exigir dados abertos.
• Falta de estrutura de distribuição dos dados.
• Falta de um mapa visual, com dados linkados.
Lei de diretrizes orçamentárias
Lei de diretrizes orçamentárias
Orientação da elaboração do orçamento fiscal, seguridade social e de investimento do poder
público.
Lei de diretrizes orçamentárias
Orientação da elaboração do orçamento fiscal, seguridade social e de investimento do poder
público.
Vocabulário de como o orçamento deve ser justificado.
Infografia
Infografia
• Representações visuais
Infografia
• Representações visuais
• Tree-mapping
Infografia
• Representações visuais
• Tree-mapping
• Hierarquia
Infografia
• Representações visuais
• Tree-mapping
• Hierarquia
• Nested
Tree-mapping
ba ca - 25%b - 50%c - 25%
Tree-mapping
c3
c1
c4
c1 - 8.3%c2 - 16.6%c3 - 50%c4 - 25%c2
Para onde foi o meu dinheiro ?
• Disponibilização dos dados, baseada nas informações disponíveis no portal da transparência.
• Dados em CSV
• Incompletas.
• Sem vocabulário.
Como faz ?use utf8; use strict; use warnings; use Scalar::Util qw(looks_like_number); use FindBin qw($Bin); use lib "../CMD/lib"; use
CMD::Schema; my $db = '/home/thiago/cmd/CMD/cmd-novo-2009.db'; my $schema = CMD::Schema->connect("dbi:SQLite:dbname=$db"); my $rs = $schema->resultset('Recurso'); &main; sub check_file { my $filename = shift; open my $fh, '<', $filename or die "error: $@ \n"; return $fh; } sub main { my $fh = &check_file( $ARGV[0] ); my %tree = &process_data($fh); $fh = &check_file( $ARGV[1] ); %tree =
&process_data_transferencia( $fh, %tree ); %tree = &proccess_values(%tree); #print Dumper( \%tree ); my $root = $rs->create( { content => '2009', valor => 0 }); &hash_to_db($root, %tree); } sub hash_to_db () { my $root = shift; my ( %tree ) =
(@_); foreach my $item ( keys %tree ) { my $valor = $tree{$item}; my $node; next if $item eq 'total'; next if $item eq 'NomeFuncao'; # Hm ? if (ref($valor) eq 'HASH') { my $total = $tree{$item}{total} || 0; $node = $root->add_to_children( { content => $item, valor => $total } ); &hash_to_db ($node, %{$valor}); } else { $node = $root->add_to_children( { content => $item, valor
=> $valor } ); } } #my $root = $tree->create({ id => 2, content => 'root', valor => 1 }); #my $child = $root->add_to_children({ content => 'child', valor => 1 }); } sub proccess_values { my (%tree) = (@_); my $total = 0; # Funções foreach
my $i ( keys %tree ) { my $funcao = $tree{$i}; my $total_funcao = 0; # Sub-funções foreach my $j ( keys %{$funcao} ) { my $subfuncao = $tree{$i}{$j}; my $total_subfuncao = 0; # Programas foreach my $k ( keys %{$subfuncao} ) { my $investimento = $tree{$i}{$j}{$k}; # Repasse if ( ref($investimento) eq 'HASH' ) { my $total_repasse = 0; # Estados foreach my $l ( keys %{$investimento} ) { my $total_repasse_estado = 0; # Municipio my $estado = $tree{$i}{$j}{$k}{$l}; foreach my $m ( keys %
{$estado} ) { my $total_repasse_municipio = 0; # Programa my $municipio = $tree{$i}{$j}{$k}{$l}{$m}; foreach my $n ( keys %
{$municipio} ) { my $inv_mun = $tree{$i}{$j}{$k}{$l}{$m}{$n}; $total_repasse_municipio += $inv_mun if looks_like_number($inv_mun); } $total_repasse_estado += $total_repasse_municipio; $tree{$i}{$j}{$k}{$l}{$m}{total} =
$total_repasse_municipio; } $tree{$i}{$j}{$k}{$l}{total} = $total_repasse_estado; $total_repasse += $total_repasse_estado; } $tree{$i}{$j}{$k}{total} = $total_repasse; } $total_subfuncao += $investimento if looks_like_number($investimento); } $tree{$i}
{$j}{total} = $total_subfuncao; $total_funcao += $total_subfuncao; } $tree{$i}{total} = $total_funcao; $total += $total_funcao; }
return %tree; } sub fix_valor { my $v = shift; $v =~ s/\,/\./; $v =~ s/\'//g; $v =~ s/\n//; $v =~ s/\r//; return $v; } sub process_data_transferencia { my ( $fh, %tree ) = @_; my $header = 0; while ( my $row = <$fh> ) { $header++ and next unless
$header; my @cols = split( /\;/, $row ); map { $_ =~ s/\"//g; } @cols; my $valor = $cols[12]; next unless $valor; my $estado = $cols[0]; my $municipio = $cols[2]; my $funcao = $cols[4]; my $subfuncao = $cols[6]; my $programa = $cols[8]; $valor =
&fix_valor($valor); $tree{$funcao}{$subfuncao}{'repasse'}{$estado}{$municipio}{$programa} = $valor; } return %tree; } sub
process_data { my $fh = shift; my %tree; my $header = 0; while ( my $row = <$fh> ) { $header++ and next unless $header; my @cols = split( /\;/, $row ); my $valor = $cols[17]; my $funcao = $cols[9]; my $subfuncao = $cols[11]; my $programa = $cols[13]; $valor =
&fix_valor($valor); $tree{$funcao}{$subfuncao}{$programa} = $valor; } return %tree; }
Para onde foi o meu dinheiro ?
• Plataforma para facilitar a disponibilização de dados do gasto do governo federal.
• Uma maneira de visualizar os dados em conjunto, e baseado em infográficos.
Migração dos dados
• O que significa os dados ?
• Migrando para um esquema de árvore.
• Funções
• Sub-funções
• Tipo de repasse
• Programa de governo
TODO
• Facilitar instalação.
• Elaboração de uma especificação técnica para LDO.
• Implementação de um módulo genérico.
• Opção de efetuar um input de dados simples.
• Sincronização automatizada de dados.
Informações técnicas
• Perl
• DBIx::Class
• Catalyst
• Varnish, Nginx, Plack e Fastcgi.
Projetos
• http://www.openspending.org/
• http://www.perlrdf.org
• http://rdf.dmoz.org
• http://ww.idealliance.org/specifications/prism/
• http://www.opendatabr.org/
• http://sao-paulo.pm.org/
• http://slideshare.net/thiagorondon