Tuesday, December 20, 2016

aviso de mudança

AVISO IMPORTANTE

Desde 20/12/2016 todo material de referência do curso foi movido do Dropbox para um repositório no GitHub onde ficará sem prazo definido.

O link para o site no GitHub está aqui: https://github.com/kreegah/neci-python 

Uma consequência  disto é que muitos links em posts e páginas deste blog ficam quebrados, não existindo mais os arquivos no site Dropbox.

 

Tuesday, December 6, 2016

adeus

Despedida

E assim chegamos ao fim deste curso introdutório de Python. 

O percurso foi breve, bem mais curto que deveria ter sido, mas nada é perfeito. Peço desculpas por ter faltado algumas aulas, devido a graves problemas familiares. Espero que este blog compense, inda que parcialmente, estas ausências.  Lutaremos á sombra, que mais fazer?

Nossa intenção original era  que este curso fosse a parte introdutória, com fundamentos da linguagem.

A parte seguinte iria incluir tópicos mais interessantes mas que requerem já algum domínio da linguagem Python:
  • Web scrapping (prá valer, não um mero download de arquivos!)
  • Data analysis, data frames, Panda, gráficos
  • Análise estatística, bayesiana ou não.
  • Machine learning, rêdes neurais, support vector machines, kernels, PCA, K-means, knn, SOM, etc.
O futuro dirá se vai haver esta segunda parte, mas mesmo que não aconteça o que vocês aprenderam aqui já lhes será muito útil. Acreditem, eu ví.




Aos colegas que acompanharam fielmente até o final, meus cumprimentos. Por favor não parem de programar em Python. Como eu lhes disse, programação tem muito de prática e a falta desta "enferruja" a gente mais depressa que imaginamos.

Sua recompensa será o domínio de uma linguagem moderna, provavelmente a que mais cresce no mundo em número de usuários.

Python é muito usado com Big Data e seu domínio e fluência vão lhes fazer muita diferença no futuro.

Um ultimo pedido, antes de partirmos: escrevam comentários sobre o que acharam do curso presencial e o que acharam deste blog. Criticas e elogios serão igualmente bem vindos.

al Khwarismi>> exit()

usando regex no python

Usando regex no Python

Expressões regulares são uma ferramenta muito útil para manipular textos e muitas outras coisas em programação e processamento de dados.

Quase todas linguagens de programação oferecem algum tipo de suporte ao uso de expressões regulares sob contrôle da execução de um programa.

O Python, é claro, não é exceção. Um módulo poderoso chamado re exporta funções e objetos que dão amplo suporte a qualquer aplicação de expressões regulares.

Em essência expressões regulares são strings de símbolos com significados específicos e bem definidos que representam padrões de textos.

Construir uma expressão regular (regex)  implica em descrever precisamente um determinado padrão que se deseja identificar num texto, usando os símbolos e a sintaxe das expressões regulares.

Nesta lição vamos assumir que o leitor já teve uma exposição prévia ao assunto expressões regulares.

Um curso específico de expressões regulares foi dado no NECI no primeiro semestre de 2016 e seu material pode ser baixado, conforme explicado nesta lição.

A lição está em notebook Jupyter e pode ser baixada aqui.



Uma versão HTML encontra-se na barra de Recursos ao lado.
 

Saturday, December 3, 2016

arquivos especiais - pdf e csv

Arquivos especiais - PDF e CSV

Arquivos no formato PDF são usados universalmente para artigos científicos e outros mais.

Uma razão para tanto é que o formato PDF (Portable Document Format) permite apresentar o documento com a mesma aparência não importando o computador, sistema operacional ou impressora usados.

Infelizmente isto tem um preço: o formato PDF é bastante complicado e é difícil  implementar software para manipulá-lo.

Nesta lição vamos ver módulos Python para extrair texto de arquivos PDF. 

O notebook Jupyter desta lição pode ser baixado aqui 

Na segunda parte da lição veremos como manipular arquivos do tipo CSV (Comma Separated Values), um formato muito simplificado de dados para planilha.

Arquivos CSV são arquivos simples de tipo texto. Assim mesmo há varias razões para usar o módulo csv do Python para manipulá-los.


Para os exercícios você precisa baixar alguns arquivos extras e colocá-los no mesmo diretório onde ficar o notebook Jupyter desta lição:
 


