Commit d3a3c1a7 authored by Rafael Pezzi's avatar Rafael Pezzi
Browse files

Incluido programa de visualização das series temporais e estatísticas básicas

       Esboçado	algoritmo de simulação por Monte Carlo
       (para ilustrar teorema do limite central)

	new file:   graficos/estatisticas.py
parent 3bd71040
# -*- coding:utf-8 -*-
# Programa de visualização de dados meteorológicos coletados pela estação
# Meteorolog do Centro de Tecnologia Acadêmica
# Dados no formato DataHora Temperatura Umidade_do_Ar Solo Pressão Luminosidade
# DataHora no formato AAAAMMDDHHmmSS onde
# AAAA = Ano
# MM = Mês
# DD = Dia
# HH = Hora
# mm = Minuto
# ss = Segundo
# Mais informações:
# http://cta.if.ufrgs.br/projects/estacao-meteorologica-modular/wiki/Meteorolog
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import random as random
import sys
# Armazena os dados coletados em vetores unidimensionais
data, temp, u_ar, u_solo, pressao, lum = np.loadtxt(sys.argv[1], unpack=True,
converters={ 0: mdates.strpdate2num('%Y%m%d%H%M%S')})
## Seria util incluir um algoritmo de filtragem para remover pontos expurios
## observados em algumas partes por mil medidas de temperatura
# Determina o numero de amostras
amostras = len(data)
print "Série com "+str(amostras)+" amostras"
## Análise da temperatura
T_min=min(temp)
T_max=max(temp)
T_med=sum(temp)/amostras
print "Temperatura (oC)\n \t min: "+str(T_min)+"\t max: "+str(T_max)+"\t média: "+ str(T_med)
## Análise da umidade relativa do Ar
U_ar_min=min(u_ar)
U_ar_max=max(u_ar)
U_ar_med=sum(u_ar)/amostras
print "\nUmidade Relativa do Ar (%)\n \t min: "+str(U_ar_min)+"\t max: "+str(U_ar_max)+"\t média: "+ str(U_ar_med)
# Análise da pressão atomsférica
print "\nPressão (Pa)\n \t min: "+str(min(pressao))+"\t max: "+str(max(pressao))+"\t média: "+ str(sum(pressao)/amostras)+"\n"
#Outro atalho para calcular as maximas e minimas
#print temp.max(), u_ar.max(), pressao.max()
#print temp.min(), u_ar.min(), pressao.min()
#print temp.mean(), u_ar.mean(), pressao.mean()
#print temp.std(), u_ar.std(), pressao.std()
# Apresentação de histrograma:
# Temperatura
plt.figure() # Cria nova figura
plt.ylabel(u"Número de eventos")
plt.xlabel(u"Temperatura (°C)")
plt.hist(temp,bins=25)
#Inclui texto com média e desvio padrão
plt.text(plt.xlim()[0]+0.5,0.9*plt.ylim()[1],u"Média: "+str("%.2f" % temp.mean())+u"°C\nDesvio Padrão: "+str("%.2f" % temp.std())+u"°C")
plt.grid(True)
# Apresentação de histrograma:
# Umidade Rel. do Ar
plt.figure()
plt.ylabel(u"Número de eventos")
plt.xlabel("Umidade Relativa (%)")
plt.hist(u_ar,bins=range(26,100,2))
plt.text(plt.xlim()[0]+1,0.9*plt.ylim()[1],u"Média: "+str("%.2f" % u_ar.mean())+u" %\nDesvio Padrão: "+str("%.2f" % u_ar.std())+" %")
plt.grid(True)
# Apresentação de histrograma:
# Pressão
plt.figure()
plt.ylabel(u"Número de eventos")
plt.xlabel(u"Pressão atmosférica (Pa)")
plt.hist(pressao,bins=25)
plt.text(1.001*plt.xlim()[0],0.9*plt.ylim()[1],u"Média: "+str("%.2f" % pressao.mean())+u" Pa\nDesvio Padrão: "+str("%.2f" % pressao.std())+" Pa")
plt.grid(True)
# Apresentação de histrograma:
# Luminosidade
plt.figure()
plt.ylabel(u"Número de eventos")
plt.xlabel(u"Luminosidade (u.a.)")
plt.hist(lum,bins=25)
plt.text(1*plt.xlim()[0]+60,0.9*plt.ylim()[1],u"Média: "+str("%.2f" % lum.mean())+u"\nDesvio Padrão: "+str("%.2f" % lum.std())+" ")
plt.grid(True)
## Apresentação das series temporais de medidas
# Temperatura
plt.figure()
# Gira o texto do eixo temporal
plt.xticks(rotation=70)
plt.plot_date(x=data, y=temp, fmt="r.")
# Define os limites temporais do gráfico
# útil para evitar escalas exageradas devido a dadas incorretas - ocorreu na estação sem relógio
plt.xlim(data[0], data[len(data)-1])
plt.ylabel("Temperatura (C)")
plt.grid(True)
# Altera as margens para a margem inferior comportar a data
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.2)
# Umidade Relativa do Ar
plt.figure()
plt.xticks(rotation=70)
plt.plot_date(x=data, y=u_ar, fmt="r.")
plt.xlim(data[0], data[len(data)-1])
plt.ylabel("Umidade relativa do ar (%)")
plt.grid(True)
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.2)
'''
# Condutividade do solo
plt.figure()
plt.xticks(rotation=70)
plt.plot_date(x=data, y=u_solo, fmt="r.")
plt.xlim(data[0], data[len(data)-1])
plt.ylabel("Umidade do solo (u.a.)")
plt.grid(True)
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.2)
'''
# Pressão
plt.figure()
plt.xticks(rotation=70)
plt.plot_date(x=data, y=pressao, fmt="r.")
plt.xlim(data[0], data[len(data)-1])
plt.ylabel(u"Pressão atmosférica (Pa)")
plt.grid(True)
plt.subplots_adjust(left=0.13, right=0.9, top=0.9, bottom=0.2)
# Luminosidade
plt.figure()
plt.xticks(rotation=70)
plt.plot_date(x=data, y=lum, fmt="ro")
plt.xlim(data[0], data[len(data)-1])
plt.ylabel("Luminosidade (u.a.)")
plt.grid(True)
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.2)
'''
# Análise Monte Carlo para as médias
# Cria variaveis para calculo das médias
temp_med = 0.
temp_med_vec=[]
umid_med = 0.
umid_med_vec=[]
pressao_med = 0.
pressao_med_vec=[]
for tentativas in [5,10,50]:
for j in range(5000):
for n in range(tentativas):
amostra=int(random.random()*amostras)
temp_med+=temp[amostra]
umid_med+=u_ar[amostra]
pressao_med+=pressao[amostra]
# print temp_med/tentativas
# print umid_med/tentativas
# print pressao_med/tentativas
# print ("\n")
temp_med_vec.append(temp_med/tentativas)
umid_med_vec.append(umid_med/tentativas)
pressao_med_vec.append(pressao_med/tentativas)
temp_med = 0
umid_med = 0
pressao_med = 0
plt.figure()
plt.title(u"Temperatura - MC Média de: "+str(tentativas)+" medidas")
plt.hist(temp_med_vec, bins=50)
# plt.text(1.001*plt.xlim()[0],0.9*plt.ylim()[1],u"Média: "+str("%.2f" % temp_med_vec.mean())+u" °C\nDesvio Padrão: "+str("%.2f" % temp_med_vec.std())+" °C")
plt.figure()
plt.title(u"Umidade Relativa - MC Média de: "+str(tentativas)+" medidas")
plt.hist(umid_med_vec, bins=50)
# plt.text(1.001*plt.xlim()[0],0.9*plt.ylim()[1],u"Média: "+str("%.2f" % umid_med_vec.mean())+u" %\nDesvio Padrão: "+str("%.2f" % umid_med_vec.std())+" %")
plt.figure()
plt.title(u"Pressão - MC Média de: "+str(tentativas)+" medidas")
plt.hist(pressao_med_vec, bins=50)
# plt.text(1.001*plt.xlim()[0],0.9*plt.ylim()[1],u"Média: "+str("%.2f" % pressao_med_vec.mean())+u" Pa\nDesvio Padrão: "+str("%.2f" % pressao_med_vec.std())+" Pa")
'''
#Apresenta os gráficos gerados
plt.show()
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