|
import gradio as gr |
|
import pandas as pd |
|
import numpy as np |
|
from prophet import Prophet |
|
import random |
|
df = pd.read_csv('df60') |
|
place_df = pd.read_csv('place.csv') |
|
Station = pd.DataFrame(np.load('Station.npy',allow_pickle=True)) |
|
def findProvince(Province): |
|
if Province == 'Bangkok': |
|
name = list(Station[Station[6]=='กรุงเทพมหานคร'][0])[0] |
|
return name |
|
|
|
def get_weather_forecast(Province,Activity,Purpose,Year,Month,Date): |
|
name = findProvince(Province) |
|
p_df = df.rename(columns={'Date_time':'ds',str(name):'y'}) |
|
rain_df = p_df[p_df['mode']=='Rain'][['ds','y']] |
|
rain_model = Prophet(interval_width=0.95) |
|
rain_model.fit(rain_df) |
|
date_time = pd.Series(pd.to_datetime(f'{Year}-{Month}-{Date}',format = '%Y-%m-%d'),name='ds') |
|
date_time = pd.DataFrame(date_time) |
|
forecast = rain_model.predict(date_time) |
|
|
|
|
|
if float(forecast['yhat'][0]) >= 5: |
|
WeatherCon = 'SUNNY' |
|
txt = 'น้อย' |
|
else: |
|
WeatherCon = 'RAIN' |
|
txt = 'สูง' |
|
if Activity == 'Indoor': |
|
IsIndoor = 'Y' |
|
else: |
|
IsIndoor = 'N' |
|
|
|
place = place_df[place_df['Purpose']==Purpose] |
|
place = place[place['IsIndoor']==IsIndoor] |
|
place = place[place['Province']==Province] |
|
if WeatherCon == 'SUNNY': |
|
place = place[place['WeatherCon']==WeatherCon] |
|
place = place['LocationName'] |
|
|
|
place = list(place)[0] |
|
return f'มีโอกาสฝนตก{txt} สถานที่ที่แนะนำคือ: {place}' |
|
|
|
|
|
iface = gr.Interface( |
|
fn = get_weather_forecast, |
|
inputs = [ |
|
|
|
gr.Dropdown( |
|
["Bangkok"], label="Province", info="Will add more later!" |
|
), |
|
|
|
gr.Dropdown( |
|
["Indoor","Outdoor"], label="Activity" |
|
), |
|
|
|
gr.Dropdown( |
|
["Entertainment","Culture",'Shop','Science'], label="Purpose" |
|
), |
|
|
|
gr.Dropdown( |
|
[2023], label="Year", info="Will add more later!" |
|
), |
|
|
|
gr.Dropdown( |
|
[1,2,3,4,5,6,7,8,9,10,11,12], label="Month" |
|
), |
|
|
|
gr.Dropdown( |
|
[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], label="Date" |
|
) |
|
|
|
], |
|
|
|
outputs=gr.outputs.Textbox(label="Prediction"), |
|
live=True, |
|
title="Weather Forecast", |
|
description="Get the weather forecast for a city.", |
|
theme="default", |
|
) |
|
|
|
iface.launch() |