170 lines
3.8 KiB
Python
170 lines
3.8 KiB
Python
import pandas as pd
|
|
import numpy as np
|
|
import matplotlib.pyplot as pyplt
|
|
|
|
|
|
def plt_ticks_size() -> int:
|
|
return 10
|
|
|
|
|
|
def load_d(path: str) -> pd.DataFrame():
|
|
return pd.read_csv(path, float_precision='round_trip', dtype='float64')
|
|
|
|
|
|
def plot_d(dat: pd.Series, fname: str = 'plot_input_data', colour: str = ''):
|
|
if colour == '':
|
|
colour = 'blue'
|
|
|
|
pyplt.plot(dat, color=colour)
|
|
pyplt.xlim(0, len(dat))
|
|
pyplt.ylim(min(dat) - 0.3, max(dat) + 0.3)
|
|
pyplt.xticks(size=plt_ticks_size())
|
|
pyplt.yticks(size=plt_ticks_size())
|
|
pyplt.savefig(fname + '.jpg')
|
|
# pplt.show(block=0)
|
|
# rework this
|
|
# ref: https://stackoverflow.com/a/46418284
|
|
pyplt.close()
|
|
|
|
|
|
def mean(dat: pd.Series) -> float:
|
|
return dat.sum() / len(dat)
|
|
|
|
|
|
def variance(dat: pd.Series) -> float:
|
|
return sum(pow(dat - mean(dat), 2)) / len(dat)
|
|
|
|
|
|
def histogram(dat: pd.Series, bins: int = 10, fname: str = 'hist', colour: str = 'blue'):
|
|
pyplt.hist(dat, color=colour, bins=bins)
|
|
pyplt.xticks(size=plt_ticks_size())
|
|
pyplt.yticks(size=plt_ticks_size())
|
|
pyplt.savefig(fname + '.jpg')
|
|
pyplt.close()
|
|
|
|
|
|
def distr_func(dat: pd.Series, fname: str = 'dist', colour: str = 'blue'):
|
|
dat.plot.density(color=colour)
|
|
pyplt.savefig(fname + '.jpg')
|
|
pyplt.close()
|
|
|
|
|
|
def std_dev(dat: pd.Series) -> float:
|
|
return np.sqrt(variance(dat))
|
|
|
|
|
|
def mean_diff(dat: pd.DataFrame) -> pd.Series:
|
|
return dat - dat.mean()
|
|
|
|
|
|
def covar(dat: pd.DataFrame) -> float:
|
|
dat = dat.apply(mean_diff)
|
|
return dat['u'].dot(dat['y']) / len(dat)
|
|
|
|
|
|
def covar_coeff(cov: float, std_dev_u: float, std_dev_y: float) -> float:
|
|
return cov / (std_dev_u * std_dev_y)
|
|
|
|
|
|
# m is the max permissible shift value.
|
|
def auto_corellation(dat: list, max_shift_n: int = .1) -> float:
|
|
v = []
|
|
m = len(dat) * max_shift_n
|
|
cur_shift = 0
|
|
|
|
while m >= cur_shift:
|
|
r = 0
|
|
|
|
for i in range(len(dat) - cur_shift):
|
|
r += dat[i] * dat[i + cur_shift]
|
|
|
|
r = r / len(dat) - cur_shift
|
|
v.append(r)
|
|
cur_shift += 1
|
|
|
|
return v
|
|
|
|
|
|
def mutual_corellation(dx: list, dy: list, max_shift_n: int = .1) -> float:
|
|
v = []
|
|
m = len(dx) * max_shift_n
|
|
cur_shift = 0
|
|
|
|
while m >= cur_shift:
|
|
r = 0
|
|
|
|
for i in range(len(dx) - cur_shift):
|
|
r += dx[i] * dy[i + cur_shift]
|
|
|
|
r = r / (len(dx) - cur_shift)
|
|
v.append(r)
|
|
cur_shift += 1
|
|
|
|
return v
|
|
|
|
|
|
def auto_covar(dat: list, max_shift_n: int = .1) -> float:
|
|
v = []
|
|
mean = np.mean(dat)
|
|
m = len(dat) * max_shift_n
|
|
cur_shift = 0
|
|
|
|
while m >= cur_shift:
|
|
r = 0
|
|
|
|
for i in range(len(dat) - cur_shift):
|
|
r += (dat[i] - mean) * (dat[i + cur_shift] - mean)
|
|
|
|
r = r / (len(dat) - cur_shift)
|
|
v.append(r)
|
|
cur_shift += 1
|
|
|
|
return v
|
|
|
|
|
|
def mutual_covar(dx: list, dy: list, max_shift_n: int = .1) -> float:
|
|
v = []
|
|
mean_x, mean_y = np.mean(dx), np.mean(dy)
|
|
m = len(dx) * max_shift_n
|
|
cur_shift = 0
|
|
|
|
while m >= cur_shift:
|
|
r = 0
|
|
|
|
for i in range(len(dx) - cur_shift):
|
|
r += (dx[i] - mean_x) * (dy[i + cur_shift] - mean_y)
|
|
|
|
r = r / (len(dx) - cur_shift)
|
|
v.append(r)
|
|
cur_shift += 1
|
|
|
|
return v
|
|
|
|
|
|
def plot_autocorellation(dat: pd.DataFrame, fname: str = 'autocorellation', colour: str = 'blue'):
|
|
d = auto_corellation(dat.tolist())
|
|
pyplt.scatter(range(0, len(d)), d, color=colour)
|
|
pyplt.savefig(fname + '.jpg')
|
|
pyplt.close()
|
|
|
|
|
|
def plot_mutual_corellation(d1: pd.DataFrame, d2: pd.DataFrame, fname: str = 'mutcorellation', colour: str = 'blue'):
|
|
d = mutual_corellation(d1.tolist(), d2.tolist())
|
|
pyplt.scatter(range(0, len(d)), d, color=colour)
|
|
pyplt.savefig(fname + '.jpg')
|
|
pyplt.close()
|
|
|
|
|
|
def plot_autocovariance(dat: pd.DataFrame, fname: str = 'autocovariance', colour: str = 'blue'):
|
|
d = auto_covar(dat.tolist())
|
|
pyplt.scatter(range(0, len(d)), d, color=colour)
|
|
pyplt.savefig(fname + '.jpg')
|
|
pyplt.close()
|
|
|
|
|
|
def plot_mutual_covariance(d1: pd.DataFrame, d2: pd.DataFrame, fname: str = 'mutcovariance', colour: str = 'blue'):
|
|
d = mutual_covar(d1.tolist(), d2.tolist())
|
|
pyplt.scatter(range(0, len(d)), d, color=colour)
|
|
pyplt.savefig(fname + '.jpg')
|
|
pyplt.close()
|