Spaces:
Running
Running
import gradio as gr | |
import pandas as pd | |
import matplotlib.pyplot as plt | |
# search weather data that is in csv file | |
def dataSearch(month, day, weather_elements, location, precipitation): | |
if location=='Seoul': | |
df = pd.read_csv('Seoul.csv') | |
elif location=='Washington': | |
df = pd.read_csv('Washington.csv') | |
if precipitation: | |
weather_elements.append('precipitation(mm)') | |
if day in ['1','2','3','4','5','6','7','8','9']: | |
today = '2022-'+month +'-0'+day | |
else: | |
today = '2022-'+month+'-'+day | |
df1 = df[df.date == today] | |
columns = ['location', 'date', 'time'] + weather_elements | |
df2 = df1.loc[:, columns] | |
return df2 | |
# show weather data in plot using matplotlib | |
def showOutput(month, day, weather_elements, location, precipitation): | |
if month=='January': | |
month = '01' | |
elif month=='February': | |
month = '02' | |
elif month=='March': | |
month = '03' | |
elif month=='April': | |
month = '04' | |
elif month=='May': | |
month = '05' | |
elif month=='June': | |
month = '06' | |
elif month=='July': | |
month = '07' | |
elif month=='August': | |
month = '08' | |
elif month=='September': | |
month = '09' | |
elif month=='October': | |
month = '10' | |
elif month=='November': | |
month = '11' | |
elif month=='December': | |
month = '12' | |
weatherTable = dataSearch(month, day, weather_elements, location, precipitation) | |
if precipitation: | |
weather_elements.remove('precipitation(mm)') | |
if day in ['1','2','3','4','5','6','7','8','9']: | |
xname = '2022-'+month +'-0'+day | |
else: | |
xname = '2022-'+month+'-'+day | |
y_value=[0]*len(weather_elements) | |
x_value = weatherTable['time'] | |
if 'humidity(%)' in weather_elements: | |
humidity_index = weather_elements.index('humidity(%)') | |
if weather_elements[humidity_index] != weather_elements[-1]: | |
temp = weather_elements[humidity_index] | |
weather_elements[humidity_index] = weather_elements[-1] | |
weather_elements[-1] = temp | |
for i in range(len(weather_elements)): | |
y_value[i] = weatherTable[weather_elements[i]] | |
if len(weather_elements) == 1: | |
weatherPlot = plt.figure(figsize=(10,10)) | |
plt.title("2022 Weather Graph", fontsize=20, fontweight='bold') | |
plt.xlabel(xname,labelpad=5, fontsize=15) | |
plt.ylabel(weather_elements[0], labelpad=15, fontsize=15) | |
plt.xticks(size=10, rotation=45) | |
plt.bar(x_value, y_value[-1], color='skyblue', label=weather_elements[0]) | |
plt.legend(loc = "upper left") | |
elif len(weather_elements) == 2: | |
weatherPlot, ax1 = plt.subplots(figsize=(10,10)) | |
plt.title("2022 Weather Graph", fontsize=20, fontweight='bold') | |
plt.xticks(size=10, rotation=45) | |
ax1.bar(x_value, y_value[-1], color='skyblue', label=weather_elements[1]) | |
ax1.set_xlabel(xname, labelpad=5, fontsize=15) | |
ax1.set_ylabel(weather_elements[1], labelpad=15, fontsize=15) | |
ax1.legend(loc='upper left') | |
ax1_sub = ax1.twinx() | |
ax1_sub.plot(x_value, y_value[0], color='red', marker = "o", label=weather_elements[0]) | |
ax1_sub.set_ylabel(weather_elements[0], labelpad=25, fontsize=15, rotation=270) | |
ax1_sub.legend(loc='upper right') | |
elif len(weather_elements) == 3: | |
weatherPlot, (ax1, ax2) = plt.subplots(2, 1, figsize=(10,15), constrained_layout=True) | |
line1 = ax1.plot(x_value, y_value[0], color='red', marker = "o", label=weather_elements[0]) | |
ax1.set_xlabel(xname, labelpad=5, fontsize=15) | |
ax1.set_ylabel(weather_elements[0], labelpad=15, fontsize=15) | |
ax1.set_title("2022 Weather Graph", fontsize=20, fontweight='bold') | |
ax1.tick_params(axis='x', rotation=45, labelsize=10) | |
ax1_sub = ax1.twinx() | |
line2 = ax1_sub.plot(x_value, y_value[1], color='blue', marker = "o", label=weather_elements[1]) | |
ax1_sub.set_ylabel(weather_elements[1], labelpad=25, fontsize=15, rotation=270) | |
lines = line1 + line2 | |
labels = [l.get_label() for l in lines] | |
ax1.legend(lines, labels, loc='upper left') | |
ax2.bar(x_value, y_value[-1], color='skyblue', label=weather_elements[-1]) | |
ax2.set_xlabel(xname, labelpad=5, fontsize=15) | |
ax2.set_ylabel(weather_elements[-1], labelpad=15, fontsize=15) | |
ax2.tick_params(axis='x', rotation=45, labelsize=10) | |
ax2.legend(loc='upper right') | |
elif len(weather_elements) == 4: | |
weatherPlot, (ax1, ax2) = plt.subplots(2,1, figsize=(10,15), constrained_layout=True) | |
line1 = ax1.plot(x_value, y_value[0], color='red', marker = "o", label=weather_elements[0]) | |
ax1.set_xlabel(xname, labelpad=5, fontsize=15) | |
ax1.set_ylabel(weather_elements[0], labelpad=15, fontsize=15) | |
ax1.set_title("2022 Weather Graph", fontsize=20, fontweight='bold') | |
ax1.tick_params(axis='x', rotation=45, labelsize=10) | |
ax1_sub = ax1.twinx() | |
line2 = ax1_sub.plot(x_value, y_value[1], color='blue', marker = "o", label=weather_elements[1]) | |
ax1_sub.set_ylabel(weather_elements[1], labelpad=25, fontsize=15, rotation=270) | |
lines = line1 + line2 | |
labels = [l.get_label() for l in lines] | |
ax1.legend(lines, labels, loc='upper left') | |
ax2.bar(x_value, y_value[-1], color='skyblue', label=weather_elements[-1]) | |
ax2.set_xlabel(xname, labelpad=5, fontsize=15) | |
ax2.set_ylabel(weather_elements[-1], labelpad=15, fontsize=15) | |
ax2.tick_params(axis='x', rotation=45, labelsize=10) | |
ax2.legend(loc='upper left') | |
ax2_sub = ax2.twinx() | |
ax2_sub.plot(x_value, y_value[2], color='gray', marker = "o", label=weather_elements[2]) | |
ax2_sub.set_ylabel(weather_elements[2], labelpad=25, fontsize=15, rotation=270) | |
ax2_sub.legend(loc='upper right') | |
else: | |
for i in range(len(weather_elements)): | |
y_value[i] = weatherTable[weather_elements[i]] | |
if len(weather_elements) == 1: | |
weatherPlot = plt.figure(figsize=(10,10)) | |
plt.title("2022 Weather Graph", fontsize=20, fontweight='bold') | |
plt.xlabel(xname,labelpad=5, fontsize=15) | |
plt.ylabel(weather_elements[0], labelpad=15, fontsize=15) | |
plt.xticks(size=10, rotation=45) | |
plt.plot(x_value, y_value[0], color='red', marker='o', label=weather_elements[0]) | |
plt.legend(loc = "upper left") | |
elif len(weather_elements) == 2: | |
weatherPlot, ax1 = plt.subplots(figsize=(10,10)) | |
plt.title("2022 Weather Graph", fontsize=20, fontweight='bold') | |
plt.xticks(size=10, rotation=45) | |
line1 = ax1.plot(x_value, y_value[0], color='red', marker='o', label=weather_elements[0]) | |
ax1.set_xlabel(xname, labelpad=5, fontsize=15) | |
ax1.set_ylabel(weather_elements[0], labelpad=15, fontsize=15) | |
ax1_sub = ax1.twinx() | |
line2 = ax1_sub.plot(x_value, y_value[1], color='skyblue', marker='o', label=weather_elements[1]) | |
ax1_sub.set_ylabel(weather_elements[1], labelpad=25, fontsize=15, rotation=270) | |
lines = line1 + line2 | |
labels = [l.get_label() for l in lines] | |
ax1.legend(lines, labels, loc='upper left') | |
elif len(weather_elements) == 3: | |
weatherPlot, (ax1, ax2) = plt.subplots(2,1, figsize=(10,15), constrained_layout=True) | |
line1 = ax1.plot(x_value, y_value[0], color='red', marker = "o", label=weather_elements[0]) | |
ax1.set_xlabel(xname, labelpad=5, fontsize=15) | |
ax1.set_ylabel(weather_elements[0], labelpad=15, fontsize=15) | |
ax1.set_title("2022 Weather Graph", fontsize=20, fontweight='bold') | |
ax1.tick_params(axis='x', rotation=45, labelsize=10) | |
ax1_sub = ax1.twinx() | |
line2 = ax1_sub.plot(x_value, y_value[1], color='skyblue', marker = "o", label=weather_elements[1]) | |
ax1_sub.set_ylabel(weather_elements[1], labelpad=25, fontsize=15, rotation=270) | |
lines = line1 + line2 | |
labels = [l.get_label() for l in lines] | |
ax1.legend(lines, labels, loc='upper left') | |
ax2.plot(x_value, y_value[2], color='gray', marker = "o", label=weather_elements[2]) | |
ax2.set_xlabel(xname, labelpad=5, fontsize=15) | |
ax2.set_ylabel(weather_elements[2], labelpad=15, fontsize=15) | |
ax2.tick_params(axis='x', rotation=45, labelsize=10) | |
ax2.legend(loc='upper left') | |
return [weatherTable, weatherPlot] | |
output1 = gr.Dataframe() | |
output2 = gr.Plot() | |
# make gradio interface | |
demo = gr.Interface( | |
fn=showOutput, | |
inputs=[ | |
gr.Dropdown(["January", "February", "March", "April", "May", "June", | |
"July", "August", "September", "October", "November", "December"], | |
label="Month", info="Select Months"), | |
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="Day", info="Select Day"), | |
gr.CheckboxGroup(["temperature(˚C)", "wind(m/s)", "humidity(%)", "air_pressure(hPa)"], | |
label="Weather element", info="Choose weather element"), | |
gr.Radio(["Washington", "Seoul"], | |
label="Location", info="Choose location"), | |
gr.Checkbox(label="precipation?")], | |
outputs=[output1,output2] | |
) | |
if __name__=="__main__": | |
demo.launch() |