File size: 2,938 Bytes
f00a83b
 
e1c88d9
8680283
f1a0cad
 
f00a83b
f1a0cad
 
 
 
 
8680283
 
 
 
 
 
 
 
 
f00a83b
f1a0cad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
002d19a
f00a83b
 
 
 
 
 
8680283
 
f1a0cad
 
8680283
 
 
 
 
 
 
 
f1a0cad
002d19a
 
 
f00a83b
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import streamlit as st
import numpy as np
import pickle
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

def load_data():
    # Replace this with your actual data loading logic
    X_train = np.random.rand(100, 5)
    y_train = np.random.rand(100)
    return X_train, y_train

def load_model_artifacts():
    with open('slump_regressor.pkl', 'rb') as f:
        regressor = pickle.load(f)
    with open('scaler.pkl', 'rb') as f:
        scaler = pickle.load(f)
    with open('pca.pkl', 'rb') as f:
        pca = pickle.load(f)
    return regressor, scaler, pca

def save_model_artifacts(regressor, scaler, pca):
    with open('slump_regressor.pkl', 'wb') as f:
        pickle.dump(regressor, f, protocol=pickle.HIGHEST_PROTOCOL)
    with open('scaler.pkl', 'wb') as f:
        pickle.dump(scaler, f, protocol=pickle.HIGHEST_PROTOCOL)
    with open('pca.pkl', 'wb') as f:
        pickle.dump(pca, f, protocol=pickle.HIGHEST_PROTOCOL)

def predict_slump_app(regressor, scaler, pca):
    st.subheader("Enter Concrete Mix Parameters")
    cement = st.number_input("Cement (kg/m³)", min_value=0.0, step=1.0)
    slag = st.number_input("Slag (kg/m³)", min_value=0.0, step=1.0)
    flyash = st.number_input("Fly Ash (kg/m³)", min_value=0.0, step=1.0)
    water = st.number_input("Water (kg/m³)", min_value=0.0, step=1.0)
    superplasticizer = st.number_input("Superplasticizer (kg/m³)", min_value=0.0, step=0.1)
    coarseaggregate = st.number_input("Coarse Aggregate (kg/m³)", min_value=0.0, step=1.0)
    fineaggregate = st.number_input("Fine Aggregate (kg/m³)", min_value=0.0, step=1.0)

    if st.button("Predict Slump Strength"):
        X_new = np.array([cement, slag, flyash, water, superplasticizer, coarseaggregate, fineaggregate])
        X_new = scaler.transform([X_new])
        X_new = pca.transform(X_new)
        slump_prediction = regressor.predict(X_new)[0]
        return slump_prediction
    else:
        return None

def main():
    st.set_page_config(page_title="Concrete Slump Strength Prediction")
    st.title("Concrete Slump Strength Prediction")
    st.write("Enter the concrete mix parameters to predict the slump.")

    try:
        regressor, scaler, pca = load_model_artifacts()
    except (FileNotFoundError, UnpicklingError):
        X_train, y_train = load_data()
        regressor = LinearRegression()
        regressor.fit(X_train, y_train)
        scaler = StandardScaler()
        scaler.fit(X_train)
        pca = PCA(n_components=4)
        pca.fit(scaler.transform(X_train))
        save_model_artifacts(regressor, scaler, pca)

    slump_prediction = predict_slump_app(regressor, scaler, pca)
    if slump_prediction is not None:
        st.subheader("Predicted Slump Strength")
        st.markdown(f"The predicted slump strength is **{slump_prediction:.2f} MPa**.")

if __name__ == '__main__':
    main()