Commit ad2ea715 authored by Rafael Peretti Pezzi's avatar Rafael Peretti Pezzi

Incluída correção de Bessel para cálculo dos desvios da população

parent d6e9bca8
Gráficos e simulações estatísticas Meteorolog
=============================================
Autor: Rafael Pezzi - Centro de Tecnologia Acadêmica - IF/UFRGS
Este programa foi criado para apresentar gráficos das séries temporais e realizar simulações estatísticas sobre amostras de dados meteorológicos. Ilustra o teorema do limite central e a redução do desvio padrão da média com o aumento do número de amostras.
### Uso
Para utilizar basta chamar o programa seguido do arquivo com os dados.
```
$ python estatisticas.py amostras.log
```
Os dados no arquivo devem estar 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
Vide exemplo incluído no repositório `amostras.dat`.
O comportamento padrão do programa utiliza toda amostra de dados no arquivo, porém é possível selecionar intervalos definidos alterando a variável `seleciona_intervalo = False` para `seleciona_intervalo = True` e informando o intervalo desejado nas variáveis `sel_Inicio` e `sel_Fim`.
### Licença e informações adicionais
Este programa é softare livre, disponível sob os termos da GNU Affero General Public License V3 - http://www.gnu.org/licenses/agpl-3.0.html.
Mais informações:
http://cta.if.ufrgs.br/projects/estacao-meteorologica-modular/wiki/Meteorolog
......@@ -27,14 +27,21 @@ import random as random
import datetime as datetime
import sys , os
# Realizar médias de n medidas aleatórias:
#n_medias = [1,5,10,50,100,1000,10000]
# Realizar médias de n_medidas aleatórias:
#n_medias = [1,5,10,50,100,1000,5000,10000]
#n_medias = [5,10,50,100,1000,5000]
n_medias = [5,10,50,100,1000]
#n_medias = [5,10,50] # Possibilidades reduzidas para debug
#n_medias = [5,10] # Possibilidades reduzidas para debug
#Número de medias a realizar por Monte Carlo
# Número de medias a realizar pelo método de Monte Carlo
n_MC=5000
# deg_of_freedom=0 para cálculo dos desvios padrão da população
# deg_of_freedom=1 para cálculo dos desvios padrão da amostra (com correção de Bessel)
deg_of_freedom=1
# Ref: http://docs.scipy.org/doc/numpy/reference/generated/numpy.std.html#numpy.std
print "Estatísticas Meteorológicas Meteorolog - Centro de Tecnologia Acadêmica"
# Testa se o número de argumentos está correto
......@@ -97,25 +104,27 @@ if (seleciona_intervalo == True):
print str(sel_Inicio)+" até "+str(sel_Fim)
print "Série com "+str(len(data))+" amostras\n"
print "\n############## Séries Temporais e Histogramas ##################"
## Análise da temperatura
T_min=temp.min()
T_max=temp.max()
T_med=temp.mean()
T_std=temp.std()
T_std=temp.std(ddof=deg_of_freedom)
print "Temperatura: \nmin: "+str(T_min)+"°C\tmax: "+str(T_max)+"°C\tmédia: "+str("%.2f" % T_med)+"°C\tDesvio: "+str("%.1f" % T_std)+"°C"
## Análise da umidade relativa do Ar
U_ar_min=u_ar.min()
U_ar_max=u_ar.max()
U_ar_med=u_ar.mean()
U_ar_std=u_ar.std()
U_ar_std=u_ar.std(ddof=deg_of_freedom)
print "\nUmidade Relativa do Ar: \nmin: "+str(U_ar_min)+"%\tmax: "+str(U_ar_max)+"%\tmédia: "+str("%.1f" % U_ar_med)+"%\tDesvio: "+str("%.1f" % U_ar_std)+"%"
# Análise da pressão atomsférica
P_min=pressao.min()
P_max=pressao.max()
P_med=pressao.mean()
P_std=pressao.std()
P_std=pressao.std(ddof=deg_of_freedom)
print "\nPressão: \nmin: "+str(int(P_min))+" Pa\tmax: "+str(int(P_max))+" Pa\tmédia: "+ str("%.0f" % P_med)+" Pa\tDesvio: "+str("%.2f" % P_std)+" Pa"
......@@ -123,7 +132,7 @@ print "\nPressão: \nmin: "+str(int(P_min))+" Pa\tmax: "+str(int(P_max))+" Pa\tm
L_min=lum.min()
L_max=lum.max()
L_med=lum.mean()
L_std=lum.std()
L_std=lum.std(ddof=deg_of_freedom)
print "\nLuminosidade: \nmin: "+str(int(L_min))+" u.a.\tmax: "+str(int(L_max))+" u.a.\tmédia: "+ str("%.0f" % L_med)+" u.a.\tDesvio: "+str("%.2f" % L_std)+" u.a."
......@@ -136,7 +145,7 @@ plt.xlabel(u"Temperatura (°C)")
plt.hist(temp,bins=25)
#Inclui título 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") # Este coloca dentro da figura
plt.title(u"Temperatura média: "+str("%.2f" % T_med)+u"°C | Desvio Padrão: "+str("%.2f" % temp.std())+u"°C")
plt.title(u"Temperatura média: "+str("%.2f" % T_med)+u"°C | Desvio Padrão: "+str("%.2f" % temp.std(ddof=deg_of_freedom))+u"°C")
plt.grid(True)
# Apresentação de histrograma:
......@@ -156,7 +165,7 @@ 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.title(u"Pressão média: "+str("%.2f" % pressao.mean())+u" Pa | Desvio Padrão: "+str("%.2f" % pressao.std())+" Pa")
plt.title(u"Pressão média: "+str("%.2f" % pressao.mean())+u" Pa | Desvio Padrão: "+str("%.2f" % pressao.std(ddof=deg_of_freedom))+" Pa")
plt.grid(True)
# Apresentação de histrograma:
......@@ -166,7 +175,7 @@ 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.title(u"Luminosidade média: "+str("%.2f" % lum.mean())+u" | Desvio Padrão: "+str("%.2f" % lum.std())+" ")
plt.title(u"Luminosidade média: "+str("%.2f" % lum.mean())+u" | Desvio Padrão: "+str("%.2f" % lum.std(ddof=deg_of_freedom))+" ")
plt.grid(True)
## Apresentação das series temporais de medidas
......@@ -226,6 +235,9 @@ plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.2)
#'''
# Análise Monte Carlo para as médias
# Para fins de ilustração didática do teorema do limite central e desvio da média
print "\n############## Simulação Monte Carlo ##################"
print n_MC, "médias calculadas para", n_medias, "medidas"
# Cria variaveis para calculo das médias
temp_std_n=[]
......@@ -273,7 +285,7 @@ for tentativas in n_medias:
# Pegando as médias dos resultados de monte carlo
# Armazenando as médias dos resultados do cálculo Monte Carlo
temp_med = temp_med_vec.mean()
umid_med = umid_med_vec.mean()
lum_med = lum_med_vec.mean()
......@@ -283,21 +295,21 @@ for tentativas in n_medias:
print " "
print str(tentativas)+" medidas:"
temp_med_std=temp_med_vec.std()
temp_med_std=temp_med_vec.std(ddof=deg_of_freedom)
temp_std_n.append(temp_med_std)
print "Desvio Temp Média para MC com "+str(tentativas)+" medidas: "+str(temp_med_std)
# umid_med_vec.append(umid_med/tentativas)
umid_med_std=umid_med_vec.std()
umid_med_std=umid_med_vec.std(ddof=deg_of_freedom)
umid_std_n.append(umid_med_std)
print "Desvio Umidade Média para MC com "+str(tentativas)+" medidas: "+str(umid_med_std)
# pressao_med_vec.append(pressao_med/tentativas)
pressao_med_std=pressao_med_vec.std()
pressao_med_std=pressao_med_vec.std(ddof=deg_of_freedom)
pressao_std_n.append(pressao_med_std)
print "Desvio Pressão Média para MC com "+str(tentativas)+" medidas: "+str(pressao_med_std)
lum_med_std=lum_med_vec.std()
lum_med_std=lum_med_vec.std(ddof=deg_of_freedom)
lum_std_n.append(lum_med_std)
print "Desvio lumin. Média para MC com "+str(tentativas)+" medidas: "+str(lum_med_std)
......@@ -348,6 +360,7 @@ for tentativas in n_medias:
#print n_medias
#print temp_std_n
## Desvio padrão das médias calculadas pelo método de Monte Carlo
plt.figure()
plt.title(u"Desvio padrão para Temperatura média de N medidas")
......
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