Shahabmoin's picture
Update app.py
afc3851 verified
raw
history blame
2.97 kB
import os
import pandas as pd
import numpy as np
import streamlit as st
from groq import Groq
GROQ_API_KEY = "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"
# Initialize Groq API client
client = Groq(api_key=GROQ_API_KEY)
# Function to analyze energy usage
def analyze_energy_usage(data, household_id=None):
if household_id:
# Filter data for a specific household
household_data = data[data["Household ID"] == household_id]
else:
household_data = data
# Check if the filtered data is empty
if household_data.empty:
return "No data available for the specified Household ID.", None
# Aggregate data
total_usage = household_data["Energy Usage (kWh)"].sum()
avg_cost = household_data["Cost"].mean()
peak_time_period = (
household_data.groupby("Time Period")["Energy Usage (kWh)"]
.sum()
.idxmax()
)
# Generate a summary report
report_summary = f"""
Total Energy Usage: {total_usage} kWh
Average Cost: ${avg_cost:.2f}
Peak Usage Time Period: {peak_time_period}
"""
return report_summary, household_data
# Function to generate recommendations using Groq's API
def generate_recommendations(context):
try:
response = client.chat.completions.create(
messages=[
{
"role": "user",
"content": f"Based on the following data:\n{context}\nProvide energy-saving recommendations and insights."
}
],
model="llama3-8b-8192",
stream=False,
)
return response.choices[0].message.content
except Exception as e:
return f"An error occurred: {e}"
# Streamlit App
st.title("Energy Usage Analysis Report Generator")
# Upload Dataset
uploaded_file = st.file_uploader("Upload your energy usage dataset (CSV)", type="csv")
if uploaded_file:
# Load dataset
data = pd.read_csv(uploaded_file)
st.write("Dataset Preview:", data.head())
# User Input
household_id = st.text_input("Enter Household ID for specific analysis (optional)")
# Analyze Data
if st.button("Analyze Energy Usage"):
with st.spinner("Analyzing..."):
report_summary, filtered_data = analyze_energy_usage(data, household_id)
if filtered_data is None:
st.warning(report_summary) # Display message for no data
else:
st.subheader("Energy Usage Summary")
st.text(report_summary)
# Generate recommendations
st.subheader("Recommendations")
context = filtered_data.to_string(index=False)
recommendations = generate_recommendations(context)
st.text(recommendations)
# Footer
st.sidebar.title("About")
st.sidebar.info(
"""
This app generates energy usage reports and recommendations based on uploaded data.
Built with Streamlit and powered by Groq's language model.
"""
)