Commit dbcd5b0f authored by Jan Luc Tavares's avatar Jan Luc Tavares
Browse files

adicionado programa 'base' para realizar a aquisicao e plot dos dados

parent e9353143
############################### Sobre #################################
# Programa capaz de baixar e graficar dados das EMM.
#
# Por enquanto ele é apenas um exemplo que usa as bibliotecas bokeh e pandas.
# Trocarei provavelmente para matplotlib para exportar direto para png.
#
# TODO: 0. Tornar o código 'importavel' para ser usado pelo codigo principal do bot.
# 1. (C) Graficar direto para uma imagem.
# 2.(D) Realizar a conversao do CSV diretamente atraves da utilizacao da
# biblioteca Pandas.
#
#
import requests
from bokeh.plotting import figure, output_file, show
#from bokeh.io import export_png, export_svgs
from bokeh.models import DatetimeTickFormatter
import pandas as pd
def coleta(estacao):
'''
Faz download de todos os dados da EMM determinada pelo numero inteiro 'estacao'.
Retorna lista e dataframe do pandas.
A lista contem o cabecalho do arquivo CSV baixado, representando cada tipo de dado que a EMM envia.
O dataframe do Pandas contem todos os dados obtidos e os dados de tempo sao convertidos para serem lidos pelo programa.
'''
endereco = 'http://dados.cta.if.ufrgs.br/emm/api/get/csv/rawsensordata/' + str(estacao)
rawData = requests.get(endereco)
rawData = rawData.text
# Com isso, obtivemos o conteúdo COMPLETO dos dados de uma estacao.
#######################################################################
# Abaixo pegaremos esses dados e construiremos um dicionario com chaves
# determinadas pela primeira linha do .CSV e listas contendo as colunas
# do arquivo em sequencia.
#
# Acabo de descobrir que poderia ter feito um trabalho mais elegante ao
# usar a biblioteca "Pandas".
lines = rawData.split("\n")
tipos = lines[0].split(";")
dados = {}
j=0
for tipo in tipos:
sensor=[]
for i in range(1,len(lines) - 1):
sensor.append(lines[i].split(";")[j])
j = j + 1
dados[tipo] = sensor
#######################################################################
############### Convertendo os dados para um dataframe do pandas
dataf = pd.DataFrame(dados)
dataf[tipos[0]] = pd.to_datetime(dataf[tipos[0]], format="%Y-%m-%d %H:%M:%S")
return tipos, dataf
tipos, dataf = coleta(2)
sensor = 1 # Este numero determina qual será o sensor que escolhemos. Na ordem de aparicao no .CSV
#######################################################################
################ Graficando os dados obtidos ##########################
colors = ["Blue", "DarkOliveGreen", "BlueViolet", "Brown", "CadetBlue", "Coral"]
output_file("./parametros.html")
p = figure(title="Dados das EMM", x_axis_label="data", y_axis_label="valores")
p.line(dataf[tipos[0]],dataf[tipos[sensor]], legend=(tipos[sensor]), line_width=2, line_color = colors[3])
p.xaxis.formatter=DatetimeTickFormatter(
hours=["%d %b %Y - %k:%M"],
days=["%d %b %Y - %k:%M"],
months=["%d %b %Y - %k:%M"],
years=["%d %b %Y - %k:%M"],
)
################
# Exportando png e svg ainda nao funciona, pois retorna:
# "RuntimeError: PhantomJS is not present in PATH..."
# REF: http://bokeh.pydata.org/en/latest/docs/user_guide/export.html
#
#export_png(p, filename="plot.png")
#
#p.output_backend = "svg"
#export_svgs(p, filename="plot.svg")
show(p)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment