54
Libertando Dados Públicos com Ferramentas Livres Turicas aka Álvaro Justen Fórum Goiano de Software Livre 2016 19 de novembro de 2016 - Goiânia/GO

Libertando dados públicos com ferramentas livres

Embed Size (px)

Citation preview

Page 1: Libertando dados públicos com ferramentas livres

Libertando Dados Públicoscom Ferramentas Livres

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

Page 3: Libertando dados públicos com ferramentas livres

bit.ly/rows-fgsl

Page 4: Libertando dados públicos com ferramentas livres

Software Livre

Page 6: Libertando dados públicos com ferramentas livres

Arduino

Page 7: Libertando dados públicos com ferramentas livres

cursodearduino.com.br

Page 10: Libertando dados públicos com ferramentas livres

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

youtube.com/c/PythonicCafe

Page 11: Libertando dados públicos com ferramentas livres

generonumero.media

Page 12: Libertando dados públicos com ferramentas livres

escoladedados.org

Page 13: Libertando dados públicos com ferramentas livres
Page 14: Libertando dados públicos com ferramentas livres

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

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

Page 15: Libertando dados públicos com ferramentas livres

Nômade Digital

Page 16: Libertando dados públicos com ferramentas livres

A Jornada

Existem softwares livres para automatizar várias etapas dajornada.

Page 17: Libertando dados públicos com ferramentas livres
Page 18: Libertando dados públicos com ferramentas livres

Dados Presos

Page 19: Libertando dados públicos com ferramentas livres

Dado aberto, porém nãoacessível

Page 20: Libertando dados públicos com ferramentas livres

O Que Eu Já Fiz(manualmente)

Page 21: Libertando dados públicos com ferramentas livres

O Que Eu Quero(semi-automaticamente)

Page 22: Libertando dados públicos com ferramentas livres

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

Page 23: Libertando dados públicos com ferramentas livres

Obtendo...

Page 24: Libertando dados públicos com ferramentas livres

Veri�cando...

Page 25: Libertando dados públicos com ferramentas livres

Limpando...

Page 26: Libertando dados públicos com ferramentas livres

Automatizar tudo que for chato

Page 27: Libertando dados públicos com ferramentas livres

Problema Especí�coDados Tabulares

Colunas (nome e tipo)Registros (valores)

Page 28: Libertando dados públicos com ferramentas livres

Dados TabularesFormatos Possíveis

CSVHTML ("table")JSONODSSQLiteXLSXLSX...

Page 29: Libertando dados públicos com ferramentas livres

Exemplo: CSV

Page 30: Libertando dados públicos com ferramentas livres

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

Page 31: Libertando dados públicos com ferramentas livres

JSON

Page 32: Libertando dados públicos com ferramentas livres

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

Page 33: Libertando dados públicos com ferramentas livres

XLS

Page 34: Libertando dados públicos com ferramentas livres

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

Page 35: Libertando dados públicos com ferramentas livres

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

Page 36: Libertando dados públicos com ferramentas livres

Que porra é essa?

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

Page 37: Libertando dados públicos com ferramentas livres

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

Page 38: Libertando dados públicos com ferramentas livres

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

Page 39: Libertando dados públicos com ferramentas livres

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

é seu objetivo

Page 40: Libertando dados públicos com ferramentas livres

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

apt-get install rows # Debian

dnf install rows # Fedora

github.com/turicas/rows

Page 41: Libertando dados públicos com ferramentas livres

rowsBiblioteca PythonCommand-Line InterfacePlugins:

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

Page 42: Libertando dados públicos com ferramentas livres

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

Page 43: Libertando dados públicos com ferramentas livres

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/

Page 44: Libertando dados públicos com ferramentas livres

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

Page 45: Libertando dados públicos com ferramentas livres

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

Page 46: Libertando dados públicos com ferramentas livres

import rows

Page 47: Libertando dados públicos com ferramentas livres

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

Page 48: Libertando dados públicos com ferramentas livres

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

Page 49: Libertando dados públicos com ferramentas livres

Live coding (CLI)

Page 50: Libertando dados públicos com ferramentas livres

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)

Page 51: Libertando dados públicos com ferramentas livres

github.com/turicas/rows

Page 52: Libertando dados públicos com ferramentas livres

Curso de Python Online eGratuito!

pythonic.cafe

Page 53: Libertando dados públicos com ferramentas livres

?