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
        
        
          ## \#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