import streamlit as st import pandas as pd import altair as alt # Title and Introduction st.title("Building Inventory Analysis") st.markdown(""" This application provides insights into the building inventory dataset through two visualizations: 1. **Building Count by County**: Displays the number of buildings in each county. 2. **Year-wise Construction of Buildings**: Shows the count of buildings constructed each year. Each visualization is accompanied by a brief explanation, including design choices and potential improvements. """) # Load Dataset @st.cache_data def load_data(): url = "https://raw.githubusercontent.com/UIUC-iSchool-DataViz/is445_data/main/building_inventory.csv" return pd.read_csv(url) data = load_data() # Data Preprocessing # Ensure 'Year Constructed' is numeric data['Year Constructed'] = pd.to_numeric(data['Year Constructed'], errors='coerce') # Visualization 1: Building Count by County st.header("1. Building Count by County") county_count = data['County'].value_counts().reset_index() county_count.columns = ['County', 'Building Count'] county_chart = alt.Chart(county_count).mark_bar(color='teal').encode( alt.X('Building Count:Q', title='Number of Buildings'), alt.Y('County:N', sort='-x', title='County') ).properties( width=700, height=400, title='Number of Buildings per County' ) st.altair_chart(county_chart, use_container_width=True) st.markdown(""" **Explanation**: This bar chart illustrates the number of buildings in each county, highlighting areas with higher concentrations of government buildings. - **Design Choices**: - A horizontal bar chart is used to accommodate long county names and facilitate easy comparison. - Counties are sorted in descending order based on building count to emphasize those with the most buildings. - The teal color provides a calm and professional appearance. - **Potential Improvements**: - Create grouped bar charts to compare building counts by county across different years. - Add a map visualization to provide spatial context to the data. """) # Visualization 2: Year-wise Construction of Buildings st.header("2. Year-wise Construction of Buildings") # Filter out rows where 'Year Constructed' is 0 or NaN data_filtered = data[(data['Year Constructed'] > 0) & (~data['Year Constructed'].isna())] # Group by 'Year Constructed' and count the number of buildings yearly_construction = data_filtered['Year Constructed'].value_counts().reset_index() yearly_construction.columns = ['Year Constructed', 'Building Count'] yearly_construction = yearly_construction.sort_values('Year Constructed') year_chart = alt.Chart(yearly_construction).mark_line(point=True, color='orange').encode( alt.X('Year Constructed:Q', title='Year Constructed'), alt.Y('Building Count:Q', title='Number of Buildings') ).properties( width=700, height=400, title='Number of Buildings Constructed Over Time' ) st.altair_chart(year_chart, use_container_width=True) st.markdown(""" **Explanation**: This line chart displays the number of buildings constructed each year, revealing trends and periods of increased construction activity. - **Design Choices**: - A line chart effectively shows changes over time and highlights trends. - Data points are marked to emphasize individual years. - The orange color draws attention to the trend line. - **Potential Improvements**: - Overlay a trendline to highlight long-term construction patterns while reducing the effect of year-to-year fluctuations. - Allow users to filter the data by building type or agency to explore specific trends. """) # Footer st.markdown(""" --- **Data Source**: [Building Inventory Dataset](https://raw.githubusercontent.com/UIUC-iSchool-DataViz/is445_data/main/building_inventory.csv) **Author**: Maanas Agrawal """)