Gênero e Número: Python ajudando a entender as questões de gênero brasileiras


Turicas aka Álvaro Justen


Fórum Goiano de Software Livre

18 de novembro de 2017 - Goiânia/GO

Turicas, prazer! =)

Sigam-me os bons:

{twitter,
github,
youtube,
slideshare,
instagram}
/turicas

turicas@pythonic.cafe

Blog: turicas.info

bit.ly/gn-fgsl


escoladedados.org


generonumero.media


impacto.jor.br


simplefractal.com


pythonic.cafe

youtube.com/c/PythonicCafe

Software Livre

Python

pythonquito.tk

# 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 ![Funil de Dados](images/funil-de-dados.png)

Rua: substantivo (ainda) masculino


youtu.be/7yQ8U2tFFq4
## 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/) ![](images/5-star-steps.png)

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 Tabulares: Qual o Pior Formato?


youtu.be/mVkWZVtZDT0
## Dados Abertos - Mais Detalhes - [opendatahandbook.org](http://opendatahandbook.org/) - [kit.dados.gov.br](http://kit.dados.gov.br/) - [escoladedados.org](https://escoladedados.org/)
## Parte 3: ## Python
## 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

Guido van Rossum

## Entrevistei Guido van Rossum! ![Álvaro Justen entrevista Guido van Rossum](images/entrevista-guido.jpg) 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) ...

Google usa Python desde 1998

Top Programming Languages


Fonte: spectrum.ieee.org/computing/software/the-2017-top-programming-languages

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())

Fonte: xkcd.com/353
>>> 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)

Python Package Index


pypi.python.org
## 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/) - ...

Para saber mais

Palestra: O Fantástico Mundo de Python

Encontro do GruPy-PR + OpenDevCommunity (22 de julho de 2017)

youtu.be/UhojUKoXHMM

grupypr.github.io

t.me/grupy_pr

meetup.com/GruPy-PR

## Parte 4: ## Exemplos de Código

Classificando Logradouros por Gênero

(nível fácil)


censo2010.ibge.gov.br/nomes


github.com/generonumero/logradouros

Capturando Dados Históricos das Olimpíadas

(nível médio)


sports-reference.com

rows to the rescue!


pip install rows # Python Package Index

apt-get install rows # Debian

dnf install rows # Fedora


github.com/turicas/rows

Let's automate ALL the things
Asshole
## 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

Carlton dance


github.com/generonumero/olimpiadas

Analisando Dados da Educação Superior

(parece fácil, mas é difícil)


generonumero.media


github.com/generonumero/educacao

#fikdik

journalismcourses.org

20 de novembro a 17 de dezembro de 2017
Online e GRATUITO

coda.escoladedados.org

25 e 26 de novembro de 2017
São Paulo/SP

?


{twitter,
github,
youtube,
slideshare,
instagram}
/turicas

turicas@pythonic.cafe

Blog: turicas.info

generonumero.media

bit.ly/gn-fgsl