import streamlit as st import hopsworks import joblib import pandas as pd import numpy as np import folium from streamlit_folium import st_folium, folium_static import json import time from datetime import timedelta, datetime from branca.element import Figure from functions import decode_features, get_model def fancy_header(text, font_size=24): res = f'{text}' st.markdown(res, unsafe_allow_html=True ) st.title('⛅️Air Quality Prediction Project🌩') progress_bar = st.sidebar.header('⚙️ Working Progress') progress_bar = st.sidebar.progress(0) st.write(36 * "-") fancy_header('\n📡 Connecting to Hopsworks Feature Store...') project = hopsworks.login() fs = project.get_feature_store() feature_view = fs.get_feature_view( name = 'oslo_air_quality_fv', version = 1 ) st.write("Successfully connected!✔️") progress_bar.progress(20) # st.write(36 * "-") # fancy_header('\n☁️ Getting batch data from Feature Store...') # start_date = datetime.now() - timedelta(days=1) # start_time = int(start_date.timestamp()) * 1000 # # X = feature_view.get_batch_data(start_time=start_time) # # 1662652800000 # X = feature_view.get_batch_data(start_time=1662652800000) # progress_bar.progress(50) # print(X.date.values) # latest_date_unix = str(X.date.values[0])[:10] # latest_date = time.ctime(int(latest_date_unix)) # st.write(f"⏱ Data for {latest_date}") # X = X.drop(columns=["date"]).fillna(0) # print("X is \n %s" % X) # data_to_display = decode_features(X, feature_view=feature_view) # progress_bar.progress(60) # st.write(36 * "-") # fancy_header(f"🗺 Processing the map...") # fig = Figure(width=550,height=350) # my_map = folium.Map(location=[58, 20], zoom_start=3.71) # fig.add_child(my_map) # folium.TileLayer('Stamen Terrain').add_to(my_map) # folium.TileLayer('Stamen Toner').add_to(my_map) # folium.TileLayer('Stamen Water Color').add_to(my_map) # folium.TileLayer('cartodbpositron').add_to(my_map) # folium.TileLayer('cartodbdark_matter').add_to(my_map) # folium.LayerControl().add_to(my_map) # data_to_display = data_to_display[["city", "temp", "humidity", # "conditions", "aqi"]] # cities_coords = {("Sundsvall", "Sweden"): [62.390811, 17.306927], # ("Stockholm", "Sweden"): [59.334591, 18.063240], # ("Malmo", "Sweden"): [55.604981, 13.003822], # ("Kyiv", "Ukraine"): [50.450001, 30.523333]} # # if "Kyiv" in data_to_display["city"]: # # cities_coords[("Kyiv", "Ukraine")]: [50.450001, 30.523333] # # pass # data_to_display = data_to_display.set_index("city") # cols_names_dict = {"temp": "Temperature", # "humidity": "Humidity", # "conditions": "Conditions", # "aqi": "AQI"} # data_to_display = data_to_display.rename(columns=cols_names_dict) # cols_ = ["Temperature", "Humidity", "AQI"] # data_to_display[cols_] = data_to_display[cols_].apply(lambda x: round(x, 1)) # for city, country in cities_coords: # text = f""" #

{city}

#
# # # # # # """ # for column in data_to_display.columns: # text += f""" # # # # """ # text += """
Country:{country}
{column}:{data_to_display.loc[city][column]}
#
""" # folium.Marker( # cities_coords[(city, country)], popup=text, tooltip=f"{city}" # ).add_to(my_map) # # call to render Folium map in Streamlit # folium_static(my_map) # progress_bar.progress(80) # st.sidebar.write("-" * 36) # model = get_model(project=project, # model_name="gradient_boost_model", # evaluation_metric="f1_score", # sort_metrics_by="max") # preds = model.predict(X) # cities = [city_tuple[0] for city_tuple in cities_coords.keys()] # print("cities are %s" % cities) # next_day_date = datetime.today() + timedelta(days=1) # next_day = next_day_date.strftime ('%d/%m/%Y') # print("preds is %s" % preds) # df = pd.DataFrame(data=preds, index=cities, columns=[f"AQI Predictions for {next_day}"], dtype=int) # st.sidebar.write(df) # progress_bar.progress(100) # st.button("Re-run") # # hi