In [155]:
#!/usr/bin/env python
#-*- encoding:utf-8 -*-
"""
Created on Tue Fev 23 18:20:56 2016
@author: hans zimermann
"""
import os
import ftplib
import subprocess
import pandas as pd
import matplotlib
matplotlib.use('Agg')
#matplotlib.rcParams['font.family'] = 'sans-serif'
#matplotlib.rcParams['font.sans-serif'] = ['Tahoma']#,'Bitstream Vera Sans','Lucida Grande','Verdana']
#matplotlib.rcParams['lines.linewidth'] = 2
#matplotlib.rcParams['figure.max_num_figures'] = 30
import matplotlib.pyplot as plt
import time
import datetime
#print(matplotlib.__version__ )
#print(plt.style.available)
matplotlib.style.use('ggplot')
#plt.style.use('ggplot')
#print(plt.__file__)
%matplotlib inline
plt.figure(figsize=(18,12))
Out[155]:
In [156]:
def graficos(df,prefix,var,namevar,varunit):
#-*- encoding:utf-8 -*-
## Grafico do DataFrame Inteiro
#plt.plot(df[['Valor.20','Valor.21']])
print("Gerando grafico:-> "+var)
static_dir="./graficos/"
plt.figure(figsize=(18,12))
if var == 'Chuva':
namevar = u"BNS01 - %s Acumulado" % (namevar)
chuva = df['Chuva'].resample('D', how='sum')
chuva *= 10e-4
#rainD['ACUM'] = df[['Chuva']].cumsum()
#print(rainD)
acumulado = chuva.cumsum()
chuva.plot()
acumulado.plot(title=namevar)
plt.ylabel('mm')
else:
#print("Gerando grafico: %s | %s | %s | %s" %(prefix,var,namevar,varunit))
namevar = u"BNS01 - %s" % (namevar)
df[[var]].plot(title=namevar)
plt.ylabel(varunit)
namefig = "%s%s_%s.png" % (static_dir,prefix,var)
plt.savefig(namefig)
plt.show()
return
In [157]:
def graficos2(df,prefix,var,namevar,varunit):
%matplotlib inline
#-*- encoding:utf-8 -*-
## Grafico do DataFrame Inteiro
#plt.plot(df[['Valor.20','Valor.21']])
print("#Gerando grafico:-> "+var)
static_dir="../graficos/"
plt.figure(figsize=(18,12))
if var == 'Chuva':
print('namevar = "BNS01 - %s Acumulado"' % (namevar))
print('chuva = ndf[\'Chuva\'].resample(\'D\', how=\'sum\')')
print('chuva *= 10e-4')
print('acumulado = chuva.cumsum()')
print('chuva.plot()')
print('acumulado.plot(title=namevar)')
print('plt.ylabel(\'mm\')')
print('\n')
else:
#print("Gerando grafico: %s | %s | %s | %s" %(prefix,var,namevar,varunit))
print('namevar = "BNS01 - %s"' % (namevar))
print('ndf[[\'%s\']].plot(title=namevar)'%(var))
print('plt.ylabel(\'%s\')' % (varunit))
print('namefig = "%s%s_%s.png"' % (static_dir,prefix,var))
print('#plt.savefig(namefig)')
print('plt.show()')
print("\n")
return
In [158]:
# Variaveis acessorias
appdir="/home/nitrous/code/pyscripts/bns/"
dados_file = ''
In [159]:
# Baixando arquivo fonte
DATAFILE = 'bns01.csv'
data_host = 'http://micrometeorologia.org/incomming/'
cmdout = subprocess.call("wget -c {dhost}{dfile}".format(dfile=DATAFILE, dhost=data_host), shell=True)
In [160]:
#DATAFILE = "bns01_%s-%s.csv" % (ano, mes) #Arquivo gerado no ecologger
# Lendo arquivos de entrada
df = pd.read_csv(DATAFILE, parse_dates=True, sep=',', header=0, index_col='DATA')
print("\n Datafile Carregado...\n")
In [161]:
colunas = list(df.PA.unique()) #padrao de saida eh array, entao tranformo para lista para iterar
# Comandos para criar um dataframe para cada parametro como nome das colunas jah renomeadas
# Alternativa um pouco mais rapido print(list(set(df.PA)))
print(colunas)
In [162]:
# Iterando sobre cada parametro e efetuando um join para gerar um data frame final
ndf = df[[]]
for par in colunas:
daf = 'df_'+par
daf = [[]]
daf = df[df.PA == par ]
daf.rename(columns={'MEDIA':par,'QT_MEVAL_MIN':par+'_min','QT_MEVAL_MAX':par+'_max'}, inplace=True);
#df = df.join(daf(columns))
ndf = ndf.join(daf[[par,par+'_min',par+'_max']])
print("pronto")
In [163]:
# Exportando para um arquivo .csv
version = datetime.datetime.now()
data = datetime.date.today()
ano = data.year
mes = data.month
dia = data.day
odatafile = "bns_%s-%s.csv" % (ano, mes)
dados_file = odatafile
osvdatafile = "bns_%s-%s-osvaldo.csv" % (ano, mes)
ndf.to_csv(odatafile, parse_dates=True)
print(' Arquivo: {0}'.format(odatafile))
dfo = ndf.copy()
#del(dfo['index'])
dfo.index = df.index.dayofyear + df.index.hour + df.index.minute
dfo.to_csv(osvdatafile,parse_dates=True)
print(' Arquivo: {0}'.format(osvdatafile))
print( " OK\n")
outputxlsx = "bns_%s-%s.xlsx" % (ano, mes)
Sheet1 = "bns_%s-%s" % (ano, mes)
#version = datetime.date.today().strftime("%Y-%m")
#version = data
In [164]:
def doftp(local_dir, remote_dir, filename):
os.chdir(local_dir)
#filename = "teste.txt"
host = 'web1223.opentransfer.com'
user = 'dados'
password = 'Dados1000'
print("\n Efetuando FTP...")
ftp = ftplib.FTP(host)
ftp.login(user, password)
ftp.cwd(remote_dir)
ftp.storbinary('STOR ' + filename, open(filename,'rb'), 1024)
ftp.quit()
#return "%s - FTP OK\n" % (filename)
return
In [167]:
def gera_html():
print('...gera.html...')
global appdir
versao = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
last_line = subprocess.getoutput('tail -1 bns01.csv | cut -d"," -f1')
static_dir="./graficos/"
os.chdir(static_dir)
cwd = os.getcwd()
vnpath = 'http://www.dadosatmosfericos.com/static/images/graficos/'
#vnpath = 'http://50.6.254.86/da/'
HTML = ('index.html')
owl = ('owl.html')
thb = ('thb.html')
title = "Graficos - BNS01 - UTERG" # Alterar para o titulo do site
ficheiro = open(HTML,"w")
ficheiro.write("<html><head><meta http-equiv='refresh' content='30'><base href='http://www.dadosatmosfericos.com/uterg/graficos/'><title>"+title+"</title></head><body>")
ficheiro.write("<h1>%s </h1><i class='fi-loop'> </i><small> Atualizado em - <i>%s</i> UTC" % (title,versao))
ficheiro.write("<br><i class='fi-rss'> </i>Ultimo envio de dados - <i> %s </i> LTC</small><hr> <center>" % last_line)
ficheiro.write('<div id="anchor_top" class="stacked-for-small button-group">')
# Gerando a lista de botoes
for arquivo in os.listdir(cwd):
if arquivo.endswith('.png'):
#print("Escrevendo link: "+arquivo)
ficheiro.write('<a href="#%s" class="button">%s</a>' % (arquivo[11:-4], arquivo[11:-4]) )
ficheiro.write('</div>')
ficheiro.write("<hr><center>")
fowl = open(owl,"w")
fthb = open(thb,"w")
for arquivo in os.listdir(cwd):
if arquivo.endswith('.png'):
#print('<a href="%s"><img src="%s"/></a><br/>' % (arquivo,arquivo))
#doftp(appdir+'graf/','graf/',arquivo)
ficheiro.write('<img id="%s" src="%s%s"/><br><a href="#anchor_top"><button class="hollow button success" href="#anchor_top">Voltar ao Topo</button></a> <hr>' % (arquivo[11:-4], vnpath, arquivo))
ficheiro.write('')
fowl.write('<div class="item"><img src="http://www.dadosatmosfericos.com/static/images/graficos/%s" /></div>' % arquivo)
fthb.write('<div class="column"><a data-toggle="%s"><img class="thumbnail s550" src="http://www.dadosatmosfericos.com/static/images/graficos/%s"></a>' % (arquivo[:-5],arquivo))
fthb.write('<div class="full reveal" id="%s" data-reveal><p>%s</p><img src="http://www.dadosatmosfericos.com/static/images/graficos/%s" alt="%s"> <button class="close-button" data-close aria-label="Close reveal" type="button"><span aria-hidden="true">×</span></button></div></div>' % (arquivo[:-5],arquivo,arquivo,arquivo))
ficheiro.write("</center></body></html>")
ficheiro.close()
fowl.close()
fthb.close()
return
In [168]:
#@todo Criar dicionario com o Parametro sendo a chave
Sheet1 = "bns_%s-%s" % (ano, mes)
param = {'MPT':('Analisador de Partículas Totais','MPT','mg/m³'), 'MP10':('Analisador de Particulas Inalaveis','MP10','mg/m³'),'CO':('Analisador de Monóxido de Carbono','CO','ppm'), 'NO':('Analisador de Óxidos de Nitrogênio','NO','ppm'),'NO2':('Analisador de Óxidos de Nitrogênio','NO2','ppm'),'NOx':('Analisador de Óxidos de Nitrogênio','NOx','ppm'),'O3':('Analisador de Ozônio','O3','ppm'),'SO2':('Analisador de Dióxido de Enxofre','SO2','ppm'),'CH4':('Analisador de Hidrocarbonetos','CH4','ppm'),'HCT':('Analisador de Hidrocarbonetos','HCT','ppm'),'HCnM':('Analisador de Hidrocarbonetos','HCnM','ppm'),'DVE':('Direção do Vento','DVE','Graus'), 'Pres.Atm.':('Pressão Atmosférica','Pres.Atm.','mbar'),'Rad.':('Radiação Solar','Rad.','W/m²'),'Temp.':('Temperatura do Ar','Temp.','°C'), 'Temp.Int.':('Temperatura Interna Estação','Temp.Int.','°C'),'Umidade':('Umidade Relativa','Umidade','%'),'VVE':('Velocidade do Vento','VVE','m/s'), 'Chuva':( 'Precipitação Pluviométrica','Chuva','mm'),'Fin':('Suprimento de Energia','Fin','Hz'),'Vin':('Suprimento de Energia','Vin','V'),'Vout':('Suprimento de Energia ','Vout','V')}
# Automatizando a criacao dos graficos
for i, c in enumerate (colunas):
# c e param[c][1] representam a mesma coisa (sigla da variável) [var]
#print('ndf', Sheet1 , param[c][1], param[c][0] , param[c][2])
#(df , prefix , var , namevar , varunit)
# ndf , bns_2016-2, Chuva , Precipitação Pluviométrica, mm
graficos(ndf, Sheet1 , param[c][1], param[c][0] , param[c][2])
gera_html()
# GErando texto para alteração de graficos individuais
for i, c in enumerate (colunas):
graficos2(ndf,Sheet1,param[c][1],param[c][0],param[c][2])
#appdir = '/home/nitrous/code/mysite/templates/'
#cmdout = subprocess.call("sudo mv index.html %sbns_graficos.html"%(appdir), shell=True)
#cmdout = subprocess.call("sudo mv owl.html %sbns_owl.html"%(appdir), shell=True)
#cmdout = subprocess.call("sudo mv thb.html %sthb_uterg.html"%(appdir), shell=True)
#data_path = '/home/nitrous/code/mysite/static/tmp/'
#cmdout = subprocess.call("sudo mv bns_2016-2.csv %sbns_2016-2.csv" % (data_path), shell=True)
for a in ['bns_graficos.html','bns_owl.html','thb_uterg.html']:
pass #doftp(local_dir, remote_dir, a)
print(10*'=' + ' Finalizado \n')
In [169]:
#Gerando grafico:-> Chuva
namevar = "BNS01 - Precipitação Pluviométrica Acumulado"
chuva = ndf['Chuva'].resample('D', how='sum')
chuva *= 10e-4
acumulado = chuva.cumsum()
acumulado.plot(title=namevar)
chuva.plot(legend=True)
plt.ylabel('mm')
Out[169]:
In [170]:
#Gerando grafico:-> Chuva
namevar = "BNS01 - Hietograma de Precipitação"
chuva = ndf['Chuva'].resample('D', how='sum')
chuva *= 10e-4
chuva.plot(kind='hist', orientation='vertical', alpha=.75,legend=True,title=namevar)
plt.ylabel('mm')
plt.xlabel(u'ocorrência')
Out[170]:
In [180]:
#Gerando grafico:-> Chuva
namevar = "BNS01 - Precipitação Pluviométrica Acumulado"
chuva = ndf['Chuva'].resample('D', how='sum') # Acumulado de chuva no dia
chuva *= 10e-4
acumulado = chuva.cumsum() # Acumulado de chuva no período inteiro do dataset
#-----
#fig, ax1 = plt.subplots()
plt.figure(figsize=(16,8))
#ax1 = plt.subplot(2,1,1)
ax1 = plt.subplot()
ax1.set_title(namevar)
ax1.set_xlabel("Data")
ax1.set_ylabel("mm - Diario",color='b')
ax1.plot(chuva,color='b', )
#x = int(len(chuva))
#width = 0.25
#height = 24.0
#ax1.bar(x, chuva, width)
ax2 = ax1.twinx() # Compartilhar o mesmo eixo x
ax2.set_xlabel("Data")
ax2.set_ylabel("mm - Mensal", color='r')
ax2.plot(acumulado, color='r',linestyle='-.')
plt.show()
In [ ]:
#Gerando grafico:-> VVE
namevar = "BNS01 - Velocidade do Vento"
ndf.VVE.plot(title=namevar)
plt.ylabel('m/s')
namefig = "../graficos/bns_2016-2_VVE.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> DVE
namevar = "BNS01 - Direção do Vento"
ndf.DVE.plot(title=namevar)
plt.ylabel('Graus')
namefig = "../graficos/bns_2016-2_DVE.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:->
namevar = "BNS01 - Temperatura do Ar"
ndf[['Temp.']].plot(title=namevar)
plt.ylabel('°C')
namefig = "../graficos/bns_2016-2_Temp..png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> Umidade
namevar = "BNS01 - Umidade Relativa"
ndf.Umidade.plot(title=namevar)
plt.ylabel('%')
namefig = "../graficos/bns_2016-2_Umidade.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> Rad.
namevar = "BNS01 - Radiação Solar"
ndf[['Rad.']].plot(title=namevar)
plt.ylabel('W/m²')
namefig = "../graficos/bns_2016-2_Rad..png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> Pres.Atm.
namevar = "BNS01 - Pressão Atmosférica"
ndf[['Pres.Atm.']].plot(title=namevar)
plt.ylabel('mbar')
namefig = "../graficos/bns_2016-2_Pres.Atm..png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> Temp.Int.
namevar = "BNS01 - Temperatura Interna Estação"
ndf[['Temp.Int.']].plot(title=namevar)
plt.ylabel('°C')
namefig = "../graficos/bns_2016-2_Temp.Int..png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> CH4
namevar = "BNS01 - Analisador de Hidrocarbonetos"
ndf.CH4.plot(title=namevar)
plt.ylabel('ppm')
namefig = "../graficos/bns_2016-2_CH4.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> HCnM
namevar = "BNS01 - Analisador de Hidrocarbonetos"
ndf.HCnM.plot(title=namevar)
plt.ylabel('ppm')
namefig = "../graficos/bns_2016-2_HCnM.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> HCT
namevar = "BNS01 - Analisador de Hidrocarbonetos"
ndf.HCT.plot(title=namevar)
plt.ylabel('ppm')
namefig = "../graficos/bns_2016-2_HCT.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> SO2
namevar = "BNS01 - Analisador de Dióxido de Enxofre"
ndf.SO2.plot(title=namevar)
plt.ylabel('ppm')
namefig = "../graficos/bns_2016-2_SO2.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> O3
namevar = "BNS01 - Analisador de Ozônio"
ndf.O3.plot(title=namevar)
plt.ylabel('ppm')
namefig = "../graficos/bns_2016-2_O3.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> NO
namevar = "BNS01 - Analisador de Óxidos de Nitrogênio"
ndf.NO.plot(title=namevar)
plt.ylabel('ppm')
namefig = "../graficos/bns_2016-2_NO.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> NO2
namevar = "BNS01 - Analisador de Óxidos de Nitrogênio"
ndf.NO2.plot(title=namevar)
plt.ylabel('ppm')
namefig = "../graficos/bns_2016-2_NO2.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> NOx
namevar = "BNS01 - Analisador de Óxidos de Nitrogênio"
ndf.NOx.plot(title=namevar)
plt.ylabel('ppm')
namefig = "../graficos/bns_2016-2_NOx.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> CO
namevar = "BNS01 - Analisador de Monóxido de Carbono"
ndf.CO.plot(title=namevar)
plt.ylabel('ppm')
namefig = "../graficos/bns_2016-2_CO.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> Vin
namevar = "BNS01 - Suprimento de Energia"
ndf.Vin.plot(title=namevar)
plt.ylabel('V')
namefig = "../graficos/bns_2016-2_Vin.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> Vout
namevar = "BNS01 - Suprimento de Energia "
ndf.Vout.plot(title=namevar)
plt.ylabel('V')
namefig = "../graficos/bns_2016-2_Vout.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> Fin
namevar = "BNS01 - Suprimento de Energia"
ndf.Fin.plot(title=namevar)
plt.ylabel('Hz')
namefig = "../graficos/bns_2016-2_Fin.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> MP10
namevar = "BNS01 - Analisador de Particulas Inalaveis"
ndf.MP10.plot(title=namevar)
plt.ylabel('mg/m³')
namefig = "../graficos/bns_2016-2_MP10.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> MPT
plt.figure(figsize=(14,6))
namevar = "BNS01 - Analisador de Partículas Totais"
ndf.MPT.plot(title=namevar)
plt.ylabel('mg/m³')
namefig = "../graficos/bns_2016-2_MPT.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
#Gerando grafico:-> MPT
plt.figure(figsize=(14,6))
namevar = "BNS01 - Analisador de Partículas Totais + PM10"
ndf.MPT[ndf.MPT < .9].plot(title=namevar)
ndf.MP10[ndf.MP10 < .9].plot()
plt.ylabel('mg/m³')
#namefig = "../graficos/bns_2016-2_MPT.png"
#plt.savefig(namefig)
plt.show()
In [ ]:
ndf.describe()
In [ ]: