Módulo Plotadora
Expandir código fonte
import csv
from datetime import date, datetime
from babel.dates import format_date
from matplotlib import pyplot as plt
class Plotadora:
"""Leia arquivos CSV, gere gráficos e salve em arquivos de imagem."""
def __init__(self):
"""
Método construtor da classe Plotadora. Não requer parâmetros.
Apenas inicializa a data atual e uma versão em português
contendo o dia e o nome do mês por extenso.
"""
self.hoje = date(
datetime.now().year, datetime.now().month, datetime.now().day
)
self.hoje_pt = format_date(self.hoje, "d 'de' MMMM", locale='pt_BR')
def abrir_csv(self, lista_cidades):
"""
Leia o arquivo CSV e grave os dados no objeto.
Deve ser usado após o método exportar da classe Tratadora.
Os dados lidos são gravados diretamente nas propriedades x, y_min,
y_max e chuva de cada objeto da lista recebida como parâmetro.
:param lista_cidades: Lista de objetos da classe Cidade
"""
for c in lista_cidades:
try:
f = open(c.saida_csv, 'r')
except FileNotFoundError:
print(' [plotadora.abrir_csv] Arquivo csv não foi encontrado')
except IOError:
print(' [plotadora.abrir_csv] Erro de entrada e saída')
except Exception as e:
print(' [plotadora.abrir_csv] ' + str(e))
else:
with f:
plot = csv.reader(f)
for li, linha in enumerate(plot):
if li == 0:
continue
c.x.append(linha[0] + '\n' + linha[1].split('/')[0])
c.y_max.append(float(linha[2]))
c.y_min.append(float(linha[3]))
c.chuva.append(float(linha[4]))
def plotar(self, lista_cidades, chuva, estilo):
"""
Gere os gráficos, salve os arquivos no sistema local e exiba-os.
Este método passa pelas cidades passadas como parâmetro, gera
cada gráfico e exibe-o na tela usando o visualizador do matplotlib.
Deve ser usado após o método abrir_csv.
:param lista_cidades: Lista de objetos da classe Cidade
:param chuva: True para incluir dados de chuva ou False para excluir
:param estilo: estilo do gráfico. Para estilos disponíveis, ver a
documentação da biblioteca matplotlib
"""
for c in lista_cidades:
try:
if len(c.semana) > 1:
print(' [plotadora.plotar] Plotando ' + c.nome_extenso +
' com ' + str(len(c.semana)) + ' linhas em ' +
c.saida_plot)
plt.style.use(estilo)
plt.plot(c.x, c.y_max,
color='orange',
label='temp. máx (°C)',
linestyle='-')
plt.plot(c.x, c.y_min,
color='teal',
label='temp. min (°C)',
linestyle='-')
if chuva:
plt.plot(c.x, c.chuva,
color='steelblue',
label='prob. chuva (%)',
linestyle='-')
plt.xlabel('')
plt.legend()
plt.title(
'Previsão para ' + self.hoje_pt + ' em ' +
c.nome_extenso)
if chuva:
plt.savefig(c.saida_plot_chuva)
else:
plt.savefig(c.saida_plot)
plt.show()
else:
print(' [plotadora.plotar] Dados insuficientes para ' +
c.nome + ' com apenas ' + str(len(c.semana))
+ ' linhas')
except AttributeError:
print(' [plotadora.plotar] AttributeError: '
'O arquivo CSV para ' + c.nome + ' foi gerado?')
except Exception as e:
print(' [plotadora.plotar] ' + str(e))
Classes
class Plotadora
-
Leia arquivos CSV, gere gráficos e salve em arquivos de imagem.
O método construtor desta classe não requer parâmetros. Apenas inicializa a data atual e uma versão em português contendo o dia e o nome do mês por extenso.
Expandir código fonte
class Plotadora: """Leia arquivos CSV, gere gráficos e salve em arquivos de imagem.""" def __init__(self): """ Método construtor da classe Plotadora. Não requer parâmetros. Apenas inicializa a data atual e uma versão em português contendo o dia e o nome do mês por extenso. """ self.hoje = date( datetime.now().year, datetime.now().month, datetime.now().day ) self.hoje_pt = format_date(self.hoje, "d 'de' MMMM", locale='pt_BR') def abrir_csv(self, lista_cidades): """ Leia o arquivo CSV e grave os dados no objeto. Deve ser usado após o método exportar da classe Tratadora. Os dados lidos são gravados diretamente nas propriedades x, y_min, y_max e chuva de cada objeto da lista recebida como parâmetro. :param lista_cidades: Lista de objetos da classe Cidade """ for c in lista_cidades: try: f = open(c.saida_csv, 'r') except FileNotFoundError: print(' [plotadora.abrir_csv] Arquivo csv não foi encontrado') except IOError: print(' [plotadora.abrir_csv] Erro de entrada e saída') except Exception as e: print(' [plotadora.abrir_csv] ' + str(e)) else: with f: plot = csv.reader(f) for li, linha in enumerate(plot): if li == 0: continue c.x.append(linha[0] + '\n' + linha[1].split('/')[0]) c.y_max.append(float(linha[2])) c.y_min.append(float(linha[3])) c.chuva.append(float(linha[4])) def plotar(self, lista_cidades, chuva, estilo): """ Gere os gráficos, salve os arquivos no sistema local e exiba-os. Este método passa pelas cidades passadas como parâmetro, gera cada gráfico e exibe-o na tela usando o visualizador do matplotlib. Deve ser usado após o método abrir_csv. :param lista_cidades: Lista de objetos da classe Cidade :param chuva: True para incluir dados de chuva ou False para excluir :param estilo: estilo do gráfico. Para estilos disponíveis, ver a documentação da biblioteca matplotlib """ for c in lista_cidades: try: if len(c.semana) > 1: print(' [plotadora.plotar] Plotando ' + c.nome_extenso + ' com ' + str(len(c.semana)) + ' linhas em ' + c.saida_plot) plt.style.use(estilo) plt.plot(c.x, c.y_max, color='orange', label='temp. máx (°C)', linestyle='-') plt.plot(c.x, c.y_min, color='teal', label='temp. min (°C)', linestyle='-') if chuva: plt.plot(c.x, c.chuva, color='steelblue', label='prob. chuva (%)', linestyle='-') plt.xlabel('') plt.legend() plt.title( 'Previsão para ' + self.hoje_pt + ' em ' + c.nome_extenso) if chuva: plt.savefig(c.saida_plot_chuva) else: plt.savefig(c.saida_plot) plt.show() else: print(' [plotadora.plotar] Dados insuficientes para ' + c.nome + ' com apenas ' + str(len(c.semana)) + ' linhas') except AttributeError: print(' [plotadora.plotar] AttributeError: ' 'O arquivo CSV para ' + c.nome + ' foi gerado?') except Exception as e: print(' [plotadora.plotar] ' + str(e))
Métodos
def abrir_csv(self, lista_cidades)
-
Leia o arquivo CSV e grave os dados no objeto.
Deve ser usado após o método exportar da classe Tratadora.
Os dados lidos são gravados diretamente nas propriedades x, y_min, y_max e chuva de cada objeto da lista recebida como parâmetro.
parâmetro nome
-
lista com objetos da classe Cidade
Expandir código fonte
def abrir_csv(self, lista_cidades): """ Leia o arquivo CSV e grave os dados no objeto. Deve ser usado após o método exportar da classe Tratadora. Os dados lidos são gravados diretamente nas propriedades x, y_min, y_max e chuva de cada objeto da lista recebida como parâmetro. :param lista_cidades: Lista de objetos da classe Cidade """ for c in lista_cidades: try: f = open(c.saida_csv, 'r') except FileNotFoundError: print(' [plotadora.abrir_csv] Arquivo csv não foi encontrado') except IOError: print(' [plotadora.abrir_csv] Erro de entrada e saída') except Exception as e: print(' [plotadora.abrir_csv] ' + str(e)) else: with f: plot = csv.reader(f) for li, linha in enumerate(plot): if li == 0: continue c.x.append(linha[0] + '\n' + linha[1].split('/')[0]) c.y_max.append(float(linha[2])) c.y_min.append(float(linha[3])) c.chuva.append(float(linha[4]))
def plotar(self, lista_cidades, chuva, estilo)
-
Gere os gráficos, salve os arquivos no sistema local e exiba-os.
Este método passa pelas cidades passadas como parâmetro, gera cada gráfico e exibe-o na tela usando o visualizador do matplotlib.
Deve ser usado após o método abrir_csv.
-
parâmetro nome
-
lista com objetos da classe Cidade
-
parâmetro chuva
-
True para incluir dados de chuva ou False para excluir
-
parâmetro estilo
-
estilo do gráfico. Para estilos disponíveis, ver a documentação da biblioteca matplotlib
Expandir código fonte
def plotar(self, lista_cidades, chuva, estilo): """ Gere os gráficos, salve os arquivos no sistema local e exiba-os. Este método passa pelas cidades passadas como parâmetro, gera cada gráfico e exibe-o na tela usando o visualizador do matplotlib. Deve ser usado após o método abrir_csv. :param lista_cidades: Lista de objetos da classe Cidade :param chuva: True para incluir dados de chuva ou False para excluir :param estilo: estilo do gráfico. Para estilos disponíveis, ver a documentação da biblioteca matplotlib """ for c in lista_cidades: try: if len(c.semana) > 1: print(' [plotadora.plotar] Plotando ' + c.nome_extenso + ' com ' + str(len(c.semana)) + ' linhas em ' + c.saida_plot) plt.style.use(estilo) plt.plot(c.x, c.y_max, color='orange', label='temp. máx (°C)', linestyle='-') plt.plot(c.x, c.y_min, color='teal', label='temp. min (°C)', linestyle='-') if chuva: plt.plot(c.x, c.chuva, color='steelblue', label='prob. chuva (%)', linestyle='-') plt.xlabel('') plt.legend() plt.title( 'Previsão para ' + self.hoje_pt + ' em ' + c.nome_extenso) if chuva: plt.savefig(c.saida_plot_chuva) else: plt.savefig(c.saida_plot) plt.show() else: print(' [plotadora.plotar] Dados insuficientes para ' + c.nome + ' com apenas ' + str(len(c.semana)) + ' linhas') except AttributeError: print(' [plotadora.plotar] AttributeError: ' 'O arquivo CSV para ' + c.nome + ' foi gerado?') except Exception as e: print(' [plotadora.plotar] ' + str(e))
-