Ejemplo n.º 1
0
def load_neutron_NESDIS_data(fname, start_date, end_date, anom=True):

    raw = np.loadtxt(fname, skiprows=2)
    data = []
    time = []
    for year in range(raw.shape[0]):
        for month in range(1, 13):
            dat = float(raw[year, month])
            if dat == 9999.:
                dat = (float(raw[year, month - 2]) + float(
                    raw[year, month - 1]) + float(raw[year, month + 1]) +
                       float(raw[year, month + 2])) / 4.
            data.append(dat)
            time.append(date(int(raw[year, 0]), month, 1).toordinal())

    g = DataField(data=np.array(data), time=np.array(time))
    g.location = ('%s cosmic data' % (fname[32].upper() + fname[33:-4]))

    g.select_date(start_date, end_date)

    if anom:
        g.anomalise()

    if NUM_SURR != 0:
        g_surr = SurrogateField()
        seasonality = g.get_seasonality()
        g_surr.copy_field(g)

        g.return_seasonality(seasonality[0], seasonality[1], None)
    else:
        g_surr, seasonality = None, None

    return g, g_surr, seasonality
Ejemplo n.º 2
0
def load_CR_climax_daily_data(fname, start_date, end_date, anom=False):
    from dateutil.relativedelta import relativedelta

    raw = np.loadtxt(fname)
    time = []
    datenow = date(1994, 1, 1)
    delta = timedelta(days=1)
    for t in range(raw.shape[0]):
        time.append(datenow.toordinal())

        datenow += delta

    print raw.shape
    print len(time)
    g = DataField(data=np.array(raw), time=np.array(time))
    g.location = 'Climax, CO cosmic data'

    g.select_date(start_date, end_date)

    if anom:
        g.anomalise()

    if NUM_SURR != 0:
        g_surr = SurrogateField()
        seasonality = g.get_seasonality(True)
        g_surr.copy_field(g)

        g.return_seasonality(seasonality[0], seasonality[1], seasonality[2])
    else:
        g_surr, seasonality = None, None

    return g, g_surr, seasonality
Ejemplo n.º 3
0
def load_neutron_NESDIS_data(fname, start_date, end_date, anom = True):


    raw = np.loadtxt(fname, skiprows = 2)
    data = []
    time = []
    for year in range(raw.shape[0]):
        for month in range(1,13):
            dat = float(raw[year, month])
            if dat == 9999.:
                dat = (float(raw[year, month-2]) + float(raw[year, month-1]) + float(raw[year, month+1]) + float(raw[year, month+2])) / 4.
            data.append(dat)
            time.append(date(int(raw[year,0]), month, 1).toordinal())

    g = DataField(data = np.array(data), time = np.array(time))
    g.location = ('%s cosmic data' % (fname[32].upper() + fname[33:-4]))

    g.select_date(start_date, end_date)

    if anom:
        g.anomalise()

    if NUM_SURR != 0:
        g_surr = SurrogateField()
        seasonality = g.get_seasonality()
        g_surr.copy_field(g)

        g.return_seasonality(seasonality[0], seasonality[1], None)
    else:
        g_surr, seasonality = None, None

    return g, g_surr, seasonality
Ejemplo n.º 4
0
def load_CR_climax_daily_data(fname, start_date, end_date, anom = False):
    from dateutil.relativedelta import relativedelta

    raw = np.loadtxt(fname)
    time = []
    datenow = date(1994, 1, 1)
    delta = timedelta(days = 1)
    for t in range(raw.shape[0]):
        time.append(datenow.toordinal())

        datenow += delta

    print raw.shape
    print len(time)
    g = DataField(data = np.array(raw), time = np.array(time))
    g.location = 'Climax, CO cosmic data'

    g.select_date(start_date, end_date)

    if anom:
        g.anomalise()

    if NUM_SURR != 0:
        g_surr = SurrogateField()
        seasonality = g.get_seasonality(True)
        g_surr.copy_field(g)

        g.return_seasonality(seasonality[0], seasonality[1], seasonality[2])
    else:
        g_surr, seasonality = None, None

    return g, g_surr, seasonality
