Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -3,7 +3,6 @@ import folium
|
|
3 |
from folium.plugins import MarkerCluster, HeatMap
|
4 |
import pandas as pd
|
5 |
import plotly.express as px
|
6 |
-
from plotly.subplots import make_subplots
|
7 |
|
8 |
# Function to create the map
|
9 |
@st.cache_data
|
@@ -45,15 +44,20 @@ def create_map(df, selected_year, selected_severity=None):
|
|
45 |
return m
|
46 |
|
47 |
# Function to create a bar chart based on accident severity
|
48 |
-
def create_bar_chart(df, selected_year
|
49 |
filtered_df = df[df['Year'] == selected_year]
|
50 |
-
if selected_severity:
|
51 |
-
filtered_df = filtered_df[filtered_df['Injuryseverity'] == selected_severity]
|
52 |
-
|
53 |
severity_count = filtered_df['Injuryseverity'].value_counts().reset_index()
|
54 |
severity_count.columns = ['Injuryseverity', 'Count']
|
55 |
|
56 |
-
fig = px.bar(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
return fig
|
58 |
|
59 |
# Streamlit app
|
@@ -64,17 +68,29 @@ def app():
|
|
64 |
# Sidebar for selection
|
65 |
st.sidebar.header("Select Filters")
|
66 |
selected_year = st.sidebar.selectbox("Select Year", df['Year'].unique())
|
67 |
-
|
68 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
# Map visualization
|
70 |
st.subheader("Accidents Map")
|
|
|
71 |
map_obj = create_map(df, selected_year, selected_severity)
|
72 |
st.components.v1.html(map_obj._repr_html_(), height=600)
|
73 |
|
74 |
-
#
|
75 |
-
st.
|
76 |
-
bar_chart = create_bar_chart(df, selected_year, selected_severity)
|
77 |
-
st.plotly_chart(bar_chart)
|
78 |
|
79 |
# Run the Streamlit app
|
80 |
if __name__ == "__main__":
|
|
|
3 |
from folium.plugins import MarkerCluster, HeatMap
|
4 |
import pandas as pd
|
5 |
import plotly.express as px
|
|
|
6 |
|
7 |
# Function to create the map
|
8 |
@st.cache_data
|
|
|
44 |
return m
|
45 |
|
46 |
# Function to create a bar chart based on accident severity
|
47 |
+
def create_bar_chart(df, selected_year):
|
48 |
filtered_df = df[df['Year'] == selected_year]
|
|
|
|
|
|
|
49 |
severity_count = filtered_df['Injuryseverity'].value_counts().reset_index()
|
50 |
severity_count.columns = ['Injuryseverity', 'Count']
|
51 |
|
52 |
+
fig = px.bar(
|
53 |
+
severity_count,
|
54 |
+
x='Injuryseverity',
|
55 |
+
y='Count',
|
56 |
+
title="Accidents by Severity",
|
57 |
+
labels={'Injuryseverity': 'Severity', 'Count': 'Number of Accidents'}
|
58 |
+
)
|
59 |
+
fig.update_traces(marker_color='blue')
|
60 |
+
fig.update_layout(clickmode='event+select') # Enable interactivity
|
61 |
return fig
|
62 |
|
63 |
# Streamlit app
|
|
|
68 |
# Sidebar for selection
|
69 |
st.sidebar.header("Select Filters")
|
70 |
selected_year = st.sidebar.selectbox("Select Year", df['Year'].unique())
|
71 |
+
|
72 |
+
# Initialize session state for selected severity
|
73 |
+
if "selected_severity" not in st.session_state:
|
74 |
+
st.session_state["selected_severity"] = None
|
75 |
+
|
76 |
+
# Bar Chart visualization
|
77 |
+
st.subheader("Accidents by Severity")
|
78 |
+
bar_chart = create_bar_chart(df, selected_year)
|
79 |
+
selected_points = st.plotly_chart(bar_chart)
|
80 |
+
|
81 |
+
# Update severity based on bar chart selection
|
82 |
+
if selected_points:
|
83 |
+
selected_data = selected_points['points'][0]['x'] # Get the clicked bar's x value
|
84 |
+
st.session_state["selected_severity"] = selected_data
|
85 |
+
|
86 |
# Map visualization
|
87 |
st.subheader("Accidents Map")
|
88 |
+
selected_severity = st.session_state["selected_severity"]
|
89 |
map_obj = create_map(df, selected_year, selected_severity)
|
90 |
st.components.v1.html(map_obj._repr_html_(), height=600)
|
91 |
|
92 |
+
# Display current filter
|
93 |
+
st.sidebar.write(f"Selected Severity: {selected_severity if selected_severity else 'All'}")
|
|
|
|
|
94 |
|
95 |
# Run the Streamlit app
|
96 |
if __name__ == "__main__":
|