Como sempre uma versão HTML da lição está na barra de Recursos.

Friday, December 2, 2016

arquivos especiais, zip e pickle

Arquivos especiais - ZIP e pickle

Nesta lição vamos ver como manipular arquivos do tipo .zip.

Arquivos ZIP são containers, isto é, em vez de textos seu conteúdo são outros arquivos e/ou pastas com seus respectivos arquivos. Por esta razão na literatura arquivos ZIP são as vezes chamados de folders (pastas)

Mas a principal característica de arquivos ZIP é que os arquivos contidos neles estão comprimidos

Isto significa que ao inserir um arquivo X num arquivo ZIP, algoritmos sofisticados removem redundâncias no conteúdo de X, reduzindo o seu tamanho sem perder a informação original deste conteúdo. O arquivo original incluido dentro de um arquivo ZIP tem tamanho menor! (fora alguns casos especiais)

Com isto ganha-se tanto em espaço de memória poupado quanto em tempo de transmissão ou cópia do arquivo "zipado" (ZIP), comparado com transmitir seu conteúdo original.

Ao extrair os arquivos contidos num arquivo ZIP algoritmos são aplicados de modo a reconstituir perfeitamente seus conteúdos originais.



Outro tipo de arquivo especial do Python são os arquivos .pickle

Arquivos pickle são arquivos binários usados para armazenar objetos que estejam na memória de um programa Python em execução.  

Para nós basta saber usar este tipo de arquivo para guardar as estruturas de dados que já estudamos aqui: list, set, tuple e dict.

Durante a execução de um programa Python podemos abrir um arquivo pickle, recuperar  o seu conteúdo e sair usando a estrutura de dados correspondente do jeito como ela foi recuperada,.



 O notebook Jupyter correspondente a esta lição pode ser baixado aqui

Uma versão HTML encontra-se na barra de Recursos.

Wednesday, November 30, 2016

Arquivos especiais

Arquivos especiais - Excel 

A partir desta lição vamos ver como manipular diversos tipos de arquivos especiais, todos de grande importância na prática.

Os tipos de arquivos que iremos ver incluem:
  • xlsx
  • csv
  • pdf 
  • zip
  • xml
Todos eles ocorrem bastante na prática donde o interesse em saber manipulá-los.

Nosso primeiro tipo de arquivo especial será o tipo xlsx do poderoso Excel. 

O Jupyter notebook desta lição pode ser baixado aqui




Uma versão HTML da lição está nos Recursos, ao lado.



Nota: Decidimos deixar o estudo de arquivos XML para a segunda parte deste curso, juntamente com HTML e web scrapping.

Sunday, November 27, 2016

Lendo, escrevendo e organizando seus arquivos

Lendo, escrevendo e organizando seus arquivos

Ler e escrever em arquivos é uma daquelas tarefas chatas mas absolutamente essenciais. Dificilmente você programa alguma tarefa que não envolva arquivos e sua manipulação. 

Nesta lição vamos aprender e exercitar estas tarefas, corriqueiras mas importantes.

A lição está como sempre num notebook Jupyter, que pode ser baixado aqui:  Lendo, escrevendo e organizando arquivos

Para seguir a lição será preciso criar um pequeno diretório exemplo  chamado "lixo" e contendo tres arquivos que podem ser baixados tambem:
Este diretório "lixo" deverá estar no mesmo diretório onde voce colocar seu Jupyter notebook baixado. 




Quem não conseguir baixar o notebook pode tentar repetir a lição usando a página HTML na barra de recursos.

Monday, November 21, 2016

Aula 6

Aula 6 - usando dicionários para comparar planilhas Excel

Nesta aula vimos:
  •     revisão breve de lists, sets, strings usando IDLE 
  •     revisão de dictionaires e list comprehensions (listcomp)
No laboratório estudamos um exemplo de download de arquivos do site da Câmara dos Deputados e manipulação de planilhas Excel. Depois estudamos 
um algoritmo para detetar diferenças entre planilhas de listagem de deputados e seus partidos.

O laboratório apresentado em notebook Jupyter pode ser baixado daqui.

Como sempre anexo na barra de Recursos uma versão HTML deste notebook, intitulado "listas de deputados e seus partidos".

