Spaces:
Sleeping
Sleeping
File size: 2,443 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 utils.weather_api import fetch_weather
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
def fetch_multiple_cities(start_date, end_date):
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}
}
city_data = {}
for city, coords in locations.items():
try:
df = fetch_weather(coords, start_date, end_date)
city_data[city] = df.rename({"temperature_2m": city})
except Exception as e:
st.error(f"Failed to fetch data for {city}: {e}")
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 display_visualizations(df):
st.subheader("Daily High Temperatures Across Cities")
melted_df = df.melt(id_vars=["datetime"], variable_name="City", value_name="Temperature")
plt.figure(figsize=(10, 6))
for city in df.columns[1:]:
plt.plot(df["datetime"], df[city], label=city)
plt.xlabel("Datetime")
plt.ylabel("Temperature (°F)")
plt.title("Temperature Comparison")
plt.legend()
st.pyplot(plt)
def calculate_kpis(df):
kpis = {}
for city in df.columns[1:]:
highest = df[city].max()
lowest = df[city].min()
kpis[city] = (highest, lowest)
return kpis
def main():
st.title("Compare Weather Data for All 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())
if start_date and end_date:
st.write("Fetching weather data for all BYU locations...")
try:
combined_data = fetch_multiple_cities(start_date, end_date)
st.dataframe(combined_data)
st.subheader("Key Performance Indicators (KPIs)")
kpis = calculate_kpis(combined_data)
for city, (highest, lowest) in kpis.items():
st.write(f"**{city}:** Highest Temp: {highest:.2f} °F | Lowest Temp: {lowest:.2f} °F")
display_visualizations(combined_data)
except Exception as e:
st.error(f"Error: {e}")
|