Ejemplo n.º 5
0
def load_cosmic_data(fname,
                     start_date,
                     end_date,
                     anom=True,
                     daily=False,
                     corrected=True):
    # corrected stands for if use corrected data or not
    from dateutil.relativedelta import relativedelta

    raw = open(fname).read()
    lines = raw.split('\n')
    data = []
    time = []
    d = date(int(lines[0][:4]), int(lines[0][5:7]), 1)
    if not daily:
        delta = relativedelta(months=+1)
    elif daily:
        delta = timedelta(days=1)
    for line in lines:
        row = line.split(' ')
        if len(row) < 6:
            continue
        time.append(d.toordinal())
        if corrected:
            data.append(float(row[4]))
        else:
            data.append(float(row[5]))
        d += delta

    g = DataField(data=np.array(data), time=np.array(time))
    g.location = 'Oulu cosmic data'

    g.select_date(start_date, end_date)

    if anom:
        g.anomalise()

    if NUM_SURR != 0:
        g_surr = SurrogateField()
        seasonality = g.get_seasonality(True)
        g_surr.copy_field(g)

        g.return_seasonality(seasonality[0], seasonality[1], seasonality[2])
    else:
        g_surr, seasonality = None, None

    return g, g_surr, seasonality
Ejemplo n.º 6
0
def load_nino34_wavelet_phase(start_date, end_date, anom=True):
    raw = np.loadtxt('/home/nikola/Work/phd/data/nino34monthly.txt')
    data = []
    time = []
    for y in range(raw.shape[0]):
        for m in range(1, 13):
            dat = float(raw[y, m])
            data.append(dat)
            time.append(date(int(raw[y, 0]), m, 1).toordinal())

    g = DataField(data=np.array(data), time=np.array(time))
    g.location = "NINO3.4"
    g.select_date(start_date, end_date)

    if anom:
        g.anomalise()

    k0 = 6.  # wavenumber of Morlet wavelet used in analysis
    fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0, 2)))
    per = PERIOD * 12  # frequency of interest
    s0 = per / fourier_factor  # get scale

    wave, _, _, _ = wvlt.continous_wavelet(g.data,
                                           1,
                                           False,
                                           wvlt.morlet,
                                           dj=0,
                                           s0=s0,
                                           j1=0,
                                           k0=6.)
    phase = np.arctan2(np.imag(wave), np.real(wave))[0, :]

    return phase
Ejemplo n.º 7
0
def load_cosmic_data(fname, start_date, end_date, anom = True, daily = False, corrected = True):
    # corrected stands for if use corrected data or not
    from dateutil.relativedelta import relativedelta

    raw = open(fname).read()
    lines = raw.split('\n')
    data = []
    time = []
    d = date(int(lines[0][:4]), int(lines[0][5:7]), 1)
    if not daily:
        delta = relativedelta(months = +1)
    elif daily:
        delta = timedelta(days = 1)
    for line in lines:
        row = line.split(' ')
        if len(row) < 6:
            continue
        time.append(d.toordinal())
        if corrected:
            data.append(float(row[4]))
        else:
            data.append(float(row[5]))
        d += delta

    g = DataField(data = np.array(data), time = np.array(time))
    g.location = 'Oulu cosmic data'

    g.select_date(start_date, end_date)

    if anom:
        g.anomalise()

    g.data = X[:, 0].copy()

    if NUM_SURR != 0:
        g_surr = SurrogateField()
        seasonality = g.get_seasonality(True)
        g_surr.copy_field(g)

        g.return_seasonality(seasonality[0], seasonality[1], seasonality[2])
    else:
        g_surr, seasonality = None, None

    return g, g_surr, seasonality
Ejemplo n.º 8
0
def load_nino34_wavelet_phase(start_date, end_date, anom = True):
    raw = np.loadtxt('/home/nikola/Work/phd/data/nino34monthly.txt')
    data = []
    time = []
    for y in range(raw.shape[0]):
        for m in range(1,13):
            dat = float(raw[y, m])
            data.append(dat)
            time.append(date(int(raw[y, 0]), m, 1).toordinal())

    g = DataField(data = np.array(data), time = np.array(time))
    g.location = "NINO3.4"
    g.select_date(start_date, end_date)

    if anom:
        g.anomalise()

    k0 = 6. # wavenumber of Morlet wavelet used in analysis
    fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0,2)))
    per = PERIOD * 12 # frequency of interest
    s0 = per / fourier_factor # get scale

    wave, _, _, _ = wvlt.continous_wavelet(g.data, 1, False, wvlt.morlet, dj = 0, s0 = s0, j1 = 0, k0 = 6.)
    phase = np.arctan2(np.imag(wave), np.real(wave))[0, :]

    return phase
