Update app.py
Browse files
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(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
predictions = []
|
| 26 |
-
last_row =
|
| 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=
|
| 46 |
)
|
| 47 |
|
| 48 |
# Harga terakhir
|
| 49 |
-
last_price = scaler.inverse_transform(normalized_df[
|
| 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(
|
| 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))
|