Libertando dados públicos com ferramentas livres

Preview:

Citation preview

Libertando Dados Públicoscom Ferramentas Livres

Turicas aka Álvaro JustenFórum Goiano de Software Livre 201619 de novembro de 2016 - Goiânia/GO

Turicas, prazer! =)Sigam-me os bons:

{ , , , , }

/turicas

twittergithub

youtubeslideshareinstagram

alvaro@CursoDeArduino.com.brturicas.info

bit.ly/rows-fgsl

Software Livre

Arduino

cursodearduino.com.br

pythonic.cafe(preenche o formulário lá!)

youtube.com/c/PythonicCafe

generonumero.media

escoladedados.org

E vocês?Quem trabalha com conversão de dados?

Scraping, data science, ...Quem conhece/usa Python?

Nômade Digital

A Jornada

Existem softwares livres para automatizar várias etapas dajornada.

Dados Presos

Dado aberto, porém nãoacessível

O Que Eu Já Fiz(manualmente)

O Que Eu Quero(semi-automaticamente)

O Que Tenho Que Fazer(mas não queria ter que fazer)

Obtendo...

Veri�cando...

Limpando...

Automatizar tudo que for chato

Problema Especí�coDados Tabulares

Colunas (nome e tipo)Registros (valores)

Dados TabularesFormatos Possíveis

CSVHTML ("table")JSONODSSQLiteXLSXLSX...

Exemplo: CSV

csv em Pythonimport csv reader = csv.DictReader(open('tesouro-direto.csv')) # TODO: identificar dialecto CSV for row in reader: print row # todo es string =/ # TODO: crear conversión de datetime # TODO: crear conversión de date # TODO: crear conversión decimal # TODO: crear conversión percent

JSON

json em Pythonimport json reader = json.load(open('tesouro-direto.csv')) for row in reader: print row # nem todo convertido =/ # TODO: crear conversión de datetime # TODO: crear conversión de date # TODO: crear conversión decimal # TODO: crear conversión percent

XLS

xls em Python + xlrdpip install xlrd

import xlrd filename = 'tesouro-direto.xls' book = xlrd.open_workbook(filename, formatting_info=True) sheet = book.sheet_by_index(0) NUMERO_DE_COLUNAS = 7 # WTF? header = [sheet.cell(0, col).value for col in range(NUMERO_DE_COLUNASNUMERO_DE_LINEAS = 19 # WTF? data = [[sheet.cell(row, col).value for col in range(NUMERO_DE_COLUNAS for row in range(1, NUMERO_DE_LINEAS + 1)] for row_data in data: row = dict(zip(header, row_data)) print row # TODO: crear conversión de date y datetime # TODO: crear conversión de decimal # TODO: crear conversión de percent

Resultado...{u'preco_compra': 0.0, u'timestamp': 42314.73819444444, u'vencimento'

Que porra é essa?

..., u'timestamp': 42314.73819444444, ...

Vida Real..."Me mandaram o CSV, mas veio sem o cabeçalho""Esse campo não está batendo""Porque tem tanto NULL?"...

ProblemasFormatos não possuem as mesmas funcionalidadesFalta controle de qualidade na hora de publicar os dadosBibliotecas para cada formato são muito diferentes

Resultado:Perda de tempo em uma atividade que não

é seu objetivo

rows to the rescue!pip install rows # Python Package Index

apt-get install rows # Debian

dnf install rows # Fedora

github.com/turicas/rows

rowsBiblioteca PythonCommand-Line InterfacePlugins:

CSVJSONHTML (+ XPath)TXTXLSXLSXSQLiteODSParquet(+ outros em desenvolvimento)

csv com Python + rowsimport rows table1 = rows.import_from_csv('tesouro-direto.csv') for row in table1: print row

Row(timestamp=datetime.datetime(2015, 11, 6, 17, 43), titulo=u'Tesouro IPCA+ com Juros Semestrais 2017 (NTNB)', vencimento=datetime.date(2017, 5, 15), taxa_compra=Decimal('0.0702'), taxa_venda=Decimal('0.063'), preco_compra=0.0, preco_venda=2792.97) # namedtuple #FTW \o/

xls com Python + rowsimport rows table2 = rows.import_from_xls('tesouro-direto.xls') for row in table2: print row

html com Python + rowsimport rows table3 = rows.import_from_html('tesouro-direto.html') for row in table3: print row

import rows

rows: FuncionalidadesInterface única (não importa o formato)Escrever é tão fácil quanto ler (pythonic way)Vários pluginsCLIConversão automática de dadosEu já �z os testes

Command-Line Interfaceprint: mostra a tabela em formato textoconvert: converte entre os formatos suportadossum: agrega tabelasjoin: cruza dadosquery: SQL!

Live coding (CLI)

Alguns Casos de UsoCLI:

Download, conversão e limpezaAnálises preliminares

Biblioteca:Conversão e limpeza (exemplo: Interlegis)Conversão e análise (exemplos: sci�, �sl_talks)

github.com/turicas/rows

Curso de Python Online eGratuito!

pythonic.cafe

?

Obrigado! (:Turicas aka Álvaro Justen

{ , , , , }

/turicas

twittergithub

youtubeslideshareinstagram

alvaro@CursoDeArduino.com.brturicas.info

bit.ly/rows-fgsl

Recommended