File size: 3,010 Bytes
a99fb8d
 
 
 
12dd9a0
 
a99fb8d
b6150c8
 
 
a99fb8d
12dd9a0
a99fb8d
 
12dd9a0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a99fb8d
 
12dd9a0
a99fb8d
12dd9a0
 
 
 
a99fb8d
 
 
 
 
 
12dd9a0
 
 
a99fb8d
12dd9a0
a99fb8d
 
12dd9a0
 
a99fb8d
 
 
12dd9a0
 
 
a99fb8d
12dd9a0
 
a99fb8d
12dd9a0
a99fb8d
12dd9a0
 
 
 
 
a99fb8d
12dd9a0
 
 
6e4f158
12dd9a0
 
 
 
 
 
 
a99fb8d
 
12dd9a0
a99fb8d
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import os
import pandas as pd
import plotly.express as px
from groq import Groq
import gradio as gr


GROQ_API_KEY ="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"

client = Groq(api_key=GROQ_API_KEY)

# 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()