Skip to content
Snippets Groups Projects
Commit a0f688f4 authored by Raphael Sturgis's avatar Raphael Sturgis
Browse files

minor

parent d501d077
Branches
No related tags found
1 merge request!6Develop
...@@ -2,3 +2,4 @@ ...@@ -2,3 +2,4 @@
build/ build/
skais.egg-info/ skais.egg-info/
*.coverage *.coverage
*__pycache__*
...@@ -3,4 +3,5 @@ setuptools~=57.0.0 ...@@ -3,4 +3,5 @@ setuptools~=57.0.0
numpy~=1.19.5 numpy~=1.19.5
numba~=0.53.1 numba~=0.53.1
scipy~=1.5.4 scipy~=1.5.4
POT~=0.7.0 hmmlearn~=0.2.6
\ No newline at end of file scikit-learn~=1.0.1
\ No newline at end of file
...@@ -5,6 +5,7 @@ import numpy as np ...@@ -5,6 +5,7 @@ import numpy as np
from numba import jit from numba import jit
from scipy.interpolate import interp1d from scipy.interpolate import interp1d
from skais.stats.angluar import angular_dispersion
from skais.utils.geography import great_circle from skais.utils.geography import great_circle
from skais.utils.stats import calc_std_dev from skais.utils.stats import calc_std_dev
...@@ -171,6 +172,15 @@ def l2_angle(dat, radius): ...@@ -171,6 +172,15 @@ def l2_angle(dat, radius):
return l2 return l2
def angle_dispersion(dat, radius):
l2 = np.zeros(dat.shape)
dat = np.concatenate([np.full(radius, dat[0]), dat, np.full(radius, dat[-1])])
for i in range(radius, dat.shape[0] - radius):
data = dat[i - radius:i + radius + 1]
l2[i - radius] = angular_dispersion(np.radians(data))
class AISTrajectory: class AISTrajectory:
def __init__(self, df, interpolation_time=None): def __init__(self, df, interpolation_time=None):
df = df.drop_duplicates(subset=['ts_sec']) df = df.drop_duplicates(subset=['ts_sec'])
...@@ -267,6 +277,16 @@ class AISTrajectory: ...@@ -267,6 +277,16 @@ class AISTrajectory:
stds[:radius] = np.nan stds[:radius] = np.nan
self.df[f"{field}_std"] = stds self.df[f"{field}_std"] = stds
def compute_all_dispersions(self, radius):
fields = ['cog', 'heading', 'angles_diff']
for field in fields:
if field in self.df.columns:
dat = self.df[field].to_numpy()
disp = angle_dispersion(dat, radius)
disp[-radius:] = np.nan
disp[:radius] = np.nan
self.df[f"{field}_disp"] = disp
def compute_position_features(self, radius): def compute_position_features(self, radius):
dat = np.stack([self.df.longitude.to_numpy(), self.df.latitude.to_numpy()], axis=1) dat = np.stack([self.df.longitude.to_numpy(), self.df.latitude.to_numpy()], axis=1)
std = compute_position_angle_std(dat, radius) std = compute_position_angle_std(dat, radius)
......
import random import random
from hmmlearn.hmm import GMMHMM, GaussianHMM from hmmlearn.hmm import GMMHMM, GaussianHMM
from matplotlib import pyplot as plt
from numba import jit from numba import jit
from scipy import linalg from scipy import linalg
from sklearn.datasets import make_spd_matrix from sklearn.datasets import make_spd_matrix
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment