simran40 commited on
Commit
d4fe7f4
·
verified ·
1 Parent(s): b57169f

Upload 7 files

Browse files
Files changed (7) hide show
  1. Dockerfile +17 -0
  2. app.py +62 -0
  3. batch_predictions.csv +304 -0
  4. heart_model.pkl +3 -0
  5. requirements.txt +5 -0
  6. scaler.pkl +3 -0
  7. templates/index.html +184 -0
Dockerfile ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Use lightweight Python
2
+ FROM python:3.9-slim
3
+
4
+ # Set working directory
5
+ WORKDIR /app
6
+
7
+ # Copy files
8
+ COPY . /app
9
+
10
+ # Install dependencies
11
+ RUN pip install --no-cache-dir -r requirements.txt
12
+
13
+ # Expose Hugging Face default port
14
+ EXPOSE 7860
15
+
16
+ # Run the Flask app
17
+ CMD ["python", "app.py"]
app.py ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, render_template, send_file, jsonify
2
+ import joblib
3
+ import pandas as pd
4
+ import numpy as np
5
+ import io
6
+
7
+ app = Flask(__name__)
8
+
9
+ # Load model and scaler
10
+ model = joblib.load("heart_model.pkl")
11
+ scaler = joblib.load("scaler.pkl")
12
+
13
+ FEATURES = ['age','sex','cp','trestbps','chol','fbs','restecg',
14
+ 'thalach','exang','oldpeak','slope','ca','thal']
15
+
16
+ @app.route("/")
17
+ def home():
18
+ return render_template("index.html")
19
+
20
+ # JSON endpoint for dynamic prediction
21
+ @app.route("/predict_json", methods=["POST"])
22
+ def predict_json():
23
+ try:
24
+ data_dict = request.get_json()
25
+ data_df = pd.DataFrame([data_dict], columns=FEATURES)
26
+ data_scaled = scaler.transform(data_df)
27
+ pred = model.predict(data_scaled)[0]
28
+ result = "No Heart Disease ✅" if pred == 0 else "Heart Disease ❌"
29
+ return jsonify({"prediction": result})
30
+ except Exception as e:
31
+ return jsonify({"error": str(e)})
32
+
33
+ # Batch CSV prediction
34
+ @app.route("/batch_predict", methods=["POST"])
35
+ def batch_predict():
36
+ try:
37
+ file = request.files['file']
38
+ if not file:
39
+ return render_template("index.html", result="No file uploaded")
40
+
41
+ df = pd.read_csv(file)
42
+ if not all(col in df.columns for col in FEATURES):
43
+ return render_template("index.html", result="CSV must have all required columns!")
44
+
45
+ X_scaled = scaler.transform(df[FEATURES])
46
+ preds = model.predict(X_scaled)
47
+ df["prediction"] = ["No Heart Disease ✅" if p==0 else "Heart Disease ❌" for p in preds]
48
+
49
+ # Return CSV as download
50
+ output = io.StringIO()
51
+ df.to_csv(output, index=False)
52
+ output.seek(0)
53
+ return send_file(io.BytesIO(output.getvalue().encode()),
54
+ mimetype="text/csv",
55
+ as_attachment=True,
56
+ download_name="batch_predictions.csv")
57
+
58
+ except Exception as e:
59
+ return render_template("index.html", result=f"Error: {str(e)}")
60
+
61
+ if __name__ == "__main__":
62
+ app.run(host="0.0.0.0", port=7860)
batch_predictions.csv ADDED
@@ -0,0 +1,304 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ age,sex,cp,trestbps,chol,fbs,restecg,thalach,exang,oldpeak,slope,ca,thal,target,prediction
2
+ 63,1,3,145,233,1,0,150,0,2.3,0,0,1,1,Heart Disease
3
+ 37,1,2,130,250,0,1,187,0,3.5,0,0,2,1,Heart Disease
4
+ 41,0,1,130,204,0,0,172,0,1.4,2,0,2,1,Heart Disease
5
+ 56,1,1,120,236,0,1,178,0,0.8,2,0,2,1,Heart Disease
6
+ 57,0,0,120,354,0,1,163,1,0.6,2,0,2,1,Heart Disease
7
+ 57,1,0,140,192,0,1,148,0,0.4,1,0,1,1,Heart Disease
8
+ 56,0,1,140,294,0,0,153,0,1.3,1,0,2,1,Heart Disease
9
+ 44,1,1,120,263,0,1,173,0,0.0,2,0,3,1,Heart Disease
10
+ 52,1,2,172,199,1,1,162,0,0.5,2,0,3,1,Heart Disease
11
+ 57,1,2,150,168,0,1,174,0,1.6,2,0,2,1,Heart Disease
12
+ 54,1,0,140,239,0,1,160,0,1.2,2,0,2,1,Heart Disease
13
+ 48,0,2,130,275,0,1,139,0,0.2,2,0,2,1,Heart Disease
14
+ 49,1,1,130,266,0,1,171,0,0.6,2,0,2,1,Heart Disease
15
+ 64,1,3,110,211,0,0,144,1,1.8,1,0,2,1,Heart Disease
16
+ 58,0,3,150,283,1,0,162,0,1.0,2,0,2,1,Heart Disease
17
+ 50,0,2,120,219,0,1,158,0,1.6,1,0,2,1,Heart Disease
18
+ 58,0,2,120,340,0,1,172,0,0.0,2,0,2,1,Heart Disease
19
+ 66,0,3,150,226,0,1,114,0,2.6,0,0,2,1,Heart Disease
20
+ 43,1,0,150,247,0,1,171,0,1.5,2,0,2,1,Heart Disease
21
+ 69,0,3,140,239,0,1,151,0,1.8,2,2,2,1,Heart Disease
22
+ 59,1,0,135,234,0,1,161,0,0.5,1,0,3,1,No Heart Disease
23
+ 44,1,2,130,233,0,1,179,1,0.4,2,0,2,1,Heart Disease
24
+ 42,1,0,140,226,0,1,178,0,0.0,2,0,2,1,Heart Disease
25
+ 61,1,2,150,243,1,1,137,1,1.0,1,0,2,1,Heart Disease
26
+ 40,1,3,140,199,0,1,178,1,1.4,2,0,3,1,Heart Disease
27
+ 71,0,1,160,302,0,1,162,0,0.4,2,2,2,1,Heart Disease
28
+ 59,1,2,150,212,1,1,157,0,1.6,2,0,2,1,Heart Disease
29
+ 51,1,2,110,175,0,1,123,0,0.6,2,0,2,1,Heart Disease
30
+ 65,0,2,140,417,1,0,157,0,0.8,2,1,2,1,Heart Disease
31
+ 53,1,2,130,197,1,0,152,0,1.2,0,0,2,1,Heart Disease
32
+ 41,0,1,105,198,0,1,168,0,0.0,2,1,2,1,Heart Disease
33
+ 65,1,0,120,177,0,1,140,0,0.4,2,0,3,1,Heart Disease
34
+ 44,1,1,130,219,0,0,188,0,0.0,2,0,2,1,Heart Disease
35
+ 54,1,2,125,273,0,0,152,0,0.5,0,1,2,1,No Heart Disease
36
+ 51,1,3,125,213,0,0,125,1,1.4,2,1,2,1,Heart Disease
37
+ 46,0,2,142,177,0,0,160,1,1.4,0,0,2,1,Heart Disease
38
+ 54,0,2,135,304,1,1,170,0,0.0,2,0,2,1,Heart Disease
39
+ 54,1,2,150,232,0,0,165,0,1.6,2,0,3,1,Heart Disease
40
+ 65,0,2,155,269,0,1,148,0,0.8,2,0,2,1,Heart Disease
41
+ 65,0,2,160,360,0,0,151,0,0.8,2,0,2,1,Heart Disease
42
+ 51,0,2,140,308,0,0,142,0,1.5,2,1,2,1,Heart Disease
43
+ 48,1,1,130,245,0,0,180,0,0.2,1,0,2,1,Heart Disease
44
+ 45,1,0,104,208,0,0,148,1,3.0,1,0,2,1,No Heart Disease
45
+ 53,0,0,130,264,0,0,143,0,0.4,1,0,2,1,Heart Disease
46
+ 39,1,2,140,321,0,0,182,0,0.0,2,0,2,1,Heart Disease
47
+ 52,1,1,120,325,0,1,172,0,0.2,2,0,2,1,Heart Disease
48
+ 44,1,2,140,235,0,0,180,0,0.0,2,0,2,1,Heart Disease
49
+ 47,1,2,138,257,0,0,156,0,0.0,2,0,2,1,Heart Disease
50
+ 53,0,2,128,216,0,0,115,0,0.0,2,0,0,1,Heart Disease
51
+ 53,0,0,138,234,0,0,160,0,0.0,2,0,2,1,Heart Disease
52
+ 51,0,2,130,256,0,0,149,0,0.5,2,0,2,1,Heart Disease
53
+ 66,1,0,120,302,0,0,151,0,0.4,1,0,2,1,No Heart Disease
54
+ 62,1,2,130,231,0,1,146,0,1.8,1,3,3,1,No Heart Disease
55
+ 44,0,2,108,141,0,1,175,0,0.6,1,0,2,1,Heart Disease
56
+ 63,0,2,135,252,0,0,172,0,0.0,2,0,2,1,Heart Disease
57
+ 52,1,1,134,201,0,1,158,0,0.8,2,1,2,1,Heart Disease
58
+ 48,1,0,122,222,0,0,186,0,0.0,2,0,2,1,Heart Disease
59
+ 45,1,0,115,260,0,0,185,0,0.0,2,0,2,1,Heart Disease
60
+ 34,1,3,118,182,0,0,174,0,0.0,2,0,2,1,Heart Disease
61
+ 57,0,0,128,303,0,0,159,0,0.0,2,1,2,1,Heart Disease
62
+ 71,0,2,110,265,1,0,130,0,0.0,2,1,2,1,Heart Disease
63
+ 54,1,1,108,309,0,1,156,0,0.0,2,0,3,1,Heart Disease
64
+ 52,1,3,118,186,0,0,190,0,0.0,1,0,1,1,Heart Disease
65
+ 41,1,1,135,203,0,1,132,0,0.0,1,0,1,1,Heart Disease
66
+ 58,1,2,140,211,1,0,165,0,0.0,2,0,2,1,Heart Disease
67
+ 35,0,0,138,183,0,1,182,0,1.4,2,0,2,1,Heart Disease
68
+ 51,1,2,100,222,0,1,143,1,1.2,1,0,2,1,Heart Disease
69
+ 45,0,1,130,234,0,0,175,0,0.6,1,0,2,1,Heart Disease
70
+ 44,1,1,120,220,0,1,170,0,0.0,2,0,2,1,Heart Disease
71
+ 62,0,0,124,209,0,1,163,0,0.0,2,0,2,1,Heart Disease
72
+ 54,1,2,120,258,0,0,147,0,0.4,1,0,3,1,Heart Disease
73
+ 51,1,2,94,227,0,1,154,1,0.0,2,1,3,1,Heart Disease
74
+ 29,1,1,130,204,0,0,202,0,0.0,2,0,2,1,Heart Disease
75
+ 51,1,0,140,261,0,0,186,1,0.0,2,0,2,1,Heart Disease
76
+ 43,0,2,122,213,0,1,165,0,0.2,1,0,2,1,Heart Disease
77
+ 55,0,1,135,250,0,0,161,0,1.4,1,0,2,1,Heart Disease
78
+ 51,1,2,125,245,1,0,166,0,2.4,1,0,2,1,Heart Disease
79
+ 59,1,1,140,221,0,1,164,1,0.0,2,0,2,1,Heart Disease
80
+ 52,1,1,128,205,1,1,184,0,0.0,2,0,2,1,Heart Disease
81
+ 58,1,2,105,240,0,0,154,1,0.6,1,0,3,1,No Heart Disease
82
+ 41,1,2,112,250,0,1,179,0,0.0,2,0,2,1,Heart Disease
83
+ 45,1,1,128,308,0,0,170,0,0.0,2,0,2,1,Heart Disease
84
+ 60,0,2,102,318,0,1,160,0,0.0,2,1,2,1,Heart Disease
85
+ 52,1,3,152,298,1,1,178,0,1.2,1,0,3,1,Heart Disease
86
+ 42,0,0,102,265,0,0,122,0,0.6,1,0,2,1,Heart Disease
87
+ 67,0,2,115,564,0,0,160,0,1.6,1,0,3,1,Heart Disease
88
+ 68,1,2,118,277,0,1,151,0,1.0,2,1,3,1,Heart Disease
89
+ 46,1,1,101,197,1,1,156,0,0.0,2,0,3,1,Heart Disease
90
+ 54,0,2,110,214,0,1,158,0,1.6,1,0,2,1,Heart Disease
91
+ 58,0,0,100,248,0,0,122,0,1.0,1,0,2,1,Heart Disease
92
+ 48,1,2,124,255,1,1,175,0,0.0,2,2,2,1,Heart Disease
93
+ 57,1,0,132,207,0,1,168,1,0.0,2,0,3,1,No Heart Disease
94
+ 52,1,2,138,223,0,1,169,0,0.0,2,4,2,1,No Heart Disease
95
+ 54,0,1,132,288,1,0,159,1,0.0,2,1,2,1,Heart Disease
96
+ 45,0,1,112,160,0,1,138,0,0.0,1,0,2,1,Heart Disease
97
+ 53,1,0,142,226,0,0,111,1,0.0,2,0,3,1,No Heart Disease
98
+ 62,0,0,140,394,0,0,157,0,1.2,1,0,2,1,Heart Disease
99
+ 52,1,0,108,233,1,1,147,0,0.1,2,3,3,1,No Heart Disease
100
+ 43,1,2,130,315,0,1,162,0,1.9,2,1,2,1,Heart Disease
101
+ 53,1,2,130,246,1,0,173,0,0.0,2,3,2,1,Heart Disease
102
+ 42,1,3,148,244,0,0,178,0,0.8,2,2,2,1,Heart Disease
103
+ 59,1,3,178,270,0,0,145,0,4.2,0,0,3,1,No Heart Disease
104
+ 63,0,1,140,195,0,1,179,0,0.0,2,2,2,1,Heart Disease
105
+ 42,1,2,120,240,1,1,194,0,0.8,0,0,3,1,Heart Disease
106
+ 50,1,2,129,196,0,1,163,0,0.0,2,0,2,1,Heart Disease
107
+ 68,0,2,120,211,0,0,115,0,1.5,1,0,2,1,Heart Disease
108
+ 69,1,3,160,234,1,0,131,0,0.1,1,1,2,1,Heart Disease
109
+ 45,0,0,138,236,0,0,152,1,0.2,1,0,2,1,Heart Disease
110
+ 50,0,1,120,244,0,1,162,0,1.1,2,0,2,1,Heart Disease
111
+ 50,0,0,110,254,0,0,159,0,0.0,2,0,2,1,Heart Disease
112
+ 64,0,0,180,325,0,1,154,1,0.0,2,0,2,1,Heart Disease
113
+ 57,1,2,150,126,1,1,173,0,0.2,2,1,3,1,Heart Disease
114
+ 64,0,2,140,313,0,1,133,0,0.2,2,0,3,1,Heart Disease
115
+ 43,1,0,110,211,0,1,161,0,0.0,2,0,3,1,Heart Disease
116
+ 55,1,1,130,262,0,1,155,0,0.0,2,0,2,1,Heart Disease
117
+ 37,0,2,120,215,0,1,170,0,0.0,2,0,2,1,Heart Disease
118
+ 41,1,2,130,214,0,0,168,0,2.0,1,0,2,1,Heart Disease
119
+ 56,1,3,120,193,0,0,162,0,1.9,1,0,3,1,Heart Disease
120
+ 46,0,1,105,204,0,1,172,0,0.0,2,0,2,1,Heart Disease
121
+ 46,0,0,138,243,0,0,152,1,0.0,1,0,2,1,Heart Disease
122
+ 64,0,0,130,303,0,1,122,0,2.0,1,2,2,1,No Heart Disease
123
+ 59,1,0,138,271,0,0,182,0,0.0,2,0,2,1,Heart Disease
124
+ 41,0,2,112,268,0,0,172,1,0.0,2,0,2,1,Heart Disease
125
+ 54,0,2,108,267,0,0,167,0,0.0,2,0,2,1,Heart Disease
126
+ 39,0,2,94,199,0,1,179,0,0.0,2,0,2,1,Heart Disease
127
+ 34,0,1,118,210,0,1,192,0,0.7,2,0,2,1,Heart Disease
128
+ 47,1,0,112,204,0,1,143,0,0.1,2,0,2,1,Heart Disease
129
+ 67,0,2,152,277,0,1,172,0,0.0,2,1,2,1,Heart Disease
130
+ 52,0,2,136,196,0,0,169,0,0.1,1,0,2,1,Heart Disease
131
+ 74,0,1,120,269,0,0,121,1,0.2,2,1,2,1,Heart Disease
132
+ 54,0,2,160,201,0,1,163,0,0.0,2,1,2,1,Heart Disease
133
+ 49,0,1,134,271,0,1,162,0,0.0,1,0,2,1,Heart Disease
134
+ 42,1,1,120,295,0,1,162,0,0.0,2,0,2,1,Heart Disease
135
+ 41,1,1,110,235,0,1,153,0,0.0,2,0,2,1,Heart Disease
136
+ 41,0,1,126,306,0,1,163,0,0.0,2,0,2,1,Heart Disease
137
+ 49,0,0,130,269,0,1,163,0,0.0,2,0,2,1,Heart Disease
138
+ 60,0,2,120,178,1,1,96,0,0.0,2,0,2,1,Heart Disease
139
+ 62,1,1,128,208,1,0,140,0,0.0,2,0,2,1,Heart Disease
140
+ 57,1,0,110,201,0,1,126,1,1.5,1,0,1,1,No Heart Disease
141
+ 64,1,0,128,263,0,1,105,1,0.2,1,1,3,1,No Heart Disease
142
+ 51,0,2,120,295,0,0,157,0,0.6,2,0,2,1,Heart Disease
143
+ 43,1,0,115,303,0,1,181,0,1.2,1,0,2,1,Heart Disease
144
+ 42,0,2,120,209,0,1,173,0,0.0,1,0,2,1,Heart Disease
145
+ 67,0,0,106,223,0,1,142,0,0.3,2,2,2,1,Heart Disease
146
+ 76,0,2,140,197,0,2,116,0,1.1,1,0,2,1,Heart Disease
147
+ 70,1,1,156,245,0,0,143,0,0.0,2,0,2,1,Heart Disease
148
+ 44,0,2,118,242,0,1,149,0,0.3,1,1,2,1,Heart Disease
149
+ 60,0,3,150,240,0,1,171,0,0.9,2,0,2,1,Heart Disease
150
+ 44,1,2,120,226,0,1,169,0,0.0,2,0,2,1,Heart Disease
151
+ 42,1,2,130,180,0,1,150,0,0.0,2,0,2,1,Heart Disease
152
+ 66,1,0,160,228,0,0,138,0,2.3,2,0,1,1,No Heart Disease
153
+ 71,0,0,112,149,0,1,125,0,1.6,1,0,2,1,Heart Disease
154
+ 64,1,3,170,227,0,0,155,0,0.6,1,0,3,1,Heart Disease
155
+ 66,0,2,146,278,0,0,152,0,0.0,1,1,2,1,Heart Disease
156
+ 39,0,2,138,220,0,1,152,0,0.0,1,0,2,1,Heart Disease
157
+ 58,0,0,130,197,0,1,131,0,0.6,1,0,2,1,Heart Disease
158
+ 47,1,2,130,253,0,1,179,0,0.0,2,0,2,1,Heart Disease
159
+ 35,1,1,122,192,0,1,174,0,0.0,2,0,2,1,Heart Disease
160
+ 58,1,1,125,220,0,1,144,0,0.4,1,4,3,1,No Heart Disease
161
+ 56,1,1,130,221,0,0,163,0,0.0,2,0,3,1,Heart Disease
162
+ 56,1,1,120,240,0,1,169,0,0.0,0,0,2,1,Heart Disease
163
+ 55,0,1,132,342,0,1,166,0,1.2,2,0,2,1,Heart Disease
164
+ 41,1,1,120,157,0,1,182,0,0.0,2,0,2,1,Heart Disease
165
+ 38,1,2,138,175,0,1,173,0,0.0,2,4,2,1,Heart Disease
166
+ 38,1,2,138,175,0,1,173,0,0.0,2,4,2,1,Heart Disease
167
+ 67,1,0,160,286,0,0,108,1,1.5,1,3,2,0,No Heart Disease
168
+ 67,1,0,120,229,0,0,129,1,2.6,1,2,3,0,No Heart Disease
169
+ 62,0,0,140,268,0,0,160,0,3.6,0,2,2,0,No Heart Disease
170
+ 63,1,0,130,254,0,0,147,0,1.4,1,1,3,0,No Heart Disease
171
+ 53,1,0,140,203,1,0,155,1,3.1,0,0,3,0,No Heart Disease
172
+ 56,1,2,130,256,1,0,142,1,0.6,1,1,1,0,Heart Disease
173
+ 48,1,1,110,229,0,1,168,0,1.0,0,0,3,0,No Heart Disease
174
+ 58,1,1,120,284,0,0,160,0,1.8,1,0,2,0,No Heart Disease
175
+ 58,1,2,132,224,0,0,173,0,3.2,2,2,3,0,No Heart Disease
176
+ 60,1,0,130,206,0,0,132,1,2.4,1,2,3,0,No Heart Disease
177
+ 40,1,0,110,167,0,0,114,1,2.0,1,0,3,0,No Heart Disease
178
+ 60,1,0,117,230,1,1,160,1,1.4,2,2,3,0,No Heart Disease
179
+ 64,1,2,140,335,0,1,158,0,0.0,2,0,2,0,Heart Disease
180
+ 43,1,0,120,177,0,0,120,1,2.5,1,0,3,0,No Heart Disease
181
+ 57,1,0,150,276,0,0,112,1,0.6,1,1,1,0,No Heart Disease
182
+ 55,1,0,132,353,0,1,132,1,1.2,1,1,3,0,No Heart Disease
183
+ 65,0,0,150,225,0,0,114,0,1.0,1,3,3,0,No Heart Disease
184
+ 61,0,0,130,330,0,0,169,0,0.0,2,0,2,0,Heart Disease
185
+ 58,1,2,112,230,0,0,165,0,2.5,1,1,3,0,No Heart Disease
186
+ 50,1,0,150,243,0,0,128,0,2.6,1,0,3,0,No Heart Disease
187
+ 44,1,0,112,290,0,0,153,0,0.0,2,1,2,0,Heart Disease
188
+ 60,1,0,130,253,0,1,144,1,1.4,2,1,3,0,No Heart Disease
189
+ 54,1,0,124,266,0,0,109,1,2.2,1,1,3,0,No Heart Disease
190
+ 50,1,2,140,233,0,1,163,0,0.6,1,1,3,0,Heart Disease
191
+ 41,1,0,110,172,0,0,158,0,0.0,2,0,3,0,Heart Disease
192
+ 51,0,0,130,305,0,1,142,1,1.2,1,0,3,0,No Heart Disease
193
+ 58,1,0,128,216,0,0,131,1,2.2,1,3,3,0,No Heart Disease
194
+ 54,1,0,120,188,0,1,113,0,1.4,1,1,3,0,No Heart Disease
195
+ 60,1,0,145,282,0,0,142,1,2.8,1,2,3,0,No Heart Disease
196
+ 60,1,2,140,185,0,0,155,0,3.0,1,0,2,0,No Heart Disease
197
+ 59,1,0,170,326,0,0,140,1,3.4,0,0,3,0,No Heart Disease
198
+ 46,1,2,150,231,0,1,147,0,3.6,1,0,2,0,No Heart Disease
199
+ 67,1,0,125,254,1,1,163,0,0.2,1,2,3,0,No Heart Disease
200
+ 62,1,0,120,267,0,1,99,1,1.8,1,2,3,0,No Heart Disease
201
+ 65,1,0,110,248,0,0,158,0,0.6,2,2,1,0,Heart Disease
202
+ 44,1,0,110,197,0,0,177,0,0.0,2,1,2,0,Heart Disease
203
+ 60,1,0,125,258,0,0,141,1,2.8,1,1,3,0,No Heart Disease
204
+ 58,1,0,150,270,0,0,111,1,0.8,2,0,3,0,No Heart Disease
205
+ 68,1,2,180,274,1,0,150,1,1.6,1,0,3,0,No Heart Disease
206
+ 62,0,0,160,164,0,0,145,0,6.2,0,3,3,0,No Heart Disease
207
+ 52,1,0,128,255,0,1,161,1,0.0,2,1,3,0,No Heart Disease
208
+ 59,1,0,110,239,0,0,142,1,1.2,1,1,3,0,No Heart Disease
209
+ 60,0,0,150,258,0,0,157,0,2.6,1,2,3,0,No Heart Disease
210
+ 49,1,2,120,188,0,1,139,0,2.0,1,3,3,0,No Heart Disease
211
+ 59,1,0,140,177,0,1,162,1,0.0,2,1,3,0,No Heart Disease
212
+ 57,1,2,128,229,0,0,150,0,0.4,1,1,3,0,No Heart Disease
213
+ 61,1,0,120,260,0,1,140,1,3.6,1,1,3,0,No Heart Disease
214
+ 39,1,0,118,219,0,1,140,0,1.2,1,0,3,0,No Heart Disease
215
+ 61,0,0,145,307,0,0,146,1,1.0,1,0,3,0,No Heart Disease
216
+ 56,1,0,125,249,1,0,144,1,1.2,1,1,2,0,No Heart Disease
217
+ 43,0,0,132,341,1,0,136,1,3.0,1,0,3,0,No Heart Disease
218
+ 62,0,2,130,263,0,1,97,0,1.2,1,1,3,0,Heart Disease
219
+ 63,1,0,130,330,1,0,132,1,1.8,2,3,3,0,No Heart Disease
220
+ 65,1,0,135,254,0,0,127,0,2.8,1,1,3,0,No Heart Disease
221
+ 48,1,0,130,256,1,0,150,1,0.0,2,2,3,0,No Heart Disease
222
+ 63,0,0,150,407,0,0,154,0,4.0,1,3,3,0,No Heart Disease
223
+ 55,1,0,140,217,0,1,111,1,5.6,0,0,3,0,No Heart Disease
224
+ 65,1,3,138,282,1,0,174,0,1.4,1,1,2,0,Heart Disease
225
+ 56,0,0,200,288,1,0,133,1,4.0,0,2,3,0,No Heart Disease
226
+ 54,1,0,110,239,0,1,126,1,2.8,1,1,3,0,No Heart Disease
227
+ 70,1,0,145,174,0,1,125,1,2.6,0,0,3,0,No Heart Disease
228
+ 62,1,1,120,281,0,0,103,0,1.4,1,1,3,0,No Heart Disease
229
+ 35,1,0,120,198,0,1,130,1,1.6,1,0,3,0,No Heart Disease
230
+ 59,1,3,170,288,0,0,159,0,0.2,1,0,3,0,Heart Disease
231
+ 64,1,2,125,309,0,1,131,1,1.8,1,0,3,0,No Heart Disease
232
+ 47,1,2,108,243,0,1,152,0,0.0,2,0,2,0,Heart Disease
233
+ 57,1,0,165,289,1,0,124,0,1.0,1,3,3,0,No Heart Disease
234
+ 55,1,0,160,289,0,0,145,1,0.8,1,1,3,0,No Heart Disease
235
+ 64,1,0,120,246,0,0,96,1,2.2,0,1,2,0,No Heart Disease
236
+ 70,1,0,130,322,0,0,109,0,2.4,1,3,2,0,No Heart Disease
237
+ 51,1,0,140,299,0,1,173,1,1.6,2,0,3,0,No Heart Disease
238
+ 58,1,0,125,300,0,0,171,0,0.0,2,2,3,0,No Heart Disease
239
+ 60,1,0,140,293,0,0,170,0,1.2,1,2,3,0,No Heart Disease
240
+ 77,1,0,125,304,0,0,162,1,0.0,2,3,2,0,No Heart Disease
241
+ 35,1,0,126,282,0,0,156,1,0.0,2,0,3,0,No Heart Disease
242
+ 70,1,2,160,269,0,1,112,1,2.9,1,1,3,0,No Heart Disease
243
+ 59,0,0,174,249,0,1,143,1,0.0,1,0,2,0,Heart Disease
244
+ 64,1,0,145,212,0,0,132,0,2.0,1,2,1,0,No Heart Disease
245
+ 57,1,0,152,274,0,1,88,1,1.2,1,1,3,0,No Heart Disease
246
+ 56,1,0,132,184,0,0,105,1,2.1,1,1,1,0,No Heart Disease
247
+ 48,1,0,124,274,0,0,166,0,0.5,1,0,3,0,No Heart Disease
248
+ 56,0,0,134,409,0,0,150,1,1.9,1,2,3,0,No Heart Disease
249
+ 66,1,1,160,246,0,1,120,1,0.0,1,3,1,0,No Heart Disease
250
+ 54,1,1,192,283,0,0,195,0,0.0,2,1,3,0,No Heart Disease
251
+ 69,1,2,140,254,0,0,146,0,2.0,1,3,3,0,No Heart Disease
252
+ 51,1,0,140,298,0,1,122,1,4.2,1,3,3,0,No Heart Disease
253
+ 43,1,0,132,247,1,0,143,1,0.1,1,4,3,0,No Heart Disease
254
+ 62,0,0,138,294,1,1,106,0,1.9,1,3,2,0,No Heart Disease
255
+ 67,1,0,100,299,0,0,125,1,0.9,1,2,2,0,No Heart Disease
256
+ 59,1,3,160,273,0,0,125,0,0.0,2,0,2,0,Heart Disease
257
+ 45,1,0,142,309,0,0,147,1,0.0,1,3,3,0,No Heart Disease
258
+ 58,1,0,128,259,0,0,130,1,3.0,1,2,3,0,No Heart Disease
259
+ 50,1,0,144,200,0,0,126,1,0.9,1,0,3,0,No Heart Disease
260
+ 62,0,0,150,244,0,1,154,1,1.4,1,0,2,0,No Heart Disease
261
+ 38,1,3,120,231,0,1,182,1,3.8,1,0,3,0,No Heart Disease
262
+ 66,0,0,178,228,1,1,165,1,1.0,1,2,3,0,No Heart Disease
263
+ 52,1,0,112,230,0,1,160,0,0.0,2,1,2,0,Heart Disease
264
+ 53,1,0,123,282,0,1,95,1,2.0,1,2,3,0,No Heart Disease
265
+ 63,0,0,108,269,0,1,169,1,1.8,1,2,2,0,No Heart Disease
266
+ 54,1,0,110,206,0,0,108,1,0.0,1,1,2,0,No Heart Disease
267
+ 66,1,0,112,212,0,0,132,1,0.1,2,1,2,0,No Heart Disease
268
+ 55,0,0,180,327,0,2,117,1,3.4,1,0,2,0,No Heart Disease
269
+ 49,1,2,118,149,0,0,126,0,0.8,2,3,2,0,No Heart Disease
270
+ 54,1,0,122,286,0,0,116,1,3.2,1,2,2,0,No Heart Disease
271
+ 56,1,0,130,283,1,0,103,1,1.6,0,0,3,0,No Heart Disease
272
+ 46,1,0,120,249,0,0,144,0,0.8,2,0,3,0,No Heart Disease
273
+ 61,1,3,134,234,0,1,145,0,2.6,1,2,2,0,No Heart Disease
274
+ 67,1,0,120,237,0,1,71,0,1.0,1,0,2,0,No Heart Disease
275
+ 58,1,0,100,234,0,1,156,0,0.1,2,1,3,0,Heart Disease
276
+ 47,1,0,110,275,0,0,118,1,1.0,1,1,2,0,No Heart Disease
277
+ 52,1,0,125,212,0,1,168,0,1.0,2,2,3,0,No Heart Disease
278
+ 58,1,0,146,218,0,1,105,0,2.0,1,1,3,0,No Heart Disease
279
+ 57,1,1,124,261,0,1,141,0,0.3,2,0,3,0,Heart Disease
280
+ 58,0,1,136,319,1,0,152,0,0.0,2,2,2,0,Heart Disease
281
+ 61,1,0,138,166,0,0,125,1,3.6,1,1,2,0,No Heart Disease
282
+ 42,1,0,136,315,0,1,125,1,1.8,1,0,1,0,No Heart Disease
283
+ 52,1,0,128,204,1,1,156,1,1.0,1,0,0,0,Heart Disease
284
+ 59,1,2,126,218,1,1,134,0,2.2,1,1,1,0,Heart Disease
285
+ 40,1,0,152,223,0,1,181,0,0.0,2,0,3,0,Heart Disease
286
+ 61,1,0,140,207,0,0,138,1,1.9,2,1,3,0,No Heart Disease
287
+ 46,1,0,140,311,0,1,120,1,1.8,1,2,3,0,No Heart Disease
288
+ 59,1,3,134,204,0,1,162,0,0.8,2,2,2,0,Heart Disease
289
+ 57,1,1,154,232,0,0,164,0,0.0,2,1,2,0,Heart Disease
290
+ 57,1,0,110,335,0,1,143,1,3.0,1,1,3,0,No Heart Disease
291
+ 55,0,0,128,205,0,2,130,1,2.0,1,1,3,0,No Heart Disease
292
+ 61,1,0,148,203,0,1,161,0,0.0,2,1,3,0,No Heart Disease
293
+ 58,1,0,114,318,0,2,140,0,4.4,0,3,1,0,No Heart Disease
294
+ 58,0,0,170,225,1,0,146,1,2.8,1,2,1,0,No Heart Disease
295
+ 67,1,2,152,212,0,0,150,0,0.8,1,0,3,0,No Heart Disease
296
+ 44,1,0,120,169,0,1,144,1,2.8,0,0,1,0,No Heart Disease
297
+ 63,1,0,140,187,0,0,144,1,4.0,2,2,3,0,No Heart Disease
298
+ 63,0,0,124,197,0,1,136,1,0.0,1,0,2,0,Heart Disease
299
+ 59,1,0,164,176,1,0,90,0,1.0,1,2,1,0,No Heart Disease
300
+ 57,0,0,140,241,0,1,123,1,0.2,1,0,3,0,No Heart Disease
301
+ 45,1,3,110,264,0,1,132,0,1.2,1,0,3,0,Heart Disease
302
+ 68,1,0,144,193,1,1,141,0,3.4,1,2,3,0,No Heart Disease
303
+ 57,1,0,130,131,0,1,115,1,1.2,1,1,3,0,No Heart Disease
304
+ 57,0,1,130,236,0,0,174,0,0.0,1,1,2,0,Heart Disease
heart_model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f02422ffbf53cee4c431f1fabdd93b2715f6f5485e5964a82c77abd1ebfdd475
3
+ size 975
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ flask
2
+ scikit-learn
3
+ pandas
4
+ numpy
5
+ joblib
scaler.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:126c51bfc52f798695facef6f85cb38993ce66753ad75174c078af52c694a440
3
+ size 1263
templates/index.html ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Heart Disease Predictor</title>
7
+ <style>
8
+ body { font-family: Arial; background: #f3f4f6; margin: 0; padding: 20px; }
9
+ .container { max-width: 700px; margin: auto; background: white; padding: 20px; border-radius: 10px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); }
10
+ h1, h2 { text-align: center; color: #d90429; }
11
+ label { font-weight: bold; margin-top: 10px; display: block; }
12
+ input, select, button { width: 100%; padding: 8px; margin-top: 5px; border: 1px solid #ccc; border-radius: 5px; }
13
+ button { margin-top: 15px; background: #d90429; color: white; font-size: 16px; border: none; border-radius: 5px; cursor: pointer; }
14
+ button:hover { background: #a0031f; }
15
+ .result { margin-top: 20px; padding: 15px; border-radius: 5px; font-size: 18px; text-align: center; font-weight: bold; }
16
+ .success { background: #d4edda; color: #155724; }
17
+ .danger { background: #f8d7da; color: #721c24; }
18
+ .section { margin-top: 30px; }
19
+ </style>
20
+ </head>
21
+ <body>
22
+ <h1>❤️ Heart Disease Predictor</h1>
23
+ <div class="container">
24
+
25
+ <!-- Single Patient Prediction -->
26
+ <div class="section">
27
+ <h2>Single Patient Prediction</h2>
28
+ <form id="predictForm">
29
+ <!-- Age -->
30
+ <label>Age</label>
31
+ <select id="age" required>
32
+ <option value="">-- Select Age --</option>
33
+ {% for i in range(20, 81) %}
34
+ <option value="{{ i }}">{{ i }}</option>
35
+ {% endfor %}
36
+ </select>
37
+
38
+ <!-- Sex -->
39
+ <label>Sex</label>
40
+ <select id="sex" required>
41
+ <option value="">-- Select Sex --</option>
42
+ <option value="0">Female</option>
43
+ <option value="1">Male</option>
44
+ </select>
45
+
46
+ <!-- Chest Pain Type -->
47
+ <label>Chest Pain Type</label>
48
+ <select id="cp" required>
49
+ <option value="">-- Select Type --</option>
50
+ <option value="0">Typical Angina</option>
51
+ <option value="1">Atypical Angina</option>
52
+ <option value="2">Non-anginal Pain</option>
53
+ <option value="3">Asymptomatic</option>
54
+ </select>
55
+
56
+ <!-- Resting Blood Pressure -->
57
+ <label>Resting BP</label>
58
+ <input type="number" id="trestbps" required>
59
+
60
+ <!-- Cholesterol -->
61
+ <label>Cholesterol</label>
62
+ <input type="number" id="chol" required>
63
+
64
+ <!-- Fasting Blood Sugar -->
65
+ <label>Fasting Blood Sugar</label>
66
+ <select id="fbs" required>
67
+ <option value="">-- Select --</option>
68
+ <option value="0"><=120 mg/dl</option>
69
+ <option value="1">>120 mg/dl</option>
70
+ </select>
71
+
72
+ <!-- Resting ECG -->
73
+ <label>Resting ECG</label>
74
+ <select id="restecg" required>
75
+ <option value="">-- Select --</option>
76
+ <option value="0">Normal</option>
77
+ <option value="1">ST-T abnormality</option>
78
+ <option value="2">Left ventricular hypertrophy</option>
79
+ </select>
80
+
81
+ <!-- Max Heart Rate -->
82
+ <label>Max Heart Rate</label>
83
+ <input type="number" id="thalach" required>
84
+
85
+ <!-- Exercise Induced Angina -->
86
+ <label>Exercise Angina</label>
87
+ <select id="exang" required>
88
+ <option value="">-- Select --</option>
89
+ <option value="0">No</option>
90
+ <option value="1">Yes</option>
91
+ </select>
92
+
93
+ <!-- Oldpeak -->
94
+ <label>Oldpeak</label>
95
+ <input type="number" step="0.1" id="oldpeak" required>
96
+
97
+ <!-- Slope -->
98
+ <label>Slope</label>
99
+ <select id="slope" required>
100
+ <option value="">-- Select --</option>
101
+ <option value="0">Upsloping</option>
102
+ <option value="1">Flat</option>
103
+ <option value="2">Downsloping</option>
104
+ </select>
105
+
106
+ <!-- Number of Major Vessels -->
107
+ <label>Number of Vessels</label>
108
+ <select id="ca" required>
109
+ <option value="">-- Select --</option>
110
+ <option value="0">0</option>
111
+ <option value="1">1</option>
112
+ <option value="2">2</option>
113
+ <option value="3">3</option>
114
+ </select>
115
+
116
+ <!-- Thal -->
117
+ <label>Thal</label>
118
+ <select id="thal" required>
119
+ <option value="">-- Select --</option>
120
+ <option value="1">Normal</option>
121
+ <option value="2">Fixed Defect</option>
122
+ <option value="3">Reversible Defect</option>
123
+ </select>
124
+
125
+ <button type="submit">Predict</button>
126
+ </form>
127
+ <div id="prediction_result" class="result"></div>
128
+ </div>
129
+
130
+ <!-- Batch CSV Upload -->
131
+ <div class="section">
132
+ <h2>Batch Prediction (Upload CSV)</h2>
133
+ <form id="batchForm" enctype="multipart/form-data" method="post" action="/batch_predict">
134
+ <input type="file" id="csvFile" name="file" accept=".csv" required>
135
+ <button type="submit">Upload & Predict</button>
136
+ </form>
137
+ <div id="batchResult" class="result"></div>
138
+ </div>
139
+
140
+ </div>
141
+
142
+ <script>
143
+ // Single patient dynamic prediction
144
+ document.getElementById("predictForm").addEventListener("submit", async function(e) {
145
+ e.preventDefault();
146
+
147
+ const data = {
148
+ age: parseInt(document.getElementById("age").value),
149
+ sex: parseInt(document.getElementById("sex").value),
150
+ cp: parseInt(document.getElementById("cp").value),
151
+ trestbps: parseInt(document.getElementById("trestbps").value),
152
+ chol: parseInt(document.getElementById("chol").value),
153
+ fbs: parseInt(document.getElementById("fbs").value),
154
+ restecg: parseInt(document.getElementById("restecg").value),
155
+ thalach: parseInt(document.getElementById("thalach").value),
156
+ exang: parseInt(document.getElementById("exang").value),
157
+ oldpeak: parseFloat(document.getElementById("oldpeak").value),
158
+ slope: parseInt(document.getElementById("slope").value),
159
+ ca: parseInt(document.getElementById("ca").value),
160
+ thal: parseInt(document.getElementById("thal").value)
161
+ };
162
+
163
+ try {
164
+ const res = await fetch("/predict_json", {
165
+ method: "POST",
166
+ headers: {"Content-Type": "application/json"},
167
+ body: JSON.stringify(data)
168
+ });
169
+ const result = await res.json();
170
+ const div = document.getElementById("prediction_result");
171
+ if (result.prediction) {
172
+ div.textContent = result.prediction;
173
+ div.className = "result " + (result.prediction.includes("No") ? "success" : "danger");
174
+ } else {
175
+ div.textContent = "Error: " + result.error;
176
+ div.className = "result danger";
177
+ }
178
+ } catch(err) {
179
+ console.error(err);
180
+ }
181
+ });
182
+ </script>
183
+ </body>
184
+ </html>