from src.data_class import load_station_data from src.mutual_information import mutual_information import numpy as np from datetime import date import matplotlib.pyplot as plt g = load_station_data('../data/TG_STAID000027.txt', date(1958, 1, 1), date(2015, 11, 1), False) g.get_data_of_precise_length(14976, start_date=date(1958, 1, 1), apply_to_data=True) mi = [mutual_information(g.data, g.data)] for d in np.arange(1, 401, 1): mi.append(mutual_information(g.data[d:], g.data[:-d])) plt.plot(mi) plt.show() # # g.wavelet(1, period_unit = 'y') # # reconstruction = g.amplitude * np.cos(g.phase) # # fit_x = np.vstack([reconstruction, np.ones(reconstruction.shape[0])]).T # # m, c = np.linalg.lstsq(fit_x, g.data)[0] # # amplitude = m * g.amplitude + c # g.wavelet(8, period_unit = 'y') # g.anomalise() # def get_equidistant_bins(): # return np.array(np.linspace(-np.pi, np.pi, 9))
def running_mean(arr, aver): out = np.zeros((arr.shape[0] - aver + 1,)) for i in range(out.shape[0]): out[i] = np.mean(arr[i : i+aver]) return out def get_equidistant_bins(): return np.array(np.linspace(-np.pi, np.pi, 9)) BINS_COND = True g = load_station_data('TG_STAID000027.txt', date(1834, 4, 28), date(2013, 10, 1), False) g_max = load_station_data('TX_STAID000027.txt', date(1834, 4, 28), date(2013, 10, 1), False) g_min = load_station_data('TN_STAID000027.txt', date(1834, 4, 28), date(2013, 10, 1), False) if BINS_COND: k0 = 6. # wavenumber of Morlet wavelet used in analysis y = 365.25 # year in days fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0,2))) period = 8 * y # frequency of interest s0 = period / fourier_factor # get scale wave, _, _, _ = wavelet_analysis.continous_wavelet(g.data, 1, False, wavelet_analysis.morlet, dj = 0, s0 = s0, j1 = 0, k0 = k0) # perform wavelet phase = np.arctan2(np.imag(wave), np.real(wave)) ndx = g.select_date(date(1838,4,28), date(2009,10,1)) # data as with temporal evolution (of anything studied) g_max.select_date(date(1838,4,28), date(2009,10,1)) g_min.select_date(date(1838,4,28), date(2009,10,1))
mons = {1: 'J', 2: 'F', 3: 'M', 4: 'A', 5: 'M', 6: 'J', 7: 'J', 8: 'A', 9: 'S', 10: 'O', 11: 'N', 12: 'D'} NUM_SURRS = 1000 WINDOW_LENGTH = 36 # years # SEASON = [12,1,2] # SEASON = None # param_window = 32 # years SEASONS = [None, [3,4,5], [6,7,8], [9,10,11], [12, 1, 2]] for SEASON in SEASONS: print ''.join([mons[s] for s in SEASON]) if SEASON is not None else 'overall' # prg = load_station_data('../data/ECAstation-TG/TG_STAID000027.txt', date(1775, 1, 1), date(2016, 5, 1), # anom = False, offset = 1) prg = load_station_data('../data/TG_STAID000027.txt', date(1775, 1, 1), date(2016, 5, 1), anom = False, offset = 1) bins = get_equidistant_bins() ndxs, dates = prg.get_sliding_window_indexes(window_length = WINDOW_LENGTH, window_shift = 1, unit = 'y', return_half_dates = True) n_windows = len(ndxs) amp_windows = np.zeros((n_windows)) effect_windows = np.zeros((n_windows)) mean_amp_windows = np.zeros((n_windows)) mean_ampAAC_windows = np.zeros((n_windows)) amp_windows_surrs = np.zeros((NUM_SURRS, n_windows)) effect_windows_surrs = np.zeros((NUM_SURRS, n_windows)) mean_amp_windows_surrs = np.zeros((NUM_SURRS, n_windows)) mean_ampAAC_windows_surrs = np.zeros((NUM_SURRS, n_windows)) for i, ndx in zip(range(len(ndxs)), ndxs):
from src import wavelet_analysis as wvlt import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec from scipy.signal import argrelextrema def get_equidistant_bins(): return np.array(np.linspace(-np.pi, np.pi, 9)) PLOT = True SEASON = 'JJA' PERCENTIL = 80 g = load_station_data('../data/TG_STAID000027.txt', date(1775, 1, 1), date(2014, 1, 1), False) g_amp = load_station_data('../data/TG_STAID000027.txt', date(1775, 1, 1), date(2014, 1, 1), False) # g_sun = load_sunspot_data('monthssn.dat', date(1775, 1, 1), date(2014, 1, 1), False) tg = g.copy_data() g.anomalise() # tg is SAT, g.data is SATA k0 = 6. # wavenumber of Morlet wavelet used in analysis fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0,2))) period = 8 * 365.25 # frequency of interest s0 = period / fourier_factor # get scale wave, _, _, _ = wvlt.continous_wavelet(g.data, 1, False, wvlt.morlet, dj = 0, s0 = s0, j1 = 0, k0 = k0) # perform wavelet phase = np.arctan2(np.imag(wave), np.real(wave)) # get phases from oscillatory modes period = 1 * 365.25 # frequency of interest
ANOMALISE = True PERIOD = 8 # years, period of wavelet WINDOW_LENGTH = 16384 WINDOW_SHIFT = 1 # years, delta in the sliding window analysis MEANS = True # if True, compute conditional means, if False, compute conditional variance WORKERS = 16 NUM_SURR = 100 # how many surrs will be used to evaluate SURR_TYPE = 'AR' # MF, FT, AR diff_ax = (0, 2) # means -> 0, 2, var -> 1, 8 mean_ax = (18, 22) # means -> -1, 1.5, var -> 9, 18 PLOT_PHASE = False PHASE_ANALYSIS_YEAR = None # year of detailed analysis - phase and bins, or None AMPLITUDE = True ## loading data g = load_station_data('TG_STAID000027.txt', date(1834, 7, 28), date(2014, 1, 1), ANOMALISE) sg = SurrogateField() if AMPLITUDE: g_amp = load_station_data('TG_STAID000027.txt', date(1834, 7, 28), date(2014, 1, 1), False) sg_amp = SurrogateField() print( "[%s] Wavelet analysis in progress with %d year window shifted by %d year(s)..." % (str(datetime.now()), WINDOW_LENGTH, WINDOW_SHIFT)) k0 = 6. # wavenumber of Morlet wavelet used in analysis y = 365.25 # year in days fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0, 2))) period = PERIOD * y # frequency of interest s0 = period / fourier_factor # get scale
def get_equidistant_bins(): return np.array(np.linspace(-np.pi, np.pi, 9)) PERIOD = 8 PAST_UNTIL = 1930 # from which segment the average extremes should be computed WINDOW_LENGTH = 13462 # 13462, 16384 for surrogates only 13462 PLOT = True USE_SURR = True NUM_SURR = 100 # load whole data - load SAT data if USE_SURR: g = load_station_data('../data/TG_STAID000027.txt', date(1834, 7, 28), date(2014, 1, 1), False) # 1834-7-28 till 2014-1-1 = 64k g_for_avg = load_station_data('../data/TG_STAID000027.txt', date(1840, 4, 14), date(1930, 1, 1), False) # 1840-4-14 till 1930-1-1 = 32k else: g = load_station_data('../data/TG_STAID000027.txt', date(1775, 1, 1), date(2014, 1, 1), False) g_for_avg = load_station_data('../data/TG_STAID000027.txt', date(1775, 1, 1), date(2014, 1, 1), False) if not USE_SURR: # save SAT data tg_sat = g.copy_data() tg_avg_sat = g_for_avg.copy_data() # anomalise to obtain SATA data
PERIOD = 8 # years, period of wavelet WINDOW_LENGTH = 16384 WINDOW_SHIFT = 1 # years, delta in the sliding window analysis MEANS = True # if True, compute conditional means, if False, compute conditional variance WORKERS = 16 NUM_SURR = 100 # how many surrs will be used to evaluate SURR_TYPE = 'AR' # MF, FT, AR diff_ax = (0, 2) # means -> 0, 2, var -> 1, 8 mean_ax = (18, 22) # means -> -1, 1.5, var -> 9, 18 PLOT_PHASE = False PHASE_ANALYSIS_YEAR = None # year of detailed analysis - phase and bins, or None AMPLITUDE = True ## loading data g = load_station_data('TG_STAID000027.txt', date(1834,7,28), date(2014,1,1), ANOMALISE) sg = SurrogateField() if AMPLITUDE: g_amp = load_station_data('TG_STAID000027.txt', date(1834,7,28), date(2014, 1, 1), False) sg_amp = SurrogateField() print("[%s] Wavelet analysis in progress with %d year window shifted by %d year(s)..." % (str(datetime.now()), WINDOW_LENGTH, WINDOW_SHIFT)) k0 = 6. # wavenumber of Morlet wavelet used in analysis y = 365.25 # year in days fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0,2))) period = PERIOD * y # frequency of interest s0 = period / fourier_factor # get scale cond_means = np.zeros((8,))
import numpy as np from surrogates.surrogates import SurrogateField from datetime import date import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec PERIOD = 8 BINS = 8 NUM_SURR = 1000 def get_equidistant_bins(num): return np.array(np.linspace(-np.pi, np.pi, num+1)) g = load_station_data('TG_STAID000027.txt', date(1924,1,14), date(2013,10,1), True) g_amp = load_station_data('TG_STAID000027.txt', date(1924,1,14), date(2013, 10, 1), False) g_data = DataField() k0 = 6. # wavenumber of Morlet wavelet used in analysis y = 365.25 # year in days fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0,2))) period = PERIOD * y # frequency of interest s0 = period / fourier_factor # get scale wave, _, _, _ = wavelet_analysis.continous_wavelet(g.data, 1, False, wavelet_analysis.morlet, dj = 0, s0 = s0, j1 = 0, k0 = k0) # perform wavelet phase = np.arctan2(np.imag(wave), np.real(wave)) # get phases from oscillatory modes period = 1 * 365.25 # frequency of interest s0_amp = period / fourier_factor # get scale wave, _, _, _ = wavelet_analysis.continous_wavelet(g_amp.data, 1, False, wavelet_analysis.morlet, dj = 0, s0 = s0_amp, j1 = 0, k0 = k0) # perform wavelet
import matplotlib.pyplot as plt ANOMALISE = True PERIOD = 8 START_DATE = None #date(1970, 1, 1) END_DATE = date(2013,12,31) MEANS = True NUM_SURR = 100 WORKERS = 3 MF_SURR = True SAVE_FILE = False ## load data g = load_station_data('TG_STAID000027.txt', date(1950,1,1), date(2014,1,1), ANOMALISE) sg = SurrogateField() print("[%s] Wavelet analysis and conditional mean computation in progress..." % (str(datetime.now()))) k0 = 6. # wavenumber of Morlet wavelet used in analysis y = 365.25 # year in days fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0,2))) period = PERIOD * y # frequency of interest s0 = period / fourier_factor # get scale def get_equidistant_bins(): return np.array(np.linspace(-np.pi, np.pi, 9)) # get 16k length of the time series because of surrogates
return output, m WINDOW = 32 # years # load AMO smoothed version amo_sm_raw = np.loadtxt('../data/amon.sm.long.data', comments="#", skiprows=1) # no. of years x 13 # load AMO unsmoothed version amo_un_raw = np.loadtxt('../data/amon.us.long.data', comments="#", skiprows=1) missing_val = -99.99 ## loading data ## start_date = date(1856, 1, 1) end_date = date(2014, 1, 1) # exclusive g = load_station_data('TG_STAID000027.txt', start_date, end_date, True) # data var data_var = np.zeros((end_date.year - 1 - start_date.year - WINDOW + 1)) start_idx = g.find_date_ndx(start_date) year = start_date.year end_idx = g.find_date_ndx(date(year + WINDOW, 1, 1)) coefs = [] print data_var.shape[0] for i in range(data_var.shape[0]): # detrended_data, coef = detrend_with_coefs(g.data[start_idx:end_idx]) # coefs.append(coef) s_idx = start_idx e_idx = g.find_date_ndx(date(year + 1, 1, 1)) var = []
WINDOW = 32 # years # load AMO smoothed version amo_sm_raw = np.loadtxt('../data/amon.sm.long.data', comments = "#", skiprows = 1) # no. of years x 13 # load AMO unsmoothed version amo_un_raw = np.loadtxt('../data/amon.us.long.data', comments = "#", skiprows = 1) missing_val = -99.99 ## loading data ## start_date = date(1856,1,1) end_date = date(2014, 1, 1) # exclusive g = load_station_data('TG_STAID000027.txt', start_date, end_date, True) # data var data_var = np.zeros((end_date.year - 1 - start_date.year - WINDOW + 1)) start_idx = g.find_date_ndx(start_date) year = start_date.year end_idx = g.find_date_ndx(date(year + WINDOW, 1, 1)) coefs = [] print data_var.shape[0] for i in range(data_var.shape[0]): # detrended_data, coef = detrend_with_coefs(g.data[start_idx:end_idx]) # coefs.append(coef) s_idx = start_idx e_idx = g.find_date_ndx(date(year+1,1,1)) var = []
from src.data_class import load_station_data, DataField import numpy as np from datetime import datetime, date import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec AMPLITUDE = True PERIOD = 8 BINS = 8 SEASON = None#[[12, 1, 2], [6, 7, 8]] STATIONS = None # ['TG_STAID000047.txt', 'TG_STAID000054.txt'] if STATIONS == None: g = load_station_data('../data/TG_STAID000027.txt', date(1958, 1, 1), date(2013, 11, 10), True) if AMPLITUDE: g_amp = load_station_data('../data/TG_STAID000027.txt', date(1958, 1, 1), date(2013, 11, 10), False) g_data = DataField() else: for i in range(len(STATIONS)): locals()['g' + str(i)] = load_station_data(STATIONS[i], date(1924,1,15), date(2013,10,1), True) if AMPLITUDE: locals()['g_amp' + str(i)] = load_station_data(STATIONS[i], date(1924,1,15), date(2013, 10, 1), False) locals()['g_data' + str(i)] = DataField() k0 = 6. # wavenumber of Morlet wavelet used in analysis y = 365.25 # year in days fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0,2))) period = PERIOD * y # frequency of interest s0 = period / fourier_factor # get scale
amplitude2 = amplitude2[idx[0] : idx[1]] # amp_to_plot_surr = amp_to_plot_surr[idx[0] : idx[1]] phase_amp = phase_amp[idx[0] : idx[1]] sg.surr_data = sg.surr_data[idx[0] : idx[1]] cond_temp = np.zeros((BINS,2)) for i in range(cond_means.shape[0]): ndx = ((phase_amp >= phase_bins[i]) & (phase_amp <= phase_bins[i+1])) cond_temp[i,1] = np.mean(sg.surr_data[ndx]) data_diff = cond_temp[:, 1].max() - cond_temp[:, 1].min() resq.put([data_diff, np.mean(amplitude2)]) g = load_station_data('../data/TG_STAID000027.txt', date(1958, 1, 1), date(2013, 11, 10), True) g_amp = load_station_data('../data/TG_STAID000027.txt', date(1958, 1, 1), date(2013, 11, 10), True) g_data = DataField() k0 = 6. # wavenumber of Morlet wavelet used in analysis y = 365.25 # year in days fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0,2))) period = PERIOD * y # frequency of interest s0 = period / fourier_factor # get scale # wavelet - data wave, _, _, _ = wavelet_analysis.continous_wavelet(g.data, 1, False, wavelet_analysis.morlet, dj = 0, s0 = s0, j1 = 0, k0 = k0) # perform wavelet phase = np.arctan2(np.imag(wave), np.real(wave)) # get phases from oscillatory modes
""" created on May 7, 2014 @author: Nikola Jajcay """ import numpy as np from src.data_class import load_station_data from datetime import date import matplotlib.pyplot as plt g = load_station_data("TG_STAID000027.txt", date(1775, 1, 1), date(2014, 1, 1), True) g.get_monthly_data() # seasons as MAM, JJA, SON, DJF seasons_data = [] for i in range(g.data.shape[0] / 4 - 1): seasons_data.append(np.mean(g.data[2 + i * 3 : 2 + i * 3 + 3], axis=0)) g.data = np.array(seasons_data) scaling_mean = [] scaling_max = [] for diff in range(1, g.data.shape[0]): difs = [] for i in range(g.data.shape[0] - diff): difs.append(np.abs(g.data[i + diff] - g.data[i]))
def get_equidistant_bins(): return np.array(np.linspace(-np.pi, np.pi, 9)) PERIOD = 8 WINDOW_LENGTH = 13462 # 13462, 16384 MIDDLE_YEAR = 1965 # year around which the window will be deployed DIFFS_LIM = [10,25] SAT = False # load whole data - load SAT data g = load_station_data('TG_STAID000027.txt', date(1775, 1, 1), date(2014, 1, 1), False) # save SAT data tg_sat = g.copy_data() # anomalise to obtain SATA data g.anomalise() g_temp = DataField() # starting month and day sm = 7 sd = 28 # starting year of final window y = 365.25 sy = int(MIDDLE_YEAR - (WINDOW_LENGTH/y)/2)
import matplotlib.pyplot as plt import scipy.stats as sts def get_equidistant_bins(): return np.array(np.linspace(-np.pi, np.pi, 9)) PERIOD = 8 WINDOW_LENGTH = 13462 # 13462, 16384 MIDDLE_YEAR = 1965 # year around which the window will be deployed DIFFS_LIM = [10, 25] SAT = False # load whole data - load SAT data g = load_station_data('TG_STAID000027.txt', date(1775, 1, 1), date(2014, 1, 1), False) # save SAT data tg_sat = g.copy_data() # anomalise to obtain SATA data g.anomalise() g_temp = DataField() # starting month and day sm = 7 sd = 28 # starting year of final window y = 365.25 sy = int(MIDDLE_YEAR - (WINDOW_LENGTH / y) / 2)
from src.data_class import load_station_data from src.mutual_information import mutual_information import numpy as np from datetime import date import matplotlib.pyplot as plt g = load_station_data('../data/TG_STAID000027.txt', date(1958,1,1), date(2015,11,1), False) g.get_data_of_precise_length(14976, start_date = date(1958, 1, 1), apply_to_data = True) mi = [mutual_information(g.data, g.data)] for d in np.arange(1,401,1): mi.append(mutual_information(g.data[d:], g.data[:-d])) plt.plot(mi) plt.show() # # g.wavelet(1, period_unit = 'y') # # reconstruction = g.amplitude * np.cos(g.phase) # # fit_x = np.vstack([reconstruction, np.ones(reconstruction.shape[0])]).T # # m, c = np.linalg.lstsq(fit_x, g.data)[0] # # amplitude = m * g.amplitude + c # g.wavelet(8, period_unit = 'y') # g.anomalise()
else: plt.show() PERIOD = 8 WINDOW_LENGTH = 13462 # 13462, 16384 MIDDLE_YEAR = 1965 # year around which the window will be deployed JUST_SCALING = True PLOT = True WAVES_PERCENTIL = 80 DATA = 0 # 0 - original station, 1 - closest ERA, 2 - closest ECA&D # load whole data - load SAT data if DATA == 0: g = load_station_data("../data/TG_STAID000027.txt", date(1775, 1, 1), date(2014, 1, 1), False) elif DATA == 1: g = load_bin_data("../data/ERA_time_series_50.0N_15.0E.bin", date(1940, 1, 1), date(2014, 1, 1), False) elif DATA == 2: g = load_bin_data("../data/ECA&D_time_series_50.1N_14.4E.bin", date(1940, 1, 1), date(2014, 1, 1), False) # save SAT data tg_sat = g.copy_data() # anomalise to obtain SATA data g.anomalise() if DATA == 0: g_max = load_station_data("../data/TX_STAID000027.txt", date(1775, 1, 1), date(2014, 1, 1), False) g_min = load_station_data("../data/TN_STAID000027.txt", date(1775, 1, 1), date(2014, 1, 1), False) elif DATA == 1: g_max = load_bin_data("../data/ERA_time_series_50.0N_15.0E.bin", date(1940, 1, 1), date(2014, 1, 1), False) g_min = load_bin_data("../data/ERA_time_series_50.0N_15.0E.bin", date(1940, 1, 1), date(2014, 1, 1), False)
diff_ax = (0, 1.5) # means -> 0, 2, var -> 1, 8 mean_ax = (18, 22) # means -> -1, 1.5, var -> 9, 18 PLOT = True PLOT_PHASE = False BEGIN = True # if True, phase will be rewritten as in the beggining, otherwise as in the end PHASE_ANALYSIS_YEAR = None # year of detailed analysis - phase and bins, or None AA = False SAME_BINS = False CONDITION = False SEASON = None AMPLITUDE = False ## loading data ## PRG g = load_station_data( "../data/TG_STAID000027.txt", date(1775, 1, 1), date(2015, 1, 1), ANOMALISE ) # 15-01-1924 if 32k, 28-04-1834 if 64k if AMPLITUDE: g_amp = load_station_data("../data/TG_STAID000027.txt", date(1775, 1, 1), date(2015, 1, 1), False) ## HAMBURG -- TG_STAID000047, POTSDAM -- TG_STAID000054 # g = load_station_data('../data/TG_STAID000054.txt', date(1893,1,1), date(2014,1,1), ANOMALISE) # 15-01-1924 if 32k, 28-04-1834 if 64k # if AMPLITUDE: # g_amp = load_station_data('../data/TG_STAID000054.txt', date(1893,1,1), date(2014, 1, 1), False) # ERA # g = load_bin_data('../data/ERA_time_series_50.0N_15.0E.bin', date(1958,4,28), date(2013,10,1), ANOMALISE) # ECA # g = load_bin_data('../data/ECA&D_time_series_50.1N_14.4E.bin', date(1950,4,28), date(2013,10,1), ANOMALISE) g_working = DataField() g_surrs = DataField()
PERIOD = 8 PAST_UNTIL = 1930 # from which segment the average extremes should be computed WINDOW_LENGTH = 13462 # 13462, 16384 for surrogates only 13462 PLOT = True USE_SURR = True NUM_SURR = 100 # load whole data - load SAT data if USE_SURR: g = load_station_data('../data/TG_STAID000027.txt', date(1834, 7, 28), date(2014, 1, 1), False) # 1834-7-28 till 2014-1-1 = 64k g_for_avg = load_station_data('../data/TG_STAID000027.txt', date(1840, 4, 14), date(1930, 1, 1), False) # 1840-4-14 till 1930-1-1 = 32k else: g = load_station_data('../data/TG_STAID000027.txt', date(1775, 1, 1), date(2014, 1, 1), False) g_for_avg = load_station_data('../data/TG_STAID000027.txt', date(1775, 1, 1), date(2014, 1, 1), False) if not USE_SURR: # save SAT data tg_sat = g.copy_data() tg_avg_sat = g_for_avg.copy_data() # anomalise to obtain SATA data g.anomalise() g_for_avg.anomalise() g_for_avg.select_date(date(1775, 1, 1), date(PAST_UNTIL, 1, 1))
PERIOD = 8 AMP_PERIOD = 8 BINS = 8 ANOMALISE = True # amplitude from SAT / SATA SURR = True NUM_SURR = 1000 WORKERS = 3 SURR_TYPE = 'FT' # 65k # g = load_station_data('TG_STAID000027.txt', date(1834,4,27), date(2013,10,1), True) # g_amp = load_station_data('TG_STAID000027.txt', date(1834,4,27), date(2013,10,1), ANOMALISE) # 32k g = load_station_data('TG_STAID000027.txt', date(1958, 1, 1), date(2013, 11, 10), True) # date(1924,1,14), date(2013,10,1) g_amp = load_station_data('TG_STAID000027.txt', date(1958, 1, 1), date(2013, 11, 10), ANOMALISE) g_data = DataField() k0 = 6. # wavenumber of Morlet wavelet used in analysis y = 365.25 # year in days fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0, 2))) period = PERIOD * y # frequency of interest s0 = period / fourier_factor # get scale # wavelet - data wave, _, _, _ = wavelet_analysis.continous_wavelet(g.data, 1, False, wavelet_analysis.morlet,
plt.savefig(fname) else: plt.show() PERIOD = 8 WINDOW_LENGTH = 13462 # 13462, 16384 MIDDLE_YEAR = 1965 # year around which the window will be deployed JUST_SCALING = True PLOT = True WAVES_PERCENTIL = 80 DATA = 0 # 0 - original station, 1 - closest ERA, 2 - closest ECA&D # load whole data - load SAT data if DATA == 0: g = load_station_data('../data/TG_STAID000027.txt', date(1775, 1, 1), date(2014, 1, 1), False) elif DATA == 1: g = load_bin_data('../data/ERA_time_series_50.0N_15.0E.bin', date(1940, 1, 1), date(2014, 1, 1), False) elif DATA == 2: g = load_bin_data('../data/ECA&D_time_series_50.1N_14.4E.bin', date(1940, 1, 1), date(2014, 1, 1), False) # save SAT data tg_sat = g.copy_data() # anomalise to obtain SATA data g.anomalise() if DATA == 0: g_max = load_station_data('../data/TX_STAID000027.txt', date(1775, 1, 1), date(2014, 1, 1), False) g_min = load_station_data('../data/TN_STAID000027.txt', date(1775, 1, 1),
diff_ax = (0, 1.5) # means -> 0, 2, var -> 1, 8 mean_ax = (18, 22) # means -> -1, 1.5, var -> 9, 18 PLOT = True PLOT_PHASE = False BEGIN = True # if True, phase will be rewritten as in the beggining, otherwise as in the end PHASE_ANALYSIS_YEAR = None # year of detailed analysis - phase and bins, or None AA = False SAME_BINS = False CONDITION = False SEASON = None AMPLITUDE = False ## loading data ## PRG g = load_station_data('../data/TG_STAID000027.txt', date(1775, 1, 1), date(2015, 1, 1), ANOMALISE) # 15-01-1924 if 32k, 28-04-1834 if 64k if AMPLITUDE: g_amp = load_station_data('../data/TG_STAID000027.txt', date(1775, 1, 1), date(2015, 1, 1), False) ## HAMBURG -- TG_STAID000047, POTSDAM -- TG_STAID000054 # g = load_station_data('../data/TG_STAID000054.txt', date(1893,1,1), date(2014,1,1), ANOMALISE) # 15-01-1924 if 32k, 28-04-1834 if 64k # if AMPLITUDE: # g_amp = load_station_data('../data/TG_STAID000054.txt', date(1893,1,1), date(2014, 1, 1), False) # ERA #g = load_bin_data('../data/ERA_time_series_50.0N_15.0E.bin', date(1958,4,28), date(2013,10,1), ANOMALISE) # ECA #g = load_bin_data('../data/ECA&D_time_series_50.1N_14.4E.bin', date(1950,4,28), date(2013,10,1), ANOMALISE) g_working = DataField()
PERIOD = 8 AMP_PERIOD = 8 BINS = 8 ANOMALISE = True # amplitude from SAT / SATA SURR = True NUM_SURR = 1000 WORKERS = 3 SURR_TYPE = 'FT' # 65k # g = load_station_data('TG_STAID000027.txt', date(1834,4,27), date(2013,10,1), True) # g_amp = load_station_data('TG_STAID000027.txt', date(1834,4,27), date(2013,10,1), ANOMALISE) # 32k g = load_station_data('TG_STAID000027.txt', date(1958, 1, 1), date(2013, 11, 10), True) # date(1924,1,14), date(2013,10,1) g_amp = load_station_data('TG_STAID000027.txt', date(1958, 1, 1), date(2013, 11, 10), ANOMALISE) g_data = DataField() k0 = 6. # wavenumber of Morlet wavelet used in analysis y = 365.25 # year in days fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0,2))) period = PERIOD * y # frequency of interest s0 = period / fourier_factor # get scale # wavelet - data wave, _, _, _ = wavelet_analysis.continous_wavelet(g.data, 1, False, wavelet_analysis.morlet, dj = 0, s0 = s0, j1 = 0, k0 = k0) # perform wavelet phase = np.arctan2(np.imag(wave), np.real(wave)) # get phases from oscillatory modes period = AMP_PERIOD * 365.25 # frequency of interest
from src import wavelet_analysis from src.data_class import load_station_data import numpy as np from datetime import date import matplotlib.pyplot as plt import matplotlib.dates as mdates AMP_PERIODS = [1, 8] # g_amp = load_station_data('TG_STAID000027.txt', date(1924,1,14), date(2013,10,1), False) # g_amp_sata = load_station_data('TG_STAID000027.txt', date(1924,1,14), date(2013,10,1), True) g_amp = load_station_data('../data/TG_STAID000027.txt', date(1775, 1, 1), date(2014, 1, 1), False) g_amp_sata = load_station_data('../data/TG_STAID000027.txt', date(1775, 1, 1), date(2014, 1, 1), True) k0 = 6. # wavenumber of Morlet wavelet used in analysis y = 365.25 # year in days fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0, 2))) result = dict() start_cut = date(1779, 1, 1) # _, _, idx = g_amp.get_data_of_precise_length('16k', start_cut, None, False) idx = g_amp.select_date(start_cut, date(2010, 1, 1), apply_to_data=False) fields = [g_amp, g_amp_sata] for i in range(len(AMP_PERIODS)): period = AMP_PERIODS[i] * 365.25 # frequency of interest s0_amp = period / fourier_factor # get scale wave, _, _, _ = wavelet_analysis.continous_wavelet(
def running_mean(arr, aver): out = np.zeros((arr.shape[0] - aver + 1, )) for i in range(out.shape[0]): out[i] = np.mean(arr[i:i + aver]) return out def get_equidistant_bins(): return np.array(np.linspace(-np.pi, np.pi, 9)) BINS_COND = True g = load_station_data('TG_STAID000027.txt', date(1834, 4, 28), date(2013, 10, 1), False) g_max = load_station_data('TX_STAID000027.txt', date(1834, 4, 28), date(2013, 10, 1), False) g_min = load_station_data('TN_STAID000027.txt', date(1834, 4, 28), date(2013, 10, 1), False) if BINS_COND: k0 = 6. # wavenumber of Morlet wavelet used in analysis y = 365.25 # year in days fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0, 2))) period = 8 * y # frequency of interest s0 = period / fourier_factor # get scale wave, _, _, _ = wavelet_analysis.continous_wavelet( g.data, 1, False, wavelet_analysis.morlet, dj=0, s0=s0, j1=0, k0=k0) # perform wavelet phase = np.arctan2(np.imag(wave), np.real(wave))