atsuga commited on
Commit
abd0fdf
·
verified ·
1 Parent(s): b061d3d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +112 -112
app.py CHANGED
@@ -1,112 +1,112 @@
1
- from flask import Flask, render_template, request, jsonify
2
- import pickle
3
- import numpy as np
4
- import requests
5
- import pandas as pd
6
-
7
- app = Flask(__name__)
8
-
9
- # Load model dan scaler yang sudah disimpan
10
- with open('model.pkl', 'rb') as model_file:
11
- model = pickle.load(model_file)
12
-
13
- with open('scaler.pkl', 'rb') as scaler_file:
14
- scaler = pickle.load(scaler_file)
15
-
16
- # Halaman utama
17
- @app.route('/')
18
- def home():
19
- return render_template('index.html')
20
-
21
- # Endpoint untuk prediksi berdasarkan input pengguna
22
- @app.route('/predict', methods=['POST'])
23
- def predict():
24
- try:
25
- # Mendapatkan data dari form input
26
- input_data = request.get_json()
27
-
28
- # Ambil nilai input (pastikan semuanya adalah angka)
29
- sell_1 = float(input_data['features'][2])
30
- sell_2 = float(input_data['features'][1])
31
- sell_3 = float(input_data['features'][0])
32
-
33
- # Normalisasi data menggunakan scaler
34
- last_row = np.array([
35
- scaler.transform([[sell_1]]).flatten()[0],
36
- scaler.transform([[sell_2]]).flatten()[0],
37
- scaler.transform([[sell_3]]).flatten()[0]
38
- ]).reshape(1, -1)
39
-
40
- # Buat DataFrame dari nilai yang telah dinormalisasi
41
- last_row_df = pd.DataFrame(last_row, columns=['sell-1', 'sell-2', 'sell-3'])
42
-
43
- # Prediksi harga berdasarkan model
44
- predicted_value_normalized = model.predict(last_row_df)
45
- predicted_value = scaler.inverse_transform(predicted_value_normalized.reshape(-1, 1))
46
-
47
- # Ambil harga emas terakhir untuk perhitungan persentase
48
- last_price_inversed = sell_1 # Menggunakan harga hari ketiga (sell_3) sebagai harga terakhir
49
-
50
- # Hitung perubahan persentase
51
- percentage_change = ((predicted_value[0][0] - last_price_inversed) / last_price_inversed) * 100
52
-
53
- # Tentukan tanda perubahan (positif atau negatif)
54
- change_sign = '+' if percentage_change > 0 else ''
55
-
56
- # Kembalikan hasil prediksi dalam bentuk JSON
57
- return jsonify({
58
- 'last_price': last_price_inversed,
59
- 'predicted_value': predicted_value[0][0],
60
- 'percentage_change': f"{change_sign}{percentage_change:.2f}%",
61
- 'raw_data': input_data
62
- })
63
-
64
-
65
- except Exception as e:
66
- return jsonify({'error': str(e)}), 400
67
-
68
- # Endpoint untuk prediksi otomatis berdasarkan data API
69
- @app.route('/auto-predict', methods=['POST'])
70
- def auto_predict():
71
- try:
72
- # Mendapatkan data yang dikirimkan dari frontend
73
- input_data = request.get_json()
74
- print(input_data)
75
- # Ambil nilai input (pastikan semuanya adalah angka)
76
- price_day_1 = float(input_data['features'][0])
77
- price_day_2 = float(input_data['features'][1])
78
- price_day_3 = float(input_data['features'][2])
79
- last_row = np.array([
80
- scaler.transform([[price_day_1]]).flatten()[0],
81
- scaler.transform([[price_day_2]]).flatten()[0],
82
- scaler.transform([[price_day_3]]).flatten()[0]
83
- ]).reshape(1, -1)
84
- last_row_df = pd.DataFrame(last_row, columns=['sell-1', 'sell-2', 'sell-3'])
85
- # Prediksi harga
86
- predicted_value_normalized = model.predict(last_row_df)
87
- predicted_value = scaler.inverse_transform(predicted_value_normalized.reshape(-1, 1))
88
-
89
- # Ambil harga emas terakhir untuk perhitungan persentase
90
- last_price_inversed = price_day_3
91
-
92
- # Hitung perubahan persentase
93
- percentage_change = ((predicted_value[0][0] - last_price_inversed) / last_price_inversed) * 100
94
-
95
- # Tentukan tanda perubahan (positif atau negatif)
96
- if percentage_change > 0:
97
- change_sign = '+'
98
- else:
99
- change_sign = ''
100
-
101
- return jsonify({
102
- 'last_price': last_price_inversed,
103
- 'predicted_value': predicted_value[0][0],
104
- 'percentage_change': f"{change_sign}{percentage_change:.2f}%",
105
- 'raw_data': input_data
106
- })
107
-
108
- except Exception as e:
109
- return jsonify({'error': str(e)}), 400
110
-
111
- if __name__ == '__main__':
112
- app.run(debug=True)
 