Ejemplo n.º 9
0
    def __init__(self, fname, varname, start_date, end_date, lats, lons, level = None, dataset = "NCEP", sampling = 'monthly', anom = False, pickled = False, verbose = False):
        """
        Initialisation of the class.
        """

        # if sampling == 'monthly':
        #     self.g = load_NCEP_data_monthly(fname, varname, start_date, end_date, None, None, None, anom)
        # elif sampling == 'daily':
        #     self.g = load_NCEP_data_daily(fname, varname, start_date, end_date, None, None, None, anom)

        DataField.__init__(self)
        if not pickled:
            self.load(fname, varname, dataset = dataset, print_prog = False)
        else:
            self.load_field(fname)
            self.var_name = varname
        self.select_date(start_date, end_date)
        self.select_lat_lon(lats, lons)
        if level is not None:
            self.select_level(level)
        if anom:
            self.anomalise()
        day, month, year = self.extract_day_month_year()
        if verbose:
            print("[%s] NCEP data loaded with shape %s. Date range is %d.%d.%d - %d.%d.%d inclusive." 
                    % (str(datetime.now()), str(self.data.shape), day[0], month[0], 
                       year[0], day[-1], month[-1], year[-1]))


        self.phase = None
        self.amplitude = None
        self.wave = None
        self.adjacency_matrix = None

        self.num_lats = self.lats.shape[0]
        self.num_lons = self.lons.shape[0]
        self.sampling = sampling
Ejemplo n.º 10
0
net.get_continuous_phase(pool = pool)
net.get_phase_fluctuations(rewrite = True, pool = pool)
pool.close()
pool.join()

# index_correlations = {}
# index_datas = {}

# # SURROGATES
# for index, ndx_type, start_date, end_year in zip(INDICES, DATE_TYPE, START_DATES, END_YEARS):
    # load index
    # print index

    # if index != 'NINO3.4':
index_data = DataField()
raw = np.loadtxt("%sNAO.station.monthly.1865-2016.txt" % (path_to_data))
raw = raw[:, 1:]
index_data.data = raw.reshape(-1)
index_data.create_time_array(date_from = date(1865, 1, 1), sampling = 'm')
index_data.select_date(date(1951, 1, 1), date(2014, 1, 1))
index_data.anomalise()
index_correlations = get_corrs(net, index_data)

    # with open("20CRtemp-phase-fluct-corr-with-%sindex-1950-2014.bin" % index, "wb") as f:
        # cPickle.dump({('%scorrs' % index) : index_correlations[index].reshape(np.prod(index_correlations[index].shape))}, f)

    # # plotting
    # tit = ("ECA&D annual phase SSA RC fluctuations x %s correlations" % index)
    # fname = ("../scale-nets/ECAD-SAT-annual-phase-fluc-SSA-RC-%scorrs.png" % index)
    # net.quick_render(field_to_plot = index_correlations[index], tit = tit, symm = True, whole_world = False, fname = fname)
Ejemplo n.º 11
0
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)

# get wvlt window
start = g.find_date_ndx(date(sy - 4, sm, sd))
end = start + 16384 if WINDOW_LENGTH < 16000 else start + 32768
g.data = g.data[start:end]
g.time = g.time[start:end]
tg_sat = tg_sat[start:end]
Ejemplo n.º 12
0
                      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()
if AMPLITUDE:
    g_working_amp = DataField()
    g_surrs_amp = DataField()
if MOMENT == 'mean':
    func = np.mean
    if AMPLITUDE:
        diff_ax = (0, 2)  # means -> 0, 2, var -> 1, 8
        mean_ax = (18, 22)  # means -> -1, 1.5, var -> 9, 18
    else:
        diff_ax = (0, 5)
        mean_ax = (-1, 1.5)
elif MOMENT == 'std':
    func = np.var
    diff_ax = (1, 15)
Ejemplo n.º 13
0
## -----------------
ANOMALISE = True
PERIOD = 8  # years, period of wavelet
WINDOW_LENGTH = 16384  # 13462, 16384
WINDOW_SHIFT = 1  # years, delta in the sliding window analysis
MEANS = True  # if True, compute conditional means, if False, compute conditional variance
WORKERS = 4
NUM_SURR = 50  # how many surrs will be used to evaluate
SURR_TYPE = 'MF'
diff_ax = (0, 8)  # means -> 0, 2, var -> 1, 8
mean_ax = (-1, 1)  # means -> -1, 1.5, var -> 9, 18

g = load_station_data('TG_STAID000027.txt', date(1834, 7, 28),
                      date(2014, 1, 1), ANOMALISE)
