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