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.

01.import operator
02.import pylab
03.     
04.def le_ficheiro(nome):
05.    f_in = open(nome,'r')
06.    dados = []
07.    linha =  f_in.readline()
08.    while linha !='' and linha != '\n':
09.        pos = linha[:-1].split()
10.        dados.append((int(pos[0]), int(pos[1])))
11.        linha = f_in.readline()
12.         
13.    f_in.close()
14.    return dados
15. 
16.def analisa_frequencias(dados):
17.    frequencias={}
18.    for valor in dados:
19.        frequencias[valor]=frequencias.get(valor,0)+1
20.    # completa
21.    for valor in range(1,13):
22.        frequencias[valor] = frequencias.get(valor,0)
23.    return frequencias
24.            
25. 
26.def visualiza_frequencias(ocorrencias):
27.    """ A partir do dicionário das ocorrências produz o plot
28.    das percentagens.
29.    """
30.    lista_ocorrencias = ocorrencias.items()
31.    lista_ocorrencias.sort(key=operator.itemgetter(0))
32.    total = sum(ocorrencias.values())
33.     
34.    percentagem = [ float(valor[1])/total for valor in lista_ocorrencias]
35.    pylab.ylabel('Percentagem')
36.    pylab.xlabel('Numeros')
37.    xx = range(1,13)
38.    pylab.plot(xx,percentagem, 'r-o')
39.    pylab.show()
40.     
41.     
42.     
43.def main614(ficheiro):
44.    # Leitura dos dados
45.    pares = le_ficheiro(ficheiro)
46.    soma_pares = [sum(par) for par in pares]
47.    # Frequências
48.    frequencias = analisa_frequencias(soma_pares)
49. 
50.    # Visualização de frequências
51.    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