-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
137 lines (106 loc) · 4.2 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
from flask import Flask, render_template, jsonify, request
from database import engine, load_data_from_db
from sqlalchemy import text
import logging
from database import load_data_from_db
from sklearn.ensemble import AdaBoostRegressor
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
import numpy as np
import pandas as pd
logging.basicConfig(level=logging.DEBUG)
app = Flask(__name__)
# Function to load X, countries, and years from the database
def load_data_from_db():
with engine.connect() as conn:
result = conn.execute(text("SELECT * FROM X"))
X = [dict(zip(result.keys(), row)) for row in result.all()]
result = conn.execute(text("SELECT DISTINCT country FROM X"))
countries = [row[0] for row in result.all()]
result = conn.execute(text("SELECT DISTINCT year FROM X"))
years = [row[0] for row in result.all()]
return X, countries, years
# Function to load Xy_withASR data from the database
def load_data():
with engine.connect() as conn:
result = conn.execute(text("SELECT * FROM Xy_withASR"))
Xy_withASR = [dict(zip(result.keys(), row)) for row in result.all()]
return Xy_withASR
# Split data into features and labels
Xy_withASR = load_data()
# Convert list of dictionaries to a pandas DataFrame
Xy_withASR_df = pd.DataFrame(Xy_withASR)
features = np.array(Xy_withASR_df[['c_dollar2_poverty', 'c_forest_area', 'c_health_expenditure', 'c_out_of_pocket', 'c_physician', 'c_tuberculosis', 'c_urban_pop']])
labels_female = np.array(Xy_withASR_df['ASR (female)'])
labels_male = np.array(Xy_withASR_df['ASR (male)'])
# Create AdaBoost regressor models
adaboost_female = AdaBoostRegressor(
DecisionTreeRegressor(max_depth=10), n_estimators=150,
learning_rate=0.5
)
adaboost_male = AdaBoostRegressor(
DecisionTreeRegressor(max_depth=10), n_estimators=150,
learning_rate=0.5
)
# Train the models
adaboost_female.fit(features, labels_female)
adaboost_male.fit(features, labels_male)
@app.route("/")
def hello_hacks():
X, _, _ = load_data_from_db()
return render_template('home.html', jobs=X)
@app.route('/statistics')
def statistics():
X, _, _ = load_data_from_db()
return render_template('stat.html', X=X)
@app.route('/area', methods=['GET', 'POST'])
def area():
if request.method == 'POST':
try:
# Get user input from the form
income = float(request.form['income'])
forest_area = float(request.form['forest_area'])
health_expenditure = float(request.form['health_expenditure'])
out_of_pocket = float(request.form['out_of_pocket'])
physician = float(request.form['physician'])
tuberculosis = float(request.form['tuberculosis'])
urban_pop = float(request.form['urban_pop'])
# Make predictions using the trained model
user_input = [income, forest_area, health_expenditure, out_of_pocket, physician, tuberculosis, urban_pop]
predicted_female_mortality = adaboost_female.predict([user_input])[0]
predicted_male_mortality = adaboost_male.predict([user_input])[0]
# Return predictions and input features as JSON
return jsonify({
'input_features': {
'income': income,
'forest_area': forest_area,
'health_expenditure': health_expenditure,
'out_of_pocket': out_of_pocket,
'physician': physician,
'tuberculosis': tuberculosis,
'urban_pop': urban_pop,
},
'predicted_female_mortality': predicted_female_mortality,
'predicted_male_mortality': predicted_male_mortality
})
except Exception as e:
# Handle errors, e.g., invalid input format
return jsonify({'error': f'Error processing request: {str(e)}'}, 400)
return render_template('area.html')
@app.route('/ml')
def ml():
X, _, _ = load_data_from_db()
return render_template('ml.html', X=X)
@app.route("/api/statistics")
def list_stat():
return jsonify(X)
@app.route("/api/area")
def list_area():
return jsonify(X)
@app.route("/api/ml")
def list_ml():
return jsonify(X)
@app.route('/')
def index():
return render_template('your_html_file.html')
if __name__ == "__main__":
app.run(host='0.0.0.0', debug=True)