Upload
alvaro-justen
View
108
Download
3
Embed Size (px)
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
bit.ly/rows-fgsl
Software Livre
Python
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
?
Obrigado! (:Turicas aka Álvaro Justen
{ , , , , }
/turicas
twittergithub
youtubeslideshareinstagram
bit.ly/rows-fgsl