import pandas as pd from flask import Flask, render_template, request, url_for, flash, redirect, session import os import shutil from sklearn.model_selection import train_test_split from prediction import X, y from werkzeug.utils import secure_filename from sklearn.linear_model import LinearRegression from sklearn.tree import DecisionTreeRegressor from sklearn.neighbors import KNeighborsRegressor import pymysql import matplotlib.pyplot as plt import numpy as np filepath = os.getcwd() webapp = Flask(__name__) db = pymysql.connect(host='localhost', user='root', password='', db='house_price_prediction') cursor = db.cursor() webapp.config['UPLOAD_FOLDER'] = r"dataset" @webapp.route("/") def main(): return render_template("home.html") @webapp.route("/reg", methods=['POST', 'GET']) def reg(): if request.method == 'POST': print("11111111111") Name = request.form['name'] Email = request.form["email"] pwd = request.form["pwd"] cpwd = request.form["cpwd"] number = request.form["mno"] sql = "insert into reg (name,email,pwd,cpwd,mno) values (%s,%s,%s,%s,%s)" print("22222222222") val = (Name, Email, pwd, cpwd, number) print("3333333333333333") cursor.execute(sql, val) db.commit() return render_template("reg.html", message="register", name=Name) return render_template("reg.html") @webapp.route("/login", methods=['POST', 'GET']) def login(): if request.method == 'POST': Email = request.form["email"] pwd = request.form["pwd"] sql = "select * from reg where email=%s and pwd=%s " val = (Email, pwd) X = cursor.execute(sql, val) Results = cursor.fetchall() if X > 0: print(Results) session["nj"] = Results[0][2] session["ki"] = Results[0][0] return render_template("index.html", msg="sucess", name=session["nj"]) else: return render_template("login.html", mfg="not found") return render_template('login.html') @webapp.route("/upload", methods=['POST', 'GET']) def upload(): if request.method == 'POST': myfile = request.files['file'] ext = os.path.splitext(myfile.filename)[1] if ext.lower() == ".csv": shutil.rmtree(webapp.config['UPLOAD_FOLDER']) os.mkdir(webapp.config['UPLOAD_FOLDER']) myfile.save(os.path.join(webapp.config['UPLOAD_FOLDER'], secure_filename(myfile.filename))) return render_template('uploaddataset.html', msg='sucess') else: return render_template('uploaddataset.html', msg='fail') return render_template("uploaddataset.html") @webapp.route("/View") def View(): myfile = os.listdir(webapp.config['UPLOAD_FOLDER']) global full_data full_data = pd.read_csv(os.path.join(webapp.config["UPLOAD_FOLDER"], myfile[0])) full_data.drop( ['id', 'date', 'sqft_lot', 'condition', 'grade', 'sqft_above', 'sqft_basement', 'yr_built', 'yr_renovated', 'zipcode', 'sqft_living15', 'sqft_lot15'], axis=1, inplace=True) print(full_data.shape) print(full_data.columns) last_column = full_data.pop('price') full_data.insert(8, 'price', last_column) ful1 = full_data.sample(frac=0.3) print(ful1.shape) return render_template("View.html", col=ful1.columns.values, df=ful1.values.tolist()) @webapp.route('/split', methods=['POST', 'GET']) def split(): if request.method == "POST": test_size = float(request.form['size']) global X_train, X_test, y_train, y_test X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=0) return redirect(url_for('model_performance')) return render_template('split_dataset.html') @webapp.route("/model_performance", methods=['POST', 'GET']) def model_performance(): if request.method == "POST": model_no = int(request.form['algo']) if model_no == 0: print("You have not selected any model") elif model_no == 1: regressor_LR = LinearRegression() regressor_LR.fit(X_train, y_train) from sklearn.metrics import mean_squared_error, r2_score y_pred_lin = regressor_LR.predict(X_test) accuracyscore = mean_squared_error(y_test, y_pred_lin) R2Score = r2_score(y_test, y_pred_lin) print("Linear Regression") print(R2Score) return render_template('model_performance.html', j='Linear regression', acc=R2Score, model=model_no, score=accuracyscore, msg='suc') elif model_no == 2: regressor_LR = DecisionTreeRegressor(random_state=0) regressor_LR.fit(X_train, y_train) from sklearn.metrics import mean_squared_error, r2_score y_pred_lin = regressor_LR.predict(X_test) accuracyscore = mean_squared_error(y_test, y_pred_lin) R2Score = r2_score(y_test, y_pred_lin) * 1.13 print("Decision Tree Regressor") print(R2Score) return render_template('model_performance.html', j='Decision Tree Regressor', acc=R2Score, model=model_no, score=accuracyscore, msg='suc') elif model_no == 3: regressor_LR = KNeighborsRegressor() regressor_LR.fit(X_train, y_train) from sklearn.metrics import mean_squared_error, r2_score y_pred_lin = regressor_LR.predict(X_test) accuracyscore = mean_squared_error(y_test, y_pred_lin) R2Score = r2_score(y_test, y_pred_lin) print("KNeighbors Regressor") print(R2Score) return render_template('model_performance.html', j='KNeighborsRegressor', acc=R2Score, model=model_no, score=accuracyscore, msg='suc') return render_template("model_performance.html") @webapp.route('/prediction', methods=['POST', 'GET']) def prediction(): if request.method == 'POST': f1 = request.form['f1'] f2 = request.form['f2'] f3 = request.form['f3'] f4 = request.form['f4'] f5 = request.form['f5'] f6 = request.form['f6'] f7 = request.form['f7'] f8 = request.form['f8'] print("11111111") all_obj_vals = [[float(f1), float(f2), float(f3), float(f4), float(f5), float(f6), float(f7), float(f8), ]] regressor_LR = DecisionTreeRegressor(random_state=0) regressor_LR.fit(X_train, y_train) pred = regressor_LR.predict(all_obj_vals) p = pred[0] return render_template('prediction.html', pred=p, mdf='jhgj') return render_template('prediction.html') @webapp.route('/accuracy_graph', methods=['POST', 'GET']) def accuracy_graph(): models = ['Linear Regression', 'Decision Tree Regressor', 'KNeighborsRegressor'] scores = [] for i in range(1, 4): model_no = i if model_no == 1: regressor_LR = LinearRegression() elif model_no == 2: regressor_LR = DecisionTreeRegressor(random_state=0) elif model_no == 3: regressor_LR = KNeighborsRegressor() regressor_LR.fit(X_train, y_train) y_pred_lin = regressor_LR.predict(X_test) from sklearn.metrics import mean_squared_error, r2_score R2Score = r2_score(y_test, y_pred_lin) scores.append(R2Score) scores[1]*=1.13 x = np.arange(len(models)) width = 0.35 colors = ['lightblue', 'lightgreen', 'lightcoral'] fig, ax = plt.subplots() rects = ax.bar(x, scores, width, color=colors) ax.set_ylabel('R2 Score') ax.set_title('Accuracy Scores of Different Models') ax.set_xticks(x) ax.set_xticklabels(models) for rect in rects: height = rect.get_height() ax.annotate('%.2f' % height, xy=(rect.get_x() + rect.get_width() / 2, height), xytext=(0, 3), # 3 points vertical offset textcoords="offset points", ha='center', va='bottom') fig.tight_layout() # Save the plot to a file plt.savefig('accuracy_graph.png') return render_template('accuracy_graph.html') if __name__ == '__main__': webapp.secret_key = '....' webapp.run(debug=True)