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.