from flask import Flask, render_template, request, jsonify import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score app = Flask(__name__) # Загрузите данные из файлов games_data = pd.read_csv("games.csv") open_critic_data = pd.read_csv("open_critic.csv") # Объедините данные merged_data = games_data.merge(open_critic_data, left_on="id", right_on="game_id", how="inner") # Создайте целевую переменную (успешность игры) merged_data["Success"] = merged_data["rating"].apply(lambda x: 1 if x > 70 else 0) # Преобразуйте столбец "release_date" в формат Unix-времени с корректной обработкой временных зон merged_data["release_date"] = pd.to_datetime(merged_data["release_date"], utc=True).astype('int64') // 10**9 # Преобразуйте жанры в бинарные признаки (one-hot encoding) genres_encoded = merged_data['genres'].str.get_dummies(sep=',') merged_data = pd.concat([merged_data, genres_encoded], axis=1) merged_data.drop('genres', axis=1, inplace=True) # Определите признаки и целевую переменную features = ["price", "release_date"] + list(genres_encoded.columns) X = merged_data[features] y = merged_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": # Получите данные из запроса price = float(request.form["price"]) release_date = pd.to_datetime(request.form["release_date"], utc=True) # Получите бинарные признаки жанров на основе введенных данных genres_input = request.form["genres"] genres_encoded_input = pd.DataFrame(genres_input.split(','), columns=["genre"]) genres_encoded_input = genres_encoded_input['genre'].str.get_dummies() # Создайте пустой DataFrame с теми же признаками, что и X_train input_data = pd.DataFrame(columns=X_train.columns) # Заполните введенные данные input_data["price"] = [price] # Преобразуйте дату релиза в Unix-время release_date_unix = release_date.timestamp() input_data["release_date"] = [release_date_unix] # Заполните one-hot закодированные жанры for genre in genres_encoded_input.columns: input_data[genre] = genres_encoded_input[genre].values # Выполните классификацию игры prediction = model.predict(input_data)[0] # Определите результат result = "Успешная" if prediction == 1 else "Неуспешная" return render_template("index.html", accuracy=accuracy, success_count=sum(y_test), failure_count=len(y_test) - sum(y_test), feature_importances=feature_importances, prediction_result=result) return render_template("index.html", accuracy=accuracy, success_count=sum(y_test), failure_count=len(y_test) - sum(y_test), feature_importances=feature_importances) if __name__ == "__main__": app.run(host="localhost", port=5000)