CoolFace
Apppublic

AM-MLOps/POD_System_Sensor_Data

sourceHugging Faceupdated 2y agoView on Hugging Face
1likes
app.py282 linesDownload Raw Back to root
1# Loading packages2from datetime import datetime, timedelta3import joblib4import pandas as pd5import numpy as np6import matplotlib.pyplot as plt7import warnings8import hopsworks9import streamlit as st10import json11import os12import seaborn as sns13import time14import random15from sklearn.preprocessing import StandardScaler16 17# Configuring the web page and setting the page title and icon18st.set_page_config(19  page_title='Parking Occupacy Detection',20  page_icon='🅿️',21  initial_sidebar_state='expanded')22 23# Ignoring filtering warnings24warnings.filterwarnings("ignore")25 26# Setting the title and adding text27st.title('Parking Occupancy Detection')28 29# Defining functions30def fill_nan_with_zero(value):31    if pd.isna(value):32        return 033    else:34        return value35 36# Getting current time and yesterday37now = datetime.now() + timedelta(hours=2)38yesterday = now - timedelta(days=1)39 40# Defining scaler41scaler = StandardScaler()42 43# Creating tabs for the different features of the application44tab1,tab2 = st.tabs(['Parking place near Building', 'Parking place near Bikelane'])45 46with tab1:47    # Logging in to Hopsworks and loading the feature store48    project = hopsworks.login(project = "alaborg", api_key_value=os.environ['HOPSWORKS_API_KEY'])49    fs = project.get_feature_store()50 51    # Function to load the building models52        53    @st.cache_data()54    def get_building_mag_model(project=project):55        mr = project.get_model_registry()56        building_mag_model = mr.get_model("building_mag_hist_model", version = 2)57        building_mag_model_dir = building_mag_model.download()58        return joblib.load(building_mag_model_dir + "/building_mag_hist_model.pkl")59 60    # Retrieving model61    building_mag_hist_model = get_building_mag_model()62 63    @st.cache_data()64    def get_building_rad_model(project=project):65        mr = project.get_model_registry()66        building_rad_model = mr.get_model("building_rad_hist_model", version = 2)67        building_rad_model_dir = building_rad_model.download()68        return joblib.load(building_rad_model_dir + "/building_rad_hist_model.pkl")69 70    # Retrieving model71    building_rad_hist_model = get_building_rad_model()72    73    # Loading the feature group with latest data for building74    new_building_fg = fs.get_feature_group(name = 'new_building_fg', version = 1)75 76    # Function to loading the feature group with latest data for building as a dataset77    @st.cache_data()78    def retrieve_building(feature_group=new_building_fg):79        new_building_fg = feature_group.select_all()80        df_building_new = new_building_fg.read(read_options={"use_hive": True})           81        return df_building_new82 83    # Retrieving building data84    building_new = retrieve_building()85    86    col1, col2 = st.columns(2)87 88    with col1:89        st.subheader("Magnetic field prediction")90        91        # Making the predictions and getting the latest data for magnetic field data92        building_mag_prediction_data = building_new[['time', 'x', 'y', 'z', 'temperature', 'et0_fao_evapotranspiration']]                       93        building_mag_prediction_data['et0_fao_evapotranspiration'] = building_mag_prediction_data['et0_fao_evapotranspiration'].apply(fill_nan_with_zero)94        building_mag_most_recent_prediction = building_mag_prediction_data[['x', 'y', 'z', 'temperature', 'et0_fao_evapotranspiration']]95        building_mag_most_recent_prediction = building_mag_hist_model.predict(building_mag_most_recent_prediction)96        building_mag_prediction_data['Status'] = building_mag_most_recent_prediction97        building_mag_prediction_data['Status'].replace(['detection', 'no_detection'], ['Vehicle detected', 'No vehicle detected'], inplace=True)98        building_mag_prediction_data = building_mag_prediction_data.rename(columns={'time': 'Time'})99        building_mag_prediction_data = building_mag_prediction_data.set_index(['Time'])100        st.dataframe(building_mag_prediction_data[['Status']].tail(3))101 102    with col2:103        st.subheader("Radar prediction")104        105        # Making the predictions and getting the latest data for radar data106        building_rad_prediction_data = building_new[['time', 'radar_0', 'radar_1', 'radar_2', 'radar_3', 'radar_4', 'radar_5', 'radar_6', 'radar_7', 'temperature', 'et0_fao_evapotranspiration']]                       107        building_rad_prediction_data['et0_fao_evapotranspiration'] = building_rad_prediction_data['et0_fao_evapotranspiration'].apply(fill_nan_with_zero)108        building_rad_most_recent_prediction = building_rad_prediction_data[['radar_0', 'radar_1', 'radar_2', 'radar_3', 'radar_4', 'radar_5', 'radar_6', 'radar_7', 'temperature', 'et0_fao_evapotranspiration']]109        building_rad_most_recent_prediction = building_rad_hist_model.predict(building_rad_most_recent_prediction)110        building_rad_prediction_data['Status'] = building_rad_most_recent_prediction111        building_rad_prediction_data['Status'].replace(['detection', 'no_detection'], ['Vehicle detected', 'No vehicle detected'], inplace=True)112        building_rad_prediction_data = building_rad_prediction_data.rename(columns={'time': 'Time'})113        building_rad_prediction_data = building_rad_prediction_data.set_index(['Time'])114        st.dataframe(building_rad_prediction_data[['Status']].tail(3))115 116    # Update button117    if st.button("Update Building"):118        # Clear cached data119        st.cache_data.clear()120        # Immediately rerun the application121        st.experimental_rerun()122 123    # Creating plot for latest magnetic field data for building124    # Filtering building_new for specific time125    building_mag_specific_time_range = building_new[(building_new['time'] >= yesterday) & (building_new['time'] <= now)]126 127    # Defining magnetic field data to normalise128    building_mag_to_normalize = building_mag_specific_time_range[['x', 'y', 'z']]129 130    # Applying StandardScaler131    normalized_building_mag = scaler.fit_transform(building_mag_to_normalize)    132 133    # Adding normalized data back to the DataFrame134    building_mag_specific_time_range[['x', 'y', 'z']] = normalized_building_mag135 136    # Streamlit plotting137    st.subheader('Normalized values of magnetic field data from yesterday to today')138 139    # Converting the time column to string for better readability in Streamlit plots140    building_mag_specific_time_range['time'] = building_mag_specific_time_range['time'].astype(str)141 142    # Plotting using Streamlit's line chart143    st.line_chart(building_mag_specific_time_range.set_index('time')[['x', 'y', 'z']])144 145    # Creating plot for latest radar data for building146    # Filtering building_new for specific time147    building_rad_specific_time_range = building_new[(building_new['time'] >= yesterday) & (building_new['time'] <= now)]148 149    # Defining magnetic field data to normalise150    building_rad_to_normalize = building_rad_specific_time_range[['radar_0', 'radar_1', 'radar_2', 'radar_3', 'radar_4', 'radar_5', 'radar_6', 'radar_7']]151 152    # Applying StandardScaler153    normalized_building_rad = scaler.fit_transform(building_rad_to_normalize)    154 155    # Adding normalized data back to the DataFrame156    building_rad_specific_time_range[['radar_0', 'radar_1', 'radar_2', 'radar_3', 'radar_4', 'radar_5', 'radar_6', 'radar_7']] = normalized_building_rad157 158    # Streamlit plotting159    st.subheader('Normalized values of radar data from yesterday to today')160 161    # Converting the time column to string for better readability in Streamlit plots162    building_rad_specific_time_range['time'] = building_rad_specific_time_range['time'].astype(str)163 164    # Plotting using Streamlit's line chart165    st.line_chart(building_rad_specific_time_range.set_index('time')[['radar_0', 'radar_1', 'radar_2', 'radar_3', 'radar_4', 'radar_5', 'radar_6', 'radar_7']])166        167with tab2:168 169    # Function to load the bikelane models170        171    @st.cache_data()172    def get_bikelane_mag_model(project=project):173        mr = project.get_model_registry()174        bikelane_mag_model = mr.get_model("bikelane_mag_hist_model", version = 2)175        bikelane_mag_model_dir = bikelane_mag_model.download()176        return joblib.load(bikelane_mag_model_dir + "/bikelane_mag_hist_model.pkl")177 178    # Retrieving model179    bikelane_mag_hist_model = get_bikelane_mag_model()180 181    @st.cache_data()182    def get_bikelane_rad_model(project=project):183        mr = project.get_model_registry()184        bikelane_rad_model = mr.get_model("bikelane_rad_hist_model", version = 2)185        bikelane_rad_model_dir = bikelane_rad_model.download()186        return joblib.load(bikelane_rad_model_dir + "/bikelane_rad_hist_model.pkl")187 188    # Retrieving model189    bikelane_rad_hist_model = get_bikelane_rad_model()190    191    # Loading the feature group with latest data for bikelane192    new_bikelane_fg = fs.get_feature_group(name = 'new_bikelane_fg', version = 1)193 194    # Function to loading the feature group with latest data for bikelane as a dataset195    @st.cache_data()196    def retrieve_bikelane(feature_group=new_bikelane_fg):197        new_bikelane_fg = feature_group.select_all()198        df_bikelane_new = new_bikelane_fg.read(read_options={"use_hive": True})           199        return df_bikelane_new200 201    # Retrieving bikelane data202    bikelane_new = retrieve_bikelane()203 204    col1, col2 = st.columns(2)205 206    with col1:    207        st.subheader("Magnetic field prediction")208        # Making the predictions and getting the latest data for magnetic field data209        bikelane_mag_prediction_data = bikelane_new[['time', 'x', 'y', 'z', 'temperature', 'et0_fao_evapotranspiration']]                       210        bikelane_mag_prediction_data['et0_fao_evapotranspiration'] = bikelane_mag_prediction_data['et0_fao_evapotranspiration'].apply(fill_nan_with_zero)211        bikelane_mag_most_recent_prediction = bikelane_mag_prediction_data[['x', 'y', 'z', 'temperature', 'et0_fao_evapotranspiration']]212        bikelane_mag_most_recent_prediction = bikelane_mag_hist_model.predict(bikelane_mag_most_recent_prediction)213        bikelane_mag_prediction_data['Status'] = bikelane_mag_most_recent_prediction214        bikelane_mag_prediction_data['Status'].replace(['detection', 'no_detection'], ['Vehicle detected', 'No vehicle detected'], inplace=True)215        bikelane_mag_prediction_data = bikelane_mag_prediction_data.rename(columns={'time': 'Time'})216        bikelane_mag_prediction_data = bikelane_mag_prediction_data.set_index(['Time'])217        st.dataframe(bikelane_mag_prediction_data[['Status']].tail(3))218 219    with col2:  220        st.subheader("Radar prediction")221        # Making the predictions and getting the latest data for radar data222        bikelane_rad_prediction_data = bikelane_new[['time', 'radar_0', 'radar_1', 'radar_2', 'radar_3', 'radar_4', 'radar_5', 'radar_6', 'radar_7', 'temperature', 'et0_fao_evapotranspiration']]                       223        bikelane_rad_prediction_data['et0_fao_evapotranspiration'] = bikelane_rad_prediction_data['et0_fao_evapotranspiration'].apply(fill_nan_with_zero)224        bikelane_rad_most_recent_prediction = bikelane_rad_prediction_data[['radar_0', 'radar_1', 'radar_2', 'radar_3', 'radar_4', 'radar_5', 'radar_6', 'radar_7', 'temperature', 'et0_fao_evapotranspiration']]225        bikelane_rad_most_recent_prediction = bikelane_rad_hist_model.predict(bikelane_rad_most_recent_prediction)226        bikelane_rad_prediction_data['Status'] = bikelane_rad_most_recent_prediction227        bikelane_rad_prediction_data['Status'].replace(['detection', 'no_detection'], ['Vehicle detected', 'No vehicle detected'], inplace=True)228        bikelane_rad_prediction_data = bikelane_rad_prediction_data.rename(columns={'time': 'Time'})229        bikelane_rad_prediction_data = bikelane_rad_prediction_data.set_index(['Time'])230        st.dataframe(bikelane_rad_prediction_data[['Status']].tail(3))231 232    # Update button233    if st.button("Update Bikelane"):234        # Clear cached data235        st.cache_data.clear()236        # Immediately rerun the application237        st.experimental_rerun()238 239    # Creating plot for latest magnetic field data for bikelane240    # Filtering bikelane_new for specific time241    bikelane_mag_specific_time_range = bikelane_new[(bikelane_new['time'] >= yesterday) & (bikelane_new['time'] <= now)]242 243    # Defining magnetic field data to normalise244    bikelane_mag_to_normalize = bikelane_mag_specific_time_range[['x', 'y', 'z']]245 246    # Applying StandardScaler247    normalized_bikelane_mag = scaler.fit_transform(bikelane_mag_to_normalize)    248 249    # Adding normalized data back to the DataFrame250    bikelane_mag_specific_time_range[['x', 'y', 'z']] = normalized_bikelane_mag251 252    # Streamlit plotting253    st.subheader('Normalized values of magnetic field data from yesterday to today')254 255    # Converting the time column to string for better readability in Streamlit plots256    bikelane_mag_specific_time_range['time'] = bikelane_mag_specific_time_range['time'].astype(str)257 258    # Plotting using Streamlit's line chart259    st.line_chart(bikelane_mag_specific_time_range.set_index('time')[['x', 'y', 'z']])260 261    262    # Creating plot for latest radar data for bikelane263    # Filtering bikelane_new for specific time264    bikelane_rad_specific_time_range = bikelane_new[(bikelane_new['time'] >= yesterday) & (bikelane_new['time'] <= now)]265 266    # Defining magnetic field data to normalise267    bikelane_rad_to_normalize = bikelane_rad_specific_time_range[['radar_0', 'radar_1', 'radar_2', 'radar_3', 'radar_4', 'radar_5', 'radar_6', 'radar_7']]268 269    # Applying StandardScaler270    normalized_bikelane_rad = scaler.fit_transform(bikelane_rad_to_normalize)    271 272    # Adding normalized data back to the DataFrame273    bikelane_rad_specific_time_range[['radar_0', 'radar_1', 'radar_2', 'radar_3', 'radar_4', 'radar_5', 'radar_6', 'radar_7']] = normalized_bikelane_rad274 275    # Streamlit plotting276    st.subheader('Normalized values of radar data from yesterday to today')277 278    # Converting the time column to string for better readability in Streamlit plots279    bikelane_rad_specific_time_range['time'] = bikelane_rad_specific_time_range['time'].astype(str)280 281    # Plotting using Streamlit's line chart282    st.line_chart(bikelane_rad_specific_time_range.set_index('time')[['radar_0', 'radar_1', 'radar_2', 'radar_3', 'radar_4', 'radar_5', 'radar_6', 'radar_7']])