SZI/tree.py

193 lines
5.0 KiB
Python
Raw Normal View History

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")