From c1a72b706d25a16e8a8ca6e8dc1e81b19a4ba861 Mon Sep 17 00:00:00 2001 From: Sandro Zimmermann Date: Sat, 29 Nov 2025 16:16:16 +0100 Subject: [PATCH] added argv support with class Arguments and Enum --- __pycache__/arguments.cpython-313.pyc | Bin 0 -> 3232 bytes absolut.py | 13 +- arguments.py | 52 + data/shots_dev.csv | 955 - data/shots_dev.xlsx | Bin 20306 -> 0 bytes data/synthetic_data.csv | 1001 - data/synthetic_shots.csv | 25001 ++++++++++++++++ ...d_values.py => generate_synthetic_shots.py | 54 +- main.py | 23 +- 9 files changed, 25098 insertions(+), 2001 deletions(-) create mode 100644 __pycache__/arguments.cpython-313.pyc create mode 100644 arguments.py delete mode 100644 data/shots_dev.csv delete mode 100644 data/shots_dev.xlsx delete mode 100644 data/synthetic_data.csv create mode 100644 data/synthetic_shots.csv rename rule_based_values.py => generate_synthetic_shots.py (63%) diff --git a/__pycache__/arguments.cpython-313.pyc b/__pycache__/arguments.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..323885f023aaaab14ce6a596dcf02cc2d32f90e7 GIT binary patch literal 3232 zcmds3&uumB0+$)0DHEgSocck56&jvQa)D%YZrCg#GsUfX5suCEB(UFlV|Y>@59UT z#wz@Xc``Cv$Y~K>%_mtQa;?C=)92KL7D;D{MNJ(@&8FEvVm6XU>VroI2aja+k0L5d zmvUOZs1M9tXGl8-OkIBi;5JzkJqu9_ZbezZ>a#yX-4OnFhSH93i|HB9rwS|w3n}C` zMCkwJH+&88Whe9C>|TUcgf;+E92u9Rr@kH?F`c7vZZJOvaox3a4xsg>1vq6D=YZsW z2Nq&$ZT?$hwT{^5f9LHOW9r=O2F`3{%sQd5H<2FnA@Fq^!WJhDUHkv}2t@Xh)@{6cYeP5M@&D=y2a^!Aac8T?0T#)H z_AI<>k4z>=){;4#H)u6R@)nNcPns;#cvvu9sSJpBPA$%w0w`HCJ(-Dr_?a zUCX9e9}LxTLP=t{S$GgK`AiYi?QbMJVEJ%&b!2OStOXC>ZCg9gSr+cP)((Zr!iw0r z))6cV_uQP+L?dVDjy7Lk7Z{7MhV$^=`}7g^Hu%DnC$&u3d(hHxXg#&ov{r-@Xf5vG zPJX)rxbr&hFeK><{CM-uO+)N?<(%Gu3E77@byG$n{xRpci7d;9`fAGK`km{B*jdY? zv4hYB4-4n!XD}8?FPUyIH$jK%cC!Z3A5Twm~JHwz`l2 znY8J)2yAqK#Ngx>4xevn1RKUV+Zhn12j)8K&}|a*&f8KP+sHA&%0#0n@|itEQZ#Ij z-)I}pUsbc2q=Y0${o8^50V$fz7OrVY2?8ZeKQ4uZTKPf-P4^^vM;R+H)4_Wz+xbSb zVGPrpj$B9$HR}5iZ25Yjr!E65kmokLD?!&gyB|zE^pr>LjsLyw3swn5r@#Bb%_VJV z$`~43y?D72Q=VSDY)ni(Ir#V>ST9y$iZOP@=us>F8N)mC+>V2`t9TfGXb+H|4n+g@ zUpk^f`>*zPFkeO2@4}ofX~>6qX+ELB-MVfH_2GiC@^WQA^M!u%g$yzDnrW)T(p1yR zrG9n{)(ukP9}`aG5VDD?VQ>J*Zr%7$BTeJYCQ|o=`f>0DfSQWt>3Zn>rQu3wuspKr z?Y49TZhyBC8hSMGXw3LDzN%&`XLC>0ta0hvXXmC?&P{>+V&!bki06%-Ld8F4c;`?` z^K_eGQGXTLV1_Tr#)Y!swcHHs77TYD!By=P!5epO7-H}>6N=9g3SaS#MEGZ(llET{ zaiI=gBCz2+iUjTy7mcn5dmoe@c0+MFZHWS$P+Y!WDlMgr;n?c*mCCsKboz=hIrXIf zaX(luR>oB$He>W8D*mM5O`;;Sx*|Z!c%B(glnWXQWIWuu-&Ko+u`6yW!^GGp2qzFe zM>vHrim>1POTqvG-aB-hOxq&lFG8?$Re&45Iik(=m16fzsbe$ChBH-ty2Ef!CJX bMg#Zzwg|koM1b-LxBn9Rs75ylB2VQXaqEPc literal 0 HcmV?d00001 diff --git a/absolut.py b/absolut.py index cdb8af8..06edbea 100644 --- a/absolut.py +++ b/absolut.py @@ -15,7 +15,7 @@ FEATURES = ["points", "x", "y"] def load_dataframe(): try: colum_list = FEATURES - df = pd.read_csv("data/shots.csv", usecols = colum_list).dropna() + df = pd.read_csv("data/synthetic_data.csv", usecols = colum_list).dropna() return df.abs() except FileNotFoundError as error: print(error) @@ -33,14 +33,11 @@ def calc_f1_score(y_true, y_pred): tn = np.sum(np.multiply([i==False for i in y_pred], [not(j) for j in y_true])) fp = np.sum(np.multiply([i==True for i in y_pred], [not(j) for j in y_true])) fn = np.sum(np.multiply([i==False for i in y_pred], y_true)) - - '''print(tp) - print(fp) precision = calc_precision(tp, fp) - recall = calc_recall(tp, fn)''' + recall = calc_recall(tp, fn) - if tp != 0 and fp != 0: + '''if tp != 0 and fp != 0: precision = calc_precision(tp, fp) else: precision = 0 @@ -48,7 +45,7 @@ def calc_f1_score(y_true, y_pred): if tp != 0 and fn != 0: recall = calc_recall(tp, fn) else: - recall = 0 + recall = 0''' if precision != 0 and recall != 0: f1 = (2 * precision * recall) / (precision + recall) @@ -77,7 +74,6 @@ def main(): print(df.head()) print(df.head().info()) - sns.countplot(x = df["points"]) plt.show() @@ -86,7 +82,6 @@ def main(): sns.scatterplot(x=df['x'], y=df['y'], hue=df['points']) plt.show() - quit() features = ["x", "y"] X = df[features] diff --git a/arguments.py b/arguments.py new file mode 100644 index 0000000..ce15969 --- /dev/null +++ b/arguments.py @@ -0,0 +1,52 @@ +from enum import Enum + +class Mode(Enum): + V = "v" + A = "a" + C = "c" + +class Information(Enum): + DISABLED = False + ENABLED = True + +class Graph(Enum): + DISABLED = False + ENABLED = True + +class Arguments: + + def __init__(self, file_path): + self.file_path = file_path + self.mode = None + self.information = None + self.graph = None + + def get_file_path(self): + return self.file_path + + def get_mode(self): + return self.mode + + def set_mode(self, value): + try: + self.mode = Mode(value) + except ValueError: + raise ValueError(f"Invalid mode '{value}'. Allowed values: {[m.value for m in Mode]}") + + def get_information(self): + return self.information + + def set_information(self, value): + try: + self.information = Information(value) + except ValueError: + raise ValueError(f"Invalid information '{value}'. Allowed values: {[m.value for m in Information]}") + + def get_graph(self): + return self.graph + + def set_graph(self, value): + try: + self.graph = Graph(value) + except ValueError: + raise ValueError(f"Invalid graph '{value}'. Allowed values: {[m.value for m in Graph]}") diff --git a/data/shots_dev.csv b/data/shots_dev.csv deleted file mode 100644 index edb6562..0000000 --- a/data/shots_dev.csv +++ /dev/null @@ -1,955 +0,0 @@ -points,x,y -7,-2.5,-3.0 -0,-11.0,-4.0 -9,1.5,2.0 -6,-3.5,4.5 -10,0.5,-1.0 -4,-6.5,1.0 -8,2.5,1.5 -0,12.5,6.5 -10,0.0,-0.5 -6,-4.5,3.5 -7,-3.0,-3.5 -6,5.0,0.0 -0,-10.5,-4.0 -7,-3.5,1.5 -0,-10.5,-1.0 -4,-1.0,-7.0 -8,-1.0,2.5 -8,2.5,-1.5 -7,-1.5,4.0 -6,-4.0,-3.0 -6,-4.5,-1.0 -7,4.0,-0.5 -8,0.0,2.5 -4,6.5,4.0 -8,2.5,-1.5 -7,-2.5,-2.5 -7,-1.0,3.5 -6,4.5,2.5 -7,-4.0,0.0 -7,-4.0,-2.5 -9,2.5,-1.5 -7,1.5,4.0 -6,-5.0,-2.0 -7,-3.0,-2.0 -6,5.0,2.0 -2,8.5,-3.5 -8,-2.0,2.5 -10,-0.5,-1.5 -4,-7.5,1.0 -8,-3.0,-0.5 -8,-1.0,2.5 -8,1.0,-3.0 -10,-1.0,0.5 -10,-1.0,0.5 -9,-1.5,2.0 -7,3.0,3.5 -9,0.0,2.0 -9,-1.5,2.0 -9,-1.0,-1.5 -6,4.5,-1.5 -6,4.5,3.0 -1,10.0,2.5 -5,3.5,4.5 -8,3.0,-1.5 -9,1.5,0.5 -0,10.5,8.0 -7,-3.5,2.5 -8,2.5,-2.0 -3,-8.0,-3.5 -4,7.0,2.0 -8,1.5,2.5 -6,3.5,4.0 -4,-6.5,-3.5 -5,4.0,5.0 -8,1.5,3.0 -6,2.5,-4.0 -9,-2.0,-0.5 -7,-4.0,-0.5 -8,0.5,3.0 -8,1.0,-3.0 -4,6.0,4.0 -6,-4.5,1.0 -9,2.0,0.5 -9,-2.0,-1.5 -5,-5.0,3.5 -5,3.5,-5.5 -10,1.0,-1.0 -9,3.0,1.0 -8,-1.5,-2.5 -3,7.5,4.0 -10,-0.5,1.0 -5,5.0,-3.0 -10,-0.5,1.5 -7,-2.0,3.5 -9,0.0,2.0 -8,-3.0,0.0 -5,-5.5,-3.0 -3,-8.0,2.5 -7,3.5,3.5 -7,1.5,-4.0 -10,0.5,-1.0 -8,3.5,1.0 -10,1.0,0.5 -5,-5.0,-3.0 -9,-2.0,-0.5 -7,-2.5,3.0 -5,-2.5,6.0 -10,-1.0,1.0 -6,-1.5,-4.5 -5,-5.5,-2.5 -3,-6.0,6.0 -7,-2.5,-3.5 -4,2.0,6.5 -7,-1.5,4.0 -7,-2.5,3.0 -6,-5.0,0.0 -9,-1.5,-1.5 -6,-4.5,-2.0 -8,-1.0,-2.5 -4,3.5,-6.0 -5,4.0,5.5 -10,-1.0,-1.0 -5,3.0,6.0 -5,-1.5,-5.5 -6,-4.0,-3.0 -5,-5.5,0.5 -7,0.5,-4.0 -3,-1.0,-7.5 -10,-0.5,0.0 -10,1.5,0.0 -6,-4.5,-3.0 -7,3.5,1.5 -6,-4.0,-3.0 -5,-5.0,-3.0 -9,-1.5,-1.0 -6,2.5,4.5 -6,-1.5,-4.5 -5,-2.5,-5.5 -10,-0.5,0.0 -6,4.0,-3.5 -10,0.0,0.5 -5,5.0,-4.0 -9,-1.5,-1.5 -7,-3.0,-3.0 -5,-5.5,-4.0 -0,10.0,3.5 -9,-1.5,-1.0 -9,-1.5,-2.0 -7,-3.5,-2.0 -8,-2.5,-0.5 -6,-4.5,-1.5 -4,-6.5,-1.0 -5,-5.5,3.5 -7,-2.0,-3.0 -7,-2.5,-3.0 -5,6.0,-1.0 -8,-2.0,-2.5 -7,2.0,-3.0 -10,-1.0,-1.0 -8,-3.0,-1.0 -8,-2.5,-1.5 -8,-1.5,-3.0 -4,7.0,1.0 -0,-16.0,-2.0 -10,-1.0,0.5 -7,3.0,2.5 -9,-0.5,-2.5 -7,3.5,-2.5 -5,1.5,-5.5 -0,8.5,9.0 -7,-2.5,-3.0 -7,-1.5,-4.0 -7,-3.5,1.5 -7,-2.0,-3.5 -8,0.5,3.5 -6,3.0,4.5 -8,2.0,2.5 -5,5.5,3.0 -7,3.5,1.0 -6,4.5,0.5 -6,-1.5,-5.0 -5,-5.5,-1.0 -0,11.5,1.5 -8,-3.0,-1.0 -7,4.0,-1.0 -4,4.5,-5.5 -6,5.0,1.5 -4,6.5,-1.5 -6,2.5,-5.0 -5,5.0,-4.5 -6,5.0,2.5 -6,-3.5,-4.0 -10,1.5,1.5 -6,-5.0,-1.0 -7,-2.5,-3.0 -6,-4.5,1.0 -7,-3.5,1.0 -7,4.0,1.5 -10,0.5,0.5 -3,7.5,1.0 -6,-5.0,-1.5 -10,1.5,0.0 -8,-1.0,3.0 -5,5.0,-3.5 -10,0.5,0.5 -5,5.5,-1.0 -8,-1.5,-2.5 -7,3.5,2.5 -9,-2.0,-2.0 -6,5.0,3.0 -9,1.0,1.5 -8,3.5,-1.5 -10,-1.0,1.0 -6,5.0,-1.0 -9,-1.0,1.5 -8,6.5,-1.0 -6,-4.5,-2.0 -5,3.5,5.0 -7,-3.5,-2.0 -7,-4.5,0.0 -9,-0.5,2.0 -8,-2.0,2.5 -8,1.5,2.5 -6,4.0,4.5 -10,1.0,-1.5 -8,0.5,3.5 -4,7.0,2.0 -4,-5.0,-4.5 -8,-0.5,2.5 -7,-3.5,-1.5 -8,2.5,2.0 -6,-5.0,-1.0 -3,-7.5,-2.5 -9,-1.0,1.5 -9,1.5,2.0 -7,-3.5,2.0 -8,2.5,-0.5 -5,-5.5,1.0 -6,-4.5,2.0 -8,-1.5,-3.0 -9,-1.5,2.0 -6,-4.5,2.5 -9,0.0,2.0 -8,-2.5,-2.0 -8,-2.5,-1.5 -6,-4.0,-2.5 -5,-6.0,-1.5 -9,-1.0,-2.0 -8,1.5,2.5 -7,-3.5,1.0 -7,-3.5,2.0 -8,3.0,1.5 -9,-2.0,-1.0 -10,-1.5,-1.0 -6,2.5,4.0 -8,2.5,1.5 -9,-1.5,-2.0 -7,1.5,-3.5 -7,-3.5,-2.0 -5,5.5,0.0 -8,-2.5,-2.0 -6,-5.0,0.5 -7,-3.5,1.5 -7,-3.5,-1.0 -6,2.5,4.5 -3,-4.5,-6.5 -9,-1.5,-1.0 -9,0.0,-2.0 -7,-3.5,2.5 -5,-5.0,-3.0 -9,-1.0,-2.0 -7,-3.0,3.5 -10,0.0,-1.5 -8,2.5,-2.0 -9,1.5,1.5 -8,3.0,1.5 -10,-1.5,0.0 -7,-2.5,-3.5 -8,2.5,1.0 -4,7.0,1.0 -6,-1.0,-4.5 -7,-2.0,-4.0 -9,-1.5,-2.0 -4,-7.0,-1.0 -9,1.5,1.5 -9,-2.0,-1.5 -6,-4.0,3.0 -10,0.5,0.5 -7,-3.0,3.5 -5,-5.5,2.5 -8,-1.5,3.0 -4,-6.0,5.5 -9,1.0,2.0 -9,2.5,1.5 -4,-0.5,7.0 -9,-2.0,0.5 -8,-1.5,2.5 -2,-8.0,4.0 -10,0.0,0.5 -9,1.5,1.0 -7,2.5,3.0 -5,-5.5,-2.0 -3,-6.0,7.0 -7,3.5,2.5 -9,-1.0,2.0 -3,7.5,3.0 -2,-8.0,4.5 -6,5.0,-2.5 -4,-6.0,4.0 -7,3.5,3.0 -7,-4.0,-2.0 -7,2.5,-4.0 -9,-1.5,-1.5 -7,-3.5,-3.0 -7,-3.5,1.0 -4,-7.0,-1.5 -9,2.0,1.5 -7,3.0,3.0 -8,-2.0,2.5 -5,4.0,5.0 -8,2.5,1.5 -8,0.5,-3.0 -8,1.5,3.0 -7,4.5,1.5 -10,-1.0,-1.0 -9,1.5,2.0 -8,3.0,1.5 -8,-2.5,-1.5 -5,0.0,-5.5 -8,2.5,-2.5 -8,2.5,2.5 -9,1.5,-1.5 -9,1.5,1.5 -9,1.5,1.5 -7,-3.5,-1.0 -4,-3.0,-6.5 -10,-1.0,-1.0 -7,-2.5,3.5 -8,0.0,3.0 -7,-1.0,-3.5 -9,-1.5,0.0 -8,2.5,-0.5 -9,1.5,-1.5 -8,1.5,-2.5 -8,0.0,-2.5 -8,-2.0,-2.5 -9,-1.5,1.5 -7,-2.5,3.5 -9,0.0,-1.5 -3,1.0,7.5 -9,-1.5,0.0 -6,-4.5,1.0 -10,1.0,1.0 -8,-1.0,3.0 -10,1.0,0.0 -9,0.0,2.0 -10,0.5,0.5 -10,0.5,1.0 -8,-2.5,0.0 -7,2.0,3.5 -8,2.0,-3.0 -8,-2.5,1.5 -9,1.5,-1.5 -8,-3.0,-2.0 -5,3.0,5.5 -6,-5.0,1.0 -9,1.5,-3.5 -7,3.5,0.0 -7,-3.5,3.0 -6,2.5,-4.5 -7,-3.0,3.0 -7,-3.5,2.5 -10,0.0,-1.0 -8,-1.5,3.0 -8,-2.5,-2.5 -7,-1.5,3.5 -9,-1.5,0.5 -7,2.5,3.5 -5,-5.0,3.5 -4,-5.5,-4.5 -9,-1.5,0.5 -8,1.5,2.5 -9,2.0,0.0 -5,-1.0,6.0 -10,0.5,-1.0 -8,2.5,2.5 -7,3.5,0.0 -7,-3.5,1.5 -10,0.0,1.0 -6,0.0,-4.5 -8,1.5,2.5 -8,0.0,-3.0 -9,0.5,1.5 -8,1.5,3.0 -8,-1.5,-2.5 -8,-0.5,2.5 -9,1.5,1.5 -6,4.0,3.5 -8,3.0,-0.5 -7,-3.5,-1.0 -7,1.5,3.5 -7,3.5,3.5 -6,5.0,0.0 -6,4.5,4.0 -9,2.0,-1.5 -8,2.0,3.0 -10,0.5,0.5 -7,1.5,4.0 -8,1.5,2.5 -8,0.0,2.5 -8,-3.5,2.5 -7,3.5,0.0 -10,-1.0,1.0 -10,1.0,-1.0 -10,-1.0,-1.0 -8,2.5,-0.5 -8,-2.0,2.5 -9,1.0,0.0 -5,-2.5,5.5 -10,0.5,1.0 -7,2.5,3.0 -8,-2.5,-2.5 -8,-2.5,-2.5 -4,2.0,6.5 -9,1.5,-2.0 -1,9.5,-3.5 -8,2.5,-1.0 -6,-3.5,3.5 -8,-2.5,-2.0 -6,-3.5,3.5 -9,1.5,1.0 -8,0.0,2.5 -7,3.5,-3.5 -5,1.5,-5.5 -9,1.5,0.0 -9,1.5,1.0 -9,1.5,0.5 -5,1.5,-5.5 -10,0.5,0.0 -9,-1.5,1.5 -8,0.0,3.5 -7,-3.5,3.0 -10,0.0,-0.5 -9,0.5,1.5 -7,2.5,3.5 -6,3.0,-4.5 -9,2.0,-1.5 -7,2.5,3.5 -9,1.5,0.5 -6,0.5,-4.5 -7,-3.5,3.5 -4,3.5,6.5 -10,0.0,0.0 -7,-1.5,-3.5 -8,0.0,-3.0 -6,-4.5,-3.0 -8,0.0,3.0 -6,1.5,-4.5 -9,-1.5,1.0 -7,-1.5,3.5 -10,0.0,0.0 -5,-2.0,-5.5 -8,-2.5,-2.5 -4,-4.5,-6.5 -8,-2.5,-2.0 -8,-2.5,-2.0 -9,1.5,-1.5 -8,-2.0,2.5 -7,-3.5,-1.5 -7,2.5,-3.5 -8,2.5,-2.5 -8,-3.0,1.0 -10,-0.5,0.0 -7,-3.5,1.0 -10,0.0,0.5 -10,-0.5,-0.5 -9,0.0,2.0 -6,-2.0,5.0 -7,1.0,3.5 -7,-2.5,-4.0 -9,1.5,-1.0 -7,-3.5,1.0 -9,1.5,0.0 -8,-2.5,2.5 -8,-2.5,2.5 -7,-3.5,-3.5 -7,3.5,-2.0 -9,0.0,-1.5 -8,-2.5,0.0 -7,-2.5,4.0 -9,1.0,1.5 -8,1.0,2.5 -9,-0.5,1.5 -8,-2.5,-2.5 -9,-0.5,-2.0 -6,-2.5,4.5 -10,0.5,-0.5 -10,0.5,-0.5 -8,-2.5,-2.0 -7,2.5,3.5 -7,0.0,4.0 -6,-4.5,0.0 -8,-0.5,-2.5 -8,-0.5,-2.5 -9,0.0,2.5 -7,-0.5,3.5 -10,0.0,-0.5 -7,-2.0,-3.5 -9,-1.5,2.0 -8,-2.5,2.0 -10,-1.0,0.0 -8,-2.5,-2.5 -9,2.0,0.0 -7,-2.0,3.5 -8,-2.5,-1.0 -6,-4.5,-3.0 -9,-1.5,-1.5 -7,3.5,2.5 -10,-0.5,0.0 -8,1.5,2.5 -8,-2.0,-2.5 -6,-0.5,-6.0 -9,2.0,-1.5 -9,-1.0,-1.5 -9,0.0,1.5 -8,1.0,3.0 -9,1.5,0.5 -8,1.5,0.5 -8,-2.5,2.0 -7,-3.5,-4.0 -10,0.0,0.0 -7,-3.0,-2.5 -10,1.5,0.5 -9,-2.0,-1.5 -7,1.0,4.0 -6,-2.5,4.5 -7,2.5,1.5 -8,-3.0,2.5 -8,-2.5,2.0 -6,4.0,-3.5 -9,-1.5,2.0 -8,-2.5,1.0 -10,0.0,0.5 -9,1.5,2.0 -10,0.0,-0.5 -8,3.0,1.5 -6,-4.5,-2.0 -7,-2.5,-2.5 -10,-1.5,0.5 -7,3.5,1.5 -9,-1.5,1.5 -8,2.0,2.0 -9,-1.0,2.0 -7,0.0,3.5 -10,-1.0,0.0 -9,-2.5,-1.0 -10,-0.5,-0.5 -9,-1.5,-1.5 -9,-2.0,-1.0 -9,-1.0,-2.0 -9,-1.0,-1.5 -8,2.5,1.5 -10,1.0,0.0 -10,1.0,-1.0 -9,2.0,1.0 -8,-0.5,2.5 -9,1.0,1.0 -8,3.0,0.0 -10,0.5,0.5 -9,-1.0,2.0 -9,-1.5,0.0 -9,2.0,0.0 -9,1.0,2.0 -9,2.0,1.0 -10,0.5,-1.0 -9,-1.0,1.0 -7,-1.0,-2.0 -9,-1.0,-2.0 -7,2.0,3.0 -6,-4.0,3.0 -8,0.0,-3.0 -8,1.0,-3.0 -7,-3.5,2.0 -9,-2.5,-1.0 -5,-5.0,-1.0 -9,2.0,-1.5 -7,-3.5,0.0 -8,-0.5,-3.5 -9,1.0,-1.5 -8,2.5,0.0 -7,-4.5,-1.0 -9,0.0,-2.0 -8,-2.5,-1.5 -7,-4.0,-1.0 -6,-3.0,-5.5 -5,-5.0,-3.5 -9,0.0,1.5 -7,4.0,2.5 -6,-4.0,-2.5 -7,1.0,-3.5 -8,-2.5,-1.0 -8,-2.0,-3.0 -8,0.0,3.0 -7,4.0,1.0 -9,-1.0,1.0 -8,2.0,2.0 -9,1.0,1.0 -5,-3.5,-4.5 -9,-0.5,-2.0 -8,-1.0,-3.5 -9,0.0,2.0 -8,-1.5,-2.5 -5,-5.0,-4.0 -7,4.0,-1.5 -9,0.5,-2.0 -8,-3.0,0.5 -9,1.5,-1.5 -9,1.5,-1.5 -8,-3.5,1.0 -8,2.5,-2.5 -7,-2.5,-3.0 -3,-7.0,-2.5 -10,0.0,-1.5 -8,-1.0,-3.5 -10,-1.0,1.0 -8,-2.5,-1.5 -10,1.0,1.0 -7,4.0,0.0 -10,0.0,0.0 -4,-3.0,-6.5 -10,-1.0,-1.5 -7,4.0,-0.5 -10,0.0,-1.5 -8,-2.5,-1.0 -10,1.5,0.0 -6,-5.0,1.5 -8,-2.0,2.0 -7,2.5,-3.5 -9,1.5,-1.5 -7,-2.0,-3.0 -9,-2.0,-0.5 -9,-1.0,-2.0 -8,1.0,-3.0 -8,1.5,-3.0 -9,2.0,0.0 -8,2.0,-3.0 -10,-0.5,0.0 -8,2.0,1.0 -9,2.0,1.0 -8,-1.5,-3.0 -7,2.0,-3.5 -8,3.5,-2.0 -9,0.0,-2.0 -7,1.5,-3.5 -5,6.0,-1.0 -4,5.0,-5.5 -5,0.0,6.0 -8,0.0,3.0 -6,5.0,1.0 -5,5.5,-2.5 -9,2.0,0.0 -9,2.0,0.0 -10,0.5,-0.5 -9,2.5,1.0 -9,0.0,2.0 -6,-1.0,4.5 -10,0.0,0.0 -7,3.5,-3.0 -9,2.5,1.0 -7,1.0,-3.5 -10,-1.5,0.0 -8,3.5,-1.0 -8,0.0,2.5 -7,4.0,-1.5 -10,1.0,-0.5 -9,-1.5,-2.0 -10,-1.5,-1.0 -9,-1.0,-1.5 -10,1.5,-1.0 -9,1.0,-1.5 -8,-3.0,-1.0 -9,2.0,0.0 -9,-1.5,1.0 -8,3.5,-1.5 -9,1.0,-1.5 -6,1.0,-4.5 -9,2.0,1.0 -7,4.0,2.0 -7,4.0,-1.0 -7,4.0,-2.5 -10,1.0,-1.5 -8,-3.0,-1.5 -9,0.5,-1.5 -9,-2.0,1.0 -8,-1.0,1.5 -9,1.0,3.0 -10,-1.0,0.0 -9,-1.0,-2.0 -8,0.0,-3.0 -8,-3.0,-1.5 -9,-2.5,0.5 -8,-2.0,-2.0 -7,-4.5,-1.0 -10,0.0,0.0 -7,-4.0,-3.0 -10,0.5,-0.5 -9,-1.5,1.0 -8,-1.5,-2.5 -9,-1.0,2.0 -7,-3.0,-2.5 -9,-1.0,2.5 -10,1.5,0.0 -7,4.0,1.0 -7,4.0,2.0 -10,1.0,-1.0 -9,1.5,-1.5 -9,-2.0,1.0 -10,-1.0,0.5 -8,-2.0,2.0 -9,1.0,1.5 -9,-1.0,1.5 -8,-3.5,-1.5 -7,-3.0,2.5 -8,1.5,-2.5 -9,-1.5,1.5 -7,-2.5,3.5 -9,-1.0,2.0 -8,2.5,2.0 -9,-1.0,1.5 -10,1.5,-1.0 -7,3.5,-2.5 -9,0.5,2.0 -10,0.0,0.0 -8,1.5,-3.0 -9,1.5,-2.0 -4,7.0,1.5 -10,-1.0,0.0 -8,2.5,-1.5 -8,2.5,0.0 -7,3.0,-2.0 -8,1.5,3.0 -7,0.0,3.5 -9,0.0,2.0 -8,-0.5,2.5 -10,0.0,-1.5 -9,0.0,-2.0 -7,-3.0,2.5 -9,-1.0,-2.0 -10,-0.5,-1.5 -8,-1.5,-2.5 -9,-1.0,1.5 -9,1.5,2.0 -9,-1.5,1.0 -9,-2.0,0.0 -10,0.0,1.0 -10,-1.0,1.0 -9,0.0,1.5 -9,2.0,0.0 -10,-0.5,-0.5 -8,-2.0,-2.0 -10,1.0,1.0 -10,1.0,-1.0 -8,1.0,-2.5 -8,-2.0,-2.0 -10,0.0,-0.5 -6,2.0,-4.5 -8,-2.0,-2.5 -7,4.0,-2.0 -10,1.5,-1.0 -8,2.5,-1.5 -9,1.0,1.5 -6,-4.5,-1.0 -9,1.5,-1.5 -9,1.0,-2.0 -10,1.0,1.0 -6,-5.0,-1.5 -6,-4.0,-3.0 -7,-3.0,-1.5 -10,1.5,0.5 -7,4.0,-1.5 -9,-2.0,-1.5 -8,1.0,-2.5 -9,1.0,2.0 -6,-1.5,-4.5 -5,-2.5,-5.5 -6,-5.0,2.0 -10,0.0,0.0 -9,-1.5,0.5 -10,0.0,0.0 -6,4.0,-3.0 -10,-1.0,-1.0 -9,1.5,-2.0 -8,1.5,-2.5 -6,-1.0,-4.5 -6,5.5,-1.5 -9,1.0,-2.0 -3,6.0,-4.5 -3,3.0,-5.5 -10,1.0,-1.0 -5,2.5,-5.0 -9,1.5,2.0 -5,5.0,-3.0 -8,-3.0,-1.0 -5,5.0,-3.0 -9,1.5,-2.0 -9,2.0,-1.5 -8,1.5,-2.5 -7,3.0,-2.0 -8,-3.0,-0.5 -7,2.0,-3.0 -10,1.0,0.5 -7,3.0,1.5 -10,-1.0,-0.5 -6,3.5,-2.5 -10,1.0,-1.0 -8,2.0,-2.0 -9,1.5,-1.0 -9,1.5,-2.5 -6,4.0,-2.0 -6,3.0,-4.0 -9,1.5,1.5 -9,-1.5,-1.5 -9,1.0,-2.0 -6,3.5,-3.5 -10,1.0,-0.5 -9,2.0,-0.5 -9,-1.0,2.0 -6,4.0,2.5 -7,1.0,1.5 -6,5.0,1.0 -5,0.0,5.5 -5,-3.0,4.5 -8,2.5,1.5 -8,-1.0,2.5 -9,1.0,2.0 -8,-0.5,2.5 -10,1.0,1.0 -8,3.0,-1.5 -9,2.0,-1.0 -7,3.0,1.5 -9,-1.5,-1.5 -7,3.0,2.0 -9,-1.0,1.5 -7,3.5,1.0 -8,3.0,1.0 -5,6.0,2.5 -9,1.0,1.5 -7,2.5,3.0 -8,3.0,0.0 -8,3.0,-1.5 -10,-1.0,0.5 -7,-3.5,1.0 -9,2.0,-1.0 -8,-2.5,0.5 -9,-2.0,1.5 -9,-2.0,-1.5 -9,0.0,2.0 -9,-1.5,0.0 -8,0.0,3.0 -9,-2.0,-1.0 -8,1.5,1.0 -5,4.5,3.5 -9,-2.0,2.0 -7,4.0,2.0 -10,0.0,-1.5 -9,2.0,0.0 -10,1.0,-1.5 -8,3.0,1.5 -10,0.0,0.0 -8,2.0,-3.0 -9,2.0,-1.5 -5,6.5,-1.0 -10,-0.5,0.5 -9,1.5,1.5 -8,1.5,-3.0 -3,8.5,1.5 -5,4.5,1.5 -6,-5.5,1.0 -5,-5.5,-1.5 -9,-1.5,0.0 -8,2.0,-1.5 -7,3.5,-1.5 -7,-1.0,3.0 -9,-1.5,1.0 -10,1.5,-1.0 -9,2.0,-1.0 -9,-1.5,0.0 -9,1.5,-1.5 -7,2.0,3.0 -7,-3.0,-3.0 -8,0.0,3.0 -8,-2.0,2.0 -8,2.0,2.5 -7,3.5,0.0 -9,-1.5,1.5 -5,5.5,3.0 -9,-2.0,1.0 -6,4.5,1.0 -9,1.0,2.0 -7,-3.5,0.0 -9,1.5,1.5 -6,3.5,3.0 -8,2.5,-1.5 -7,3.5,-1.0 -8,-3.0,0.0 -8,-2.0,2.5 -10,0.0,0.0 -8,-3.0,-1.5 -9,1.5,-1.5 -7,3.0,1.0 -9,-1.5,0.5 -7,2.0,-3.5 -9,0.0,2.0 -8,2.5,1.5 -10,0.0,1.0 -8,3.0,-2.0 -9,0.0,-2.0 -9,1.5,0.5 -8,2.5,-1.5 -6,4.5,2.5 -8,2.0,-1.5 -6,4.5,-2.0 -9,0.0,2.0 -5,6.0,-1.0 -10,0.0,-1.0 -8,3.0,-1.5 -9,1.5,0.5 -8,2.0,1.0 -8,2.0,-2.0 -7,3.0,-2.0 -10,1.0,-1.0 -5,5.5,0.0 -10,0.0,1.0 -7,2.5,-3.0 -10,1.0,-1.0 -8,2.5,-2.5 -8,-1.5,2.5 -7,4.0,0.0 -8,3.0,1.5 -7,3.5,-1.0 -10,0.0,1.0 -7,3.5,0.5 -9,2.0,1.0 -9,1.5,-2.0 -10,-0.5,0.0 -10,1.0,-1.0 -9,2.0,1.0 -7,-0.5,-3.5 -6,-4.5,1.0 -9,2.0,-1.0 -9,1.0,2.5 -6,1.5,-4.5 -10,1.0,-1.0 -8,-2.0,2.0 -10,-1.0,0.5 -9,3.0,-1.0 -7,-1.5,3.5 -8,2.5,1.5 -9,1.5,1.0 -8,-1.0,-3.0 -7,3.5,1.5 -7,-3.5,2.0 -5,-3.0,0.0 -8,1.5,2.0 diff --git a/data/shots_dev.xlsx b/data/shots_dev.xlsx deleted file mode 100644 index b3c9c9760ca3f0fc222ac39d47a0a1b70e8a8e90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20306 zcmaI6cRbba8$Vw5%#K4=5+@@LvXU*^u{lP_-p7at5i*XE>=ohQSlOGhv$xFRL`FzR z5q|f1zu(`-_xsQ9lgFcn+kL;T`&##PKdfBrFp-~CFDHI!O+m~9y_v=jSjj&+F}}`=7pMt)lA4+6j!gogf zg^)i@Jh20F1R(}wCx`dHuRWaGwmB)%HQ+1**GLS{*GQQ!P+ros}=Grm9|P_Jp9^!UL$=wx7q-9 zCpkRI^+RIWeCw9VR+>^NBh|hJ-K(VqueGz=Bl&sgV)ewP*H8<1EIRm?R%s~gHU1}s z-{%}me+bu;M8l(lDHZJ?I@bA+nSj)q2cR+U9-5anP+TC~Km&;VXNAgBza-G4FwTXgK&-Toy zz@3Ks=X0YLteY}gnyn@>ULU7#-%M}WojB`jf8b^Bo!viS^=zVY`AW#Bn^NDZ-5dYZ z+l{`TAKEf~sYkgy&Y^pl&-9Ub{E?fr+=Z@^;J4kW*MhaY6PY|jI|u>65Sz^K$ zt2Uh&q)V~tjS6b)H14QnO%d(T(N<&Tdc`Q=yhmzvd+1{dJTgnE_ zpL6SJ_Fk-R=i-}}FWi|dsan~I8N2s>1~m7m_s9PB`a?|IrOWd>mgP^M^Iw(E3Qrn) zEz2`k)1}oOK(Rl>(bPU5jAoYLp zL@dnQB;uBM(;}c`2c5`!7XJuOb?)0OS+)DhpI*PvsKs&~W(H9QzNmP9M4b~{{_%vp zh;xjCPKuPuZik`u$|Pko|9#52D_hp5nJaa(EM7A0SFU{PNM4r?}6^O?> zoQByJ{k3Tai!!*##O2wx|E^T`bS4*JLeYExhv?i`$?ZK8YoaA@cGML$HSQaC z8}h>MpVC8D37KL?#SeW%`DqZsEYHICb!>?jI@mt$zEQ5RTvOi^NA!vzXWb1Pvz%EJ z26LpL2SR+K^HA4f%JbvazHm8NBWO;Y zfjXPbndjKS>gi2XL2b&H&3NbTWYob|j-IGN&2`OG;SS3}b{!#D>Oi(9w-buR`G@IG zPFTb05$5gmO?cw%zLfgoVh$lwWkO+M44Sr*UY*>=x@746bY{|$MADZJq7>gkIW*U9 zC271ObAh8%C&S{{6gvK-;!C`-{<Jivn9UWinpLW z=C4n4!dgZPiaFh$D!7{OX0^gn=*mXBVI?9l!$I=3~d^8cj~xjT79GB#ekLJ z{Xv7Kk5jgb_kAC*^Ei`GiPQ_eIC*T}B7PW_QSqjtJ>&oUxD5|q^V`yr%=(_3HLu;A zv6qxJb?JJW$^G-WeQ;C4=O-+kcXFlJPoEYXpEMMQXe?YThjqRvC$zYF?E&AJO*Zyw z%o1?`sWCDWf_`P5hf1aU?JA(vDaC@YBgmP(5@|)2JvN&dl|` zzczf)2O05&t+C4Xw-!ph5Zi0v0>c1S0zZ>8wu zx)y3m)HP(60)Kns`P-BymqKpuB!|>506rilDUoH{X$C$|4Wj1%KVIPazj(ph(az4t z`#*^F&)}cv`VYX0OBf>S5~5Z<306*TSKCog%6!75(5NTNacfHS(|y&oo&6D&>MvdE z!|mRYQ$AGEuUYzR+pzE{G7_n+6l7-iQ;ABy@%plj@Y;c*q}z0~P;o(Iy4SV9zNGB& z7^NUNznYS9inI0(v=rVTfS&@h`f6VI6O=wY4F9{`8Zh z-!?HOgwg9h-jLf0JRx;Kyn7#W(@dh_E>7^S8R4`NAQto0|0Ov6e}~=C+RM&X-^a_z z-Qk}zAD8d}C#lkYu=1x?^qnZxBsPLhIa!XnGD^{`^yQd~c3oF2s+UIh(Ta zNLd6%HyMB7w_hsDbR<{yFZ~nQqWc%`lmSt$|4(6={uS2N%i0eo=iUE)`NzIFi6hs- zgs8*!9}v#B(#tR@{%)pzBgbx~$mpohsMSc;(XN%)dLWT8oR(3#Ff%$I8^+Wxmi-eC zwzlHb{g^W0Y}Y?R^JY!oyztDA+o27T24&aQZ(0oK_-Qhl0y3XyFE7AOd z{QBc0YXhk-Ndr%ezP)YYJqU#lDbcr%gx;mP%rg~j`xfGijr?#l-F)E`jU^%#eXRLt zz_v|Jzck44@G8!<{Uh3CIMed|Pie`)ihmP@f0KixF_0Wkyxb2WD+t8aMF^{8TMp(m z!di&OUAcv$FRfh6e*F@8{LVM|-G}(pkkcd1>F*BW(TwWzL{(P$GaLguR^|H)_jC8> z8sB*skKk(!a3>M7)bh$a;A2Y1<|La^eHAk1Ou8#;p?aj&ThjOo z6jxU|(5A)=2`Ysa&-hmy##m<&= zLdJ(EB1qA-=viR~RU3^zLl~bo>XIS1Qrn(fHgjcWv~kv!hYJTYS1>l`FdpuA9*o`Mme%i}_x}vnO!hI^rGM0&=A!dgZ*QT!ocnb(SMoVtUE3 zIxF9Te7T37jz%l%OYjvF|Jt~#JKRmY1Wpf|q2sfGio#Exk;gROlJKDxk24%5cI0zq zy0m8a!mqVojWirO&{O-C8aA7_X;exa#ZP;ZSTe+7w)zM&tzFLT= z=TyM;hbJFCPJC)`o74_)X_EcG9y@0z>&)-lc;{NlFk$f$-eH`8_cKxjf%izhI4VB& z9=@AjGPj%=f9Z$C&ke1>^p-bVHvZmhn@|b!mx@HOEIH8`?1MtLov};@&YW`%dye)kVsHfqU@1Ctu;b-)33Jm|1ef0Lp5R zd2^f;4>85_bE^WMojaVLMsstVQ>C#>;s?It^_b~N3Ap6G?hz>&uWd73k~5^f*(YDT_)43Q#8#)zkH`Hx_t!nxj0R<$`p*iEyQ9#L zrke5NaZ68sH=+%RYh|GTeIkAl|JI{cW&U!xO*3PP(ddpIMc;h=7@J9q&`CNUgL>hGPxX z%Y$&i6KWGee=Ueg=_Z8n@Y7{_JHg3??focwGs3=Zb88#fS|b^1nYxboyOIGCd{8fF{oMM?;Zn-@NKa7V`>Yod)SE-9L%RMn zF79=nsAsK4ou03EtNIo*p8c53|LYliHmAehDb?|-AIo!`HdHor)+vi88*=>f;P}$> z?ECWi3{c8v55f2sfA{`w?|J@R?myhW_L*((5{t#|?_c^HzQj^#cLpD9ugBiKJSaqu%(fDA_%|)}BVY`T1`=#+QEI-c;_fUxZ^9mzQ#b zFU}9{UTpk1?j{cKefBXcfy(1x!_)WpiWKG8oAw~p%f$oMzTHEI%ckZ(KXw-n%do`t zlG11MotJwDgd4I!zg0s5FHW*_64-~+K0o+w5z^fJXQw-X&GO{Cbsn1}+k>@)Z&ZP6 zX`R?VwTD=pPT6M{ffv5DvS)vE9$fa1?OhxqP1r)tuuU>;zsD~Bh{|;aFL}i)UaTKV z1YZy7Xln`y`MY@U5!LxSNT2)fgDI)_5szzBZ~h+4Ezk8A^e*c7ortq*%bxuuy}(Ln z7r%K1$;cX0{IS@5^0Ex;a{nSj_HzEfLe{&}|L4Q@fTw@o?Xz88cJ~MSUL5RMJ9f5h zemlANITswfbCSl$_|oOsV*kls&x=Ovqu{@vhj#ie+gmTsy2oWGx)?VvcFuqQC_NwR zusc~7kPa9+*crL}EB))yO7%;>@A3PeWZaqG$gYgNe1CX$XnfbhBiR4R+3$&G!Pqgb z18m^A=#N_2wXG-cbGtCV!eIZ_M-M1^v8`;E*jAvH5Z_-vdrzoBzNGcIXu0OzUU7VT zCVa3qaLi@S7`elC`L4EK_WSAKn+L^H1M_p;C>@bUZcOi}@P7?GXU^bWaa=2V6GEhO zrP2ERE-X)_W0Es`9Bp%>3)KxPQ0d6r4`+rFBPsCX!D<@0xa8;hOr8j$@Bx$#-Hfh1 zW8b0x)`{SWf_|T=rk(6_Vd$*Uz7nZKU6qk! z{Q06XZ3hF^!A-`?C!0{amK`6JxljsCk8($8i)Up08Qq~My)I3i59yWCIl6uv_+0bX zWQsHyb4PjaC%#goYS#|^cZOGlr*JFR>&8@2vB>E)+m0}c8p)l*WSE7&RKX89drN=vpIFsQC&_;Ai=eG4^+50Pl8+`J#ua(JZjEfi%=?l^Wu#!gc_cf}FV7g3eQ z3G5e8urH?qF*dJ@c~tKuXeMtT|0(7^x29jt%BECu2Hk>)bWqFok;+Ucip`KwK?gcz zQ7qna&GtF1Wr>xhc+QHW6rlAoCM_mhjjNc^6 zyz{y?FC2BYT&H9lT#jxGTqy`5bjfm;G%Hw_vk%^QuKJkMv}MCJE)yRT>Z+Vei#8jb zb(Bn`Q3$-_kX0#RR^*4`$hVE zhM+p|AyTKG_@4Zq!Mw?Che+YssMQfLId4O8aIPL&dd$j)ZD2s6vdLcz%{S&~z&0=p z;nZU{>G$~ti5ta-G<_l~Wfrk`s#5S%PQ~No-P{gpt3`y_ml)=GVWKXxu6dF(u_>LL zp}1gN-RCn8iK|h}khHF)l2Jx|ezv|8v~J#oAOT*}m^0xhop@FK5;mJIc)vi`pM$IT zV+4bY4(C*mgDCKtqrcXV`ZFhe9bntn?Cirw2K2jp<}y%~z>QNEP{87I*&jwD#Y@tOUTEs9|ybn!T_`g%hue^!FF(YCYKDTk&y2Dp^XTWDB1BJndSebisyTp8U z+goz)xL-SkqsEx?kyk1)v}!OB!!f1o0E@Y1w-HW0*P5G&KWXRyPQ}1`RU1s6=3EYN zecpn^i@~oJEeGFGeL%dm%&uAu#@rm75cSt!y-0_&N@?kWJz(=wM-^b^q0v!ZAguLA z1+IXYjDP0fD#E*ECapem^AL-dFz+q~ubd`}{)ru?#vDcTiqVvvgF`YfOT$9;=~HJK z^|YLJ-6tF(vNiX(bVvbz9`vjO0}W&uWWpBSzf?v-Q50*LnYB7|+3mXC9EyWwV*1i& zfHsQ-&`J8Q)2~4-JKy6f@gd7xX2#9A0H=)Nd_Od`_S&1DBkB{%2w2m;{Pbdtnl{@m7?M)|^E+N6oe3`|Pqw;NGM1ch>_!1c1i@4X ztBdz_W3pUHZF#Z}o(*XtW2#vD4(&TNoYY#kzx$APHyD(Q=prviVEKW5)2r zh2e#Kh=aM1{{|Bg^j3O@rvo5Dkt-Q5Pe!`IJoLrXT*QCFpNNwnOCX%N5IGONVkt~~ zep>q=tIc#?k5At*Ud?$u;QpoTrxbzq8m#fJA^1v_D`~1gH!PgF8?vvEY7bGEq#ds{ zf6=#-xQ;+4KCgTl-*daltl`;^R@zU}=@Wr(5kslSc>}@M-py>|{ya5pL-crhm&~7T z?^`x}9ipBTn6o^n{kWJWa1LuuiI}upZj0VY6ORwcP*5Pv@OmA01_sX|ieXz-r}I68 z!z}&pH91+eE<@>%gok}dp~tGc#`nE%?pdu!(Atx2SuLdX+(S|x_8kc6N0H(6U=G#H zd)tua!%Vb;3?hn1#>2i>!jDyjjD7N&;+|qR)1d?jzf7yIJJN~6Jl+?!F={)AQ5VHH z=(w+`Z%_^-6VkzQY!omD?IMEqE6;UJ)hYrPp+@nJZRDYbrjl`Y2r_74mp=sDgvgqO zu-VN@H zN>kfY{8_t*@Y}bt_#?K1L@GU3o({`1$_O0OkmpkDtHV5#f-L|WIwPA>aoi3B7U*r643W@OX4quMr z`*P0Cuz0jFhQ2k`&9R)mHX?+rAh|UX<5bS}R#P$)`T3AYb0mxua?Yl{v6(4i87DVW zo}GG>VKZaT;`hMgJs6GtpbwHrQv} zMc<;Q{}7Y{Wv)cZeJW2Jak1tZWU%1f3to9%Zz^2+m1HA^+#Y%Lh^Pnb{xnR;DBhus zG_>7R-YHJ>d8LUuE2F%J+$w)wBxxpW-Lp??oP}C~uL#K^6RAGzPlFdxYl9F^5h%3J zJGf22>_B*YJBs&TD-N2^JGaU2jDF56e;n8xDlN*)bZW5XUy!&~qU5PhwTKS4X$qlUANzK}cFJi&<47 z6zS*GJmd%}3RiB>I2CJ5Ht7f8-*M!OKxxtnL>D_`AJ`Dwb6h`)q3OW{i3+B!Jf}rS z#u?5emJTYI^S58+s#8GZkep8)+p|;x35oEK{ZcX{i`c}y=_ znY;2_6d}jSl_g-y%#+siJOF>gab0w;`Gj&ht0^o1|EFU_onZE>$d+v-B>6GX*NH(V z-<#@&=?4k~r;fdKWV%y^GTo>~PPi%`T1@ThP>DE_<(TN!WQ>y*jXcI(0m*tyq%=vk ztwrKyBmDy`)sN;i6zvogEZKX{SCL-v5|zWjXrE}Gy`?f8YJ!kV6H`hr6`t}f!LO*Z z>6#JRRit-GM4!QlEuFY6{OS9n>1}4NidTZK`33S4U&+wJ*5h7Tn8TMtjS<4_QUujr z5?Ei7p2@-Hw)iO6j45|z@!tD86^XN$?cPrmVkl8rR`wY5r51D}}dEQcB*x0PR9MY@p|iQ z?(Jh_tp&{yS)qM=G!keA1Cf@QE_z);NR?t_X(mi6{g<1)#ghIqB-eRx^R@3~?12+-Msa<=$c#*wT=Uz%J?+yut3_yvAenp7~$u)(y;7UQ>FDNY8Zg z#K@DGu>7X17LldtV&EJI+FbYbbv_@AgrV$S8c|RPkAK5qAdHp&g+%NKZCd?=IgHp*E6{lkn27Uyg-UaAD?acFs1l26N55VaH~wICUxFEvRazz}YkFtYi! zG*=Z!m3*XACd`unQLV&VnXyMPB5HTVTZ<+p3oYF(ss)k4`(xa{mb*3jLsLI8fI1pY zKH6m8A|g7KJaHFFjj4q7a07NS(5M?uYDyM+S;!F|2S+rt;PKX7iWq4?Ls$zUIV$L1 z;*fqoWGjJ&;`g(wifyQ^Wp0g*YwD{I`zTY!n1OXLEr`T;rPrN4fvFs8K<}EvPR0$9 z0e^BB0nk>!yD#~gaGAx+X^@)7Fh4+P z%C1EG?_@IPB*TN=2ZHH)lpjRx@_6|B>`S)Pr&*GKKS1l6vmI43Dizx~)6pn4Z^m2G zI+EDnt(6}d`YLDzQ@klR%a@CS_n6@Nj0VDEjK^E-ihDm#OC)=&l z&=jGS%|Yb}Ea<>)AuY)LYZd;2LF{RoCy};56R)picu|3yRS`@@m?NL^SElVzwu{<1 zW<}gHaIZyn0+|5uZqf{AQEb50%D9F;k;>~^)5nf|S&2Ba(Q|&jyWD>cWCANOnJ(R!pFF7=$<|PeFkh#Dzi?h?<_(6Xv z=`pg(hw9#Dj+K<9vii&;_!?r1&2=14z0Yx8n$uuE2U+Gr1#?^vCzO-Q+sv(0!-|oF zkE<`Vh=1=PH7xBzF>=Bc_-+sXdjGr<0i{3DIQbG`G>MizC1_E&Gu=-)C6k_?LYEnz zEe|ya(Tz4k2fkC}D?y6LL@?tsdno0-G#Xvc8sI%N%>TNB&D~=AJFZ>|S#~xS0PzJK zNUg+IY#7a97<`Co#f`{$Z1YwXFe@_H$}Kkf2{LCb3VFc%1C|WNGP|#sybl^ z9SD#an)7-W{BcM}g>oq#I9W;_a?6LR((x+yo4Om( z3-;R(`!=djC_-3ZOSErWkiAj+BrnFuU`Q&i8gsX&eoE%kTLyX~Rs3S~X@C;8mn0nU zZGP8`D|ZjOw#DWH_)flgq-~rI@L!E%uaA8chrwR zUnvg-kXbH?p08olPH|wO3dl|HXq?XQ7Ez*>F>*I53U|A_@#-0-gUscZUq~T@tsyj4 zl`US^=inz+2}XJzl489WXL?56lP?KI;}N6Ycy22RviNa~Tt6Q2m54u5s&0Ywx=qXQ z7Bb8rj3`S_-?7Z;o>;xQ4j&ls6CIewLQcS^uZ%QZ)Fzm@eA&hIPOOrQ;4Qrrs>V%B zSfgz=*GV$x3TT+Y2xMQGTD40B~F#O)_oc@O@$0oe9F`y z16xvCexZSoY~Q*$sW->s-bNp)g-~NXrw(V%K2RZ$a$2uTrI*Ltr**^HZwoLLealOp z@K{R5bTqhP-En_NnabdQYY?3wsAMLj&S&pZJx*G)Ta{~#-Wk81JQ<^=OdRPw!o1_Q zq}@(fT=!N=L^&B#rR0hY-WD(^N|}Z#<5G#1>u&OQD)I#S$4RI5lop#Z1IQmZMYyKr z(A^d-_S*Jf5!d(lz*|u`8t0JgyqmveR7Y6$FAkpif?6zXip)!-c*YrO z!M=F`-fh<)-M zVUU5*PsKRN)Z;&n+r4KQD<@h}0*|%2oz^xBvYG3ljtDg|t_l)Z+|!7r>HzXgr*-pS zPhz`48Q^N~g)0(wA9`gA8JkNk_65zD{m|swtjT)?qZ|gw;t&A#M+ucY#U@(J#zr3U zq5_49q1z7!w@>Bh!T5tnMPc8RH19Oigg+E-tj;UoP)Va2;tVn z+%Xa3e)g$v253T??_1XkGo3uXjo7t~ZGlZR!*tU#qKv*LEFLO(Sw_QlZen(Wfe#vx z$m8qbK(eEow8q9_;)0bcVeSZM9G^pCDF=3PTVMc9NDK2J_$LcZApt9$mtT!llZmcG z%Ypu*B~OG16lV$e`ovbyI^*Gn}gRzb1f)Cv{0uX=5A)GaXIc z0pxp5Md4)*qIoW4y5^7D3D4`20_MgzW;sCpfEvzM>bnE!#SoGs(~f67P4!ib-thmf zd}Gt6HEY&ws|8^mEyCq3u@o6%cGSMgcVk-18zYARz-*4Ni4%?!=jwLQf+$&t8PhW& zJSg+U>^u+a_lG|BMa-HhI%+|_nn!_b`g{P6&?nN(vMd03F&jkNW$=B9sH&KX=t?|A zg_zw@7IP%$)rfJEz6rdcc*m^s&d?-j{uV#f=5OBPjikf4v2jKX&%OITY ztx1q&^dg`!k_n622E>qWj%R-WHS^H%8nB_(A_k}t`YJm775zP<99X*nIGB1_lae9d z7no>WjYh51fJCB@cFx3uG7cnDE39=Eb0r4~xQz?+Z&PE6->===so<2bT*eV|?$pI*G3rmg@NULd4hXn^hqh&Ukr0%UQoBQ&)@h8p=k z6Q(|&shla_x0uLTg{ELIk4Y)OrG#ynu<=u)fwD&A)8pAhV||qlTXDiUfKzE;(=*BW zAIyb?>HUm7DE&YVBQ(d4i7zW_jBLq-ozBpm&jRfcKvtXw$BoFvO5FF6-p8{-#`;7= z$+utK8RvAbWTWr~W-Q~0V9wqW6lL0Q9vr4pN-mY^qGmLvifqb+)y&(J2xo7>M47go z2M5wdBgQF2mLrH1&9orAjZAzx`HD+sGE88H_fcUDEpIhX@;@XR=@V_Z3(tO1p2~3) z!tto(7gvmoDk~#aw9ta&Y;_w%Wb7%uSgk-)P?pF_iuSb6{4=27i7wl*5ETSmA;s*X z>I`%2!ToBRUIxWy5iA_sy|)sLo3JXS@7>0CH@B2w`sq9f7eIKKkHN9^1Mh%tTqei@ zkEt60@9mkep90Agb8)Mvw42?QS`a4f%hD>vC36{^lvg$~vxXv@ngfJ}0e>Q!nCQ1n zEde-Yadn6|nz*bo;%;-0Ak-(ew#YMADdXr#nJVSmOa??Pf;m8td0cELDzd39KWzit*q333)F3e5CT^3zP=~0LLCP>Qf=jj;%g{GD1N!hM+fM<^?C9cEgcVpVHpkP=*NuSVP?o z$5dq_b&jq4!Ma4gLPf$>faMUA#vwBu;DT1HU_faoYxXK%?X2$n&`?CL%zz5X``1{I41`Ni6YBIEw7 zFche4?Bvj6(3)%7KnOj3qIiWw%)P~?R{>Yzj&7x=zG8m7?%&r+onFW=ZF)C6-|G@3 zT}n)?#>eZ!+N4HobNq@IFe1kdYLW`hQEq&r{#Ph@-Qr|~xnQ>K!x z34l}&RFc%4lzp#L%9kL8Vj6FP0v^xs#b!fUzB7^dUJ=`So{Hr0C&{!5phD@VPxU1k zAhh>a8TCNrOt6?u?oLH|WGs!M;YsXbDKT7~4_)mX1v^$@0VS{3Mw(UB0wm=Qg`k?K z;=~=HaI2q_Y(|T-5{;vpH_9zSB6e>XFqdEF)kQ($+PphWAquK$(2Bg--Cv2PnESOo zXP}6f;=Ni~P3O4NwE!~5C^`O$Y;wDAJpRYd5J8X#$_}_vRHw%*o+6LF zAY=YlJ(>gW<)gk&Q%?G`+&0uJ_5}002Y!P_iE?4Wa@$l5N3l=Ra2xabS$fs!;X+pOp$Gi6%ZC3gS;Y64hHa= zlndF+!-A%&0D_NoUWhw4QDSiH3<*B~Ps7&%SiNAu)@;+(iRy`dySlH%muq%O~;z z6v;d__--v}5Irs}J?`8H_5K2+XZvm*(ikT&cl};>u?bd=-a|Pr!)UU>XOp1CKAyL- zoK0Q~oHdY5+yTu3bpni2ueqZ%&nN??Pq?yzP5vH;61^fZhCvVZD%d`VgQeb<-~oA zjx~xd?{69iAh=rpw&BeJ@}|XOj~m!~J2d>$>f0mC^5v(Q*H26ntnxt*OzC!_%Wc#e zY=?$oI!4WJvD;Ij{PY*CpJ~FEJR`VAv)EQS2$Yg|#PwbQA}asn1#F=&L0;gioOs80 zsV8EV%fBRL%8Nm_d_ftjvO{x!x=XFnxi{RPeYG!VwqUgmJ^c5TdouK)h-Eaz8*m9A zhv{7?9NK6h3IMkL#B%Q(gXs3p)D<5sXv|spLmb?esFuTY2r)Av5+cU|p1aO#1dwFK zz&OB;Rh#-H!fy|>ZGV?TxgMEu=*Qc)QA4Bv6xB8HJ~K6UkYUCR4$W{)uAF~hdAw4h zGs>xr5d!eG>K`+%dN!=y&ICZmDvaKGC8zG!#lb!knXpOFV6!ldSp+=TYe6ui)O^Gu zmMa6W-^z-ah2BbH2cB>L0jB9?@YcMvyYd+)HN4S|L^iD z0LOt0avk9FHD*;YRqV~332IY)qK>k}ftCd?Ec4F9xQV_Bf?cY7=KwTOx@|x`ww^zu z5;Wr!Y*hip>~}=1VW>3D?nmI>E^M8=Gw9C(0~ktoFoIA;WE2d(1AOo&i2-j%SnwSi zWhg+l9kvl20jQm_hl=2%c4pQ5zDO2O@_w8@aa}aT^D9C8+C*6F_6@jwoaSEHy2X^aD%9^FP7?)>U~em^jm&;jZvH zAE2gd-@3FML6x>^`y({~YkjX>XFy}P(NHI{A`^BvuQ_P&NFNRE7?|cv@f55Z>2C@Yhs3859LO#^JB$q-_%r3805p!zKDsG?? znV$*!VS&2;FUSuD5WMDYObU3RAQzbjTr8ABe>W2;b8Nc_nm~`$0=7?8Ss1}rV6LVs zRbgfn(x|T!nUe|AJLb?==;KSwN25`}lrAp;=q9rTog>9Fbi1l!Oj#)p4q!>Wkt+v9 zeU5IBu5=w$#b_b#9^3kZ&XF_^6BFNnKPfC504MDCOhTYiRT+p15W?z|YAbzB0cZlC zs7&d?K@s);rc{d}G<~zL8Nq37ql%!3!0a)e=;~O3g4Yh@gsCh* z7w{SS5Fu~fE9zP4uia1Yr>BD}fbrfRY_=(an}bxaO03?WXCNKnbi`Ko8?du7#vK#&vdmmK2gPC=-2iMVU}(gao*c zvjloDuN}-4WI`nol8oOcd9=4R*F$*)^K<1`D@w+F=%<4p^wTrKb*$oy)SD<&SSqWo zXRZ-#lMYXiEj+V2Cw;vUb!XV01<$R{CJDjZ_gWAGZcr711xG?R1ieoB$oh=PFnE~Z z0%~)yksLD;OMT=tss#)_)}}|%$v2e5oIySA9zr)RMbWmjviK#AblXH1DMaeJZu!M5 ztsh+HOT5waY*!u~kGVyeFu*#~6EUQIGu_V>pcr{j|nz_#JOM9O9LdpQ;N0;0FjE!y`@dfpHTzd@)CiXE@+Q>N0i}9>7rtkd zw`Eg@A6Ew+4c#d)dCacGSilNSuFszqh~4%&s#uk%VxHtB8L4AAe=#v{@7`OEegX>8aBK@Caxi+yVoALnKdUZGL11#(yVv`> zACm9*n(HL+><{6Z!U?Uh8l`?SiCkuTTXEH;v2ZALl;Ozl4ttv|wz2u6G1nMb@pk1Ew)+C!@ zaWjXvg9jL4T}jT%GP;i~UW2Cs1E7d4EUJe&h~sw0tb|%2)Y9IpsAqUR;1mQyOB|_e zU380~1LKLozMNo1vfI{LwD$*l@P38y<_`@%=s;AscdwRxD?r4=VNSi%sB6Unn3Z1T z8EKGA+%n|+-05XZ<#H zA#>irJsh+bTYw+>+9w_e5;!|W6z*6lkm~gX2!S^r(;x+Kgg|GS?l3h1Q3NUqV>85) zp$;$CBDa@of=&UHSd<{G7?PlXt&T+u#JIh zq_ys?U^#_UzH@n7$WumR!+ju5;phyEETuRVl!ZUw;wVPg$fFgMPJkA|TC$%iW_T$) z*!#yc&{Ep1=Woke@Z!>L0_E~%V6OV~E(6t91Q5r7oFiL30IastGB<3;@2=BByjJ>( zala9@Rs<^b>SPcOH^XAkpt>GvgAiss9gUs}Y1k2TFIx$H3|_8i*e5z^y7vKf3u*Fw zv)Q1uV>S)|nG-7$I)x7QZdrjF)368-262GXYB+`Fnb;$zNQj4$RT?M=(8!nH7zOM% z*LmIBXOq@Vswi2K#b$1^HWe|@!-R5wpyojTHY$~Hx(ZtGSq^G26aKFvdqJZ}DBCR! zmnTN0GJxq9h16x0F8#oJ-T@=rPgmqMs{)BxBQ7!fS`!roi}T?7*CvC_f8PZ@%b^t! z1U4{32(hY(MQnS4oP0m^dJQJq0kgcAH{Ff*1KTl7R zq2IdJ03iudsba5+@@u3G~5SWm^`@8l{(1;Q7r0&(-U{h(jbM~J9htiAKA7* z8QKJ241{u#ijrOKDW1vMia+4OX92?72(DyYM#7G-fvz}6e$@xwTRCG|Mp;0VcrRFy z9-l;`z-6xzz#7H^-t^`j@8zJwcqd_YrkF9)BPRX0;HU ztAlBJr-9+BkU%a}X0e7gQx%4P3tGHe&q=&K)9>@~7@v^P?rIA588hnum zU4A!K74&>_*CP9U(WwNS@{l18qDa`#ju37Zt~uPWk4>& zpM4l5#$L}m>E8zNZV|)xRk?BTz>1XyV&#I#kH6a@{l2;;njeLg4RxG0z4X~}`zq($ z;2rCAh_pUBv}~dy*~;I6l{K`Vej{Am;+gPuz6Y;i(M1tAv{bOhYfC{Clz6yl^A4rN z?YYw29SdvT0!3X0<9P4hN{c$g46W|xhHa_s&@R4dI++R$1=O{d{*-<;vajl(vopjD z{W!plEjK^S@?E%3|MDN9i3K&rrB@3Q9w#NTuEHvlV$9FjnTjx%o-r-kl^m~Lpd<>h zbbD|QcR#VFrd6CNDp?S_;YQL!2~h%p3X|_bW2xLnp}F^Dd8cSJZsUf#x6kG^7AcxH z^Ps(h+?Z$VJvT2aV&J0yU3;8Yu_Usbv+o+zL{cG1VpoT0s^gPJ47n!O?TX?{=2e%J zjG`)ENz>X+(O%fpO}##_GyO0z9oaA)=@%cBgsxj@&Qn<>TBovgr0uXe0zZY0557>? zwZpYtT9x5&?PQZd;h)HHnmS(;K9Ih)YVd4SkeOp0a)Q!sY)YjHJg8Br8*IZ%e37x? zKAWUlj|goJ9*>FhGjmV`>(9s$cgor4j_U(?BTT)Cnc}aXbf~l%xgN<9hz$y8Mp2r> zVpWy!IB4%J6qIb){&Hp8S>BWdFF1lpWp=~guTBPpE_%RG|Dlq}>~g1FYGuz6PuYeH zlP%ie2U2{S|JDnJV6h{y5U&%|U+M38>y-0cVgVm_*?wl?!oPe9aM$QkjV4Dd&yxk# z;O|`-PWzX`e0#k*;&B;Ad_y0BXJ?8~5h6exnaWnZ3zNR~LlIPf+AQM_>shF^qY|3{ zaa(`CR$>5Q*%Rf-8ajPMB+9}i2AR{`A<;xMbXnA#o>d47w}{sxm}N{h;PiN!=8a4} z>yi~p=|>(3Y$0rvt3e#+%MK+sin9D~4cc2?98OO+J}zf~CbG zE5|S6y&Ku$b!`FoB)yPnfBRcXqb+PeA#I_%B!)`Y&;%$8^T#Iii~vraAE&$9h4F)h z*fbyLp3-ak{BRmAG0g+CrJv35p^=y{Dj18vgw3}9hlaVwp)!aFj23C@LB$Gjs8B6; zXDVTa&?l2NZ|=0SJG96>02SBq1?dfEN9RumAh9&=u2kR!!Sf*PfaiZ5pApx7;3AL` z+i60Adq65wg5YG37Vq_;FYeR~_Xt!_1EKIGjSX}L7|TzhDBPn^u?7UxfwU0sS%?RB zN2>mwpdOGG4P*Ne1K}fgiVU3)>64~gL~);y?7MqYb") + sys.exit(1) + +n = int(args[0]) # Area circle A10 = 1.5 ** 2 * np.pi @@ -31,21 +34,9 @@ A3 = 8.5 ** 2 * np.pi A2 = 9.5 ** 2 * np.pi A1 = 10.5 ** 2 * np.pi -'''print(A10) -print(A9) -print(A8) -print(A7) -print(A6) -print(A5) -print(A4) -print(A3) -print(A2) -print(A1) -print("")''' +possible_values = np.linspace(-10, 10, 41) # fromn -10 to 10 with step 0.5 -possible_values = np.linspace(-10, 10, 41) # frin -10 to 10 with step 0.5 - -xy = [(np.random.choice(possible_values), np.random.choice(possible_values)) for _ in range(1000)] +xy = [(np.random.choice(possible_values), np.random.choice(possible_values)) for _ in range(n)] dataset = [] @@ -77,9 +68,8 @@ for i in xy: elif A > A1: dataset.append([0, i[0], i[1]]) -#print(dataset) - -with open('data/synthetic_data.csv', 'w', newline='') as csvfile: +with open('data/synthetic_shots.csv', 'w', newline='') as csvfile: fieldnames = ['points', 'x', 'y'] writer = csv.writer(csvfile) + writer.writerow(fieldnames) writer.writerows(dataset) diff --git a/main.py b/main.py index fccea88..88b7412 100644 --- a/main.py +++ b/main.py @@ -1,3 +1,5 @@ +import sys +from arguments import Arguments import pandas as pd import numpy as np import seaborn as sns @@ -9,14 +11,27 @@ from sklearn.neighbors import KNeighborsClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.preprocessing import LabelEncoder +if not sys.argv[1:]: + print("Usage: python3 main.py ") + sys.exit(1) + +args = Arguments(sys.argv[1]) +args.set_mode(sys.argv[2]) + +try: + args.set_information(sys.argv[3]) + args.set_graph(sys.argv[4]) +except IndexError: + args.set_information(False) + args.set_graph(False) + FEATURES = ["points", "x", "y"] # create dataframe from csv and drop any row with null values -def load_dataframe(): +def load_dataframe(file_path): try: colum_list = FEATURES - #df = pd.read_csv("data/shots.csv", usecols = colum_list).dropna() - df = pd.read_csv("data/synthetic_data.csv", usecols = colum_list).dropna() + df = pd.read_csv(file_path, usecols = colum_list).dropna() return df except FileNotFoundError as error: print(error) @@ -73,7 +88,7 @@ def get_score_from_cli(): return None def main(): - df = load_dataframe() + df = load_dataframe(args.get_file_path()) print(df.describe()) #print(df.head()) #print(df.head().info())