VideoGameSalesPrediction / src /streamlit_app.py
hande-x's picture
Update src/streamlit_app.py
14529a9 verified
Raw
History Blame Contribute Delete
2.27 kB
import streamlit as st
import joblib
import pandas as pd
import numpy as np
MODEL_PATH = 'src/vgsales_prediction.joblib'
FEATURES = ["Rank", "NA_Sales", "EU_Sales", "JP_Sales", "Other_Sales"]
@st.cache_resource
def load_linear_model():
try:
model = joblib.load(MODEL_PATH)
return model
except Exception as e:
st.error(f"Error loading the Linear Regression model. Ensure '{MODEL_PATH}' is uploaded. Error: {e}")
return None
def predict_sales(model, input_data):
input_df = pd.DataFrame([input_data])[FEATURES]
prediction = model.predict(input_df)
return float(prediction[0])
# --- Streamlit Interface ---
st.set_page_config(page_title="Game Sales Predictor", layout="centered")
st.title("🎮 Global Video Game Sales Prediction")
st.markdown("Enter regional sales figures (in Millions) and Rank to predict total Global Sales.")
model = load_linear_model()
if model is not None:
st.sidebar.header("Sales Input (in Millions)")
rank = st.sidebar.number_input("Game Rank:", min_value=1, value=1000)
na_sales = st.sidebar.number_input("North America Sales (NA_Sales):", min_value=0.0, value=0.5, step=0.01)
eu_sales = st.sidebar.number_input("Europe Sales (EU_Sales):", min_value=0.0, value=0.25, step=0.01)
jp_sales = st.sidebar.number_input("Japan Sales (JP_Sales):", min_value=0.0, value=0.1, step=0.01)
other_sales = st.sidebar.number_input("Other Sales (Other_Sales):", min_value=0.0, value=0.05, step=0.01)
input_data = {
"Rank": rank,
"NA_Sales": na_sales,
"EU_Sales": eu_sales,
"JP_Sales": jp_sales,
"Other_Sales": other_sales
}
st.subheader("Regional Sales Input (Millions):")
st.dataframe(pd.DataFrame([input_data]), hide_index=True)
if st.button("Predict Global Sales"):
with st.spinner('Calculating prediction...'):
predicted_global_sales = predict_sales(model, input_data)
st.success("Prediction Successful!")
st.markdown("### Predicted Global Sales:")
st.markdown(f"**{predicted_global_sales:,.2f} Million**")
st.info("Note: This simple linear model uses Rank and regional sales to predict the total.")