Spaces:
Sleeping
Sleeping
| import warnings | |
| warnings.filterwarnings("ignore") | |
| import pickle | |
| import pandas as pd | |
| import numpy as np | |
| import gradio as gr | |
| import random | |
| def import_model(): | |
| model_names = ['random_forest', 'xgboost', 'decision_tree'] | |
| loaded_models = tuple() | |
| for model_name in model_names: | |
| with open(f'{model_name}.pkl', 'rb') as file: | |
| model = pickle.load(file) | |
| loaded_models += (model,) | |
| return loaded_models | |
| def predict_liquid_rate(*input): | |
| input_list = list(input) | |
| inp_arr = np.array(input_list[:-1]).reshape(1, -1) | |
| random_forest_model, xgboost_model, decision_tree_model = import_model() | |
| model_selection = input_list[-1] | |
| print(model_selection) | |
| result = {} | |
| model_names = { | |
| 'XGBoost': 'XGBoost Oil Rate', | |
| 'Random Forest': 'Random Forest Oil Rate', | |
| 'Decision Tree': 'Decision Tree Oil Rate', | |
| 'Prophet Model': 'Prophet Model Oil Rate' | |
| } | |
| xg_output = '' | |
| dt_output = '' | |
| rf_output = '' | |
| for choice in model_selection: | |
| if choice == 'XGBoost': | |
| xg_pred = xgboost_model.predict(inp_arr) | |
| result[choice] = xg_pred[0] | |
| xg_output = f"{model_names['XGBoost']}: {result['XGBoost']:.2f} Bbls/day" | |
| elif choice == 'Decision Tree': | |
| dt_pred = decision_tree_model.predict(inp_arr) | |
| result[choice] = dt_pred[0] | |
| dt_output = f"{model_names['Decision Tree']}: {result['Decision Tree']:.2f} Bbls/day" | |
| elif choice == 'Random Forest': | |
| rf_pred = random_forest_model.predict(inp_arr) | |
| result[choice] = rf_pred[0] | |
| rf_output = f"{model_names['Random Forest']}: {result['Random Forest']:.2f} Bbls/day" | |
| return xg_output, dt_output, rf_output | |
| with gr.Blocks() as demo: | |
| gr.Markdown( | |
| """ | |
| # Oil Rate Prediction | |
| Use this table as Reference for Last Well test data. | |
| """) | |
| with gr.Column(): | |
| with gr.Box(): | |
| frame_output = gr.Dataframe( | |
| value=[['2022-12-23', 32, 1000, 280, 0.45, 775.12]], | |
| headers=['Date', 'Choke', 'FTHP', 'FLP', 'BS&W', 'OilRate'], | |
| datatype=["str", "number", "number", "number", "number", "number"], | |
| ) | |
| gr.Markdown( | |
| """ Use the different input slider to select new welltest information | |
| """) | |
| with gr.Box(): | |
| choke = gr.Slider(minimum=0, maximum=100, value=32, step=2, label="Choke Size (1/64\")", interactive=True) | |
| fthp = gr.Slider(minimum=500, maximum=5000, step=1, value=1000, label="Tubing Head Pressure (FTHP)(psi)", interactive=True) | |
| flp = gr.Slider(minimum=0, maximum=5000, step=1, value=280,label="Flow Line Pressure (FLP)(psi)", interactive=True) | |
| bsw = gr.Slider(minimum=0, maximum=100, value=0.45, label="Basic Sediment and Water (BS&W)(%)", interactive=True) | |
| gr.Markdown( | |
| """ Use the different trained models to perform Oil rate prediction | |
| """) | |
| # Output Controls | |
| with gr.Column(): | |
| select_model = gr.CheckboxGroup(choices=["Random Forest", "XGBoost", "Decision Tree"], value='XGBoost', label="Select Model", info="Select Model to make prediction", interactive=True) | |
| btn_predict = gr.Button("Test Prediction") | |
| xg_output = gr.Label(label="XGBoost model") | |
| dt_output = gr.Label(label="Decision Tree") | |
| rf_output = gr.Label(label="Random Forest") | |
| input_items = [choke, fthp, flp, bsw, select_model] | |
| btn_predict.click(fn=predict_liquid_rate, inputs=input_items, outputs=[xg_output,dt_output,rf_output]) | |
| #gr.describe() | |
| demo.launch(debug=True) |