g_working = DataField()
g_surrs = DataField()

TS_LEN = g.data.shape[0]

# map coeffs to numpy array
if RANDOM_COEFFS:
    A_COEFFS = []
    for i in range(k):
        A_COEFFS.append((2 * np.random.rand(1) - 1)[0])
a_coeffs = np.array(A_COEFFS)

# initialize first k time points to noise
ts = np.zeros((TS_LEN, ))
for i in range(k):
    ts[i] = np.random.normal(0, SIGMA_NOISE, 1)
Ejemplo n.º 14
0
#     "grid" : "2.5/2.5",
#     "time" : "00/06/12/18", ## daily
#     "date" : "20010101/to/20131231",
#     "area" : "50/-15/30/5", ## north/west/south/east
#     "type" : "an",
#     "class" : "e4",
#     "format" : "netcdf",
#     "padding" : "0",
#     "target" : "test.nc"
#    })

#==============================================================================

# load ERA-40 as g1 and ERA-Interim as g2
print("[%s] Loading data..." % (str(datetime.now())))
g1 = DataField()
g2 = DataField()

g1.load('Spain.ERA.58-01.nc', 't2m', 'ERA-40')
g2.load('Spain.ERA.01-13.nc', 't2m', 'ERA-40')

# concatenate
last = g1.time[-1]
idx = np.where(g2.time == last)[0] + 1
ndays = g1.time.shape[0] + g2.time[idx:].shape[0]

data = np.zeros((ndays, g1.lats.shape[0], g1.lons.shape[0]))
time = np.zeros((ndays, ))

data[:g1.time.shape[0], ...] = g1.data
data[g1.time.shape[0]:, ...] = g2.data[idx:]
Ejemplo n.º 15
0
net.get_continuous_phase(pool=pool)
net.get_phase_fluctuations(rewrite=True, pool=pool)
pool.close()
pool.join()

# index_correlations = {}
# index_datas = {}

# # SURROGATES
# for index, ndx_type, start_date, end_year in zip(INDICES, DATE_TYPE, START_DATES, END_YEARS):
# load index
# print index

# if index != 'NINO3.4':
index_data = DataField()
raw = np.loadtxt("%sNAO.station.monthly.1865-2016.txt" % (path_to_data))
raw = raw[:, 1:]
index_data.data = raw.reshape(-1)
index_data.create_time_array(date_from=date(1865, 1, 1), sampling='m')
index_data.select_date(date(1951, 1, 1), date(2014, 1, 1))
index_data.anomalise()
index_correlations = get_corrs(net, index_data)

# with open("20CRtemp-phase-fluct-corr-with-%sindex-1950-2014.bin" % index, "wb") as f:
# cPickle.dump({('%scorrs' % index) : index_correlations[index].reshape(np.prod(index_correlations[index].shape))}, f)

# # plotting
# tit = ("ECA&D annual phase SSA RC fluctuations x %s correlations" % index)
# fname = ("../scale-nets/ECAD-SAT-annual-phase-fluc-SSA-RC-%scorrs.png" % index)
# net.quick_render(field_to_plot = index_correlations[index], tit = tit, symm = True, whole_world = False, fname = fname)
Ejemplo n.º 16
0
                    #fontsize = 8.5)
    #m.drawmeridians(np.arange(lons[0], lons[-1]+1, 10), dashes = [1,3], labels = [0,0,0,0], color = (.2, .2, .2), 
                    #fontsize = 8.5)
    plt.title(title)
    cbar = plt.colorbar(format = r"%2.2f", shrink = 0.75, ticks = np.arange(mi, ma + step, (ma-mi)/8), 
                        aspect = 25, drawedges = False)
    cbar.set_label(cbar_label)
    cbar_obj = plt.getp(cbar.ax.axes, 'yticklabels')
    plt.setp(cbar_obj, fontsize = 10, color = (.1, .1, .1))
    if filename != None:
        plt.savefig(filename)
    else:
        plt.show()
        
        
g = DataField()
g.load('tg_0.25deg_reg_v9.0.nc', 'tg')
means = True
daily = False

if means:
    idx = 0
    y = 1950
    while idx < g.data.shape[0]:
        idx2 = g.find_date_ndx(date(y,1,1))
        render_geo_field(g.data[idx:idx2, ...], g.lats, g.lons, None, None, False, 'Yearly mean temperature %s' % str(y), 'temperature [$^{\circ}C$]', 'imgs/temp_mean%s.png' % str(y))
        y += 1
        idx = idx2