1
+ from flask import Flask, render_template, request, jsonify
2
+ import pickle
3
+ import numpy as np
4
+ import requests
5
+ import pandas as pd
6
+
7
+ app = Flask(__name__)
8
+
9
+ # Load model dan scaler yang sudah disimpan
10
+ with open('model.pkl', 'rb') as model_file:
11
+ model = pickle.load(model_file)
12
+
13
+ with open('scaler.pkl', 'rb') as scaler_file:
14
+ scaler = pickle.load(scaler_file)
15
+
16
+ # Halaman utama
17
+ @app.api_route('/')
18
+ def home():
19
+ return render_template('index.html')
20
+
21
+ # Endpoint untuk prediksi berdasarkan input pengguna
22
+ @app.api_route('/predict', methods=['POST'])
23
+ def predict():
24
+ try:
25
+ # Mendapatkan data dari form input
26
+ input_data = request.get_json()
27
+
28
+ # Ambil nilai input (pastikan semuanya adalah angka)
29
+ sell_1 = float(input_data['features'][2])
30
+ sell_2 = float(input_data['features'][1])
31
+ sell_3 = float(input_data['features'][0])
32
+
33
+ # Normalisasi data menggunakan scaler
34
+ last_row = np.array([
35
+ scaler.transform([[sell_1]]).flatten()[0],
36
+ scaler.transform([[sell_2]]).flatten()[0],
37
+ scaler.transform([[sell_3]]).flatten()[0]
38
+ ]).reshape(1, -1)
39
+
40
+ # Buat DataFrame dari nilai yang telah dinormalisasi
41
+ last_row_df = pd.DataFrame(last_row, columns=['sell-1', 'sell-2', 'sell-3'])
42
+
43
+ # Prediksi harga berdasarkan model
44
+ predicted_value_normalized = model.predict(last_row_df)
45
+ predicted_value = scaler.inverse_transform(predicted_value_normalized.reshape(-1, 1))
46
+
47
+ # Ambil harga emas terakhir untuk perhitungan persentase
48
+ last_price_inversed = sell_1 # Menggunakan harga hari ketiga (sell_3) sebagai harga terakhir
49
+
50
+ # Hitung perubahan persentase
51
+ percentage_change = ((predicted_value[0][0] - last_price_inversed) / last_price_inversed) * 100
52
+
53
+ # Tentukan tanda perubahan (positif atau negatif)
54
+ change_sign = '+' if percentage_change > 0 else ''
55
+
56
+ # Kembalikan hasil prediksi dalam bentuk JSON
57
+ return jsonify({
58
+ 'last_price': last_price_inversed,
59
+ 'predicted_value': predicted_value[0][0],
60
+ 'percentage_change': f"{change_sign}{percentage_change:.2f}%",
61
+ 'raw_data': input_data
62
+ })
63
+
64
+
65
+ except Exception as e:
66
+ return jsonify({'error': str(e)}), 400
67
+
68
+ # Endpoint untuk prediksi otomatis berdasarkan data API
69
+ @app.api_route('/auto-predict', methods=['POST'])
70
+ def auto_predict():
71
+ try:
72
+ # Mendapatkan data yang dikirimkan dari frontend
73
+ input_data = request.get_json()
74
+ print(input_data)
75
+ # Ambil nilai input (pastikan semuanya adalah angka)
76
+ price_day_1 = float(input_data['features'][0])
77
+ price_day_2 = float(input_data['features'][1])
78
+ price_day_3 = float(input_data['features'][2])
79
+ last_row = np.array([
80
+ scaler.transform([[price_day_1]]).flatten()[0],
81
+ scaler.transform([[price_day_2]]).flatten()[0],
82
+ scaler.transform([[price_day_3]]).flatten()[0]
83
+ ]).reshape(1, -1)
84
+ last_row_df = pd.DataFrame(last_row, columns=['sell-1', 'sell-2', 'sell-3'])
85
+ # Prediksi harga
86
+ predicted_value_normalized = model.predict(last_row_df)
87
+ predicted_value = scaler.inverse_transform(predicted_value_normalized.reshape(-1, 1))
88
+
89
+ # Ambil harga emas terakhir untuk perhitungan persentase
90
+ last_price_inversed = price_day_3
91
+
92
+ # Hitung perubahan persentase
93
+ percentage_change = ((predicted_value[0][0] - last_price_inversed) / last_price_inversed) * 100
94
+
95
+ # Tentukan tanda perubahan (positif atau negatif)
96
+ if percentage_change > 0:
97
+ change_sign = '+'
98
+ else:
99
+ change_sign = ''
100
+
101
+ return jsonify({
102
+ 'last_price': last_price_inversed,
103
+ 'predicted_value': predicted_value[0][0],
104
+ 'percentage_change': f"{change_sign}{percentage_change:.2f}%",
105
+ 'raw_data': input_data
106
+ })
107
+
108
+ except Exception as e:
109
+ return jsonify({'error': str(e)}), 400
110
+
111
+ if __name__ == '__main__':
112
+ app.run(debug=True)