Borrar filtros
Borrar filtros

Analyse Time Series Data based on Seasonality

6 visualizaciones (últimos 30 días)
Long
Long el 28 de Mzo. de 2023
Editada: Long el 18 de Ag. de 2023
Hello everyone,
I'm trying to analyse seasonal dataset from 2015 to 2022. I have total 88 'nc' file. file name as "H08_20190301_0000_1MSST200_FLDK.06001_06001.ncI". I aims to seperate data into four seasons (e.g., Spring from March to May). I used coding below to store all data into cell structure.
My problem is I don't know how to scanning the file name to seperate and integrate data into season. For example, this data name ""H08_20190301_0000_1MSST200_FLDK.06001_06001.ncI" provides time in 20190301 belonging to Spring. I need to read specific date time to store all data with same season into one strucuture. Please help me to deal with this. Thank in advance!
pth = 'C:\Users\LongHoang\OneDrive\Desktop\Spring_2023\Ocean_Atmosphere_Mathlab\Mid_Term\H8_SST\H8_SST\';
ncvars = {'lat', 'lon', 'sea_surface_temperature'};
dinfo = dir( fullfile(pth, '*.nc') );
num_files = length(dinfo);
filenames = fullfile( pth, {dinfo.name} );
name = fullfile({dinfo.name}); %I have cell file to store all file name but don't know how to scan the file to get
% date time
lats = cell(num_files, 1);
lons = cell(num_files, 1);
ssts = cell(num_files, 1);
for k = 1: num_files
this_file = filenames{k};
Name_file = name{k};
lats{k} = ncread(this_file, ncvars{1});
lons{k} = ncread(this_file, ncvars{2});
ssts{k} = ncread(this_file, ncvars{3});
end
  1 comentario
Peter Perkins
Peter Perkins el 6 de Abr. de 2023
Editada: Peter Perkins el 6 de Abr. de 2023
Long, it's not clear what are in your files. Does each file contain one lat-by-lon SST array for each season in each year? That sounds wrong, because that would be 8*4=32 files, not 88. Does each file contain daily SST values, i.e. lat-by-lon-by-day, over some range, like monthly files?

Iniciar sesión para comentar.

Respuesta aceptada

Mathieu NOE
Mathieu NOE el 28 de Mzo. de 2023
Editada: Mathieu NOE el 28 de Mzo. de 2023
hello
I wished I had some files to test the code , but let's go directly to the task
I simply extracted from the filename the number corresponding to the month , then you make a simple test to store the data in the correct array depending of the month number
I was lazy so I created explicitely one array per season like lats_spring , lats_summer, lats_fall , lats_winter
but you could change that to a structure or cell array if you prefer
also for each season instead or storing in separate cells you might want simply to concatenate the data and have one unique array at the end (your preference ?)
could be something like this :
pth = 'C:\Users\LongHoang\OneDrive\Desktop\Spring_2023\Ocean_Atmosphere_Mathlab\Mid_Term\H8_SST\H8_SST\';
ncvars = {'lat', 'lon', 'sea_surface_temperature'};
dinfo = dir( fullfile(pth, '*.nc') );
num_files = length(dinfo);
filenames = fullfile( pth, {dinfo.name} );
name = fullfile({dinfo.name}); %I have cell file to store all file name but don't know how to scan the file to get
% date time
lats = cell(num_files, 1);
lons = cell(num_files, 1);
ssts = cell(num_files, 1);
k1 = 0; % "winter" counter init
k2 = 0; % "spring" counter init
k3 = 0; % "summer" counter init
k4 = 0; % "fall" counter init
for k = 1: num_files
this_file = filenames{k};
Name_file = name{k};
% new code
fulldate = split(Name_file,'_');
fulldate = fulldate{2}; % assuming the date appears always in second position in the filename (between '_')
monthsnumber = str2num(fulldate(5:6)); % to have the month corresponding to the file
if monthsnumber >= 12 && monthsnumber <= 2 % winter
k1 = k1 + 1; % counter
lats_winter{k1} = ncread(this_file, ncvars{1});
lons_winter{k1} = ncread(this_file, ncvars{2});
ssts_winter{k1} = ncread(this_file, ncvars{3});
end
if monthsnumber >= 3 && monthsnumber <= 5 % spring
k2 = k2 + 1; % counter
lats_spring{k2} = ncread(this_file, ncvars{1});
lons_spring{k2} = ncread(this_file, ncvars{2});
ssts_spring{k2} = ncread(this_file, ncvars{3});
end
if monthsnumber >= 6 && monthsnumber <= 8 % summer
k3 = k3 + 1; % counter
lats_summer{k3} = ncread(this_file, ncvars{1});
lons_summer{k3} = ncread(this_file, ncvars{2});
ssts_summer{k3} = ncread(this_file, ncvars{3});
end
if monthsnumber >= 9 && monthsnumber <= 11 % fall
k4 = k4 + 1; % counter
lats_fall{k4} = ncread(this_file, ncvars{1});
lons_fall{k4} = ncread(this_file, ncvars{2});
ssts_fall{k4} = ncread(this_file, ncvars{3});
end
end
  6 comentarios
Mathieu NOE
Mathieu NOE el 28 de Jun. de 2023
Hello
Problem solved ?
would you mind accepting my answer ? thanks !
Long
Long el 18 de Ag. de 2023
Editada: Long el 18 de Ag. de 2023
I had accepted your answer. Sorry for some inconvience stuff.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Data Type Identification en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by