Monday, October 31, 2016

Aula 6 prev

Preparando a aula 6

Devido a fatores externos nossa aula 6 foi adiada mais uma vez. Enquanto a aula regular não ocorre sugiro aos que assistem o curso baixarem os notebooks referentes ao assunto daquela aula e estudarem por conta própria.

Os notebooks são estes, na ordem:
As instruções sobre como fazer o download de notebooks Jupyter e usá-los foram dadas em diversos posts anteriores.

Aqueles que por alguma razão não consigam os notebooks dos links acima podem usar suas cópias HTML na barra direita deste blog. Entretanto como são páginas estáticas vocês vão precisar digitar e executar todos exemplos no IDLE.

Em breve vou postar aqui uma série sobre o download e organização de dados da CD, incluindo uso de comandos para baixar páginas HTML da internet, como unzipar arquivos .zip e como manipular arquivos e diretórios

Tuesday, October 11, 2016

Aula 5

Aula 5 - Tipos de dados set e list

 Os tópicos da aula 5 foram exercícios com listas, o tipo de dados set (conjuntos) e list comprehensions (listcomp).

Foi também implementado um exemplo símples de análise de texto. O Jupyter notebook deste exemplo pode ser baixado aqui. Você vai precisar dos arquivos texto para seguir este exercício. Os links foram dados no post anterior. Baixe estes arquivos e coloque-os no mesmo diretório onde colocar o Jupyter notebook.

Se não puder usar o Jupyter notebook uma cópia HTML estática está nos Recursos, na barra direita do blog.

Nestas cinco aulas iniciais cobrimos mais ou menos os capítulos 1, 2 e 4 do livro de referência (Automate the Boring Stuff...).




Relembremos como usar um Jupyter notebook:

  • baixe um notebook usando um link neste blog, tal como este aqui 
  •  aparece um texto no browser, como isto aqui:

