SumbalFatima1122's picture
Update app.py
8c47d95 verified
import streamlit as st
import os
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
from groq import Groq
from io import BytesIO
client = Groq(
api_key=st.secrets["GROQ_API_KEY"]
)
# Function to upload the dataset
def upload_file():
uploaded_file = st.file_uploader("Upload your Excel dataset", type=["xlsx"])
if uploaded_file is not None:
return pd.read_excel(uploaded_file)
return None
# Function to construct the graph and visualize
def construct_graph(dataset):
G = nx.DiGraph()
# Add nodes and edges based on the dataset
for _, row in dataset.iterrows():
# Replace with your column names if necessary
G.add_edge(row['Vendor Name'], row['Meter Number'], weight=row['Consumption (HCF)'])
# Visualize the graph (water distribution network)
plt.figure(figsize=(12, 8))
pos = nx.spring_layout(G) # Layout for visualization
nx.draw(G, pos, with_labels=True, node_color='skyblue', node_size=1500, edge_color='gray')
# Render the graph as an image and return it
buf = BytesIO()
plt.savefig(buf, format="png")
buf.seek(0)
return buf
# Function to query Groq for optimization suggestions based on serial number
def query_groq(serial_number):
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": f"Optimize water distribution network for Serial Number {serial_number} to minimize consumption fluctuations."
}
],
model="llama3-8b-8192",
)
return chat_completion.choices[0].message.content
# Streamlit UI
st.set_page_config(page_title="Water Distribution Network Optimization", page_icon="💧")
# Title and description
st.title("💧 Intelligent Water Distribution Network Optimization")
st.write("Upload your water distribution dataset and optimize the network based on specific serial numbers.")
# Step 1: Upload file
dataset = upload_file()
if dataset is not None:
# Show uploaded dataset details
st.subheader("Dataset Preview:")
st.write(dataset.head())
# Check if there's a serial number column, add if missing
if 'Serial Number' not in dataset.columns:
dataset['Serial Number'] = range(1, len(dataset) + 1) # Adding Serial Number column
# Step 2: Select Serial Number for analysis
serial_number = st.number_input("Enter Serial Number for analysis", min_value=1, max_value=int(dataset['Serial Number'].max()), step=1)
if serial_number in dataset['Serial Number'].values:
# Filter the dataset for the selected serial number
filtered_data = dataset[dataset['Serial Number'] == serial_number]
st.write(f"Filtered data for Serial Number {serial_number}:", filtered_data)
# Step 3: Display the graph
st.subheader(f"Graph for Serial Number {serial_number}")
graph_image = construct_graph(filtered_data)
st.image(graph_image, caption=f"Water Distribution Network for Serial Number {serial_number}", use_column_width=True)
# Step 4: Query Groq for optimization
if st.button(f"Optimize for Serial Number {serial_number}"):
optimization_response = query_groq(serial_number)
st.subheader("Optimization Suggestions:")
st.write(optimization_response)
else:
st.info("Please upload a dataset to get started.")
# Footer
st.markdown("""
---
Developed by [Your Name].
For more information, visit our [website](https://example.com).
""")