Spaces:
Sleeping
Sleeping
File size: 2,893 Bytes
9fc6b05 |
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 |
import streamlit as st
import polars as pl
from datetime import datetime, timedelta
from utils.weather_api import fetch_weather
locations = {
"BYU Idaho": {"lat": 43.8145, "lon": -111.7833},
"BYU Hawaii": {"lat": 21.6419, "lon": -157.9267},
"BYU Provo": {"lat": 40.25, "lon": -111.65}
}
weather_variables = {
"Temperature (°F)": "temperature_2m",
"Wind Speed (mph)": "windspeed_10m",
"Relative Humidity (%)": "relative_humidity_2m"
}
def fetch_multiple_cities(start_date, end_date, variable, timezone_selection):
city_data = {}
for city, coords in locations.items():
df = fetch_weather(coords, start_date, end_date, variable, timezone_selection)
city_data[city] = df.rename({variable: city})
combined_df = city_data[list(city_data.keys())[0]].select("datetime")
for city, data in city_data.items():
combined_df = pl.concat([combined_df, data.select(city)], how="horizontal")
return combined_df
def calculate_summary_metrics(df):
avg_values = df.select([pl.mean(city).alias(city) for city in df.columns if city != "datetime"])
max_values = df.select([pl.max(city).alias(city) for city in df.columns if city != "datetime"])
min_values = df.select([pl.min(city).alias(city) for city in df.columns if city != "datetime"])
avg_summary = avg_values.row(0)
max_summary = max_values.row(0)
min_summary = min_values.row(0)
return avg_summary, max_summary, min_summary
def main():
st.title("Compare Weather Metrics Across BYU Locations 📊")
st.sidebar.header("User Input")
start_date = st.sidebar.date_input("Start Date", datetime.now() - timedelta(days=15))
end_date = st.sidebar.date_input("End Date", datetime.now())
selected_variable_label = st.sidebar.selectbox("Select Weather Variable", weather_variables.keys())
timezone_selection = st.sidebar.radio("Select Time Zone", ["America/Denver", "Pacific/Honolulu"])
selected_variable = weather_variables[selected_variable_label]
if start_date and end_date:
with st.spinner("Fetching weather data across all BYU locations..."):
combined_data = fetch_multiple_cities(start_date, end_date, selected_variable, timezone_selection)
st.write(f"### {selected_variable_label} Data Across Locations")
st.dataframe(combined_data)
avg_summary, max_summary, min_summary = calculate_summary_metrics(combined_data)
st.subheader("Key Performance Indicators (KPIs)")
kpi_cols = st.columns(len(locations))
for idx, city in enumerate(locations):
with kpi_cols[idx]:
st.metric(f"{city} - Avg", f"{avg_summary[idx]:.2f}")
st.metric(f"{city} - Max", f"{max_summary[idx]:.2f}")
st.metric(f"{city} - Min", f"{min_summary[idx]:.2f}")
if __name__ == "__main__":
main()
|