49
Dados Tabulares: A Maneira Pythônica Turicas aka Álvaro Justen VIII Encontro PythOnRio 30 de abril de 2016, Elo Group - Rio, Brasil

Dados tabulares: A Maneira Pythônica

Embed Size (px)

Citation preview

Page 1: Dados tabulares: A Maneira Pythônica

Dados Tabulares:A Maneira PythônicaTuricas aka Álvaro Justen

VIII Encontro PythOnRio30 de abril de 2016, Elo Group - Rio, Brasil

Page 3: Dados tabulares: A Maneira Pythônica

Quem sou eu?Não tenho graduaçãoNão trabalho em empresa

Page 4: Dados tabulares: A Maneira Pythônica

Software Livre

Page 6: Dados tabulares: A Maneira Pythônica

Arduino

Page 10: Dados tabulares: A Maneira Pythônica

E vocês?Quem já sabe Python?Quem trabalha com Python?

Page 11: Dados tabulares: A Maneira Pythônica

bit.ly/pyrio-rows

Page 12: Dados tabulares: A Maneira Pythônica

Jornalismo deDados

1. Captura: buscar e baixar2. Normalização: converter a um formato melhor (ex: HTMLpara CSV)3. Análise: ver o que te serve4. Visualização: mostrar pro mundo!

Page 13: Dados tabulares: A Maneira Pythônica

Jornalismo deDados [2]

4. Visualização: cereja do bolo3. Análise: desa�ador2. Normalização: chato pra caralho1. Captura: chato, de vez em quando desa�ador

Page 14: Dados tabulares: A Maneira Pythônica

Captura + Normalização

Page 15: Dados tabulares: A Maneira Pythônica

Normalizaçãopip uninstall beaufitulsoup4

pip uninstall lxml

pip install rows

Page 16: Dados tabulares: A Maneira Pythônica

CSV

Page 17: Dados tabulares: A Maneira Pythônica

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 18: Dados tabulares: A Maneira Pythônica

HTML

Page 19: Dados tabulares: A Maneira Pythônica

HTML

Page 20: Dados tabulares: A Maneira Pythônica

A vida não é tão fácil! :D

Page 21: Dados tabulares: A Maneira Pythônica

html em Python+ lxml

pip install lxml

import lxml.etree filename = 'tesouro-direto.html' html = open(filename).read() tree = lxml.etree.fromstring(html) table = tree.xpath('//table')[0] # ... aburrido aburrido aburrido ... # tentativa # error # tentativa # error # error # error

Page 22: Dados tabulares: A Maneira Pythônica

:-/

...

Page 23: Dados tabulares: A Maneira Pythônica

XLS

Page 24: Dados tabulares: A Maneira Pythônica

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 25: Dados tabulares: A Maneira Pythônica

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

Page 26: Dados tabulares: A Maneira Pythônica

Que porra é essa?

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

Page 27: Dados tabulares: A Maneira Pythônica

Por que csv, lxml,xlrd etc. são

ruins?Aprender sobre o formato (mesmo que você só queira osdados)Aprender uma biblioteca por formato (APIs diferentes)Converter os dados (nem sempre as bibliotecas convertem)Testar as funções de conversão (você usa TDD, certo?)Exemplos só de leitura (escrita pode ser pior!)

Page 28: Dados tabulares: A Maneira Pythônica

rows to therescue!

pip install rows # Python Package Indexapt-get install rows # Debian!

dnf install rows # Fedoragithub.com/turicas/rows

Page 29: Dados tabulares: A Maneira Pythônica

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

Page 30: Dados tabulares: A Maneira Pythônica

Row(timestamp=datetime.datetime(2015, 11, 6, 17, 43), titulo=u'Tesouro IPCA+ com Juros Semestrais 2017 (NTNB)'Row(timestamp=datetime.datetime(2015, 11, 6, 17, 43), titulo=u'Tesouro IPCA+ 2019 (NTNB Princ)'...

Page 31: Dados tabulares: A Maneira Pythônica

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

Page 32: Dados tabulares: A Maneira Pythônica

Row(timestamp=datetime.datetime(2015, 11, 6, 17, 43), titulo=u'Tesouro IPCA+ com Juros Semestrais 2017 (NTNB)'Row(timestamp=datetime.datetime(2015, 11, 6, 17, 43), titulo=u'Tesouro IPCA+ 2019 (NTNB Princ)'...

Page 33: Dados tabulares: A Maneira Pythônica

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

Page 34: Dados tabulares: A Maneira Pythônica

Row(timestamp=datetime.datetime(2015, 11, 6, 17, 43), titulo=u'Tesouro IPCA+ com Juros Semestrais 2017 (NTNB)'Row(timestamp=datetime.datetime(2015, 11, 6, 17, 43), titulo=u'Tesouro IPCA+ 2019 (NTNB Princ)'...

Page 35: Dados tabulares: A Maneira Pythônica

assert list(table1) == list(table2) == list(table3)

Page 36: Dados tabulares: A Maneira Pythônica

print table1[0] 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 37: Dados tabulares: A Maneira Pythônica

FuncionalidadesAPI única (não importa o formato)Escrever é tão fácil quanto ler (pythonic way)CSV, HTML, XLS, XLSX, JSON, TXT, SQLite...Conversão automática de dadosCommand-line interface! \o/Eu já �z os testes

Page 38: Dados tabulares: A Maneira Pythônica
Page 39: Dados tabulares: A Maneira Pythônica

Live codingBibliotecaCLI

Page 40: Dados tabulares: A Maneira Pythônica

#ajudalucianoPython 3 (WIP)Site/documentação (Sphinx)rows as a service (demo site)

Page 41: Dados tabulares: A Maneira Pythônica

#ajudaluciano[2]

Outros PluginsPDF (leitura)ODS (escrita)DBFMongoDBPostgreSQL (WIP)MariaDB (WIP)OFX (WIP)

Page 42: Dados tabulares: A Maneira Pythônica

That's it!

Page 43: Dados tabulares: A Maneira Pythônica

pythonnordeste.org9 a 11 de junho

Teresina/PI

Page 44: Dados tabulares: A Maneira Pythônica

�sl.org.br13 a 16 de julho

Porto Alegre/RS

Page 45: Dados tabulares: A Maneira Pythônica

pythonsudeste.org2 e 3 de setembro

Belo Horizonte/MG

Page 46: Dados tabulares: A Maneira Pythônica

pythonbrasil.org.br13 a 18 de outubro

Florianópolis/SC

Page 47: Dados tabulares: A Maneira Pythônica

Curso de Python Online eGratuito!

bit.ly/pyonline

Page 48: Dados tabulares: A Maneira Pythônica

?

Page 49: Dados tabulares: A Maneira Pythônica

Obrigado! (:Turicas aka Álvaro Justen

{ , , ,}/turicas

twitter.com github.com youtube.comslideshare.net

[email protected]

bit.ly/pyrio-rows