| | from fastapi import FastAPI |
| | from asgiref.wsgi import WsgiToAsgi |
| | from flask import Flask, render_template, request, jsonify |
| | import pickle |
| | import numpy as np |
| | import requests |
| | import pandas as pd |
| | from fastapi.middleware.wsgi import WSGIMiddleware |
| | from tensorflow.keras.models import load_model |
| |
|
| | flask_app = Flask(__name__) |
| |
|
| | |
| | model = load_model('model.keras') |
| | with open('scaler.pkl', 'rb') as scaler_file: |
| | scaler = pickle.load(scaler_file) |
| |
|
| | with open('scaler1.pkl', 'rb') as scaler_file: |
| | scaler_pred = pickle.load(scaler_file) |
| |
|
| | |
| | stockname = "ADARO" |
| | FEATURES = ['High', 'Low', 'Open', 'Close', 'Volume'] |
| | sequence_length = 50 |
| |
|
| | |
| | @flask_app.route('/') |
| | def home(): |
| | return render_template('index.html') |
| |
|
| | |
| | @flask_app.route('/predict', methods=['GET']) |
| | def predict(): |
| | |
| | url = 'https://raw.githubusercontent.com/atsugaa/psd/refs/heads/main/ADRO.csv' |
| | df = pd.read_csv(url) |
| | df['Date'] = pd.to_datetime(df['Date'], dayfirst=True).dt.date |
| | df.set_index('Date', inplace=True) |
| | df.index = pd.to_datetime(df.index) |
| | df = df.sort_values(by=['Date']) |
| |
|
| | |
| | input_df = df[FEATURES] |
| | target_df = df['Close'] |
| | last_N_days = input_df[-sequence_length:].values |
| |
|
| | |
| | if len(last_N_days) < sequence_length: |
| | return jsonify({"error": "Data tidak mencukupi untuk prediksi"}), 400 |
| |
|
| | |
| | last_N_days_scaled = scaler.transform(last_N_days) |
| |
|
| | |
| | X_test_new = [last_N_days_scaled] |
| |
|
| | |
| | pred_price_scaled = model.predict(np.array(X_test_new)) |
| | pred_price_unscaled = scaler_pred.inverse_transform(pred_price_scaled.reshape(-1, 1)) |
| |
|
| | |
| | price_today = np.round(df['Close'][-1], 2) |
| | predicted_price = np.round(pred_price_unscaled.ravel()[0], 2) |
| | change_percent = np.round(100 - (price_today * 100) / predicted_price, 2) |
| |
|
| | |
| | return render_template('index.html', stock=stockname, price_today=price_today, |
| | predicted_price=predicted_price, change_percent=change_percent) |
| |
|
| | app = FastAPI() |
| | app.mount("/", WSGIMiddleware(flask_app)) |