Estudo de caso: Seleção de estrutura de dados

Slides:



Advertisements
Apresentações semelhantes
INTRODUÇÃO AO AMBIENTE DE PROGRAMAÇÃO MATLAB MINICURSO PET-POTÊNCIA WILK MAIA TURMA 1 AULA 7.
Advertisements

Linguagem de Programação – Aula 03 Prof. Me. Ronnison Reges Vidal.
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Variáveis e Atribuições.
Algoritmos e Estruturas de Dados I
Introdução à Computação para Engenharia MAC2166
XVIII Escola de Verão IAG/USP Python Contêiner Marcelo Bianchi
CÁLCULO NUMÉRICO Aula 2 – Introdução ao Programa de Computação Numérica (PCN) e Teoria dos Erros.
Recursividade, Entrada pelo teclado e Funções com retorno
Tuplas CHRISTOPHER FREIRE SOUZA EWERTON AMORIM DE OLIVEIRA
DICIONÁRIOS CHRISTOPHER FREIRE SOUZA EWERTON AMORIM DE OLIVEIRA
Ordenação dos Elementos de um Vetor - Bubble Sort e Quick Sort .
Programação em C Aula 8.
Aprendizado de Máquina
DISTRIBUIÇÃO AMOSTRAL E ESTIMAÇÃO
Distribuições de Probabilidade
RODOLFO SOARES TEIXEIRA OBMEP NA ESCOLA
Complementos de Engenharia de Software A linguagem VDM++ (4ª parte – Funções avançadas) João Pascoal Faria
Métodos de Pesquisa: Seqüencial e Binária
Probabilidade e Estatística Aplicadas à Contabilidade I
Estatística: Aplicação ao Sensoriamento Remoto SER ANO 2017 Intervalo de Confiança Camilo Daleles Rennó
Linguagem C Para programadores Python
ESTATÍSTICA AULA 12 Inferência Estatística e Distribuição Amostral – Unidade 8 Professor Marcelo Menezes Reis.
Algoritmos e Estruturas de Dados I
Distribuições de Probabilidade
Prof. Wellington Franco Estrutura de um Programa Usando o VisuAlg
Prof. Wellington Franco
Coleções: Listas Dilvan Moreira.
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
Prof. Wellington Franco Manipulação de Arquivos em C
Algoritmos e Fluxogramas
Arquitetura de Computadores
PIT – PROGRAMA INTERNO DE TREINAMENTO 2015
FUNDAMENTO DE PROGRAMAÇÃO
IP – Repetições Prof. Eduardo Falcão.
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS
Programação Orientada a Objetos
Funções do Usuário em Matlab
Programação para Internet Rica
Programação.
DISTRIBUIÇÕES AMOSTRAIS
Complexidade de Algoritmos
LÓGICA DE PROGRAMAÇÃO Estruturas de Decisão
TÍTULO DO TRABALHO (Utilizar fonte tipo Times New Roman tamanho 44, letras maiúsculas, alinhamento centralizado) Nome Completo do Autor, Instituição de.
Unidade 9 – Números Complexos
Linguagem PASCAL Tipos Estruturados
Amostragem e estimadores
Capítulo 8 Seleção da amostra. Capítulo 8 Seleção da amostra.
EDA - Prof. Paulemir Campos
Amostragem e estimadores
Mestrado Profissional em Física Médica
Introdução à lógica de programação utilizando Scratch Aula 3
Arrays de caracteres: strings
ALGORITMOS.
Introdução à lógica de programação utilizando Scratch Aula 4
Estatística: Aplicação ao Sensoriamento Remoto SER ANO 2018 Intervalo de Confiança Camilo Daleles Rennó
Python: Comandos Básicos
Probabilidade e Estatística Aplicadas à Contabilidade II
Técnicas de análise da conjuntura
Introdução a progrmação Comandos condicionais: if e switch
Aula 11 Professores: Conteúdo: Dante Corbucci Filho
Constantes, Variáveis e Memória
UNIDADE 12 INTERFACE EM SÉRIE.
Prof. Elisson de Andrade
RESULUÇÃO DOS EXERCÍCIOS E
Aula 9 Professores: Conteúdo: Dante Corbucci Filho
Aula 7 Professores: Conteúdo: Dante Corbucci Filho
“Uso do Word para Formatação de Trabalhos Científicos no Padrão ABNT”
Aula 8 Professores: Conteúdo: Dante Corbucci Filho
Aula 10 Professores: Conteúdo: Dante Corbucci Filho
Aula 3 Professores: Conteúdo: Dante Corbucci Filho
Transcrição da apresentação:

Estudo de caso: Seleção de estrutura de dados CHRISTOPHER FREIRE SOUZA EWERTON AMORIM DE OLIVEIRA LUCAS HENRIQUE SILVA

Análise de frequência de palavras Escreva um programa que leia um arquivo, quebre cada linha em palavras, retire pontuação e espaços em branco entre as palavras e as transforme em letras minúsculas. Dica: O módulo string contém uma string chamada whitespace que contém todos os tipos de espaços em branco e uma chamada punctuation, que contém todos os tipos de pontuação. Você pode também considerar utilizar os métodos strip(), replace() e translate(). >>> import string >>> string.punctuation '!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~'

Exercícios Vá no projeto Gutemberg e baixe seu livro preferido no formato texto. Você consegue fazer os exercícios a seguir? A resolução destes itens seguem no conteúdo deste material. Modifique o programa proposto no slide anterior para desconsiderar a primeira linha e fazer a leitura do restante do texto. Modifique o programa para contar o número total de palavras no texto e o número de vezes que cada palavra é usada. Imprima o número de diferentes palavras utilizadas no texto. Compare diferentes livros de diferentes autores. Que autores utilizam vocabulário mais diversificado? Modifique o programa para imprimir as vinte palavras mais utilizadas no texto

Números aleatórios Dadas as mesmas entradas, muitos programas geram a mesma saída toda vez. Estes programas são chamados de determinísticos. Determinismo é normalmente uma coisa boa, desde que nós esperemos que efetuar várias vezes o mesmo cálculo gere sempre os mesmos resultados. No entanto, em muitas aplicações, queremos que o computador seja imprevisível. Um exemplo trivial disso é um jogo, mas existem mais exemplos. Criar programas que não sejam determinísticos normalmente é uma tarefa complicada, mas existem meios de fazer algo próximo disso. Um caminho é utilizar algoritmos que geram números pseudo-aleatórios. Números pseudo-aleatórios são gerados utilizando algoritmos determinísticos.

Números aleatórios O módulo random contém funções que geram números pseudo-aleatórios (chamaremos simplesmente de aleatórios a partir daqui). A função random retorna um número real no intervalo [0,1). Cada vez que você executa a função você tem um número novo a partir de uma longa série. Para ver um exemplo, execute o seguinte código: import random for i in range(10): x = random.random() print(x)

Números aleatórios A função randint recebe dois parâmetros (low e high) e retorna um inteiro entre low e high, incluindo ambos. Para escolher aleatoriamente um elemento de uma lista, utilize a função choice(). >>> random.randint(5, 10) 5 9 >>> t = [1, 2, 3] >>> random.choice(t) 2 3

Exercício Escreva uma função nomeada escolha_a_partir_do_histograma, que recebe como argumento um histograma, como definido na função desenvolvida quando do estudo de dicionários, e retorna um valor aleatório do histograma, escolhido com probabilidade proporcional à frequência. Por exemplo, para este histograma: Sua função deve retornar a com probabilidade 2/3 e retornar b com probabilidade 1/3. >>> t = ['a', 'a', 'b'] >>> hist = histograma(t) >>> hist {'a': 2, 'b': 1}