if daily:
    idx = g.find_date_ndx(date(2012,1,1))
Ejemplo n.º 17
0
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
Ejemplo n.º 18
0
## -----------------
ANOMALISE = True
PERIOD = 8 # years, period of wavelet
WINDOW_LENGTH = 16384 # 13462, 16384
WINDOW_SHIFT = 1 # years, delta in the sliding window analysis
MEANS = True # if True, compute conditional means, if False, compute conditional variance
WORKERS = 4
NUM_SURR = 50 # how many surrs will be used to evaluate
SURR_TYPE = 'MF'
diff_ax = (0, 8) # means -> 0, 2, var -> 1, 8
mean_ax = (-1, 1) # means -> -1, 1.5, var -> 9, 18


g = load_station_data('TG_STAID000027.txt', date(1834,7,28), date(2014,1,1), ANOMALISE)
g_working = DataField()
g_surrs = DataField()

TS_LEN = g.data.shape[0]


# map coeffs to numpy array
if RANDOM_COEFFS:
    A_COEFFS = []
    for i in range(k):
        A_COEFFS.append((2*np.random.rand(1) - 1)[0])
a_coeffs = np.array(A_COEFFS)

# initialize first k time points to noise
ts = np.zeros((TS_LEN,))
for i in range(k):
Ejemplo n.º 19
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)
elif DATA == 2:
    g_max = load_bin_data('../data/ECA&D_time_series_50.1N_14.4E.bin',
                          date(1940, 1, 1), date(2014, 1, 1), False)
    g_min = load_bin_data('../data/ECA&D_time_series_50.1N_14.4E.bin',
                          date(1940, 1, 1), date(2014, 1, 1), False)

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)

