2022-06-07 03:05:19 +02:00
|
|
|
import pandas as pd
|
|
|
|
from sklearn.model_selection import train_test_split
|
|
|
|
from sklearn.tree import DecisionTreeClassifier
|
|
|
|
|
2022-06-08 01:07:28 +02:00
|
|
|
from rubbish import *
|
2022-06-07 03:05:19 +02:00
|
|
|
|
2022-06-07 17:48:46 +02:00
|
|
|
|
2022-06-08 01:07:28 +02:00
|
|
|
def evaluate_values(values):
|
2022-06-07 03:05:19 +02:00
|
|
|
data = []
|
|
|
|
if values[0] == 10:
|
|
|
|
data.append(10)
|
|
|
|
elif values[0] == 15:
|
|
|
|
data.append(15)
|
|
|
|
elif values[0] == 20:
|
|
|
|
data.append(20)
|
|
|
|
elif values[0] == 30:
|
|
|
|
data.append(30)
|
|
|
|
elif values[0] == 40:
|
|
|
|
data.append(40)
|
|
|
|
else:
|
|
|
|
data.append(random.choice([10, 15, 20, 30, 40]))
|
|
|
|
|
|
|
|
if values[1] is True:
|
|
|
|
data.append(1)
|
|
|
|
elif values[1] is False:
|
|
|
|
data.append(0)
|
|
|
|
else:
|
|
|
|
data.append(random.choice([1, 0]))
|
|
|
|
|
|
|
|
if values[2] == 1:
|
|
|
|
data.append(1)
|
|
|
|
elif values[2] == 2:
|
|
|
|
data.append(2)
|
|
|
|
elif values[2] == 3:
|
|
|
|
data.append(3)
|
|
|
|
elif values[2] == 4:
|
|
|
|
data.append(4)
|
|
|
|
elif values[2] == 5:
|
|
|
|
data.append(5)
|
|
|
|
elif values[2] == 6:
|
|
|
|
data.append(6)
|
|
|
|
elif values[2] == 7:
|
|
|
|
data.append(7)
|
|
|
|
elif values[2] == 8:
|
|
|
|
data.append(8)
|
|
|
|
elif values[2] == 9:
|
|
|
|
data.append(9)
|
|
|
|
elif values[2] == 10:
|
|
|
|
data.append(10)
|
|
|
|
else:
|
|
|
|
data.append(random.choice([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
|
|
|
|
|
|
|
|
if values[3] == 'plastic':
|
|
|
|
data.append(5)
|
|
|
|
elif values[3] == 'wood':
|
|
|
|
data.append(2)
|
|
|
|
elif values[3] == 'metal':
|
|
|
|
data.append(4)
|
|
|
|
elif values[3] == 'glass':
|
|
|
|
data.append(3)
|
|
|
|
elif values[3] == 'paper':
|
|
|
|
data.append(1)
|
|
|
|
else:
|
|
|
|
data.append(random.choice([1, 2, 3, 4, 5]))
|
|
|
|
|
|
|
|
if values[4] == 'little':
|
|
|
|
data.append(1)
|
|
|
|
elif values[4] == 'medium':
|
|
|
|
data.append(2)
|
|
|
|
elif values[4] == 'huge':
|
|
|
|
data.append(3)
|
|
|
|
elif values[4] == 'large':
|
|
|
|
data.append(4)
|
|
|
|
else:
|
|
|
|
data.append(random.choice([1, 2, 3, 4]))
|
|
|
|
|
|
|
|
if values[5] == 1:
|
|
|
|
data.append(1)
|
|
|
|
elif values[5] == 2:
|
|
|
|
data.append(2)
|
|
|
|
elif values[5] == 3:
|
|
|
|
data.append(3)
|
|
|
|
elif values[5] == 4:
|
|
|
|
data.append(4)
|
|
|
|
elif values[5] == 5:
|
|
|
|
data.append(5)
|
|
|
|
elif values[5] == 6:
|
|
|
|
data.append(6)
|
|
|
|
elif values[5] == 7:
|
|
|
|
data.append(7)
|
|
|
|
elif values[5] == 8:
|
|
|
|
data.append(8)
|
|
|
|
elif values[5] == 9:
|
|
|
|
data.append(9)
|
|
|
|
elif values[5] == 10:
|
|
|
|
data.append(10)
|
|
|
|
else:
|
|
|
|
data.append(random.choice([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
|
|
|
|
|
|
|
|
if values[6] == 1:
|
|
|
|
data.append(1)
|
|
|
|
elif values[6] == 2:
|
|
|
|
data.append(2)
|
|
|
|
elif values[6] == 3:
|
|
|
|
data.append(3)
|
|
|
|
elif values[6] == 4:
|
|
|
|
data.append(4)
|
|
|
|
elif values[6] == 5:
|
|
|
|
data.append(5)
|
|
|
|
elif values[6] == 6:
|
|
|
|
data.append(6)
|
|
|
|
elif values[6] == 7:
|
|
|
|
data.append(7)
|
|
|
|
elif values[6] == 8:
|
|
|
|
data.append(8)
|
|
|
|
elif values[6] == 9:
|
|
|
|
data.append(9)
|
|
|
|
elif values[6] == 10:
|
|
|
|
data.append(10)
|
|
|
|
else:
|
|
|
|
data.append(random.choice([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
|
|
|
|
return data
|
|
|
|
|
|
|
|
|
|
|
|
def trash_selection(prefer):
|
2022-06-08 01:07:28 +02:00
|
|
|
df = pd.read_excel('trash.xlsx', sheet_name='Sheet1')
|
2022-06-07 03:05:19 +02:00
|
|
|
# print(df)
|
|
|
|
|
|
|
|
d = {'paper': 1, 'wood': 2, 'glass': 3, 'metal': 4, 'plastic': 5}
|
|
|
|
df['material'] = df['material'].map(d)
|
|
|
|
|
|
|
|
d = {'little': 1, 'medium': 2, 'huge': 3, 'large': 4}
|
|
|
|
df['size'] = df['size'].map(d)
|
|
|
|
|
|
|
|
d = {'leave': 0, 'pick up': 1}
|
|
|
|
df['what to do'] = df['what to do'].map(d)
|
|
|
|
|
|
|
|
features = ['weight', 'density', 'fragility', 'material', 'size', 'degradability', 'renewability']
|
|
|
|
x = df[features]
|
|
|
|
y = df['what to do']
|
|
|
|
x_train, x_test, y_train, y_test = train_test_split(x, y)
|
|
|
|
|
|
|
|
clf = DecisionTreeClassifier(criterion='entropy')
|
|
|
|
|
2022-06-08 01:07:28 +02:00
|
|
|
# create a decisions tree in terminal
|
2022-06-07 03:05:19 +02:00
|
|
|
# model = clf.fit(X, y)
|
|
|
|
# text_representation = tree.export_text(clf)
|
|
|
|
# print(text_representation)
|
|
|
|
|
|
|
|
clf = clf.fit(x_train, y_train)
|
2022-06-08 01:07:28 +02:00
|
|
|
answer = clf.predict([prefer])
|
|
|
|
|
|
|
|
# write results of training to the list
|
|
|
|
append_choice(answer, prefer, d, df)
|
|
|
|
|
|
|
|
return answer
|
|
|
|
|
|
|
|
|
|
|
|
def append_df_to_excel(df, excel_path):
|
|
|
|
df_excel = pd.read_excel(excel_path)
|
|
|
|
result = pd.concat([df_excel, df], ignore_index=True)
|
|
|
|
result.to_excel(excel_path, index=False)
|
|
|
|
|
|
|
|
|
|
|
|
def append_choice(answer, prefer, d, df):
|
|
|
|
new_row = prefer
|
|
|
|
new_row.append(list(d.keys())[list(d.values()).index(int(answer))])
|
|
|
|
if new_row[3] == 1:
|
|
|
|
new_row[3] = 'paper'
|
|
|
|
if new_row[3] == 2:
|
|
|
|
new_row[3] = 'wood'
|
|
|
|
if new_row[3] == 3:
|
|
|
|
new_row[3] = 'glass'
|
|
|
|
if new_row[3] == 4:
|
|
|
|
new_row[3] = 'metal'
|
|
|
|
if new_row[3] == 5:
|
|
|
|
new_row[3] = 'plastic'
|
|
|
|
|
|
|
|
if new_row[4] == 1:
|
|
|
|
new_row[4] = 'little'
|
|
|
|
if new_row[4] == 2:
|
|
|
|
new_row[4] = 'medium'
|
|
|
|
if new_row[4] == 3:
|
|
|
|
new_row[4] = 'huge'
|
|
|
|
if new_row[4] == 4:
|
|
|
|
new_row[4] = 'large'
|
|
|
|
|
|
|
|
data = {"weight": new_row[0], "density": new_row[1], "fragility": new_row[2], "material": new_row[3],
|
|
|
|
"size": new_row[4], "degradability": new_row[5], "renewability": new_row[6], "what to do": new_row[7]}
|
|
|
|
|
|
|
|
n_df = pd.DataFrame(data, index=[len(df) + 1])
|
|
|
|
append_df_to_excel(n_df, "trash.xlsx")
|