# Compute climatologies of sea ice from the IO-SST-V2.1/v2 # Period: Copernicus (1993-2016) # # # Script version 1.0.0 # # Script works with: # Python version 3.10 # # Package version # numpy: 1.26.4 # pandas: 2.2.2 # # # # Ver1.0.0: Created by Mariko Koseki, 19.06.2024 ##--- Import modules ------------------------------## import netCDF4 import numpy as np from numpy import dtype import pandas as pd import datetime from datetime import timedelta import os import sys import platform print('--- Python version ---') print(platform.python_version()) print('--- Package version ---') print('numpy: ', np.__version__) print('pandas: ', pd.__version__) print('-------------------------') print('') ##--- Create list of year ------------------------------------------------------## yyyy1 = 1993 yyyy2 = 2016 yyyy_int_list = [] for yyyy in range(yyyy1, yyyy2+1): yyyy_int_list.append(yyyy) #print(yyyy_int_list) ##--- Set path ------------------------------------------## ## Set path to input files ## ''' Set path to input directory ### ''' seaice_dir = '/nird/projects/NS9873K/norcpm/validation/seaicepre/' ### OISST (merged) ### oisst_merge = seaice_dir + 'oisst/merge/' ## Output: Set path to output file ## ''' Set path to output file ''' out_dir = seaice_dir + 'clm/oisst/' if not os.path.exists(out_dir): os.makedirs(out_dir) ##--- Read CSV files ------------------------------## seaice_area = pd.DataFrame() # initialize an empty dataframe for YEAR in yyyy_int_list: #print('') #print('Year: ', YEAR) #print('') ## Paths to CSV files ## file_oisst_merge = oisst_merge + 'seaice_oisst_merge_' + str(YEAR) + '.csv' df = pd.read_csv(file_oisst_merge, index_col=0) #print(df) if YEAR == 1993: #area = df.loc[0:180,['dtime', 'sea_ice_area_interpolated']] area = df.loc[:,['dtime', 'sea_ice_area_interpolated']] seaice_area = area.rename({'sea_ice_area_interpolated': str(YEAR)}, axis='columns') else: #area = df.loc[0:180,['dtime', 'sea_ice_area_interpolated']] area = df.loc[:,['sea_ice_area_interpolated']] seaice_area2 = area.rename({'sea_ice_area_interpolated': str(YEAR)}, axis='columns') seaice_area = pd.concat([seaice_area, seaice_area2], axis=1) ## Compute climatology 1993-2016 ## seaice_area['mean'] = seaice_area[['1993', '1994', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002',\ '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016']].mean(axis = 1) seaice_area['mmdd'] = pd.to_datetime(seaice_area['dtime']).dt.strftime('%m-%d') ## Insert 'MMDD' column in the first column ## target_col = 'mmdd' df_target = seaice_area[target_col] seaice_area_drp = seaice_area.drop(['dtime', 'mmdd'], axis=1) seaice_area_drp.insert(0, target_col, df_target) df = seaice_area_drp.reset_index(drop=True) print(df) ##--- Save DataFrame as CSV --------------------------------------## df.to_csv(out_dir + 'oisst_seaice_area_clm_all.csv') ##--- Extract climatology for each period -----------------------## df_list = [] df['date'] = pd.to_datetime('1993' + '-' + df['mmdd'].astype(str)) #print(df) ### Jan-Jun ### df_01_06 = df[df['date'] <= datetime.datetime(1993, 6, 30)] #print(df_01_06) df_01_06_drp = df_01_06.drop(['date'], axis=1) #print(df_01_06_drp) df_list.append(df_01_06_drp) ### Feb-Jul ### df_02_07 = df[(df['date'] >= datetime.datetime(1993, 2, 1)) & (df['date'] <= datetime.datetime(1993, 7, 31))] df_02_07_drp = df_02_07.drop(['date'], axis=1) #print(df_02_07_drp) df_list.append(df_02_07_drp) ### Mar-Aug ### df_03_08 = df[(df['date'] >= datetime.datetime(1993, 3, 1)) & (df['date'] <= datetime.datetime(1993, 8, 31))] df_03_08_drp = df_03_08.drop(['date'], axis=1) #print(df_03_08_drp) df_list.append(df_03_08_drp) ### Apr-Sep ### df_04_09 = df[(df['date'] >= datetime.datetime(1993, 4, 1)) & (df['date'] <= datetime.datetime(1993, 9, 30))] df_04_09_drp = df_04_09.drop(['date'], axis=1) #print(df_04_09_drp) df_list.append(df_04_09_drp) ### May-Oct ### df_05_10 = df[(df['date'] >= datetime.datetime(1993, 5, 1)) & (df['date'] <= datetime.datetime(1993, 10, 31))] df_05_10_drp = df_05_10.drop(['date'], axis=1) #print(df_05_10_drp) df_list.append(df_05_10_drp) ### Jun-Nov ### df_06_11 = df[(df['date'] >= datetime.datetime(1993, 6, 1)) & (df['date'] <= datetime.datetime(1993, 11, 30))] df_06_11_drp = df_06_11.drop(['date'], axis=1) #print(df_06_11_drp) df_list.append(df_06_11_drp) ### Jul-Dec ### df_07_12 = df[(df['date'] >= datetime.datetime(1993, 7, 1))] df_07_12_drp = df_07_12.drop(['date'], axis=1) #print(df_07_12_drp) df_list.append(df_07_12_drp) ### Aug-Dec + Jan ### df_01 = df[df['date'] <= datetime.datetime(1993, 1, 31)] df_08 = df[df['date'] >= datetime.datetime(1993, 8, 1)] df_08_01 = pd.concat([df_08, df_01], axis=0) df_08_01_drp = df_08_01.drop(['date'], axis=1) df_08_01_rs = df_08_01_drp.reset_index(drop=True) #print(df_08_01_rs) df_list.append(df_08_01_rs) ### Sep-Dec + Jan-Feb ### df_02 = df[df['date'] <= datetime.datetime(1993, 2, 28)] df_09 = df[df['date'] >= datetime.datetime(1993, 9, 1)] df_09_02 = pd.concat([df_09, df_02], axis=0) df_09_02_drp = df_09_02.drop(['date'], axis=1) df_09_02_rs = df_09_02_drp.reset_index(drop=True) #print(df_09_02_rs) df_list.append(df_09_02_rs) ### Oct-Dec + Jan-Mar ### df_03 = df[df['date'] <= datetime.datetime(1993, 3, 31)] df_10 = df[df['date'] >= datetime.datetime(1993, 10, 1)] df_10_03 = pd.concat([df_10, df_03], axis=0) df_10_03_drp = df_10_03.drop(['date'], axis=1) df_10_03_rs = df_10_03_drp.reset_index(drop=True) #print(df_10_03_rs) df_list.append(df_10_03_rs) ### Nov-Dec + Jan-Apr ### df_04 = df[df['date'] <= datetime.datetime(1993, 4, 30)] df_11 = df[df['date'] >= datetime.datetime(1993, 11, 1)] df_11_04 = pd.concat([df_11, df_04], axis=0) df_11_04_drp = df_11_04.drop(['date'], axis=1) df_11_04_rs = df_11_04_drp.reset_index(drop=True) #print(df_11_04_rs) df_list.append(df_11_04_rs) ### Dec + Jan-May ### df_05 = df[df['date'] <= datetime.datetime(1993, 5, 31)] df_12 = df[df['date'] >= datetime.datetime(1993, 12, 1)] df_12_05 = pd.concat([df_12, df_05], axis=0) df_12_05_drp = df_12_05.drop(['date'], axis=1) df_12_05_rs = df_12_05_drp.reset_index(drop=True) #print(df_12_05_rs) df_list.append(df_12_05_rs) ##--- Save DataFrame as CSV --------------------------------------## mm_name = ['01_06', '02_07', '03_08', '04_09', '05_10', '06_11', '07_12', '08_01', '09_02', '10_03', '11_04', '12_05'] for df_clm, mm in zip(df_list, mm_name): df_clm.to_csv(out_dir + 'oisst_seaice_area_clm_' + mm +'.csv') print('') print('Saved climatology') print('') print('Complated!!')