Spaces:
Sleeping
Sleeping
import numpy as np | |
import pandas as pd | |
import matplotlib.pyplot as plt | |
import scipy as sp | |
import sklearn as sk | |
import plotly.express as px | |
from plotly.subplots import make_subplots | |
import plotly.graph_objects as go | |
import streamlit as st | |
from src.data_ingestion import remove_previous_view, merge_volumes | |
def clean_data(df): | |
df["date"] = pd.to_datetime(df["date"], format="%Y-%m-%d") | |
df["day"] = df["date"].dt.day_name() | |
df["hour"] = df["time"].str[:2] + ":00" | |
df.drop(columns=["motorcycle"], axis=1, inplace=True) | |
df["vehicle"] = df["car"] + df["large_vehicle"] | |
return df | |
class HeatMap: | |
def __init__(self, counts_df): | |
# counts_df = counts_df[counts_df['view'] == view] | |
self.df = clean_data(counts_df) | |
new = ( | |
self.df.groupby(["hour", "day"]) | |
.mean(numeric_only = True) | |
.drop(columns=["car", "large_vehicle"]) | |
.reset_index() | |
) | |
table = pd.pivot_table( | |
new, values="vehicle", index=["day"], columns=["hour"] | |
).reset_index() | |
self.table = table.reindex([1, 5, 6, 4, 0, 2, 3]).round(1) | |
def vehicle_count_bar(self): | |
new_df = self.df.groupby(["day"]).mean(numeric_only = True).round(1).reset_index() | |
new_df = new_df.reindex([1, 5, 6, 4, 0, 2, 3]) | |
veh_count_fig = px.bar( | |
new_df, | |
x="day", | |
y="vehicle", | |
color="day", | |
text_auto=True, | |
labels={"day": "Day of the Week", "vehicle": "Vehicle Count"}, | |
) | |
veh_count_fig.update_layout(showlegend=False) | |
return veh_count_fig | |
def heatmap(self): | |
new_table = self.table.iloc[:, 1:].to_numpy() | |
hm_fig = px.imshow( | |
new_table, | |
labels=dict( | |
x="Hour of the Day", y="Day of the Week", color="Traffic" | |
), | |
x=[ | |
"00", "01", "02", "03", | |
"04", "05", "06", "07", | |
"08", "09", "10", "11", | |
"12", "13", "14", "15", | |
"16", | |
"17", | |
"18", | |
"19", | |
"20", | |
"21", | |
"22", | |
"23", | |
], | |
y=[ | |
"Mon", | |
"Tue", | |
"Wed", | |
"Thu", | |
"Fri", | |
"Sat", | |
"Sun", | |
], | |
# text_auto=True, | |
) | |
hm_fig.update_xaxes(side="top", tickmode = 'linear', type = 'category') | |
hm_fig.update_layout(yaxis_visible=True, | |
yaxis_showticklabels=True, | |
yaxis_title = '' | |
) | |
return hm_fig | |
def update_hour_bar_chart(self, hour="08:00"): | |
fig_hours = px.bar( | |
self.table, | |
x="day", | |
y=str(hour), | |
color="day", | |
# text_auto=True, | |
labels={"day": "Day of the Week"}, | |
) | |
fig_hours.update_layout(showlegend=False) | |
fig_hours.update_layout(yaxis_visible=False, | |
yaxis_showticklabels=False, | |
yaxis_title = False | |
) | |
fig_hours.update_layout(xaxis_visible=True, | |
xaxis_showticklabels=True, | |
xaxis_title = '' | |
) | |
return fig_hours | |
def update_day_bar_chart(self, day="Saturday"): | |
t = self.table.T | |
t.drop("day", inplace=True) | |
t.columns = [ | |
"Monday", | |
"Tuesday", | |
"Wednesday", | |
"Thursday", | |
"Friday", | |
"Saturday", | |
"Sunday", | |
] | |
t = t.reset_index() | |
t['hour'] = t['hour'].str[:2] | |
fig_days = px.bar( | |
t, | |
x="hour", | |
y=str(day), | |
color=str(day), | |
# text_auto=True, | |
labels={"hour": "Count of Each Hour"}, | |
) | |
fig_days.update_layout(showlegend=False) | |
fig_days.update_layout(yaxis_visible=False, | |
yaxis_showticklabels=False, | |
yaxis_title = False | |
) | |
fig_days.update_layout(xaxis_visible=True, | |
xaxis_showticklabels=True, | |
xaxis_title = '', | |
) | |
fig_days.update_xaxes(tickangle=0, tickmode = 'linear', type = 'category', categoryorder='category ascending') | |
return fig_days | |