HFUsman's picture
Update app.py
8f99b8a verified
Raw
History Blame Contribute Delete
3.81 kB
import pandas as pd
import streamlit as st
import matplotlib.pyplot as plt
# Function to load and process the CSV data
def load_data(file):
try:
df = pd.read_csv(file)
# Automatically detect the datetime column or ask the user to specify it
timestamp_col = None
for col in df.columns:
if 'date' in col.lower() or 'time' in col.lower():
timestamp_col = col
break
if timestamp_col is None:
timestamp_col = st.selectbox("Select the column containing the timestamp:", df.columns.tolist())
if timestamp_col:
df['timestamp'] = pd.to_datetime(df[timestamp_col], errors='coerce') # Convert to datetime
if df['timestamp'].isnull().any():
st.error("There are invalid or missing date/time values in the selected column.")
return None, None
# Show available columns for traffic data selection
st.write(f"Available columns: {df.columns.tolist()}")
traffic_column = st.selectbox("Select the column containing traffic flow data:", df.columns.tolist())
return df, traffic_column
else:
st.error("No valid timestamp column found in the dataset.")
return None, None
except Exception as e:
st.error(f"Error loading file: {e}")
return None, None
# Function to generate peak traffic hour
def peak_traffic_hour(df, traffic_column):
df['hour'] = df['timestamp'].dt.hour # Extract hour from timestamp
traffic_by_hour = df.groupby('hour')[traffic_column].sum() # Sum the traffic flow per hour
peak_hour = traffic_by_hour.idxmax() # Find the hour with the maximum traffic
peak_traffic = traffic_by_hour.max() # Find the traffic flow for that peak hour
return peak_hour, peak_traffic
# Function to generate hourly traffic summary
def hourly_traffic_summary(df, traffic_column):
df['hour'] = df['timestamp'].dt.hour
df[traffic_column] = pd.to_numeric(df[traffic_column], errors='coerce') # Ensure numeric data
hourly_summary = df.groupby('hour')[traffic_column].sum().reset_index() # Aggregate by hour
return hourly_summary
# Initialize Streamlit app
def main():
st.title("Traffic Flow Analyzer")
# Upload CSV file
uploaded_file = st.file_uploader("Upload Traffic Data (CSV)", type=["csv"])
if uploaded_file is not None:
df, traffic_column = load_data(uploaded_file)
if df is not None and traffic_column is not None:
st.write("Data loaded successfully! Now, you can ask your questions.")
st.write(df.head()) # Display the first few rows of the dataset for user reference
# Ask the user what they want to know
user_question = st.text_input("Ask a question about the traffic data (e.g., 'What is the peak traffic hour?')")
if user_question:
user_question = user_question.lower()
if "peak traffic hour" in user_question:
peak_hour, peak_traffic = peak_traffic_hour(df, traffic_column)
st.write(f"The peak traffic hour is {peak_hour}:00 with a total traffic flow of {peak_traffic} vehicles.")
elif "hourly traffic summary" in user_question:
hourly_summary = hourly_traffic_summary(df, traffic_column)
st.write("Total traffic flow per hour:")
st.write(hourly_summary)
else:
st.write("Sorry, I couldn't understand your question. Please try asking something else.")
if __name__ == "__main__":
main()