Calculete monthly anomalies time series temperature

9 vues (au cours des 30 derniers jours)
Pepe Grillo
Pepe Grillo le 3 Juil 2021
Hi!
I have this time serie (temperature_93_18.txt) and this monthly mean values (MonthlyAverage.txt) (Attached)
I want to calculete the anomalies for each value of the time serie, this mean to substract for each value of Junary of every year the same value from MonthlyAverage.txt data.
Any fast solution?!
  3 commentaires
Pepe Grillo
Pepe Grillo le 3 Juil 2021
Hi, the anomalie is the difference betwen the value and the mean (x-x`)
What I want is from the time serie make the difference between values of each day per month and the mean value in MonthlyAverage.txt and for all years,
I didnt try or know that functions I wolud have a look in the meantime
thanks for your reply
Pepe Grillo
Pepe Grillo le 3 Juil 2021
I attached now the date ant temp in one file just in case
Thanks!

Connectez-vous pour commenter.

Réponses (2)

Peter Perkins
Peter Perkins le 28 Juil 2021
You are not doing yourself any favors by using raw numeric vectors with no timestamps. This is almost trivial using datetime and a timetable. Here's one way:
>> Temp = readmatrix("temperature_93_18.txt");
>> AvgTemp = readmatrix("MonthlyAverage.txt");
>> year0 = 1993;
>> temps = timetable(Temp,'RowTimes',datetime(year0,1,1:height(Temp)));
>> head(temps)
ans =
8×1 timetable
Time Temp
___________ ____
01-Jan-1993 6.57
02-Jan-1993 6.53
03-Jan-1993 6.14
04-Jan-1993 6.02
05-Jan-1993 6.02
06-Jan-1993 5.92
07-Jan-1993 5.88
08-Jan-1993 6.58
>> Month = ["Jan";"Feb";"Mar";"Apr";"May";"Jun";"Jul";"Aug";"Sep";"Oct";"Nov";"Dec"];
>> avgTemps = table(Month,AvgTemp)
avgTemps =
12×2 table
Month AvgTemp
_____ _______
"Jan" 5.0984
"Feb" 5.2968
"Mar" 4.9642
"Apr" 4.1152
"May" 3.2809
"Jun" 3.0204
"Jul" 2.8472
"Aug" 2.7302
"Sep" 2.4709
"Oct" 2.8043
"Nov" 3.1844
"Dec" 4.2404
>> t = temps;
>> t.Month = month(temps.Time,"shortname");
>> head(t)
ans =
8×2 timetable
Time Temp Month
___________ ____ _______
01-Jan-1993 6.57 {'Jan'}
02-Jan-1993 6.53 {'Jan'}
03-Jan-1993 6.14 {'Jan'}
04-Jan-1993 6.02 {'Jan'}
05-Jan-1993 6.02 {'Jan'}
06-Jan-1993 5.92 {'Jan'}
07-Jan-1993 5.88 {'Jan'}
08-Jan-1993 6.58 {'Jan'}
>> t = join(t,avgTemps,"Key","Month");
>> head(t)
ans =
8×3 timetable
Time Temp Month AvgTemp
___________ ____ _______ _______
01-Jan-1993 6.57 {'Jan'} 5.0984
02-Jan-1993 6.53 {'Jan'} 5.0984
03-Jan-1993 6.14 {'Jan'} 5.0984
04-Jan-1993 6.02 {'Jan'} 5.0984
05-Jan-1993 6.02 {'Jan'} 5.0984
06-Jan-1993 5.92 {'Jan'} 5.0984
07-Jan-1993 5.88 {'Jan'} 5.0984
08-Jan-1993 6.58 {'Jan'} 5.0984
>> temps.Anomaly = t.Temp - t.AvgTemp;
>> head(temps)
ans =
8×2 timetable
Time Temp Anomaly
___________ ____ _______
01-Jan-1993 6.57 1.4716
02-Jan-1993 6.53 1.4316
03-Jan-1993 6.14 1.0416
04-Jan-1993 6.02 0.92161
05-Jan-1993 6.02 0.92161
06-Jan-1993 5.92 0.82161
07-Jan-1993 5.88 0.78161
08-Jan-1993 6.58 1.4816

Image Analyst
Image Analyst le 3 Juil 2021
isoutlier(), rmoutlier(), or mad() should work. Write back if they don't.
  3 commentaires
Pepe Grillo
Pepe Grillo le 6 Juil 2021
So this functions didnt work for what I want, maybe other idea to make monthly remove of the mean to the serie?
Thks!
Image Analyst
Image Analyst le 6 Juil 2021
Make it easy for people to help you. Give us a start by giving your code to read in the various text files and plot them.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Tables dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by