Dados Tabulares:
A Maneira Pythônica
Turicas aka Álvaro Justen
VIII Encontro PythOnRio
30 de abril de 2016, Elo Group - Rio, Brasil
Turicas, prazer! =)
{ , , ,
}/turicas
twitter.com github.com youtube.com
slideshare.net
alvarojusten@gmail.com
turicas.info
Quem sou eu?
Não tenho graduação
Não trabalho em empresa
Software Livre
Python
Arduino
CursoDeArduino.com.br
pythonquito.tk
E vocês?Quem jásabe Python?
Quem trabalhacom Python?
bit.ly/pyrio-rows
Jornalismo de
Dados1. Captura: buscar e baixar
2. Normalização: converter aum formato melhor (ex: HTML
paraCSV)
3. Análise: ver o que te serve
4. Visualização: mostrar pro mundo!
Jornalismo de
Dados [2]4. Visualização: cerejado bolo
3. Análise: desa ador
2. Normalização: chato pracaralho
1. Captura: chato, de vez em quando desa ador
Captura + Normalização
Normalizaçãopipuninstallbeaufitulsoup4
pipuninstalllxml
pipinstallrows
CSV
csv em Pythonimportcsv
reader=csv.DictReader(open('tesouro-direto.csv'))
#TODO:identificardialectoCSV
forrowinreader:
printrow #todoesstring=/
#TODO:crearconversióndedatetime
#TODO:crearconversióndedate
#TODO:crearconversióndecimal
#TODO:crearconversiónpercent
HTML
HTML
A vida não é tão fácil! :D
html em Python
+ lxmlpipinstalllxml
importlxml.etree
filename='tesouro-direto.html'
html=open(filename).read()
tree=lxml.etree.fromstring(html)
table=tree.xpath('//table')[0]
#...aburridoaburridoaburrido...
#tentativa
#error
#tentativa
#error
#error
#error
:-/
...
XLS
xls em Python + xlrd
pipinstallxlrd
importxlrd
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).valueforcolinrange(NUMERO_DE_COLUNAS
NUMERO_DE_LINEAS=19#WTF?
data=[[sheet.cell(row,col).valueforcolinrange(NUMERO_DE_COLUNAS
forrowinrange(1,NUMERO_DE_LINEAS+1)]
forrow_dataindata:
row=dict(zip(header,row_data))
printrow
#TODO:crearconversióndedateydatetime
#TODO:crearconversióndedecimal
#TODO:crearconversióndepercent
Resultado...{u'preco_compra':0.0,u'timestamp':42314.73819444444,u'vencimento'
Que porraé essa?
...,u'timestamp':42314.73819444444,...
Por que csv, lxml,
xlrd etc. são
ruins?Aprender sobre o formato (mesmo que você só queiraos
dados)
Aprender umabibliotecapor formato (APIs diferentes)
Converter os dados (nem sempre as bibliotecas convertem)
Testar as funções de conversão (você usaTDD, certo?)
Exemplos só de leitura(escritapode ser pior!)
rows to the
rescue!
pip install rows # Python Package Index
apt-get install rows # Debian!
dnf install rows # Fedora
github.com/turicas/rows
csv com Python + rows
importrows
table1=rows.import_from_csv('tesouro-direto.csv')
forrowintable1:
printrow
Row(timestamp=datetime.datetime(2015,11,6,17,43),titulo=u'Tesouro
Row(timestamp=datetime.datetime(2015,11,6,17,43),titulo=u'Tesouro
...
xls com Python + rows
importrows
table2=rows.import_from_xls('tesouro-direto.xls')
forrowintable2:
printrow
Row(timestamp=datetime.datetime(2015,11,6,17,43),titulo=u'Tesouro
Row(timestamp=datetime.datetime(2015,11,6,17,43),titulo=u'Tesouro
...
html com Python + rows
importrows
table3=rows.import_from_html('tesouro-direto.html')
forrowintable3:
printrow
Row(timestamp=datetime.datetime(2015,11,6,17,43),titulo=u'Tesouro
Row(timestamp=datetime.datetime(2015,11,6,17,43),titulo=u'Tesouro
...
assertlist(table1)==list(table2)==list(table3)
printtable1[0]
Row(timestamp=datetime.datetime(2015,11,6,17,43),
titulo=u'TesouroIPCA+comJurosSemestrais2017(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#FTWo/
Funcionalidades
API única(não importao formato)
Escrever é tão fácilquanto ler (pythonic way)
CSV, HTML, XLS, XLSX, JSON, TXT, SQLite...
Conversão automática de dados
Command-line interface!o/
Eujá z os testes
Live codingBiblioteca
CLI
#ajudalucianoPython 3 (WIP)
Site/documentação (Sphinx)
rows as aservice (demo site)
#ajudaluciano
[2]
Outros Plugins
PDF(leitura)
ODS (escrita)
DBF
MongoDB
PostgreSQL (WIP)
MariaDB(WIP)
OFX (WIP)
That's it!
pythonnordeste.org
9 a11 de junho
Teresina/PI
sl.org.br
13 a16 de julho
Porto Alegre/RS
pythonsudeste.org
2 e 3 de setembro
Belo Horizonte/MG
pythonbrasil.org.br
13 a18 de outubro
Florianópolis/SC
Curso de Python Online e
Gratuito!
bit.ly/pyonline
?
Obrigado! (:
Turicas aka Álvaro Justen
{ , , ,
}/turicas
twitter.com github.com youtube.com
slideshare.net
alvarojusten@gmail.com
turicas.info
bit.ly/pyrio-rows

Dados tabulares: A Maneira Pythônica