mherlie's picture
installed requirements
da7237d
import streamlit as st
import pandas as pd
import numpy as np
import plotly.express as px
from sklearn.ensemble import IsolationForest
from sklearn.preprocessing import StandardScaler
# Load dataset directly
st.set_page_config(page_title="Energy Consumption Anomaly Detection", layout="wide")
st.title("⚑ Energy Consumption Anomaly Detection Dashboard")
# Load dataset
file_path = "./World Energy Consumption.csv" # Ensure the file is in the correct directory
df = pd.read_csv(file_path)
# Sidebar for anomaly detection settings
st.sidebar.header("Settings")
contamination = st.sidebar.slider("Select Contamination (Anomaly Percentage)", 0.01, 0.1, 0.02, 0.01)
# Data preprocessing
numerical_cols = df.select_dtypes(include=[np.number]).columns.tolist()
df = df.dropna(subset=numerical_cols)
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df[numerical_cols])
# Anomaly detection model
model = IsolationForest(contamination=contamination, random_state=42)
df["Anomaly"] = model.fit_predict(scaled_data)
df["Anomaly"] = df["Anomaly"].map({1: "Normal", -1: "Anomaly"})
# Tabs for navigation
tab1, tab2, tab3 = st.tabs(["πŸ“Š Dataset Overview", "πŸ” Anomaly Detection", "πŸ“ˆ Visualization"])
# Tab 1: Dataset Overview
with tab1:
st.subheader("Dataset Overview")
st.write("This dataset contains information on global energy consumption trends.")
st.dataframe(df.head())
st.write(f"Total Records: {df.shape[0]}")
# Tab 2: Anomaly Detection
with tab2:
st.subheader("Anomaly Detection Results")
anomalies = df[df["Anomaly"] == "Anomaly"]
st.write(f"Total Anomalies Detected: {len(anomalies)}")
st.dataframe(anomalies)
# Tab 3: Visualization
with tab3:
st.subheader("Energy Consumption Anomaly Visualization")
feature_x = st.selectbox("Select X-axis Feature", numerical_cols, index=0)
feature_y = st.selectbox("Select Y-axis Feature", numerical_cols, index=1)
fig = px.scatter(df, x=feature_x, y=feature_y, color="Anomaly", title="Anomaly Detection in Energy Consumption",
color_discrete_map={"Normal": "blue", "Anomaly": "red"})
st.plotly_chart(fig, use_container_width=True)