Spaces:
Runtime error
Runtime error
File size: 4,824 Bytes
052db8a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
import joblib
import numpy as np
import pandas as pd
import folium
import streamlit as st
from streamlit_folium import folium_static
import warnings
warnings.filterwarnings("ignore")
# Define model paths
model_paths = {
'Path': {
'3 hours': 'lr_3H_lat_lon.pkl',
'6 hours': 'lr_6H_lat_lon.pkl',
'9 hours': 'lr_9H_lat_lon.pkl',
'12 hours': 'lr_12H_lat_lon.pkl',
'15 hours': 'lr_15H_lat_lon.pkl',
'18 hours': 'lr_18H_lat_lon.pkl',
'21 hours': 'lr_21H_lat_lon.pkl',
'24 hours': 'lr_24H_lat_lon.pkl',
'27 hours': 'lr_27H_lat_lon.pkl',
'30 hours': 'lr_30H_lat_lon.pkl',
'33 hours': 'lr_33H_lat_lon.pkl',
'36 hours': 'lr_36H_lat_lon.pkl'
}
}
# Define scaler paths
scaler_paths = {
'Path': {
'3 hours': 'lr_3H_lat_lon_scaler.pkl',
'6 hours': 'lr_6H_lat_lon_scaler.pkl',
'9 hours': 'lr_9H_lat_lon_scaler.pkl',
'12 hours': 'lr_12H_lat_lon_scaler.pkl',
'15 hours': 'lr_15H_lat_lon_scaler.pkl',
'18 hours': 'lr_18H_lat_lon_scaler.pkl',
'24 hours': 'lr_24H_lat_lon_scaler.pkl',
'27 hours': 'lr_27H_lat_lon_scaler.pkl',
'30 hours': 'lr_30H_lat_lon_scaler.pkl',
'33 hours': 'lr_33H_lat_lon_scaler.pkl',
'36 hours': 'lr_36H_lat_lon_scaler.pkl'
}
}
# Load model and scaler based on time interval
def load_model(time_interval):
model = joblib.load(model_paths['Path'][time_interval])
scaler = joblib.load(scaler_paths['Path'][time_interval])
return model, scaler
def process_input(input_data, scaler):
input_data = np.array(input_data).reshape(-1, 7)
processed_data = input_data[:2].reshape(1, -1)
processed_data = scaler.transform(processed_data)
return processed_data
def predict_path(time_interval, input_data):
model, scaler = load_model(time_interval)
processed_data = process_input(input_data, scaler)
prediction = model.predict(processed_data)
# Create DataFrame for predictions
df_predictions = pd.DataFrame(prediction, columns=['LAT', 'LON'])
df_predictions['Time'] = [time_interval]
return df_predictions
# Function to plot predictions on a folium map and return the HTML representation
def plot_predictions_on_map(df_predictions):
latitudes = df_predictions['LAT'].tolist()
longitudes = df_predictions['LON'].tolist()
m = folium.Map(location=[latitudes[0], longitudes[0]], zoom_start=6)
locations = list(zip(latitudes, longitudes))
for lat, lon in locations:
folium.Marker([lat, lon]).add_to(m)
folium.PolyLine(locations, color='blue', weight=2.5, opacity=0.7).add_to(m)
return m
# Streamlit App
def main():
st.title("Cyclone Path Prediction")
st.write("Input current and previous cyclone data to predict the path and visualize it on a map.")
# User inputs
time_interval = st.selectbox("Select Prediction Time Interval", [
'3 hours', '6 hours', '9 hours', '12 hours', '15 hours', '18 hours',
'21 hours', '24 hours', '27 hours', '30 hours', '33 hours', '36 hours'
])
previous_lat = st.number_input("Previous Latitude", format="%f")
previous_lon = st.number_input("Previous Longitude", format="%f")
previous_speed = st.number_input("Previous Speed", format="%f")
previous_year = st.number_input("Previous Year", format="%d")
previous_month = st.number_input("Previous Month", format="%d")
previous_day = st.number_input("Previous Day", format="%d")
previous_hour = st.number_input("Previous Hour", format="%d")
present_lat = st.number_input("Present Latitude", format="%f")
present_lon = st.number_input("Present Longitude", format="%f")
present_speed = st.number_input("Present Speed", format="%f")
present_year = st.number_input("Present Year", format="%d")
present_month = st.number_input("Present Month", format="%d")
present_day = st.number_input("Present Day", format="%d")
present_hour = st.number_input("Present Hour", format="%d")
if st.button("Predict"):
# Process input into array format
previous_data = [previous_lat, previous_lon, previous_speed, previous_year, previous_month, previous_day, previous_hour]
present_data = [present_lat, present_lon, present_speed, present_year, present_month, present_day, present_hour]
input_data = [previous_data, present_data]
# Predict path
df_predictions = predict_path(time_interval, input_data)
# Display predicted path DataFrame
st.write("Predicted Path DataFrame:")
st.write(df_predictions)
# Plot map with predictions
st.write("Cyclone Path Map:")
map_ = plot_predictions_on_map(df_predictions)
folium_static(map_)
if __name__ == "__main__":
main()
|