Engineer786's picture
Update app.py
fcf1561 verified
import os
import pandas as pd
import plotly.express as px
from groq import Groq
import gradio as gr
api = os.environ.get('GroqApi')
client = Groq(api_key=api)
# Function to process the traffic dataset
def process_traffic_data(csv_file):
data = pd.read_csv(csv_file)
peak_hours = data.groupby("Time")["Total"].sum().idxmax()
worst_situation = data.groupby("Traffic Situation")["Total"].sum().idxmax()
vehicle_contribution = (
data[["CarCount", "BikeCount", "BusCount", "TruckCount"]]
.sum()
.apply(lambda x: round((x / data["Total"].sum()) * 100, 2))
)
summary = (
f"Peak traffic hour: {peak_hours}. Worst traffic situation: {worst_situation}.\n"
f"Vehicle Contribution to Traffic:\n"
f"- Cars: {vehicle_contribution['CarCount']}%\n"
f"- Bikes: {vehicle_contribution['BikeCount']}%\n"
f"- Buses: {vehicle_contribution['BusCount']}%\n"
f"- Trucks: {vehicle_contribution['TruckCount']}%\n"
)
return data, summary
# Function to generate suggestions using Groq API
def generate_suggestions(summary):
input_content = (
f"Here is the detailed traffic data summary:\n{summary}"
f"Suggest realistic traffic optimization strategies with supporting stats."
)
chat_completion = client.chat.completions.create(
messages=[{"role": "user", "content": input_content}],
model="llama3-8b-8192",
)
return chat_completion.choices[0].message.content
# Function to create traffic visualization
def create_visualization(data):
fig = px.bar(
data,
x="Day of the week",
y="Total",
color="Traffic Situation",
title="Total Traffic by Day and Traffic Situation",
labels={"Total": "Total Vehicles", "Day of the week": "Day"},
)
return fig.to_html()
# Gradio interface function
def analyze_traffic(file):
data, summary = process_traffic_data(file.name)
suggestions = generate_suggestions(summary)
visualization_html = create_visualization(data)
return summary, suggestions, visualization_html
# Gradio interface definition
with gr.Blocks() as demo:
gr.Markdown("# Traffic Optimization Application")
gr.Markdown(
"Upload a CSV file with traffic data to generate traffic flow optimization suggestions and visualize traffic patterns."
)
with gr.Row():
file_input = gr.File(label="Upload Traffic Data CSV")
analyze_button = gr.Button("Analyze Traffic Data")
with gr.Row():
summary_output = gr.Textbox(label="Traffic Data Summary", lines=8)
suggestions_output = gr.Textbox(label="Optimization Suggestions", lines=8)
visualization_output = gr.HTML(label="Traffic Visualization")
analyze_button.click(
analyze_traffic, inputs=file_input, outputs=[summary_output, suggestions_output, visualization_output]
)
# Launch Gradio app
if __name__ == "__main__":
demo.launch()