SlideShare a Scribd company logo
1 of 45
Download to read offline
Datos Tabulares:
La Manera Pythónica
Turicas aka Álvaro Justen
Meetup de Python Montevideo
17 de agosto de 2016 - Montevideo, Uruguay
bit.ly/rows-mvd
Turicas, un gusto! =)
¡Síganme los buenos!
{ ,
,
,
,
}
/turicas
twitter
github
youtube
slideshare
instagram
alvaro@CursoDeArduino.com.br
turicas.info
Nómada Digital
cursodearduino.com.br
pythonic.cafe
generonumero.media
escoladedados.org
Software Libre
Desde 2003-2004
Python
Desde 2005
Arduino
Desde 2009
Organización de Conferencia
Organización de Conferencia
pythonquito.tk
AgendaDatos tabulares: que es?
Librerías en Python
Lalibreríarows
LaCLI de rows
Datos Tabulares?
Columnas: nombre ytipo (int, oat, str etc.)
Filas: valores paracadacolumna
Formatos:
CSV, TSV
JSON(arrayde objects)
XLS
XLSX
ODS
HTML (con table)
SQLite yotros bancos de datos
Parquet(de Spark)
...
Librerías en Python
CSV, TSV: csvo unicodecsv
JSON: json
XLS: xlrdyxlwt
XLSX: openpyxl
ODS: odfpyo zipylxml
HTML: lxml
SQLite: sqlite3o SQLAlchemy
Parquet: parquet
CSV - Codigo
importcsv
filename='examples/data/tesouro-direto.csv'
reader=csv.DictReader(open(filename))
forrowinreader:
print(row)
CSV - Resultado
{
'preco_compra':'7261.57',
'preco_venda':'7246.25',
'taxa_compra':'0%',
'taxa_venda':'0.04%',
'timestamp':'2015-11-06T17:43:00',
'titulo':'TesouroSelic2021(LFT)',
'vencimento':'2021-03-01'
}
CSV - Cómo deberia ser
{
'preco_compra':7261.57,
'preco_venda':7246.25,
'taxa_compra':0.0,
'taxa_venda':0.0004,
'timestamp':datetime.datetime(2015,11,6,17,43),
'titulo':'TesouroSelic2021(LFT)',
'vencimento':datetime.date(2021,3,1)
}
(ver )
CSV - Conversiones
defconvert_row(row):
row['preco_compra']=_convert_float(row['preco_compra'])
row['preco_venda']=_convert_float(row['preco_venda'])
row['taxa_compra']=_convert_percent(row['taxa_compra'])
row['taxa_venda']=_convert_percent(row['taxa_venda'])
row['vencimento']=_convert_date(row['vencimento'])
row['timestamp']=_convert_datetime(row['timestamp'])
forrowinreader:
convert_row(row)
print(row)
#TODO:crear_convert_float
#TODO:crear_convert_percent
#TODO:crear_convert_date
#TODO:crear_convert_datetime
02_csv.py
Conversiones
XLS - Codigo
importxlrd
def_convert_row(row):
return[cell.valueforcellinrow]
defmy_xls_reader(filename):
workbook=xlrd.open_workbook(filename)
sheet=workbook.sheet_by_index(0)
header=_convert_row(sheet.row(0))
forrow_numberinrange(1,sheet.nrows):
data=_convert_row(sheet.row(row_number))
yielddict(zip(header,data))
filename='examples/data/tesouro-direto.xls'
forrowinmy_xls_reader(filename):
print(row)
XLS - Resultado
{
u'preco_compra':7261.57, #bueno!
u'preco_venda':7246.25, #bueno!
u'taxa_compra':0.0, #bueno!
u'taxa_venda':0.0004, #bueno!
u'timestamp':42314.73819444444, #???
u'titulo':u'TesouroSelic2021(LFT)', #bueno!
u'vencimento':44256.0 #???
}
WTF?
u'timestamp':42314.73819444444,
u'vencimento':44256.0
(ver )
XLS - Conversiones
def_convert_date(data,sheet):
time_tuple=xlrd.xldate_as_tuple(data,sheet.book.datemode)
date=datetime.datetime(*time_tuple)
returndatetime.date(date.year,date.month,date.day)
def_convert_datetime(data,sheet):
time_tuple=xlrd.xldate_as_tuple(data,sheet.book.datemode)
returndatetime.datetime(*time_tuple)
defmy_xls_reader(filename):
(...)
data=_convert_row(sheet.row(row_number))
row=dict(zip(header,data))
row['vencimento']=_convert_date(row['vencimento'],sheet)
row['timestamp']=_convert_datetime(row['timestamp'],sheet)
yieldrow
04_xls.py
HTML - Codigo
fromlxml.htmlimportdocument_fromstring
def_convert_row(row):
values=row.xpath('.//th/text()')+
row.xpath('.//td/text()')
return[text.strip()fortextinvalues]
defmy_html_reader(filename):
withopen(filename)asfobj:
tree=document_fromstring(fobj.read())
tables=tree.xpath('//table')
table=tables[0]
rows=table.xpath('.//tr')
header=_convert_row(rows[0])
forrowinrows[1:]:
yielddict(zip(header,_convert_row(row)))
filename='examples/data/tesouro-direto.html'
XPath
HTML - Resultado
{
'preco_compra':'7261.57', #TODO:convertir
'preco_venda':'7246.25', #TODO:convertir
'taxa_compra':'0.00%', #TODO:convertir
'taxa_venda':'0.04%', #TODO:convertir
'timestamp':'2015-11-06T17:43:00', #TODO:convertir
'titulo':'TesouroSelic2021(LFT)',
'vencimento':'2021-03-01' #TODO:convertir
}
Problemas
Nitodos os formatos tienen información de tipos
Conversión puede tener muchos errores
APIs son muydiferentes
rows to the rescue!
pip install rows # Python Package Index
apt-get install rows # Debian
dnf install rows # Fedora
github.com/turicas/rows
CSV con rows - Codigo
importrows
filename='examples/data/tesouro-direto.csv'
table1=rows.import_from_csv(filename)
forrowintable1:
print(row)
CSV con rows - Resultado
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/
XLS con rows - Codigo
importrows
filename='examples/data/tesouro-direto.xls'
table2=rows.import_from_xls(filename)
forrowintable2:
print(row)
XLS con rows - Resultado
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/
HTML con rows - Codigo
importrows
filename='examples/data/tesouro-direto.html'
table3=rows.import_from_html(filename)
forrowintable3:
print(row)
HTML con rows - Resultado
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/
rows
Interfaz única(independiente de formato)
Escrebir es tan facilcuanto leer
Muchos plugins
Command-line interface!o/
Conversión automática de datos
Yohehecolas pruebas
rows - Plugins
CSV
JSON
HTML (+ XPath)
TXT
XLS
XLSX
SQLite
ODS
Parquet(de Spark)
(yotros en desarrolo)
Command-Line Interface
print
convert
sum
join
query(sí, SQL!)
Live coding (CLI)
github.com/turicas/rows
pythonbrasil.org.br
13 a18 de outubro
Florianópolis/SC
?
Gracias! (:
Turicas aka Álvaro Justen
{ ,
,
,
,
}
/turicas
twitter
github
youtube
slideshare
instagram
alvaro@CursoDeArduino.com.br
turicas.info
bit.ly/rows-mvd

More Related Content

Viewers also liked

Software Livre versus Open Source
Software Livre versus Open SourceSoftware Livre versus Open Source
Software Livre versus Open SourceÁlvaro Justen
 
Raspberry pi – primeiros passos
Raspberry pi – primeiros passosRaspberry pi – primeiros passos
Raspberry pi – primeiros passosFelipe Meganha
 
Jurgis PRALGAUSKIS. Modernios programavimo mokymo(-si) aplinkos
Jurgis PRALGAUSKIS. Modernios programavimo mokymo(-si) aplinkos Jurgis PRALGAUSKIS. Modernios programavimo mokymo(-si) aplinkos
Jurgis PRALGAUSKIS. Modernios programavimo mokymo(-si) aplinkos Lietuvos kompiuterininkų sąjunga
 
Explorar o raspberry pi final
Explorar o raspberry pi finalExplorar o raspberry pi final
Explorar o raspberry pi finalwhitspirit
 
Educação Tecnológica com Raspberry Pi
Educação Tecnológica com Raspberry PiEducação Tecnológica com Raspberry Pi
Educação Tecnológica com Raspberry PiMario Sergio
 
eBook Home Office
eBook Home OfficeeBook Home Office
eBook Home OfficeAldo Bogea
 
Palestra sobre Arduino e Raspberry Pi (Totvs)
Palestra sobre Arduino e Raspberry Pi (Totvs)Palestra sobre Arduino e Raspberry Pi (Totvs)
Palestra sobre Arduino e Raspberry Pi (Totvs)Walter Coan
 
Arduino: Robótica e Automação com Software e Hardware Livres
Arduino: Robótica e Automação com Software e Hardware LivresArduino: Robótica e Automação com Software e Hardware Livres
Arduino: Robótica e Automação com Software e Hardware LivresÁlvaro Justen
 
Química Geral 2016/1 Aula 03
Química Geral 2016/1 Aula 03Química Geral 2016/1 Aula 03
Química Geral 2016/1 Aula 03Ednilsom Orestes
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e TkCarlos Campani
 
Dados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira PythônicaDados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira PythônicaÁlvaro Justen
 
Química Geral 2016/1 Aula 04
Química Geral 2016/1 Aula 04Química Geral 2016/1 Aula 04
Química Geral 2016/1 Aula 04Ednilsom Orestes
 
Arduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoArduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoÁlvaro Justen
 
Raspberry-PI introduction
Raspberry-PI introductionRaspberry-PI introduction
Raspberry-PI introductionBasavaraj Sagar
 
Robótica: Introdução e Aplicações
Robótica: Introdução e AplicaçõesRobótica: Introdução e Aplicações
Robótica: Introdução e AplicaçõesFelipe Martins
 

Viewers also liked (18)

Software Livre versus Open Source
Software Livre versus Open SourceSoftware Livre versus Open Source
Software Livre versus Open Source
 
Raspberry pi – primeiros passos
Raspberry pi – primeiros passosRaspberry pi – primeiros passos
Raspberry pi – primeiros passos
 
Jurgis PRALGAUSKIS. Modernios programavimo mokymo(-si) aplinkos
Jurgis PRALGAUSKIS. Modernios programavimo mokymo(-si) aplinkos Jurgis PRALGAUSKIS. Modernios programavimo mokymo(-si) aplinkos
Jurgis PRALGAUSKIS. Modernios programavimo mokymo(-si) aplinkos
 
Explorar o raspberry pi final
Explorar o raspberry pi finalExplorar o raspberry pi final
Explorar o raspberry pi final
 
Química Geral Aula 11
Química Geral Aula 11Química Geral Aula 11
Química Geral Aula 11
 
Educação Tecnológica com Raspberry Pi
Educação Tecnológica com Raspberry PiEducação Tecnológica com Raspberry Pi
Educação Tecnológica com Raspberry Pi
 
eBook Home Office
eBook Home OfficeeBook Home Office
eBook Home Office
 
Palestra sobre Arduino e Raspberry Pi (Totvs)
Palestra sobre Arduino e Raspberry Pi (Totvs)Palestra sobre Arduino e Raspberry Pi (Totvs)
Palestra sobre Arduino e Raspberry Pi (Totvs)
 
Arduino: Robótica e Automação com Software e Hardware Livres
Arduino: Robótica e Automação com Software e Hardware LivresArduino: Robótica e Automação com Software e Hardware Livres
Arduino: Robótica e Automação com Software e Hardware Livres
 
Química Geral 2016/1 Aula 03
Química Geral 2016/1 Aula 03Química Geral 2016/1 Aula 03
Química Geral 2016/1 Aula 03
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e Tk
 
Dados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira PythônicaDados tabulares: A Maneira Pythônica
Dados tabulares: A Maneira Pythônica
 
Química Geral 2016/1 Aula 04
Química Geral 2016/1 Aula 04Química Geral 2016/1 Aula 04
Química Geral 2016/1 Aula 04
 
Arduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremoArduino + Python: produtividade ao extremo
Arduino + Python: produtividade ao extremo
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Raspberry-PI introduction
Raspberry-PI introductionRaspberry-PI introduction
Raspberry-PI introduction
 
Robótica: Introdução e Aplicações
Robótica: Introdução e AplicaçõesRobótica: Introdução e Aplicações
Robótica: Introdução e Aplicações
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 

More from Álvaro Justen

Sobre os ombos de gigantes
Sobre os ombos de gigantesSobre os ombos de gigantes
Sobre os ombos de gigantesÁlvaro Justen
 
Projeto Brasil.IO COVID-19: Dados Públicos Acessíveis
Projeto Brasil.IO COVID-19: Dados Públicos AcessíveisProjeto Brasil.IO COVID-19: Dados Públicos Acessíveis
Projeto Brasil.IO COVID-19: Dados Públicos AcessíveisÁlvaro Justen
 
Dados abertos, Python e PostgreSQL: a combinação perfeita
Dados abertos, Python e PostgreSQL: a combinação perfeitaDados abertos, Python e PostgreSQL: a combinação perfeita
Dados abertos, Python e PostgreSQL: a combinação perfeitaÁlvaro Justen
 
A era da pós-verdade - minhas reflexões e crenças
A era da pós-verdade - minhas reflexões e crençasA era da pós-verdade - minhas reflexões e crenças
A era da pós-verdade - minhas reflexões e crençasÁlvaro Justen
 
Realmente precisamos de big data?
Realmente precisamos de big data?Realmente precisamos de big data?
Realmente precisamos de big data?Álvaro Justen
 
Ciência de Dados na Linha de Comando
Ciência de Dados na Linha de ComandoCiência de Dados na Linha de Comando
Ciência de Dados na Linha de ComandoÁlvaro Justen
 
Brasil.IO: Libertação de Dados Públicos, com Python
Brasil.IO: Libertação de Dados Públicos, com PythonBrasil.IO: Libertação de Dados Públicos, com Python
Brasil.IO: Libertação de Dados Públicos, com PythonÁlvaro Justen
 
#opendata #fail: Causos da Transparência Brasileira
#opendata #fail: Causos da Transparência Brasileira#opendata #fail: Causos da Transparência Brasileira
#opendata #fail: Causos da Transparência BrasileiraÁlvaro Justen
 
Brasil.IO: Dados Abertos para Mais Democracia
Brasil.IO: Dados Abertos para Mais DemocraciaBrasil.IO: Dados Abertos para Mais Democracia
Brasil.IO: Dados Abertos para Mais DemocraciaÁlvaro Justen
 
Dados abertos, direito autoral e democracia
Dados abertos, direito autoral e democraciaDados abertos, direito autoral e democracia
Dados abertos, direito autoral e democraciaÁlvaro Justen
 
Jornalismo de Dados: Programando a Democracia no Brasil
Jornalismo de Dados: Programando a Democracia no BrasilJornalismo de Dados: Programando a Democracia no Brasil
Jornalismo de Dados: Programando a Democracia no BrasilÁlvaro Justen
 
Introdução a programação com Python (para jornalistas)
Introdução a programação com Python (para jornalistas)Introdução a programação com Python (para jornalistas)
Introdução a programação com Python (para jornalistas)Álvaro Justen
 
Capturando dados com Python - UAI Python
Capturando dados com Python - UAI PythonCapturando dados com Python - UAI Python
Capturando dados com Python - UAI PythonÁlvaro Justen
 
Dados Abertos e Meio Ambiente
Dados Abertos e Meio AmbienteDados Abertos e Meio Ambiente
Dados Abertos e Meio AmbienteÁlvaro Justen
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaÁlvaro Justen
 
Arduino no Dia-Debian/RJ 2011
Arduino no Dia-Debian/RJ 2011Arduino no Dia-Debian/RJ 2011
Arduino no Dia-Debian/RJ 2011Álvaro Justen
 
Arduino - Dicas & Truques
Arduino - Dicas & TruquesArduino - Dicas & Truques
Arduino - Dicas & TruquesÁlvaro Justen
 
Android e Arduino para automação residencial
Android e Arduino para automação residencialAndroid e Arduino para automação residencial
Android e Arduino para automação residencialÁlvaro Justen
 

More from Álvaro Justen (19)

Sobre os ombos de gigantes
Sobre os ombos de gigantesSobre os ombos de gigantes
Sobre os ombos de gigantes
 
Projeto Brasil.IO COVID-19: Dados Públicos Acessíveis
Projeto Brasil.IO COVID-19: Dados Públicos AcessíveisProjeto Brasil.IO COVID-19: Dados Públicos Acessíveis
Projeto Brasil.IO COVID-19: Dados Públicos Acessíveis
 
Dados abertos, Python e PostgreSQL: a combinação perfeita
Dados abertos, Python e PostgreSQL: a combinação perfeitaDados abertos, Python e PostgreSQL: a combinação perfeita
Dados abertos, Python e PostgreSQL: a combinação perfeita
 
A era da pós-verdade - minhas reflexões e crenças
A era da pós-verdade - minhas reflexões e crençasA era da pós-verdade - minhas reflexões e crenças
A era da pós-verdade - minhas reflexões e crenças
 
Realmente precisamos de big data?
Realmente precisamos de big data?Realmente precisamos de big data?
Realmente precisamos de big data?
 
Ciência de Dados na Linha de Comando
Ciência de Dados na Linha de ComandoCiência de Dados na Linha de Comando
Ciência de Dados na Linha de Comando
 
Brasil.IO: Libertação de Dados Públicos, com Python
Brasil.IO: Libertação de Dados Públicos, com PythonBrasil.IO: Libertação de Dados Públicos, com Python
Brasil.IO: Libertação de Dados Públicos, com Python
 
#opendata #fail: Causos da Transparência Brasileira
#opendata #fail: Causos da Transparência Brasileira#opendata #fail: Causos da Transparência Brasileira
#opendata #fail: Causos da Transparência Brasileira
 
Brasil.IO: Dados Abertos para Mais Democracia
Brasil.IO: Dados Abertos para Mais DemocraciaBrasil.IO: Dados Abertos para Mais Democracia
Brasil.IO: Dados Abertos para Mais Democracia
 
Dados abertos, direito autoral e democracia
Dados abertos, direito autoral e democraciaDados abertos, direito autoral e democracia
Dados abertos, direito autoral e democracia
 
Jornalismo de Dados: Programando a Democracia no Brasil
Jornalismo de Dados: Programando a Democracia no BrasilJornalismo de Dados: Programando a Democracia no Brasil
Jornalismo de Dados: Programando a Democracia no Brasil
 
Python no Jornalismo
Python no JornalismoPython no Jornalismo
Python no Jornalismo
 
Introdução a programação com Python (para jornalistas)
Introdução a programação com Python (para jornalistas)Introdução a programação com Python (para jornalistas)
Introdução a programação com Python (para jornalistas)
 
Capturando dados com Python - UAI Python
Capturando dados com Python - UAI PythonCapturando dados com Python - UAI Python
Capturando dados com Python - UAI Python
 
Dados Abertos e Meio Ambiente
Dados Abertos e Meio AmbienteDados Abertos e Meio Ambiente
Dados Abertos e Meio Ambiente
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtiva
 
Arduino no Dia-Debian/RJ 2011
Arduino no Dia-Debian/RJ 2011Arduino no Dia-Debian/RJ 2011
Arduino no Dia-Debian/RJ 2011
 
Arduino - Dicas & Truques
Arduino - Dicas & TruquesArduino - Dicas & Truques
Arduino - Dicas & Truques
 
Android e Arduino para automação residencial
Android e Arduino para automação residencialAndroid e Arduino para automação residencial
Android e Arduino para automação residencial
 

Datos Tabulares: La Manera Pythónica