88 lines
2.5 KiB
Python
88 lines
2.5 KiB
Python
from my_functions import *
|
|
|
|
# create dataframe from csv and drop any row with null values
|
|
def load_dataframe(file_path):
|
|
try:
|
|
colum_list = FEATURES
|
|
df = pd.read_csv(file_path, usecols = colum_list).dropna()
|
|
return df
|
|
except FileNotFoundError as error:
|
|
print(error)
|
|
quit()
|
|
|
|
def get_score_from_cli():
|
|
try:
|
|
x = float(input("x: "))
|
|
y = float(input("y: "))
|
|
abs_v = np.sqrt(x**2 + y**2)
|
|
return np.array([abs_v]).reshape(1, -1)
|
|
except ValueError:
|
|
print("Invalid input. Please enter numeric values.")
|
|
return None
|
|
|
|
def vector(file_path, inf, graph):
|
|
|
|
# load dataframe
|
|
df = load_dataframe(file_path)
|
|
|
|
# print dataframe information
|
|
if inf:
|
|
print(df.describe())
|
|
print(df.head())
|
|
print(df.head().info())
|
|
|
|
# display graphs
|
|
if graph:
|
|
sns.countplot(x = df["points"])
|
|
plt.show()
|
|
|
|
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')
|
|
plt.show()
|
|
|
|
sns.scatterplot(x=df['x'], y=df['y'], hue=df['points'])
|
|
plt.show()
|
|
|
|
df["radius"] = np.sqrt(df["x"]**2 + df["y"]**2)
|
|
X = df[["radius"]]
|
|
|
|
y = pd.get_dummies(df['points'])
|
|
|
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)
|
|
|
|
print(X_train)
|
|
quit()
|
|
|
|
random_forest = RandomForestClassifier(n_estimators=700, random_state=0)
|
|
decision_tree = DecisionTreeClassifier(random_state=0)
|
|
k_neighbors = KNeighborsClassifier(n_neighbors=5)
|
|
|
|
models = {
|
|
"Random Forest Classifier": random_forest,
|
|
"Decision Tree Classifier": decision_tree,
|
|
"K-Neighbors": k_neighbors
|
|
}
|
|
|
|
for name, model in models.items():
|
|
model.fit(X_train.values, y_train.values)
|
|
|
|
for name, model in models.items():
|
|
pred = model.predict(X_test.values)
|
|
|
|
my_f1_macro_score = calc_f1_macro(y_test, pd.DataFrame(pred))
|
|
print(f'My F1 score of {name} is {my_f1_macro_score}')
|
|
|
|
f1_sklearn = f1_score(y_test.values, pred, average='macro')
|
|
print(f'Sklearn F1 score of {name} is {f1_sklearn}')
|
|
|
|
score = get_score_from_cli()
|
|
|
|
label_encoder = LabelEncoder()
|
|
df["points"] = label_encoder.fit_transform(df["points"])
|
|
|
|
for name, model in models.items():
|
|
pred = model.predict(score)
|
|
points_number = pd.DataFrame(pred).idxmax(axis=1)
|
|
points = label_encoder.inverse_transform(points_number)[0]
|
|
print(f"{name}: {points} Punkte")
|
|
|
|
vector("data/shots.csv", False, False) |