Histograma de palavras A seguir segue um programa que lê um arquivo e cria um histograma de palavras no arquivo: import string def processa_arquivo(filename): hist = dict() fp = open(filename) for line in fp: processa_linha(line, hist) return hist def processa_linha(line, hist): line = line.replace('-', ' ') for word in line.split(): word = word.strip(string.punctuation + string.whitespace) word = word.lower() hist[word] = hist.get(word, 0) + 1 hist = processa_arquivo('emma.txt')

Histograma de palavras A função processa_arquivo percorre o arquivo de texto, linha a linha, repassando-as para a função processa_linha. processa_linha usa um método de string replace que substitui hifens em espaços antes de usar o método split para quebrar a linha em uma lista de palavras. Ela percorre a lista de palavras para retirar os acentos utilizando o método strip e transformar em minúscula utilizando o método lower. Finalmente, a função processa_arquivo atualiza o histograma criando um novo item ou atualizando um existente. Para contar o número de palavras no arquivo, podemos somar todas as frequências no histograma. def total_palavras(hist): return sum(hist.values())

Histograma de palavras O número de diferentes palavras é justamente o tamanho do histograma. Aqui vai um simples código para imprimir o resultado. def diferentes_palavras(hist): return len(hist) print(‘Número total de palavras:', total_palavras(hist)) print('Número de palavras diferentes:', diferentes_palavras(hist))

Palavras mais comuns Para encontrar as palavras mais comuns, podemos fazer uma lista de tuplas, onde cada tupla contem uma palavra e sua frequência e ordená- la. A função a seguir recebe um histograma como parâmetro e retorna uma lista de tuplas de palavras mais frequentes. Em cada tupla, a frequência aparece primeiro, então a lista resultante é ordenada pela frequência def most_common(hist): t = [] for key, value in hist.items(): t.append((value, key)) t.sort(reverse=True) return t

Palavras mais comuns O programa a seguir imprime as 10 palavras mais comuns: O código pode ser simplificado usando o parâmetro key da função sort. t = most_common(hist) print('The most common words are:') for freq, word in t[:10]: print(word, freq, sep='\t')

Parâmetros opcionais Já vimos funções existentes em Python que recebem argumentos opcionais. É possível criar funções com argumento opcional. Veja um exemplo esta função que imprime as n palavras mais comuns. Se você apenas fornecer um argumento: num obtém o valor padrão (10). Se você fornecer dois argumentos: Ao invés do valor padrão, num obtém o valor passado como argumento (5). Para definir parâmetros opcionais de funções, o Python requisita que os obrigatórios devem ser listados antes como argumentos. def print_most_common(hist, num=10): t = most_common(hist) print('The most common words are:') for freq, word in t[:num]: print(word, freq, sep='\t') print_most_common(hist) print_most_common(hist,5)

Subtração de dicionário Encontrar as palavras do livro que não estão na lista de palavras de words.txt é um problema que você pode encarar como se fosse uma subtração de conjuntos. Ou seja, queremos encontrar as palavras de um conjunto (palavras em um livro) que não estão em outro conjunto (palavras na lista). A função subtrair recebe como argumentos os dicionários d1 e d2 e retorna um dicionário que contém todas as chaves de d1 que não estão em d2. Não estamos preocupados com os valores, então atribuímos None. def subtrair(d1, d2): res = dict() for key in d1: if key not in d2: res[key] = None return res

Subtração de dicionário O programa a seguir compara o histograma criado anteriormente com a lista de palavras. Python tem uma estrutura de dados chamada set que tem várias operações de conjuntos como métodos. words = processa_arquivo('words.txt') diff = subtrair(hist, words) print(“Palavras no livro que não estão na lista de palavras:") for word in diff: print(word, end=' ')

Palavras aleatórias A função a seguir retorna uma palavra aleatória do texto, considerando a probabilidade de cada palavra. def palavra_aleatoria(h): t = [] for palavra, freq in h.items(): t.extend([palavra] * freq) return random.choice(t)