dados tabulares: a maneira pythônica
TRANSCRIPT
![Page 1: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/1.jpg)
Dados Tabulares:A Maneira PythônicaTuricas aka Álvaro Justen
VIII Encontro PythOnRio30 de abril de 2016, Elo Group - Rio, Brasil
![Page 2: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/2.jpg)
Turicas, prazer! =){ , , ,
}/turicastwitter.com github.com youtube.com
turicas.info
![Page 3: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/3.jpg)
Quem sou eu?Não tenho graduaçãoNão trabalho em empresa
![Page 10: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/10.jpg)
E vocês?Quem já sabe Python?Quem trabalha com Python?
![Page 12: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/14.jpg)
Captura + Normalização
![Page 15: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/15.jpg)
Normalizaçãopip uninstall beaufitulsoup4
pip uninstall lxml
pip install rows
![Page 16: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/16.jpg)
CSV
![Page 17: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/18.jpg)
HTML
![Page 19: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/19.jpg)
HTML
![Page 20: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/20.jpg)
A vida não é tão fácil! :D
![Page 21: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/22.jpg)
:-/
...
![Page 23: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/23.jpg)
XLS
![Page 24: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/25.jpg)
Resultado...{u'preco_compra': 0.0, u'timestamp': 42314.73819444444, u'vencimento'
![Page 26: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/26.jpg)
Que porra é essa?
..., u'timestamp': 42314.73819444444, ...
![Page 27: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/35.jpg)
assert list(table1) == list(table2) == list(table3)
![Page 36: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/36.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/37.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/38.jpg)
![Page 39: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/39.jpg)
Live codingBibliotecaCLI
![Page 40: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/40.jpg)
#ajudalucianoPython 3 (WIP)Site/documentação (Sphinx)rows as a service (demo site)
![Page 41: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/41.jpg)
#ajudaluciano[2]
Outros PluginsPDF (leitura)ODS (escrita)DBFMongoDBPostgreSQL (WIP)MariaDB (WIP)OFX (WIP)
![Page 42: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/42.jpg)
That's it!
![Page 48: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/48.jpg)
?
![Page 49: Dados tabulares: A Maneira Pythônica](https://reader033.vdocuments.mx/reader033/viewer/2022052116/5872553f1a28ab852f8b823f/html5/thumbnails/49.jpg)
Obrigado! (:Turicas aka Álvaro Justen
{ , , ,}/turicas
twitter.com github.com youtube.comslideshare.net
bit.ly/pyrio-rows