forked from CIDARLAB/DAFD
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtol_utils.py
More file actions
60 lines (47 loc) · 1.8 KB
/
Copy pathtol_utils.py
File metadata and controls
60 lines (47 loc) · 1.8 KB
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
import numpy as np
import pandas as pd
from SALib.sample import saltelli
from SALib.analyze import sobol
import numpy as np
import time
import itertools
def make_grid_range(vals, size):
return np.linspace(vals.min(), vals.max(), size)
def make_sample_grid(base_features, perturbations):
base_copy = base_features.copy()
pert_vals = list(perturbations.values())
options = itertools.product(pert_vals[0], pert_vals[1])
pts = []
grid = []
for option in options:
pts.append(list(option))
base_copy.update({key: option[i] for i, key in enumerate(perturbations.keys())})
grid.append(base_copy.copy())
return pts, grid
def get_principal_feature(si, feature_names):
ST = list(si["ST"])
return feature_names[ST.index(max(ST))]
def min_dist_idx(pt, array):
distances = [np.linalg.norm(pt - arraypt) for arraypt in array]
return distances.index(min(distances))
def main_effect_analysis(data, inputs_df):
size_vars = []
gen_vars = []
for col in inputs_df.columns:
size_means = data.groupby(col)["droplet_size"].mean()
gen_means = data.groupby(col)["generation_rate"].mean()
size_vars.append(np.var(size_means))
gen_vars.append(np.var(gen_means))
size_var = np.var(data.loc[:, "droplet_size"])
gen_var = np.var(data.loc[:, "generation_rate"])
summary = pd.DataFrame([size_vars / size_var, gen_vars / gen_var], index=["size var", "gen var"],
columns=inputs_df.columns)
summary = summary.T
return summary
def to_list_of_dicts(samples, keys):
sample_dict_list = []
for sample in samples:
sample_dict_list.append({key: sample[i] for i, key in enumerate(keys)})
return sample_dict_list
def pct_change(array, base):
return np.around((array - base)/base * 100, 3)