# get wvlt window
start = g.find_date_ndx(date(sy - 4, sm, sd))
end = start + 16384 if WINDOW_LENGTH < 16000 else start + 32768
g.data = g.data[start:end]
g.time = g.time[start:end]
g_max.data = g_max.data[start:end]
g_max.time = g_max.time[start:end]
Ejemplo n.º 20
0
@author: Nikola Jajcay
"""

from src.oscillatory_time_series import OscillatoryTimeSeries
from src.data_class import DataField
from datetime import date, timedelta
import matplotlib.pyplot as plt
import numpy as np
from surrogates.surrogates import SurrogateField
import calendar


ts = OscillatoryTimeSeries('TG_STAID000027.txt', date(1834,7,28), date(2014,1,1), False)
sg = SurrogateField()
g = DataField()


daily_var = np.zeros((365,3))
mean, var_data, trend = ts.g.get_seasonality(True)
sg.copy_field(ts.g)

#MF
sg.construct_multifractal_surrogates()
sg.add_seasonality(mean, var_data, trend)

g.data = sg.surr_data.copy()
g.time = sg.time.copy()

_, var_surr_MF, _ = g.get_seasonality(True)
Ejemplo n.º 21
0
ev_start_year = 1861 if USE_SURR else 1802
    
for MIDDLE_YEAR in range(ev_start_year, 1988):
    
    if USE_SURR:
        
        result_temp_surr = np.zeros((NUM_SURR, 8,2))
        for surr in range(NUM_SURR):
            sg.construct_surrogates_with_residuals()
            sg.add_seasonality(mean[:-1], var[:-1], trend[:-1]) # so SAT data
            g.data = sg.surr_data.copy()
            tg_sat = g.copy_data()
            g.time = g.time[:-1]
            g.anomalise()
            
            g_temp = DataField()
            tg_temp = tg_sat.copy()
            sy = int(MIDDLE_YEAR - (WINDOW_LENGTH/year)/2)
            g_temp.data = g.data.copy()
            g_temp.time = g.time.copy()
            start = g_temp.find_date_ndx(date(sy - 4, sm, sd))
            end = start + 16384 if WINDOW_LENGTH < 16000 else start + 32768
           
            g_temp.data = g_temp.data[start : end]
            g_temp.time = g_temp.time[start : end]
            tg_temp = tg_temp[start : end]
            
            k0 = 6. # wavenumber of Morlet wavelet used in analysis
            fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0,2)))
            period = PERIOD * year # frequency of interest
            s0 = period / fourier_factor # get scale
Ejemplo n.º 22
0
# 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)
elif DATA == 2:
    g_max = load_bin_data("../data/ECA&D_time_series_50.1N_14.4E.bin", date(1940, 1, 1), date(2014, 1, 1), False)
    g_min = load_bin_data("../data/ECA&D_time_series_50.1N_14.4E.bin", date(1940, 1, 1), date(2014, 1, 1), False)

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)

# get wvlt window
start = g.find_date_ndx(date(sy - 4, sm, sd))
end = start + 16384 if WINDOW_LENGTH < 16000 else start + 32768
g.data = g.data[start:end]
g.time = g.time[start:end]
g_max.data = g_max.data[start:end]
Ejemplo n.º 23
0
#     "grid" : "2.5/2.5",
#     "time" : "00/06/12/18", ## daily
#     "date" : "20010101/to/20131231",
#     "area" : "50/-15/30/5", ## north/west/south/east
#     "type" : "an",
#     "class" : "e4",
#     "format" : "netcdf",
#     "padding" : "0",
#     "target" : "test.nc"
#    })
    
#==============================================================================

# load ERA-40 as g1 and ERA-Interim as g2
print("[%s] Loading data..." % (str(datetime.now())))
g1 = DataField()
g2 = DataField()

g1.load('Spain.ERA.58-01.nc', 't2m', 'ERA-40')
g2.load('Spain.ERA.01-13.nc', 't2m', 'ERA-40')

# concatenate
last = g1.time[-1]
idx = np.where(g2.time == last)[0] + 1
ndays = g1.time.shape[0] + g2.time[idx:].shape[0]

data = np.zeros((ndays, g1.lats.shape[0], g1.lons.shape[0]))
time = np.zeros((ndays, ))

data[:g1.time.shape[0], ...] = g1.data
data[g1.time.shape[0]:, ...] = g2.data[idx:]
Ejemplo n.º 24
0
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
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
Ejemplo n.º 25
0
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()
if AMPLITUDE:
    g_working_amp = DataField()
    g_surrs_amp = DataField()
if MOMENT == "mean":
    func = np.mean
    if AMPLITUDE:
        diff_ax = (0, 2)  # means -> 0, 2, var -> 1, 8
        mean_ax = (18, 22)  # means -> -1, 1.5, var -> 9, 18
    else:
        diff_ax = (0, 5)
        mean_ax = (-1, 1.5)
elif MOMENT == "std":
    func = np.var
    diff_ax = (1, 15)
Ejemplo n.º 26
0
#                             [LON - 5, LON + 5], False, parts = 3)
GRID_POINTS = [[50, 15], [50, 12.5], [52.5, 12.5], [52.5, 15]]

for lat, lon in GRID_POINTS:

    g = load_NCEP_data_monthly('../data/air.mon.mean.levels.nc',
                               'air',
                               date(1948, 1, 1),
                               date(2014, 1, 1), [lat - 1, lat + 1],
                               [lon - 1, lon + 1],
                               level=LEVEL,
                               anom=False)

    print g.data.shape

    lat_arg = np.argmin(np.abs(LAT - g.lats))
    lon_arg = np.argmin(np.abs(LON - g.lons))

    ts = g.data[:, lat_arg, lon_arg].copy()
    time = g.time.copy()
    loc = ("GRID | lat: %.1f, lon: %.1f" % (g.lats[lat_arg], g.lons[lon_arg]))
    g_grid = DataField(data=ts, time=time)
    g_grid.location = loc

    with open("%s_time_series_%.1fN_%.1fE.bin" % ('NCEP30hPa', lat, lon),
              'wb') as f:
        cPickle.dump({'g': g_grid}, f, protocol=cPickle.HIGHEST_PROTOCOL)

print("[%s] Dumped time-series from %.1f N and %.1f E." %
      (str(datetime.now()), g.lats[lat_arg], g.lons[lon_arg]))
Ejemplo n.º 27
0
    plt.title(title)
    cbar = plt.colorbar(format=r"%2.2f",
                        shrink=0.75,
                        ticks=np.arange(mi, ma + step, (ma - mi) / 8),
                        aspect=25,
                        drawedges=False)
    cbar.set_label(cbar_label)
    cbar_obj = plt.getp(cbar.ax.axes, 'yticklabels')
    plt.setp(cbar_obj, fontsize=10, color=(.1, .1, .1))
    if filename != None:
        plt.savefig(filename)
    else:
        plt.show()


g = DataField()
g.load('tg_0.25deg_reg_v9.0.nc', 'tg')
means = True
daily = False

if means:
    idx = 0
    y = 1950
    while idx < g.data.shape[0]:
        idx2 = g.find_date_ndx(date(y, 1, 1))
        render_geo_field(g.data[idx:idx2, ...], g.lats, g.lons, None, None,
                         False, 'Yearly mean temperature %s' % str(y),
                         'temperature [$^{\circ}C$]',
                         'imgs/temp_mean%s.png' % str(y))
        y += 1
        idx = idx2
Ejemplo n.º 28
0
        # 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

if AMPLITUDE:
    period = 8 * 365.25 # frequency of interest
Ejemplo n.º 29
0
def _corrs_surrs_ind(args):
    index_surr = DataField()
    index_surr.data = get_single_FT_surrogate(index_data.data)
    index_correlations_surrs = get_corrs(net, index_surr)

    return index_correlations_surrs
Ejemplo n.º 30
0
                           date(2015, 1, 1),
                           None,
                           None,
                           0,
                           dataset="NCEP",
                           sampling='monthly',
                           anom=False)

pool = Pool(NUM_WORKERS)
net.wavelet(1, 'y', pool=pool, cut=1)
net.get_continuous_phase(pool=pool)
net.get_phase_fluctuations(rewrite=True, pool=pool)
pool.close()
pool.join()

nao = DataField()
raw = np.loadtxt("%sWeMO.monthly.1821-2013.txt" % (path_to_data))
raw = raw[:, 1:]
nao.data = raw.reshape(-1)
nao.create_time_array(date_from=date(1821, 1, 1), sampling='m')
nao.select_date(date(1949, 1, 1), date(2014, 1, 1))
nao.anomalise()
jfm_index = nao.select_months([1, 2, 3], apply_to_data=False)

jfm_nao = nao.data[jfm_index]
_, _, y = nao.extract_day_month_year()
y = y[jfm_index]
ann_nao = []
for year in np.unique(y):
    ann_nao.append(np.mean(jfm_nao[np.where(year == y)[0]]))
Ejemplo n.º 31
0
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 
# wavelet - data    
if STATIONS == None:
    wave, _, _, _ = wavelet_analysis.continous_wavelet(g.data, 1, False, wavelet_analysis.morlet, dj = 0, s0 = s0, j1 = 0, k0 = k0) # perform wavelet
Ejemplo n.º 32
0
@author: Nikola Jajcay
"""

