aboutsummaryrefslogtreecommitdiff
path: root/sbdata/tasks/calculate_mapping_function.py
diff options
context:
space:
mode:
Diffstat (limited to 'sbdata/tasks/calculate_mapping_function.py')
-rw-r--r--sbdata/tasks/calculate_mapping_function.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/sbdata/tasks/calculate_mapping_function.py b/sbdata/tasks/calculate_mapping_function.py
new file mode 100644
index 0000000..37185a8
--- /dev/null
+++ b/sbdata/tasks/calculate_mapping_function.py
@@ -0,0 +1,31 @@
+import pathlib
+import random
+import numpy as np
+from sklearn.linear_model import LinearRegression
+
+from sbdata.task import register_task, Arguments
+
+
+@register_task("Calculate Map Coordinate Function")
+def calculate_mapping_function(args: Arguments):
+ csv = args.get_arg("Coordinate CSV", "coords", pathlib.Path)
+ points = [[int(x) for x in y.split(",")] for y in csv.read_text().splitlines()[1:]]
+ xs = [(a[0], a[2]) for a in points]
+ zs = [(a[1], a[3]) for a in points]
+ random.shuffle(xs)
+ random.shuffle(zs)
+ find_best_function_for("X", xs)
+ find_best_function_for("Z", zs)
+
+
+def find_best_function_for(label: str, l: list[tuple[int, int]]):
+ x = np.array([a[0] for a in l]).reshape((-1, 1))
+ y = np.array([a[1] for a in l])
+ model = LinearRegression()
+ model.fit(x, y)
+ print(f'------------')
+ print(f' {label} Coordinate:')
+ print(f" Score: {model.score(x, y)}")
+ print(f" Slope: {model.coef_[0]}")
+ print(f" Intercept: {model.intercept_}")
+ print(f'------------')