domingo, 15 de novembro de 2009

Problema 6.14

Neste exemplo o que queremos visualizar é a percentagem das ocorrências de somas. Para variar vamos usar o módulo pylab do pacote matplotlib. Vejamos o código.


import operator
import pylab

def le_ficheiro(nome):
f_in = open(nome,'r')
dados = []
linha = f_in.readline()
while linha !='' and linha != '\n':
pos = linha[:-1].split()
dados.append((int(pos[0]), int(pos[1])))
linha = f_in.readline()

f_in.close()
return dados

def analisa_frequencias(dados):
frequencias={}
for valor in dados:
frequencias[valor]=frequencias.get(valor,0)+1
# completa
for valor in range(1,13):
frequencias[valor] = frequencias.get(valor,0)
return frequencias


def visualiza_frequencias(ocorrencias):
""" A partir do dicionário das ocorrências produz o plot
das percentagens.
"""
lista_ocorrencias = ocorrencias.items()
lista_ocorrencias.sort(key=operator.itemgetter(0))
total = sum(ocorrencias.values())

percentagem = [ float(valor[1])/total for valor in lista_ocorrencias]
pylab.ylabel('Percentagem')
pylab.xlabel('Numeros')
xx = range(1,13)
pylab.plot(xx,percentagem, 'r-o')
pylab.show()



def main614(ficheiro):
# Leitura dos dados
pares = le_ficheiro(ficheiro)
soma_pares = [sum(par) for par in pares]
# Frequências
frequencias = analisa_frequencias(soma_pares)

# Visualização de frequências
visualiza_frequencias(frequencias)


Comecemos... pelo fim. O nosso programa principal, main614, divide o problema em tês partes: obtenção dos dados, cálculo das percentagens e visualização. A leitura dos dados no formato de pares por linha já foi visto várias vezes. Usamos listas por compreensão para transformar a lista de pares numa lista de somas de pares. O cálculo das percentagens socorre-se de um dicionário. Como podem existir somas que nunca ocorreram e cuja percentagem será zero, somos obrigados a vertificar esse facto colocando entradas no dicionário (número:0), nessas situações. Delegamos depois no pylab a tarefa de visualizar o resultado. Aqui surge a questão dos dicionários serem colecções não ordenadas de pares chave : valor. Por isso temos que passar tudo para uma lista, que é ordenada por chave. Feito isso, podemos mandar desenhar o gráfico. A imagem ilustra o que é mostrado.


Sem comentários:

Enviar um comentário