from src.oscillatory_time_series import OscillatoryTimeSeries
from src.data_class import DataField
from datetime import date, timedelta
import matplotlib.pyplot as plt
import numpy as np
from surrogates.surrogates import SurrogateField
import calendar

ts = OscillatoryTimeSeries('TG_STAID000027.txt', date(1834, 7, 28),
                           date(2014, 1, 1), False)
sg = SurrogateField()
g = DataField()

daily_var = np.zeros((365, 3))
mean, var_data, trend = ts.g.get_seasonality(True)
sg.copy_field(ts.g)

#MF
sg.construct_multifractal_surrogates()
sg.add_seasonality(mean, var_data, trend)

g.data = sg.surr_data.copy()
g.time = sg.time.copy()

_, var_surr_MF, _ = g.get_seasonality(True)

#FT
Ejemplo n.º 33
0
    axplot = [2.5, 5.5]
elif MOMENT == 'skewness':
    func = sts.skew
    axplot = [-0.5, 1]
elif MOMENT == 'kurtosis':
    func = sts.kurtosis
    axplot = [0, 5]

# load data - at least 32k of data because of surrogates
# 00047 - Hamburg, 00054 - Potsdam
g = load_station_data('TG_STAID000027.txt', date(1834, 4, 28),
                      date(2013, 10, 1), ANOMALISE)
if AMPLITUDE:
    g_amp = load_station_data('TG_STAID000027.txt', date(1834, 4, 28),
                              date(2013, 10, 1), False)
g_data = DataField()

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
# wavelet - data
wave, _, _, _ = wavelet_analysis.continous_wavelet(g.data,
                                                   1,
                                                   False,
                                                   wavelet_analysis.morlet,
                                                   dj=0,
Ejemplo n.º 34
0
ev_start_year = 1861 if USE_SURR else 1802

for MIDDLE_YEAR in range(ev_start_year, 1988):

    if USE_SURR:

        result_temp_surr = np.zeros((NUM_SURR, 8, 2))
        for surr in range(NUM_SURR):
            sg.construct_surrogates_with_residuals()
            sg.add_seasonality(mean[:-1], var[:-1], trend[:-1])  # so SAT data
            g.data = sg.surr_data.copy()
            tg_sat = g.copy_data()
            g.time = g.time[:-1]
            g.anomalise()

            g_temp = DataField()
            tg_temp = tg_sat.copy()
            sy = int(MIDDLE_YEAR - (WINDOW_LENGTH / year) / 2)
            g_temp.data = g.data.copy()
            g_temp.time = g.time.copy()
            start = g_temp.find_date_ndx(date(sy - 4, sm, sd))
            end = start + 16384 if WINDOW_LENGTH < 16000 else start + 32768

            g_temp.data = g_temp.data[start:end]
            g_temp.time = g_temp.time[start:end]
            tg_temp = tg_temp[start:end]

            k0 = 6.  # wavenumber of Morlet wavelet used in analysis
            fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0, 2)))
            period = PERIOD * year  # frequency of interest
            s0 = period / fourier_factor  # get scale
