|
import streamlit as st |
|
import pandas as pd |
|
import pickle |
|
import sklearn |
|
from PIL import Image |
|
|
|
@st.cache_resource |
|
def load_model(): |
|
model_file = open('./models/weather_prediction_model.pkl', 'rb') |
|
rfc = pickle.load(model_file) |
|
oe = pickle.load(model_file) |
|
sc = pickle.load(model_file) |
|
images = pickle.load(model_file) |
|
model_file.close() |
|
return rfc, oe, sc, images |
|
|
|
@st.cache_data |
|
def load_icons(): |
|
dz = Image.open("assets/drizzle.png") |
|
rn = Image.open("assets/rain.png") |
|
sn = Image.open("assets/sun.png") |
|
sw = Image.open("assets/snow.png") |
|
fg = Image.open("assets/fog.png") |
|
return dz, rn, sn, sw, fg |
|
|
|
@st.cache_data |
|
def get_prediction(input): |
|
if len(input) != 4: |
|
return None |
|
input = pd.DataFrame([input], columns = ['precipitation', 'temp_max', 'temp_min', 'wind']) |
|
X_predict = sc.transform(input) |
|
y_predict = [rfc.predict(X_predict)] |
|
weather_predict = oe.inverse_transform(y_predict)[0] |
|
return weather_predict[0] |
|
|
|
|
|
rfc, oe, sc, images = load_model() |
|
|
|
|
|
dz, rn, sn, sw, fg = load_icons() |
|
|
|
st.header('Weather Classification', divider='green') |
|
|
|
st.markdown("Change the sliders below to see the classification") |
|
|
|
|
|
precipitation = st.slider('Precipitation (mm)', 0.0, 100.0, 0.0, 1.0) |
|
temp_min = st.slider('Minimum Temperature (C)', -10.0, 20.0, 8.0, 1.0) |
|
temp_max = st.slider('Maximum Temperature (C)', -2.0, 40.0, 15.0, 1.0) |
|
wind = st.slider('Wind Speed (m/s)', 0.0, 10.0, 3.0, 1.0) |
|
|
|
|
|
weather = get_prediction([precipitation, temp_min, temp_max, wind]) |
|
if weather == None: |
|
st.warning("Unknown Weather Classification") |
|
else: |
|
icon = Image.open(images[weather]) |
|
|
|
st.info("Weather Classification:") |
|
st.image(icon, caption = weather, width = 250) |