Gênero e Número: Python ajudando a entender as questões de gênero brasileiras
Turicas aka Álvaro Justen
18 de novembro de 2017 - Goiânia/GO
Turicas, prazer! =)
Sigam-me os bons:
Software Livre
Python
# E vocês?
- Já ouviu falar de Python?
- Já programa em Python?
- Trabalha com Web scraping?
- Trabalha com análise de dados?
## Roteiro
- Gênero e Número
- Dados Abertos
- Python
- Exemplos de Código
## Parte 1:
## Gênero e Número
Investigar as questões de gênero no Brasil e América Latina,
com dados abertos e técnicas de jornalismo de dados.
Equipe Gênero e Número
## \#ddj \#datajournalism

## Jornalismo Aberto
- Descrição da **metodologia**
- Link para todas as **fontes de dados** utilizados
- Código-fonte dos scripts disponível
- [github.com/generonumero](https://github.com/generonumero)
- Link para planilhas com os **resultados das análises**
- Exemplo: [Como classificamos mais de 800 mil logradouros brasileiros por gênero](http://www.generonumero.media/como-classificamos-mais-de-800-mil-logradouros-brasileiros-por-genero/)
## Parte 2:
## Dados Abertos
“
Dados abertos são dados que podem ser livremente usados,
reutilizados e redistribuídos por qualquer pessoa -
sujeitos, no máximo, à exigência de atribuição da fonte e
compartilhamento pelas mesmas regras.
”
-- OpenData
Handbook (definição de Open Definition)
## Lei de Acesso à Informação
- [Lei 12.527/2011](http://www.planalto.gov.br/ccivil_03/_ato2011-2014/2011/lei/l12527.htm)
- Em vigor desde 16 de maio de 2012
# 5-Star Data
## [5stardata.info](http://5stardata.info/)

Desafios
Maior parte do tempo dos projetos de análise de dados
Obtendo...
Verificando...
Limpando...
“
O nível de acessibilidade de um dado é um filtro sobre quem
conseguirá utilizá-lo.
”
## Dados Abertos - Mais Detalhes
- [opendatahandbook.org](http://opendatahandbook.org/)
- [kit.dados.gov.br](http://kit.dados.gov.br/)
- [escoladedados.org](https://escoladedados.org/)
## Python - Características
- Linguagem de **propósito geral**
- Criada por Guido Van Rossum em 1989
- Software **livre**
- Multiplataforma
- Fácil de aprender
- Sintaxe simples e clara
- **Very High Level Language**
- Baterias incluídas
- **Altamente extensível**
- Largamente utilizada
- **Comunidade incrível**
Guido van Rossum
## Entrevistei Guido van Rossum!

Em breve em **[youtube.com/c/PythonicCafe](https://youtube.com/c/PythonicCafe)**
## Python: Aplicações
- Interfaces de linha-de-comando (CLI)
- Interfaces gráficas de usuários (GUI)
- Computação científica
- Computação gráfica
- Jogos
- Web
- Robótica
- *(coloque sua área aqui)*
# Onde roda?
- GNU/Linux
- Mac OS X
- Outros UNIX (FreeBSD etc.)
- Windows
- Android
- Microcontroladores
- ...
## Python - Quem usa?
- Canonical
- Dropbox
- Fundação Getúlio Vargas
- Globo.com
- Google
- Industrial Light & Magic
- Mozilla Foundation
- NASA
- SERPRO
- YouTube
- ... (eu poderia ficar até amanhã dando exemplos) ...
Primeiro Programa
print("Olá, #CapiConf Mini!")
## Tipos de Objeto
- Strings (`str`)
- Exemplo: `"Álvaro"`
- Números inteiros (`int`)
- Exemplo: `42`
- Números racionais (`float`)
- Exemplo: `3.14`
- Números complexos (`complex`)
- Exemplo: `1 + 2j`
- Listas (`list`)
- Exemplo: `[1, 2, 3]`
- Dicionários (`dict`)
- Exemplo: `{"linguagem": "python", "resposta": 42}`
- `date`, `datetime`, `timedelta`
- ...
Nada de parênteses, nada de chaves!
if condicao1 and condicao2:
comando1
if condicao3 or condicao4:
comando2
comando3
elif 5 < x <= 10:
comando4
elif condicao6:
comando5
else:
comando6
Trabalhando com arquivos
arquivo_1 = open('nome.txt')
for linha in arquivo_1:
print(linha)
arquivo_1.close()
arquivo_2 = open('nome-2.txt', 'w')
arquivo_2.write('Python rules!')
arquivo_2.close()
(live coding IPython)
## Baterias incluídas!
- `sys`, `os`, `re`, `string`, `zlib`
- `socket`, `urrlib`, `httplib`, `imaplib`
- `time`, `datetime`, `math`, `random`
- `doctest`, `unittest`, `xml`, `xmlrpclib`
- `struct`, `pickle`, `cPickle`, `threading`
- `logging`, `decimal`
- E muito mais!
Lendo CSVs
import csv
municipios = csv.DictReader(open('brasil.csv'))
for municipio in municipios:
if municipio['estado'] == 'PR':
densidade = int(municipio['habitantes']) / float(municipio['area'])
print(municipio['nome'] + '/PR' + ': ' + str(densidade) + ' hab/km²')
Navegando com Python
import urllib
url = 'http://pythonic.cafe/'
pagina = urllib.urlopen(url)
print(pagina.read())
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Um monte de gente linda
PythonBrasil[12], Florianópolis (outubro de 2016)
## Eventos
- Nível regional:
- [Caipyra](http://caipyra.python.org.br/) (2017: Ribeirão Preto/SP - já foi)
- [Python Nordeste](http://pythonnordeste.org/) (2017: São Luís/MA - já foi)
- [Python Sudeste](http://pythonsudeste.org/) (2017: Rio de Janeiro/RJ - já foi)
- [PyCon Amazônia](http://amazonia.python.org.br/) (2017: Manaus/AM - já foi)
- [Python Sul](http://pythonsul.org/) (2017: Caxias do Sul/RS - já foi)
- Nível nacional:
- [Python Brasil](http://www.pythonbrasil.com.br/) (2017: Belo Horizonte/MG)
- [PyConUS](https://us.pycon.org/2017/)
- [PyConAr](http://ar.pycon.org/)
- ...
## Parte 4:
## Exemplos de Código
rows to the rescue!
pip install rows # Python Package Index
apt-get install rows # Debian
dnf install rows # Fedora
## rows
- Biblioteca Python
- Command-Line Interface
- Plugins:
- CSV
- JSON
- HTML (+ XPath)
- TXT
- XLS
- XLSX
- SQLite
- ODS
- Parquet
- (+ outros em desenvolvimento)
csv com Python + rows
import rows
table1 = rows.import_from_csv('data/brazilian-cities.csv')
for row in table1:
print(row)
Resultado
Row(state='PR',
city='Curitiba',
inhabitants=1751907,
area=435.04)
(live coding no IPython)
xls com Python + rows
import rows
table2 = rows.import_from_xls('data/brazilian-cities.xls')
for row in table2:
print(row)
html com Python + rows
import rows
table3 = rows.import_from_html('data/brazilian-cities.html')
for row in table3:
print(row)
Resultado
-
Consistente
- Independente do formato
- API única
-
Tipos automaticamente identificados e convertidos
- Mesmo que o formato não possua esses metadados
import rows
20 de novembro a 17 de dezembro de 2017
Online e GRATUITO
25 e 26 de novembro de 2017
São Paulo/SP