Ejemplo n.º 35
0
GRID_POINTS = [[50, 15], [50, 12.5], [52.5, 12.5], [52.5, 15]]

for lat, lon in GRID_POINTS:

    g = load_NCEP_data_monthly(
        "../data/air.mon.mean.levels.nc",
        "air",
        date(1948, 1, 1),
        date(2014, 1, 1),
        [lat - 1, lat + 1],
        [lon - 1, lon + 1],
        level=LEVEL,
        anom=False,
    )

    print g.data.shape

    lat_arg = np.argmin(np.abs(LAT - g.lats))
    lon_arg = np.argmin(np.abs(LON - g.lons))

    ts = g.data[:, lat_arg, lon_arg].copy()
    time = g.time.copy()
    loc = "GRID | lat: %.1f, lon: %.1f" % (g.lats[lat_arg], g.lons[lon_arg])
    g_grid = DataField(data=ts, time=time)
    g_grid.location = loc

    with open("%s_time_series_%.1fN_%.1fE.bin" % ("NCEP30hPa", lat, lon), "wb") as f:
        cPickle.dump({"g": g_grid}, f, protocol=cPickle.HIGHEST_PROTOCOL)

print ("[%s] Dumped time-series from %.1f N and %.1f E." % (str(datetime.now()), g.lats[lat_arg], g.lons[lon_arg]))
Ejemplo n.º 36
0
NUM_WORKERS = 20




net = ScaleSpecificNetwork('%sair.mon.mean.levels.nc' % path_to_data, 'air', 
                            date(1948,1,1), date(2016,1,1), None, None, 0, dataset = "NCEP", sampling = 'monthly', anom = False)

pool = Pool(NUM_WORKERS)
net.wavelet(1, 'y', pool = pool, cut = 1)
net.get_continuous_phase(pool = pool)
net.get_phase_fluctuations(rewrite = True, pool = pool)
pool.close()
pool.join()

nao = DataField()
raw = np.loadtxt("%sNAO.station.monthly.1865-2016.txt" % (path_to_data))
raw = raw[:, 1:]
nao.data = raw.reshape(-1)
nao.create_time_array(date_from = date(1865, 1, 1), sampling = 'm')
nao.select_date(date(1949, 1, 1), date(2015, 1, 1))
nao.anomalise()
jfm_index = nao.select_months([1,2,3], apply_to_data = False)

jfm_nao = nao.data[jfm_index]
_, _, y = nao.extract_day_month_year()
y = y[jfm_index]
ann_nao = []
for year in np.unique(y):
    ann_nao.append(np.mean(jfm_nao[np.where(year == y)[0]]))
    
Ejemplo n.º 37
0
def _corrs_surrs_ind(args):
    index_surr = DataField()
    index_surr.data = get_single_FT_surrogate(index_data.data)
    index_correlations_surrs = get_corrs(net, index_surr)

    return index_correlations_surrs
Ejemplo n.º 38
0
elif MOMENT == 'std':
    func = np.std
    axplot = [2.5, 5.5]
elif MOMENT == 'skewness':
    func = sts.skew
    axplot = [-0.5, 1]
elif MOMENT == 'kurtosis':
    func = sts.kurtosis
    axplot = [0, 5]

# load data - at least 32k of data because of surrogates
# 00047 - Hamburg, 00054 - Potsdam 
g = load_station_data('TG_STAID000027.txt', date(1834,4,28), date(2013,10,1), ANOMALISE)
if AMPLITUDE:
    g_amp = load_station_data('TG_STAID000027.txt', date(1834,4,28), date(2013, 10, 1), False)
g_data = DataField()


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 
# 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

if AMPLITUDE:
    period = 1 * 365.25 # frequency of interest
    s0_amp = period / fourier_factor # get scale