# app.py from flask import Flask, render_template, request import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn.preprocessing import LabelEncoder app = Flask(__name__) # Загрузите данные из файла restaurants_data = pd.read_csv("top_240_restaurants_recommended_in_los_angeles_2.csv") # Создайте целевую переменную (успех ресторана) restaurants_data["Success"] = restaurants_data["StarRating"].apply(lambda x: 1 if x > 4 else 0) # Преобразуйте столбец "Style" в бинарные признаки (one-hot encoding) styles_encoded = restaurants_data['Style'].str.get_dummies(sep=';') restaurants_data = pd.concat([restaurants_data, styles_encoded], axis=1) # Преобразуйте столбец "Address" с использованием Label Encoding address_encoder = LabelEncoder() restaurants_data["AddressEncoded"] = address_encoder.fit_transform(restaurants_data["Address"]) # Определите признаки и целевую переменную features = ["NumberOfReviews", "AddressEncoded"] + list(styles_encoded.columns) X = restaurants_data[features] y = restaurants_data["Success"] # Разделите данные на обучающий и тестовый наборы X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.01, random_state=42) # Создайте и обучите модель дерева решений model = DecisionTreeClassifier() model.fit(X_train, y_train) # Оцените модель на тестовом наборе данных y_pred = model.predict(X_test) accuracy = accuracy_score(y_test, y_pred) # Получите важности признаков feature_importances = model.feature_importances_ @app.route("/", methods=["GET", "POST"]) def index(): if request.method == "POST": # Получите данные из запроса reviews = int(request.form["reviews"]) styles_input = request.form["styles"] address = request.form["address"] # Получите бинарные признаки стилей на основе введенных данных styles_encoded_input = pd.DataFrame(styles_input.split(';'), columns=["style"]) styles_encoded_input = styles_encoded_input['style'].str.get_dummies() # Преобразуйте введенный адрес с использованием Label Encoding address_encoded = address_encoder.transform([address])[0] # Создайте пустой DataFrame с теми же признаками, что и X_train input_data = pd.DataFrame(columns=X_train.columns) # Заполните введенные данные input_data["NumberOfReviews"] = [reviews] input_data["AddressEncoded"] = [address_encoded] # Заполните one-hot закодированные стили for style in styles_encoded_input.columns: input_data[style] = styles_encoded_input[style].values # Выполните классификацию ресторана prediction = model.predict(input_data)[0] # Определите результат result = "Хороший" if prediction == 1 else "Плохой" return render_template("index.html", accuracy=accuracy, good_count=sum(y_test), bad_count=len(y_test) - sum(y_test), feature_importances=feature_importances, prediction_result=result, X=X) return render_template("index.html", accuracy=accuracy, good_count=sum(y_test), bad_count=len(y_test) - sum(y_test), feature_importances=feature_importances, X=X) if __name__ == "__main__": app.run(host="localhost", port=5000)