{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Usando list, set e str para análise de um texto\n",
    "\n",
    "Nesta lição vamos exercitar uso de listas, conjuntos e strings c....
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Vamos ler o texto, que está no arquivo 'cienciapolitica.txt'."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
..................................................
.........................
  • copie este texto e cole no editor Notepad (por exemplo).
  • salve o texto do editor usando um sufixo .ipynb no arquivo salvo
 Ao abrir o Jupyter notebook navegue até o arquivo salvo, que será visto como um notebook "normal"

Sunday, October 9, 2016

Aula 5 prev

Preparando a aula 5

Na aula 5 vamos apresentar um tipo de dados nativo do Python que implementa o conceito de "conjunto": o tipo set

Veremos tambem o importante conceito de comprehensions e generative expressions, que fazem o Python ser agradável e eficiente de programar. 

Finalmente veremos um exemplo ilustrativo com uma análise de texto simples. Para isto você vai precisar dos arquivos de stopwords e também de arquivo com o texto exemplo, que podem ser baixados aqui e aqui






Monday, October 3, 2016

Aula4

Aula 4


Na aula #4 revimos alguns tipos de dados básicos: str (string), tuple e list.

Fizemos alguns exercícios de programação, inclusive uma versão do exemplo3@aula1. O objetivo foi mostrar como a implementação no espírito pythonista é espetacularmente mais simples.





Dado um texto, conte o número de palavras que contém a letra a e a letra b

Solução força-bruta:

''' Conta o numero de palavras nde um texto que contenha a letra a e a letra b.
    Percorre o texto caracter por caracter mantendo dois estados:
                     1 => fora de uma palavra
                     2 => dentro de uma palavra
    No estado 2 mantem dois flags, acheiA e acheiB para lembrar
    se achou as letras a e b respectivamente.
    No estado 2 quando ambos flags forem verdadeiros, incrementa
    a contagem de palavras e lembra o feito para evitar contagem
    repetida da mesma palavra.
'''


txt = input()
conta = 0

# flags de controle dos estados
na_palavra = txt[0].isalnum()
acheiA = False
acheiB = False
ja_contei = False

# percorre o texto caracter a caracter
for car in txt:
    # verifica se entrou numa palavra
    if not na_palavra:
            if car.isalnum():
                # entrou numa palavra
                na_palavra = True
    else:
        # estavamos numa palavra: verifica se palavra terminou
        if not car.isalnum():
            # palavra terminou: reseta todos flags
            na_palavra = False
            acheiA = False
            acheiB = False
            ja_contei = False

    # se estamos numa palavra, verifica se caracter é 'a' ou 'b'
    if na_palavra:
        if car == 'a':
            acheiA = True
        if car == 'b':
            acheiB = True
           
        # se palavra contem a e b, incrementa contagem de palavras
        if acheiA and acheiB:
            # mas somente se ainda não tinha contado esta palavra
            if not ja_contei:
                conta = conta + 1
                ja_contei = True

# imprime numero de palavras encontradas

print('Numero de palavras encontradas = ', conta) 



Solução estilo pythonista:

'''
Conta palavras no texto que contenham a letra a e tambem a letra b.
'''


txt = input()
lst = txt.split()
wrd = [x for x in lst if 'a' in x and 'b' in x]

print('Numero de palavras encontrado =', len(wrd)) 






 
Recomendo que leiam os tópicos relevantes em Recursos. Leiam tambem o texto e exemplos relevantes no tutorial oficial do Python

Depositei o material da aula 4 no dropbox, aqui



Tuesday, September 27, 2016

Aula 4 prev

Preparando a aula 4

Na aula 4 vamos subir um pouco a dificuldade dos exemplos implementando alguns problemas cujo pseudo código vimos nas primeiras aulas.

Como preparação você pode tentar implementar e testar a especificação que estudamos na aula 1:

Dado um texto, conte o número de palavras que contém a letra a e a letra b


Dica: conte palavras somente após encontrar ambas as letras e cuide para não contar a mais se as letras ocorrem varias vezes na mesma palavra (por exemplo como na palavra 'ajkblmabab')




Na aula 4 vamos ver alguns conceitos mais avançados de Python e resolver alguns problemas "dificeis" usando comandos "magicos". 

Para melhor aproveitamento leia os seguintes tópicos em Recursos:

Caracteres, números e variáveis 

Tipos de dados nativos 

Comandos 
 

Monday, September 26, 2016

Aula 3

Aula 3 - strings, alguns comandos básicos

Nesta aula iniciamos o estudo do Python propriamente dito. O material coberto corresponde mais ou menos ao item Caracteres, números e variáveis e parte do item Comandos em Recursos.

Vimos um exercício implementando em Python um exemplo cujo pseudo código criamos em aulas anteriores:

Dado um texto contendo somente caracteres alfanuméricos e espaços em branco contar o número de palavras no texto. Uma palavra é definida como sequência ininterrupta de caracteres alfanuméricos terminada por espaço em branco. 

Uma implementação possível seria a seguinte:

''' conta o numero de palavras num texto. Caracteres permitidos:
alfanumericos e espaço em branco'''


txt = input()

na_palavra = (txt[0] != ' ')
if na_palavra:
    conta = 1
else:
    conta = 0

# percorre o texto caracter a caracter
for car in txt:
    # verifica se caracter é espaço ou alfanumerico
    if car != ' ':
        n_pal = True
    else:
        n_pal = False

    # verifica se passou fronteira de entrada em palavra
    if na_palavra == False:
        if n_pal == True:
            # entrou numa palavra
            conta = conta + 1
            na_palavra = True
    else:
        # estamos numa palavra: verifica se terminou
        if n_pal == False:
            na_palavra = False

# imprime numero de palavras encontradas
print('Numero de palavras encontradas = ', conta)
  

Verifique que este programa implementa a especificação digitando o código no IDLE e executando. Teste casos extremos.

 


O código abaixo tem o mesmo efeito e é mais sucinto:

txt = input()
na_palavra = (txt[0] != ' ')
conta = int(na_palavra)


# percorre o texto caracter a caracter
for car in txt:
    # verifica se caracter é espaço ou alfanumerico
    n_pal = (car != ' ')

    # verifica se passou fronteira de entrada em palavra
    if not na_palavra:

            if n_pal:
                # entrou numa palavra
                conta = conta + 1
                na_palavra = True
    else:
        # estamos numa palavra: verifica se terminou
        if not n_pal:
            na_palavra = False

# imprime numero de palavras encontradas
print('Numero de palavras encontradas = ', conta)


Lembrando que not e and correspondem aos conectivos lógicos negação e conjunção, experimente o código acima no IDLE e verifique que é outra implementação válida.

Para entender porque atribuições como n_pal = (car != ' ') funcionam  lembre, como explicado na aula, que o valor de uma expressão booleana é True ou False. Assim n_pal irá receber um valor True ou False respectivamente.



 



Podemos ainda generalizar o problema permitindo qualquer caracter whitespace no texto, não somente o espaço em branco ' '.

Neste caso a implementação acima deve ser ligeiramente modificada usando uma das muitas funções de objetos string. No caso dado um caracter lido basta testar se car.isalnum() retorna True ("é caracter alfanumérico") ou False ("não é um caracter alfanumerico"). O trecho modificado do código fica assim:

# percorre o texto caracter a caracter
for car in txt:
    # verifica se caracter é alfanumerico
    n_pal = car.isalnum()

........................................ etc



Monday, September 19, 2016

Prévia da aula 3

Preparando a aula 3

Por decisão da turma vamos abreviar a introdução a algoritmos e passar a ver a linguagem Python propriamente dita.

Os que tiverem notebook próprio podem trazê-lo para instalar o Anaconda 3 e preparar o ambiente de trabalho, à menos que já o tenham feito. 

É recomendável ter seu computador caseiro preparado para praticar programação em casa, dado a baixa carga horária semanal do curso.



De qualquer forma é recomendável que você leia os artigos sobre a linguagem Python na aba direita, sob o título "Recursos".

Aula 2

Aula 2

Coloquei os slides para a aula 2 aqui. Estamos ainda vendo noções intuitivas de algoritmos e fazendo exercicios em aula.

Em breve começaremos com a linguagem Python propriamente dita. Mas como dito em aula, programar é muito mais ter noção de algoritmos do que detalhes de linguagem. Com o bonus adicional de poder implementar o mesmo algoritmo em diversas linguagens, não somente Python. 

Thursday, September 15, 2016

Começou o curso

Aula 1

A primeira aula do curso foi em 12/9/2016. Quem quiser revisar os slides apresentados pode baixá-los deste link (vide abaixo). Um aviso do Dropbox aparece (arquivos .rar não podem ser previstos) e pode ser ignorado.

 O arquivo baixado deve conter página HTM, a qual pode ser vista em seu browser.





Nota: Infelizmente o Powerpoint corrompeu alguns slides na conversão para HTM. Então decidi colocar os próprios slides para download, que você pode fazer aqui.

Monday, July 11, 2016

Slides da palestra LDA

Ainda sobre a palestra de LDA

Por favor baixe o arquivo com slides da palestra aqui. Houve um pequeno problema com o pacote rar anterior, onde ficaram faltando dois videos apresentados na palestra. 

Wednesday, June 29, 2016

Text Mining - LDA

Palestra sobre Latent Dirichlet Allocation (LDA)


O material da palestra está disponível para download aqui. No diretório estão estes arquivos:
  • demolda.py
  • t2d.py
  • dilma.csv
  • vocabulario.xlsx
  •  black elipse.png
  • Text Mining.pptx
Para conseguir executar os scripts em Python voce deveria ter instalado o Anaconda 3 seguindo instruções de posts anteriores. 

Além disto você pode precisar de vários pacotes das bibliotecas do Python. Em particular instale o pacote de processamento de linguagem natural, NLTK:

>pip install nltk

Após instalar o nltk abra o IDLE e digite:

>> import nltk
>> nltk.download()

Após algum tempo aparece uma janela criada pelo próprio módulo nltk com muitas opções de módulos para download:


Selecione e baixe os itens book e all-corpus. Este segundo parece que trava no fim, pois alguns módulos finais estão "obsoletos". Se travar é só fechar o dialogo e reabrir outra vez.

Agora selecione a aba "corpora" e baixe tudo que não estiver marcado como já baixado. Faça o mesmo com a aba "Models", em particular baixe o modelo "rslp":


 Certifique-se que tem os módulos seguintes:

>pip install lda
>pip install PIL

Um último módulo é o pacote que desenha wordclouds. A versão que usei na palestra é um tanto antiga e mais difícil de baixar. No que segue assumo que sua máquina é de 64 bits. Siga estes passos:
  1. Baixe o arquivo wordcloud-1.2.1-cp35-cp35m-win_amd64.whl daqui.
  2. abra a janela de comando e execute
    >pip install caminho\para\wordcloud-1.2.1-cp35-cp35m-win_amd64.whl
 Isto deveria instalar o pacote wordcloud em sua máquina.


Finalmente uma observação: no workbook "vocabulario.xlsx" coloquei a lista de palavras do exemplo "dilma" e a matriz DTM correspondente. Entretanto acabei ordenando a lista de palavras para melhor estudar o resultado. Só que esta ordem não é mais a ordem de palavras nas colunas da matriz DTM!

Thursday, May 26, 2016

Módulos

Módulos, exceções e arquivos

 Uma vez escrito, um script pode ser salvo em arquivo com terminação ".py" (py de Python). O mesmo vale para script com definições de funções.

Um arquivo .py é chamado de módulo e aqui vem a parte interessante: um módulo pode ser incorporado em outro script, fazendo sua importação via o comando import.

import meu_modulo
Para isto dar certo o módulo deve estar no diretório corrente, ou no caminho de busca do Python. Uma vez importado o módulo todas suas funções passam a fazer parte do script importador, podendo ser chamadas e usadas normalmente.

Coleções de módulos são agrupadas num package. O mesmo import pode importar a coleção inteira numa só vez.

 


Quando escrevemos um programa uma série de coisas são assumidas sobre o meio ambiente onde ele vai rodar. Por exemplo ao baixar um arquivo pela internet assumimos que a url é correta e bem formada, que o site ainda existe e funciona, que a página html está lá e será encontrada, etc.

Na prática qualquer destas hipóteses pode falhar. O mesmo pode acontecer ao ler um arquivo que assumimos ser  codificado num dado padrão, mas que pode estar em outro resultando em leitura de lixo ou até travamento do programa.

Para gerenciar este tipo de problema existe o mecanismo de exception  (exceção) no Python. O programador que cria o acesso à internet ou cria o leitor de arquivos, ao encontrar uma situação como descrito cria um objeto exceção disponível para o usuário e lança um aviso de exceção, o que interrompe a execução do programa e volta a execução para o programa usuário.

Usando o comando try e seu par, except  é possível ler o objeto exceção lançado e tomar providências de acordo, por exemplo imprimir mensagem de anomalia.

 


Estes tópicos e ainda uma introdução à leitura de arquivos estão no novo notebook que disponibilizei aqui.

Monday, May 23, 2016

Funções

Funções

Funçoes são procedimentos conceitualmente autônomos, isto é tem um propósito próprio bem definido. A grande diferença é que funções podem ser chamadas recebendo dados externos na forma de seus argumentos, e podem retornar valores e objetos resultantes de sua computação.

Todas as variáveis que funções utilizam tem escôpo local, isto é não são visíveis nem acessíveis pelo programa que as invoca.  Toda a comunicação entre o mundo da função e o mundo do programa é via argumentos na entrada e valores retornados na saída.

Funções são super importantes por diversas razões, entre as quais:

  • decompõem o problema maior em blocos conceituais menores, facilitando a programação
  • podem ser reutilizadas em outros programas, tornando programar mais eficiente e mais fácil
  • tornam o programa mais fácil de depurar por partes
Em Python funções são objetos de primeira classe e podem ser manipuladas como tal. 

Coloquei no Dropbox um notebook sobre funções aqui.
 

Sunday, May 22, 2016

Loops

Loops podem ser complicados

Vamos escrever um loop (termo para repetição, universalmente adotado) para percorrer uma lista imprimindo seus elementos. Coisa simples agora que você conhece os comandos básicos do Python.

L = [1, 2, 3, 4, 5]
for x in L:
        print(x)
            print('Fim.')
 
A saida deste sript é:
1
2
3
4
5
Fim.

Agora vamos modificar o script ligeiramente e eu gostaria que você estudasse o que acontece e tivesse uma explicação clara do ocorrido. Se você tiver IDLE instalado digite o script e observe sua execução:

L = [1, 2, 3, 4, 5]
    c = 6
for x in L:
                if x < 10:
           L.append(c)
           c = c + 1
       print(x)
        print('Fim.')
A saida observada será:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Veremos o que houve em post futuro. (Dica: você está mexendo no limite da repetição).

Agora analise o que ocorre no script abaixo, quase igual ao anterior:
L = [1, 2, 3, 4, 5]
    c = 6
for x in L[:5]:
                if x < 10:
           L.append(c)
           c = c + 1
       print(x)
            print('Fim.')
Que saida vamos obter? Digite o código no IDLE e execute. O que você esperava é o que ocorre?

(dica: Quando voce fatia (slice) a lista para obter L[:5] o Python faz uma cópia deste pedaço da lista L original. Portanto você passa a ter a lista L original e uma cópia de pedaço, L[:5] )
 

Friday, May 20, 2016

Comandos do Python

Comandos

Neste notebook introduzimos os comandos básicos do Python.

O notebook pode ser baixado aqui.

Além de apresentar os comandos if for while break ilustramos resolvendo alguns dos exemplos da lista de exercícios 1.

A versão HTML do notebook está anexada em Recursos.

 

 

Thursday, May 19, 2016

Conjuntos, dicionários e mapeamentos

Ainda tipos de dados nativos

Coloquei no Dropbox mais um notebook Jupyter com texto sobre conjuntos (set), dicionários (dict) e um tópico mais avançado sobre "comprehensions" que é o equivalente em Python 3 do map, lambda em Python 2.

Este notebook pode ser baixado aqui.

Tambem coloquei aqui no blog uma página HTML cópia deste notebook, que pode ser vista nos Recursos na barra direita do blog.

Em Python o tipo de dados set modela a noção de conjunto, ou seja uma coleção de elementos quaisquer onde não existe ordem entre eles e todos são únicos (sem repetição de elementos).

O tipo de dados dict é extremamente útil. Dicionários são pares compostos por chave e valor. Encontrar um valor dada uma chave é uma operação muito rápida e eficiente. A operação reversa (e não unívoca) pode ser bem mais lenta.

Na prática usaremos dicionários frequentemente.





Comprehensions são uma forma de mapear listas, dicionários ou conjuntos em outros similares, aplicando alguma função em cada elemento.

Por exemplo, dada uma lista de números queremos um modo rápido de extrair todos os pares. Isto pode ser feito com um comando, um "list comprehension", da seguinte forma:

 L = [ 1, 2, 3, 4]
 Lpar = [x for x in L if x % 2 == 0]
Num certo sentido isto lembra SQL, não é mesmo?




Com isto cobrimos o básico de tipos de dados e passaremos adiante para comandos do Python.

Breve estaremos em condição de codificar e executar nossos algoritmos em Python.



Wednesday, May 18, 2016

Atraso no incio do curso

Atrasos no início do curso

Devido a fatores diversos o início do curso tem sido postergado. Para aqueles que mostram interesse maior sugiro que tentem começar em casa mesmo, usem este blog como guia e sintam-se a vontade para me consultar por email ou até comentários aqui no blog mesmo.

Tipos de dados

Tipos de dados do Python

Python é uma linguagem orientada a objetos e todos termos num programa representam objetos. Objetos são instâncias do que se chama tipos de dados.

Os tipos de dados mais elementares na linguagem incluem caracteres, números e variáveis.

Outros tipos de dados são pré definidos no interpretador Python e utilíssimos, usamos todo dia. Estes são:
  • strings
  • list
  • tuple
  • set
  • dict (dicionário)
Vamos examinar os três primeiros agora e os dois restantes em post futuro. Coloquei um notebook aqui para vocês baixarem e estudarem. 

Como de hábito anexei a versão HTML na lista de Recursos.




Monday, May 16, 2016

Conceitos básicos do Python

Python: caracteres, números e variáveis

Coloquei no Dropbox um primeiro Jupyter notebook introduzindo caracteres, variáveis e alguns outros conceitos básicos do Python. 

A página pode ser baixada aqui.  

Releia as instruções sobre como baixar os notebooks e como usá-los dadas em posts anteriores. 

Claro está que você já deve ter baixado e instalado com sucesso o Anaconda 3 na sua máquina.

Para as pessoas com dificuldade para baixar este notebook ou executá-lo vou colocar nos Recursos uma versão HTML do notebook. Infelizmente ela é só isto, uma página HTML estática.

Wednesday, May 11, 2016

Jupyter notebook

Jupyter notebook


Jupyter notebooks são páginas visíveis num browser (Firefox, etc) que permitem misturar texto, código executável em Python, imagens, figuras etc.

Este tipo de página é um recurso que permite estudo interativo, onde o leitor pode executar e modificar código e ver os resultados sem sair da página que está lendo.

Neste curso faremos a experiência de usar estes notebooks para nossos textos sobre Python.

À propósito, o nome da aplicação que ativa estes notebooks vem das três linguagens de programação suportadas pelo engine:

Jupyter = Julia + Python + R

Vejamos se o Jupyter esta instalado em seu notebook. Se você baixou Anaconda 3 com sucesso então o Jupyter deve estar instalado. Em todo caso o teste é simples:
  • abra uma janela de comando (Power Shell ou cmd.exe) e digite:
  •  >>jupyter notebook
  • após algum tempo deveriam aparecer uma série de mensagens do systema:
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\Users\ps>jupyter notebook
[I 20:36:12.075 NotebookApp] Serving notebooks from local directory: C:\Users\ps
[I 20:36:12.079 NotebookApp] 0 active kernels
[I 20:36:12.080 NotebookApp] The IPython Notebook is running at: http://localhost:8888/
[I 20:36:12.083 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[I 20:38:26.353 NotebookApp] Kernel started: 1cd69f62-8ce4-42e4-b51a-0306813efc3f
 Em seguida o seu browser é ativado e nele aparece um tab intitulado Desktop/jupyter, com uma página tendo este logo no cabeçalho:

 
 Se tudo isto ocorrer então parabens, você tem o Jupyter instalado e ativo. Em todo caso voce pode obter mais informação aqui.

Explicaremos no laboratório como usar um notebook destes (é simples). Se você não presenciar existem montes de referências na internet. Aqui tem breve ajuda no site oficial do projeto Jupyter. Existem videos tutoriais no YouTube, como este aqui. Uma referência bem completa que vale a pena ver está aqui.





Vejamos como usar o Jupyter em nossos estudos de Python. Preparei uma página jupyter notebook com mini-aula de web scraping. Faça de conta que é página do curso e treine como usá-la. 

  1. O primeiro passo é baixar o notebook usando o link dado aqui.
  2.  Note que é baixada uma página cheia de códigos e html. Isto é normal.
  3. Use o menu em seu browser para salvar esta página. No Firefox é preciso ativar a barra de menu (botão direito, clique no topo, selecione Menu Bar).
  4. Clicar File\Save Page As...\text files, um nome para a página e o sufixo ".ipynb" (quer dizer "interactive python notebook")
  5. No diretório onde seu browser salvou a página deve haver um arquivo "nome.ipynb".
  6.  Ligue o jupyter como explicado acima e na página que é aberta você pode navegar até o diretório onde salvou o arquivo "nome.ipynb". Clique no arquivo e o notebook jupyter deverá ser aberto no browser.
  7.  Dai em diante estude o conteúdo, execute os códigos e script Python e divirta-se.
  8. À propósito a página que você baixou tem o título

    Reverse engineering a dynamic web page



Uma vez tendo aberto um notebook em seu browser observe o layout do mesmo. No topo você tem um toolbar com menus genéricos para salvar o notebook, editar, help, etc. O menu Cell tem um submenu All Output que por sua vez tem um submenu Clear. Este é útil para limpar e resetar outputs de todas execuções de scripts e comandos Python armazenados no notebook. Recomendo que use-o sempre que abrir um notebook pela primeira vez.

Um notebook é composto essencialmente de dois tipos de células (cells): code cells e markdown cells.

Markdown cells contém texto. O nome markdown vem do tipo de formatação usada para escrever estes textos. Markdown é uma espécie de HTML super simplificado que permite humanos escreverem textos padrão html naturalmente e sem dor. Você pode encontrar mais informação sobre Mardown aqui.

Code cells contém código Python que pode se r executado. Para executar o código em uma célula code clique na mesma e digite "shift + enter".Isto é assim porque o código na célula pode ter muitas linhas e o "enter" simples é reservado para dar uma nova linha no código.

As células de código tem sempre um prefixo In[d] onde d é um número sequencial. Isto simboliza "input", ou seja código que você alimenta no interpretador Python. Assim que o código executar, aparece abaixo a saida do interpretador numa célula texto markdown, prefixada com Out[d]