Browse Source

Update

master
Florian Boergel 4 months ago
parent
commit
9612204d73
  1. 9
      .gitlab-ci.yml
  2. 7
      drcstools/_modidx.py
  3. 40
      drcstools/stats.py
  4. 25
      drcstools/wavelet.py
  5. BIN
      lfca_rco_trunc120_cutoff120.png
  6. 16
      nbs/11_wavelet.ipynb
  7. BIN
      quarto-macos.pkg

9
.gitlab-ci.yml

@ -1,9 +0,0 @@
image: alpine:latest
pages:
stage: deploy
script:
- echo 'Nothing to do...'
artifacts:
paths:
- public

7
drcstools/_modidx.py

@ -95,6 +95,9 @@ d = { 'settings': { 'branch': 'master',
'drcstools.stats.normalize_0_to_1': ('stats.html#normalize_0_to_1', 'drcstools/stats.py'),
'drcstools.stats.normalize_from_minus_plus_one': ( 'stats.html#normalize_from_minus_plus_one',
'drcstools/stats.py'),
'drcstools.stats.regression': ('stats.html#regression', 'drcstools/stats.py')},
'drcstools.stats.regression': ('stats.html#regression', 'drcstools/stats.py'),
'drcstools.stats.segments_fit': ('stats.html#segments_fit', 'drcstools/stats.py')},
'drcstools.storm': {},
'drcstools.tef': {}}}
'drcstools.tef': {},
'drcstools.wavelet': { 'drcstools.wavelet.wavelet_object': ('wavelet.html#wavelet_object', 'drcstools/wavelet.py'),
'drcstools.wavelet.wavelet_object.__init__': ('wavelet.html#__init__', 'drcstools/wavelet.py')}}}

40
drcstools/stats.py

@ -2,12 +2,13 @@
# %% auto 0
__all__ = ['normalize_from_minus_plus_one', 'normalize_0_to_1', 'regression', 'mean2', 'corr2', 'linear_regression_lag',
'linear_trend', 'detrend_dim', 'detrend']
'segments_fit', 'linear_trend', 'detrend_dim', 'detrend']
# %% ../nbs/02_stats.ipynb 3
import xarray as xr
import numpy as np
from scipy import stats
from scipy import optimize
import matplotlib.pyplot as plt
# %% ../nbs/02_stats.ipynb 4
@ -108,7 +109,31 @@ def linear_regression_lag(x, y, shiftx=0, shifty=0, dim = "time"):
}
)
# %% ../nbs/02_stats.ipynb 21
# %% ../nbs/02_stats.ipynb 18
def segments_fit(X, Y, count):
xmin = X.min()
xmax = X.max()
seg = np.full(count - 1, (xmax - xmin) / count)
px_init = np.r_[np.r_[xmin, seg].cumsum(), xmax]
py_init = np.array([Y[np.abs(X - x) < (xmax - xmin) * 0.01].mean() for x in px_init])
def func(p):
seg = p[:count - 1]
py = p[count - 1:]
px = np.r_[np.r_[xmin, seg].cumsum(), xmax]
return px, py
def err(p):
px, py = func(p)
Y2 = np.interp(X, px, py)
return np.mean((Y - Y2)**2)
r = optimize.minimize(err, x0=np.r_[seg, py_init], method='Nelder-Mead')
return func(r.x)
# %% ../nbs/02_stats.ipynb 22
def linear_trend(obj, dim):
"""Convenience wrapper for 'lag_linregress_3D'. Calculates the trend per
given timestep. E.g. if the data is passed as yearly values, the
@ -120,14 +145,21 @@ def linear_trend(obj, dim):
trend = linear_regression_lag(x, obj, dim=dim)
return trend
# %% ../nbs/02_stats.ipynb 25
# %% ../nbs/02_stats.ipynb 26
def detrend_dim(da, dim, deg=1):
# detrend along a single dimension
p = da.polyfit(dim=dim, deg=deg)
fit = xr.polyval(da[dim], p.polyfit_coefficients)
return da - fit
# %% ../nbs/02_stats.ipynb 30
def detrend_dim(da, dim, deg=1):
# detrend along a single dimension
p = da.polyfit(dim=dim, deg=deg)
fit = xr.polyval(da[dim], p.polyfit_coefficients)
return da - fit
# %% ../nbs/02_stats.ipynb 26
# %% ../nbs/02_stats.ipynb 31
def detrend(da, dims, deg=1):
"""Linear along possible multiple dimensions

25
drcstools/wavelet.py

@ -0,0 +1,25 @@
# AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/11_wavelet.ipynb.
# %% auto 0
__all__ = ['wavelet_object']
# %% ../nbs/11_wavelet.ipynb 4
class wavelet_object:
def __init__(self, data, varname, timename="time", remove_trend = False):
self.N = data[varname].size
self.dt = 1
self.t = np.arange(0, self.N) * self.dt
self.data = data[varname].values
self.time = data[timename]
if remove_trend == True:
p = np.polyfit(self.t, self.data, 1)
self.data = self.data - np.polyval(p, self.t)
self.std = self.data.std()
self.var = self.std ** 2
self.data = (self.data - self.data.mean()) / self.std
self.mother = wavelet.Morlet(6)
self.s0 = 2 * self.dt
self.dj = 1 / 24
self.J = 7 / self.dj
self.alpha, _, _ = wavelet.ar1(self.data)

BIN
lfca_rco_trunc120_cutoff120.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

16
nbs/11_wavelet.ipynb

@ -70,20 +70,6 @@
" self.J = 7 / self.dj\n",
" self.alpha, _, _ = wavelet.ar1(self.data)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#| export\n",
"def cwt(wavelet_object):\n",
"\n",
" self.wave, self.scales, self.freqs, self.coi, self.fft, self.fftfreqs = wavelet.cwt(wavelet_object.data, self.dt, self.dj,\n",
" self.s0, self.J, self.mother)\n",
" self.iwave = wavelet.icwt(self.wave, self.scales, self.dt, self.dj, self.mother)"
]
}
],
"metadata": {
@ -102,7 +88,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.6"
"version": "3.10.6 | packaged by conda-forge | (main, Aug 22 2022, 20:41:22) [Clang 13.0.1 ]"
},
"vscode": {
"interpreter": {

BIN
quarto-macos.pkg

Binary file not shown.
Loading…
Cancel
Save