-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup.py
113 lines (88 loc) · 2.72 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
"""
Packages for plotting and other stuff
version: 5.0
author: Riasat
"""
# uncomment the below line to use interactive plots
# %matplotlib widget
# data loading
import pandas as pd
# data maipulation
import pwlf
import numpy as np
from scipy.interpolate import interp1d, UnivariateSpline
from scipy.signal import find_peaks
from scipy import optimize
# plotting tools
import matplotlib.pyplot as plt
# extra tweaks
import warnings
warnings.filterwarnings("ignore")
# plot tweaks
plt.style.use("seaborn-poster")
pd.options.display.max_columns = None
pd.options.display.float_format = "{:.5f}".format
# function for extrapolation
def extrapolate1d(x, y):
f = interp1d(x, y, kind="linear", fill_value="extrapolate")
a = np.arange(0, x[len(x) - 1], 0.001)
b = f(a)
return a, b
# function for interpolation
def interpolate1d(x, y):
f = interp1d(x, y, kind="linear", fill_value="extrapolate")
a = np.arange(x[0], x[len(x) - 1], 0.001)
b = f(a)
return a, b
# function for interpolation
def interpolate2d(x, y):
f = interp1d(x, y, kind="quadratic", fill_value="extrapolate")
a = np.arange(x[0], x[len(x) - 1], 0.001)
b = f(a)
return a, b
# function for interpolation
def interpolate3d(x, y):
f = interp1d(x, y, kind="cubic", fill_value="extrapolate")
a = np.arange(x[0], x[len(x) - 1], 0.001)
b = f(a)
return a, b
# funciton for polynomial fitting
def polfit(a, b, c):
z = np.polyfit(a, b, c)
f = np.poly1d(z)
x = np.arange(a[0], a[len(a) - 1], 0.001)
y = f(x)
return x, y
# function for picewise linear fit
def picewise_linear_fit(x, y, segments):
my_pwlf = pwlf.PiecewiseLinFit(x, y) # fit my data
res = my_pwlf.fit(segments) # fit the data for n line segments
# slopes = myPWLF.calc_slopes() # calculate slopes
# predict for the determined points
xHat = np.linspace(min(x), max(x), num=10000)
yHat = my_pwlf.predict(xHat)
# calculate statistics
# p = myPWLF.p_values(method="non-linear", step_size=1e-4) # p-values
# se = myPWLF.se # standard errors
return xHat, yHat
# curve fit
def cur_fit(x, y):
func = lambda t, a, c, d: a * np.log(t + c) + d
popt, pcov = optimize.curve_fit(func, x, y) # type: ignore
xx = np.arange(x[0], x[len(x) - 1], 0.001)
yy = func(xx, *popt)
return xx, yy
def estimate_coef(x, y):
# number of observations/points
n = np.size(x)
# mean of x and y vector
m_x = np.sum(x)
m_y = np.sum(y)
# calculating cross-deviation and deviation about x
SS_xy = np.sum(y * x)
SS_xx = np.sum(x * x)
deno = n * SS_xx - m_x * m_x
# calculating regression coefficients
b = (n * SS_xy - m_x * m_y) / deno
a = (m_y * SS_xx - m_x * SS_xy) / deno
return (a, b)