|
import streamlit as st |
|
import pandas as pd |
|
import joblib |
|
|
|
|
|
st.set_page_config(page_title="Blueberry Yield Predictor", layout="wide") |
|
|
|
|
|
@st.cache_resource |
|
def load_model(): |
|
model = joblib.load('model.joblib') |
|
scaler = joblib.load('scaler.joblib') |
|
return model, scaler |
|
|
|
model, scaler = load_model() |
|
|
|
|
|
st.title('🫐 Blueberry Yield Predictor') |
|
st.markdown('Enter field parameters to predict blueberry yield') |
|
|
|
|
|
col1, col2 = st.columns(2) |
|
|
|
with col1: |
|
st.subheader('Field Parameters') |
|
clonesize = st.slider('Clone Size', 10.0, 40.0, 25.0) |
|
honeybee = st.slider('Honeybee', 0.0, 1.0, 0.5) |
|
bumbles = st.slider('Bumbles', 0.0, 1.0, 0.25) |
|
andrena = st.slider('Andrena', 0.0, 1.0, 0.5) |
|
|
|
with col2: |
|
st.subheader('Environmental Parameters') |
|
osmia = st.slider('Osmia', 0.0, 1.0, 0.5) |
|
MaxOfUpperTRange = st.slider('Max Temperature (°F)', 60.0, 100.0, 80.0) |
|
MinOfUpperTRange = st.slider('Min Temperature (°F)', 35.0, 60.0, 50.0) |
|
RainingDays = st.slider('Raining Days', 1.0, 34.0, 20.0) |
|
|
|
|
|
if st.button('Predict Yield'): |
|
|
|
input_data = pd.DataFrame({ |
|
'clonesize': [clonesize], |
|
'honeybee': [honeybee], |
|
'bumbles': [bumbles], |
|
'andrena': [andrena], |
|
'osmia': [osmia], |
|
'MaxOfUpperTRange': [MaxOfUpperTRange], |
|
'MinOfUpperTRange': [MinOfUpperTRange], |
|
'AverageOfUpperTRange': [(MaxOfUpperTRange + MinOfUpperTRange) / 2], |
|
'MaxOfLowerTRange': [60.0], |
|
'MinOfLowerTRange': [30.0], |
|
'AverageOfLowerTRange': [45.0], |
|
'RainingDays': [RainingDays], |
|
'AverageRainingDays': [RainingDays/100], |
|
'fruitset': [0.5], |
|
'fruitmass': [0.45], |
|
'seeds': [35.0] |
|
}) |
|
|
|
|
|
input_scaled = scaler.transform(input_data) |
|
prediction = model.predict(input_scaled)[0] |
|
|
|
|
|
st.success(f'Predicted Yield: {prediction:.2f}') |