saritha5's picture
Create app.py
8153380
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
from datetime import timedelta
from sklearn.model_selection import RandomizedSearchCV, GridSearchCV, train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler
import streamlit as st
st.title("Next Failure Prediction")
# Loading Dataset
df1 = pd.read_csv(r'Final_Next_failure_Dataset.csv')
# replace values in the Manufacturer column with company names
replace_dict1 = {1: 'ABC Company', 2: 'DEF Company', 3: 'GHI Company', 4: 'JKL Company', 5: 'XYZ Company'}
df1['Manufacturer'] = df1['Manufacturer'].replace(replace_dict1)
# replace values in the Last_Maintenance_Type column again
replace_dict2 = {1: 'Corrective', 2: 'Preventive'}
df1['Last_Maintenance_Type'] = df1['Last_Maintenance_Type'].replace(replace_dict2)
# replace values in the Prior_Maintenance column again
replace_dict3 = {1: 'Irregular', 2: 'Regular'}
df1['Prior_Maintenance'] = df1['Prior_Maintenance'].replace(replace_dict3)
# replace values in the Repair_Type column again
replace_dict4 = {1: 'Hardware', 2: 'Software'}
df1['Repair_Type'] = df1['Repair_Type'].replace(replace_dict4)
df = df1.copy()
# For Manufacturer
le_manu = LabelEncoder()
df['Manufacturer'] = le_manu.fit_transform(df['Manufacturer'])
# For Last_Maintenance_Type
le_last = LabelEncoder()
df['Last_Maintenance_Type'] = le_last.fit_transform(df['Last_Maintenance_Type'])
# For Prior_Maintenance
le_prior = LabelEncoder()
df['Prior_Maintenance'] = le_prior.fit_transform(df['Prior_Maintenance'])
# For Repair_Type
le_repair = LabelEncoder()
df['Repair_Type'] = le_repair.fit_transform(df['Repair_Type'])
#Splitting the data train ans test data
X = df.drop('Time_to_Failure_(hours)', axis = 1)
y = df['Time_to_Failure_(hours)']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state = 0)
# Train Random Forest Regression model
model = RandomForestRegressor(random_state = 0)
model.fit(X_train, y_train)
# Make predictions on train data
y_pred_train = model.predict(X_train)
# DATA from user
def user_report():
manufacturer = st.sidebar.selectbox("Manufacturer",
("JKL Company", "GHI Company","DEF Company","ABC Company","XYZ Company" ))
if manufacturer=='JKL Company':
manufacturer=3
elif manufacturer=="GHI Company":
manufacturer=2
elif manufacturer=="DEF Company":
manufacturer=1
elif manufacturer=="ABC Company":
manufacturer =0
else:
manufacturer=4
total_operating_hours = st.sidebar.slider('Total Operating Hours)', 1000,2500, 1500 )
Usage_Intensity = st.sidebar.slider("Usage_Intensity(hous/day)",1,10,4)
Last_Maintenance_Type = st.sidebar.selectbox("Last Maintainece Type",("Corrective","Preventive"))
if Last_Maintenance_Type =='Corrective':
Last_Maintenance_Type=0
else:
Last_Maintenance_Type=1
Prior_Maintenance = st.sidebar.selectbox("Prior Maintainece",("Regular","Irregular"))
if Prior_Maintenance =='Regular':
Prior_Maintenance=1
else:
Prior_Maintenance=0
Average_Temperature= st.sidebar.slider('Average Temperature', 20,40, 35 )
humidity = st.sidebar.slider('Humidity', 52,70, 55 )
Vibration_Level = st.sidebar.slider('Vibration Level', 2,4, 2 )
Pressure = st.sidebar.slider('Pressure', 28,32, 30 )
Power_Input_Voltage= st.sidebar.slider('Power Input Voltage (V)',105,120,115)
Repair_Type = st.sidebar.selectbox("Repair Type",("Hardware","Software"))
if Repair_Type =='Software':
Repair_Type=1
else:
Repair_Type=0
load_factor = st.sidebar.number_input('Enter the Load Factor (any number between 0 to 1 )',min_value=0.0,max_value=1.0,step=0.1)
engine_speed=st.sidebar.slider('Engine Speed',7000,8000,7800)
Oil_Temperature=st.sidebar.slider('Oil Temperature',170,185,172)
user_report_data = {
'Manufacturer': manufacturer,
'Total_Operating_Hours': total_operating_hours,
'Usage_Intensity_(hours/day)': Usage_Intensity ,
'Last_Maintenance_Type': Last_Maintenance_Type,
"Prior_Maintenance":Prior_Maintenance,
'Average_Temperature':Average_Temperature,
'Humidity': humidity,
'Vibration_Level': Vibration_Level,
'Pressure': Pressure,
'Power_Input_Voltage': Power_Input_Voltage,
'Repair_Type': Repair_Type ,
'Load_Factor': load_factor,
'Engine_Speed': engine_speed,
'Oil_Temperature':Oil_Temperature
}
report_data = pd.DataFrame(user_report_data, index=[0])
return report_data
#Customer Data
user_data = user_report()
st.subheader("Component Details")
st.write(user_data)
# define the prediction function
def prediction(user_data):
predicted_max_number_of_repairs = model.predict(user_data)
# return the predicted max number of repairs as output
return np.round(predicted_max_number_of_repairs[0])
# Function calling
y_pred = prediction(user_data)
st.write("Click here to see the Predictions")
if st.button("Predict"):
st.subheader(f"Next Failure is {y_pred} hours ")