atsuga commited on
Commit
59923c3
·
verified ·
1 Parent(s): 846e1aa

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -12
app.py CHANGED
@@ -3,7 +3,6 @@ from asgiref.wsgi import WsgiToAsgi
3
  from flask import Flask, render_template, request, jsonify
4
  import pickle
5
  import numpy as np
6
- import requests
7
  import pandas as pd
8
  from fastapi.middleware.wsgi import WSGIMiddleware
9
 
@@ -16,14 +15,18 @@ with open('model.pkl', 'rb') as model_file:
16
  with open('scaler.pkl', 'rb') as scaler_file:
17
  scaler = pickle.load(scaler_file)
18
 
19
- # Data contoh untuk windowed_data dan normalized_df, bisa diganti sesuai data nyata
20
- windowed_data = pd.DataFrame() # Pastikan windowed_data ada
21
- normalized_df = pd.DataFrame() # Pastikan normalized_df ada
22
-
23
  # Fungsi prediksi untuk 7 hari ke depan
24
- def predict_7_days(windowed_data, normalized_df, linear_model, scaler):
 
 
 
 
 
 
 
 
25
  predictions = []
26
- last_row = windowed_data.drop(columns=['sell', 'buy']).iloc[-1].values.reshape(1, -1)
27
 
28
  # Iterasi untuk 7 hari ke depan
29
  for _ in range(7):
@@ -42,11 +45,11 @@ def predict_7_days(windowed_data, normalized_df, linear_model, scaler):
42
  predictions_df = pd.DataFrame(
43
  predictions,
44
  columns=['sell', 'buy'],
45
- index=pd.date_range(start=normalized_df.index[-1] + pd.Timedelta(days=1), periods=7)
46
  )
47
 
48
  # Harga terakhir
49
- last_price = scaler.inverse_transform(normalized_df[['sell', 'buy']].iloc[-1].values.reshape(-1, 2))
50
 
51
  # Hitung persentase perubahan harian
52
  predictions_df['sell_change'] = predictions_df['sell'].pct_change().fillna(0) * 100
@@ -58,7 +61,6 @@ def predict_7_days(windowed_data, normalized_df, linear_model, scaler):
58
 
59
  return predictions_df, total_sell_change, total_buy_change, last_price
60
 
61
-
62
  # Halaman utama
63
  @flask_app.route('/')
64
  def home():
@@ -66,8 +68,14 @@ def home():
66
 
67
  @flask_app.route('/predict', methods=['POST'])
68
  def predict():
 
 
 
 
 
 
69
  # Prediksi harga untuk 7 hari ke depan
70
- predictions_df, total_sell_change, total_buy_change, last_price = predict_7_days(windowed_data, normalized_df, linear_model, scaler)
71
 
72
  # Membuat hasil prediksi untuk respons JSON
73
  predictions_result = []
@@ -95,6 +103,6 @@ def predict():
95
 
96
  return jsonify(result)
97
 
98
- # Menjalankan aplikasi Flask
99
  app = FastAPI()
100
  app.mount("/", WSGIMiddleware(flask_app))
 
3
  from flask import Flask, render_template, request, jsonify
4
  import pickle
5
  import numpy as np
 
6
  import pandas as pd
7
  from fastapi.middleware.wsgi import WSGIMiddleware
8
 
 
15
  with open('scaler.pkl', 'rb') as scaler_file:
16
  scaler = pickle.load(scaler_file)
17
 
 
 
 
 
18
  # Fungsi prediksi untuk 7 hari ke depan
19
+ def predict_7_days(sell_features, buy_features, linear_model, scaler):
20
+ # Data dari frontend
21
+ windowed_data = pd.DataFrame({
22
+ 'sell': sell_features,
23
+ 'buy': buy_features
24
+ })
25
+
26
+ normalized_df = scaler.transform(windowed_data)
27
+
28
  predictions = []
29
+ last_row = normalized_df[-1].reshape(1, -1)
30
 
31
  # Iterasi untuk 7 hari ke depan
32
  for _ in range(7):
 
45
  predictions_df = pd.DataFrame(
46
  predictions,
47
  columns=['sell', 'buy'],
48
+ index=pd.date_range(start=pd.Timestamp.today(), periods=7)
49
  )
50
 
51
  # Harga terakhir
52
+ last_price = scaler.inverse_transform(normalized_df[-1].reshape(-1, 2))
53
 
54
  # Hitung persentase perubahan harian
55
  predictions_df['sell_change'] = predictions_df['sell'].pct_change().fillna(0) * 100
 
61
 
62
  return predictions_df, total_sell_change, total_buy_change, last_price
63
 
 
64
  # Halaman utama
65
  @flask_app.route('/')
66
  def home():
 
68
 
69
  @flask_app.route('/predict', methods=['POST'])
70
  def predict():
71
+ data = request.get_json() # Mengambil data dari request JSON
72
+
73
+ # Ambil fitur sell dan buy yang dikirim dari frontend
74
+ sell_features = data['sell_features']
75
+ buy_features = data['buy_features']
76
+
77
  # Prediksi harga untuk 7 hari ke depan
78
+ predictions_df, total_sell_change, total_buy_change, last_price = predict_7_days(sell_features, buy_features, linear_model, scaler)
79
 
80
  # Membuat hasil prediksi untuk respons JSON
81
  predictions_result = []
 
103
 
104
  return jsonify(result)
105
 
106
+ # Menjalankan aplikasi FastAPI yang memanggil aplikasi Flask
107
  app = FastAPI()
108
  app.mount("/", WSGIMiddleware(flask_app))