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))
Exemple #2
0

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):
Exemple #4
0
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
Exemple #6
0
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,))
Exemple #8
0
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
Exemple #9
0
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
Exemple #10
0
    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 = []
Exemple #11
0

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 
Exemple #13
0
        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
Exemple #14
0
"""
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)
Exemple #16
0
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))
Exemple #21
0
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
Exemple #25
0
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(
Exemple #26
0
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))