deepakaiplanet's picture
Update app.py
02309fd verified
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from prophet import Prophet
# Load dataset
@st.cache_data
def load_data(filename):
return pd.read_csv(filename)
# Main application
st.sidebar.title("AI-Powered Industrial Management")
page = st.sidebar.radio("Choose a page", ["Predictive Maintenance for Wind Turbines", "Intelligent Energy Management Systems"])
# Predictive Maintenance for Wind Turbines
if page == "Predictive Maintenance for Wind Turbines":
st.header("Predictive Maintenance for Wind Turbines")
# Load and display dataset
data = load_data('wind_turbine_data.csv')
st.write("### Dataset Preview:")
st.write(data.head())
# Dataset Meta Information
st.write("### Dataset Meta Information:")
st.write("""
- **Timestamp:** The time at which the data was recorded.
- **Turbine_ID:** Unique identifier for each wind turbine.
- **Wind_Speed (m/s):** The speed of the wind at the time of measurement.
- **Ambient_Temperature (°C):** The outside temperature where the turbine is located.
- **Power_Output (MW):** The power generated by the turbine at the time of measurement.
- **Blade_Vibration (mm/s):** The vibration level of the turbine blades, a critical indicator of potential mechanical issues.
- **Gearbox_Temperature (°C):** Temperature inside the turbine's gearbox.
- **Oil_Level (%):** The level of lubrication oil in the turbine.
- **Maintenance_History (0/1):** Whether the turbine underwent maintenance in the last 30 days (1) or not (0).
- **Component_Failure (0/1):** Whether a component failure occurred (1) or not. This is the target variable.
""")
# Data Exploration
st.write("### Data Exploration")
# Select Graph Type
graph_type = st.selectbox("Select a graph to visualize:",
["Wind Speed Distribution",
"Ambient Temperature vs. Power Output",
"Blade Vibration vs. Gearbox Temperature",
"Oil Level Distribution"])
# Plotting based on selection
if graph_type == "Wind Speed Distribution":
st.write("#### Wind Speed Distribution")
plt.figure(figsize=(10, 6))
plt.hist(data['Wind_Speed'], bins=20, color='skyblue', edgecolor='black')
plt.xlabel('Wind Speed (m/s)')
plt.ylabel('Frequency')
plt.title('Distribution of Wind Speed')
st.pyplot(plt)
st.write("This graph shows the distribution of wind speeds recorded in the dataset. "
"It helps in understanding the common wind speeds at which the turbines operate, "
"which can be crucial for assessing turbine performance and predicting failures.")
elif graph_type == "Ambient Temperature vs. Power Output":
st.write("#### Ambient Temperature vs. Power Output")
plt.figure(figsize=(10, 6))
plt.scatter(data['Ambient_Temperature'], data['Power_Output'], color='green', alpha=0.6)
plt.xlabel('Ambient Temperature (°C)')
plt.ylabel('Power Output (MW)')
plt.title('Ambient Temperature vs. Power Output')
st.pyplot(plt)
st.write("This scatter plot illustrates the relationship between ambient temperature and power output. "
"It shows how temperature variations can affect the power generated by the wind turbines, "
"which is important for understanding operational efficiency under different weather conditions.")
elif graph_type == "Blade Vibration vs. Gearbox Temperature":
st.write("#### Blade Vibration vs. Gearbox Temperature")
plt.figure(figsize=(10, 6))
plt.scatter(data['Blade_Vibration'], data['Gearbox_Temperature'], color='orange', alpha=0.6)
plt.xlabel('Blade Vibration (mm/s)')
plt.ylabel('Gearbox Temperature (°C)')
plt.title('Blade Vibration vs. Gearbox Temperature')
st.pyplot(plt)
st.write("This scatter plot shows the correlation between blade vibration and gearbox temperature. "
"High levels of blade vibration can indicate mechanical issues, and this plot helps in identifying "
"potential stress on the gearbox due to vibrations.")
elif graph_type == "Oil Level Distribution":
st.write("#### Oil Level Distribution")
plt.figure(figsize=(10, 6))
plt.hist(data['Oil_Level'], bins=20, color='purple', edgecolor='black')
plt.xlabel('Oil Level (%)')
plt.ylabel('Frequency')
plt.title('Distribution of Oil Level')
st.pyplot(plt)
st.write("This histogram displays the distribution of oil levels in the turbines. "
"Maintaining optimal oil levels is crucial for the smooth operation of turbine components. "
"This graph helps in understanding how often turbines operate with low or high oil levels, "
"which can impact their reliability and longevity.")
# Predictive Maintenance
st.write("### Predict Equipment Failure")
user_input = {
'Wind_Speed': st.number_input('Wind Speed (m/s)'),
'Ambient_Temperature': st.number_input('Ambient Temperature (°C)'),
'Power_Output': st.number_input('Power Output (MW)'),
'Blade_Vibration': st.number_input('Blade Vibration (mm/s)'),
'Gearbox_Temperature': st.number_input('Gearbox Temperature (°C)'),
'Oil_Level': st.number_input('Oil Level (%)'),
'Maintenance_History': st.selectbox('Maintenance History (0/1)', [0, 1])
}
input_df = pd.DataFrame([user_input])
# Load pre-trained model (assumed pre-trained, you should load it here)
model = RandomForestClassifier() # This is where you would load your trained model
model.fit(data.drop(columns=['Component_Failure', 'Timestamp', 'Turbine_ID']), data['Component_Failure']) # For demonstration only
prediction = model.predict(input_df)
st.write(f"Predicted Component Failure: {'Yes' if prediction[0] == 1 else 'No'}")
# Intelligent Energy Management Systems
elif page == "Intelligent Energy Management Systems":
st.header("Intelligent Energy Management Systems")
# Load the datasets
energy_df = load_data('energy_consumption.csv')
production_df = load_data('production_schedule.csv')
pricing_df = load_data('energy_pricing.csv')
# Function to display dataset metadata
def display_metadata(df, title):
st.subheader(f"{title} Metadata")
st.write(f"Number of records: {df.shape[0]}")
st.write(f"Number of columns: {df.shape[1]}")
st.write("Columns:")
for col in df.columns:
st.write(f"- **{col}**: {df[col].dtype}")
st.write("""
This app demonstrates AI-powered systems that can dynamically manage and allocate energy resources in industrial settings, optimizing energy consumption in real time.
""")
# Display dataset metadata information
st.write("### Dataset Metadata Information")
st.write("""
#### Energy Consumption Data:
This dataset records the energy consumption of different machines over time, along with associated parameters like temperature, humidity, and operational status.
""")
display_metadata(energy_df, "Energy Consumption")
st.write("""
#### Production Schedule Data:
This dataset contains the production schedules for different machines, including the start and end times of production, the type of product being produced, and the target output.
""")
display_metadata(production_df, "Production Schedule")
st.write("""
#### Energy Pricing Data:
This dataset provides the energy pricing information over time, including indicators for peak hours, which can influence energy consumption optimization strategies.
""")
display_metadata(pricing_df, "Energy Pricing")
# Visualization: Energy consumption over time for a selected machine
st.header("Energy Consumption Analysis by Machine")
selected_machine = st.selectbox("Select a Machine ID", energy_df['machine_id'].unique())
machine_energy_df = energy_df[energy_df['machine_id'] == selected_machine]
fig, ax = plt.subplots()
ax.plot(pd.to_datetime(machine_energy_df['timestamp']), machine_energy_df['energy_consumed_kWh'], label='Energy Consumption (kWh)', color='blue')
ax.set_xlabel('Timestamp')
ax.set_ylabel('Energy Consumed (kWh)')
ax.legend()
st.pyplot(fig)
st.write("""
This graph shows the energy consumption for the selected machine over time.
""")
# AI-Powered Forecasting
st.header("Energy Consumption Forecasting")
# Prepare the data for Prophet
forecast_data = machine_energy_df[['timestamp', 'energy_consumed_kWh']].rename(columns={'timestamp': 'ds', 'energy_consumed_kWh': 'y'})
# Initialize Prophet model
model = Prophet()
model.fit(forecast_data)
# Create future dataframe
future = model.make_future_dataframe(periods=48, freq='H') # Forecasting the next 48 hours
# Forecast
forecast = model.predict(future)
# Plot the forecast
st.subheader("Forecasting Results")
fig1 = model.plot(forecast)
st.pyplot(fig1)
fig2 = model.plot_components(forecast)
st.pyplot(fig2)
st.write("""
The above charts display the forecasted energy consumption for the selected machine over the next 48 hours, along with the trend and seasonality components.
""")