File size: 2,938 Bytes
848b00d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
74
75
76
77
78
79
80
81
82
83
import streamlit as st
import pandas as pd
import numpy as np
import pickle

# Load the pre-trained model
with open('abalone_model.pkl', 'rb') as file:
    model = pickle.load(file)

# Define the prediction function
def predict_age(sex, length, diameter, height, whole_weight, shucked_weight, viscera_weight, shell_weight):
    shell_volume = length * diameter * height
    meat_ratio = whole_weight / shell_weight
    bmi = whole_weight / (length ** 2)
    shell_surface_area = 2 * (length * diameter + length * height + diameter * height)
    volume_to_weight_ratio = shell_volume / whole_weight
    shell_weight_to_length_ratio = shell_weight / length
    meat_weight_to_lenth_ratio = whole_weight / length
    features = [[
        sex,
        length,
        diameter,
        height,
        whole_weight,
        shucked_weight,
        viscera_weight,
        shell_weight,
        shell_volume,
        meat_ratio,
        bmi,
        shell_surface_area,
        volume_to_weight_ratio,
        shell_weight_to_length_ratio,
        meat_weight_to_lenth_ratio
    ]]
    columns = [
        'Sex',
        'Length',
        'Diameter',
        'Height',
        'Whole_weight',
        'Shucked_weight',
        'Viscera_weight',
        'Shell_weight',
        'Shell_Volume',
        'Meat_Ratio',
        'BMI',
        'Shell_Surface_Area',
        'Volume_to Weigh_Ratio',
        'Shell_Weight_to Length_Ratio',
        'Mea_Weight_to_Length Ratio'
    ]
    features_df = pd.DataFrame(data=features, columns=columns)
    prediction = model.predict(features_df)
    age = prediction[0] + 1.5
    return age

# Streamlit app
st.title('Abalone Age Predictor')

st.write("Enter the physical measurements of the abalone to predict its age.")

# Input fields
sex = st.selectbox('Sex', ['M', 'F', 'I'])
length = st.number_input('Length (mm)', min_value=0.0, value=0.0)
diameter = st.number_input('Diameter (mm)', min_value=0.0, value=0.0)
height = st.number_input('Height (mm)', min_value=0.0, value=0.0)
whole_weight = st.number_input('Whole Weight (grams)', min_value=0.0, value=0.0)
shucked_weight = st.number_input('Shucked Weight (grams)', min_value=0.0, value=0.0)
viscera_weight = st.number_input('Viscera Weight (grams)', min_value=0.0, value=0.0)
shell_weight = st.number_input('Shell Weight (grams)', min_value=0.0, value=0.0)

# Predict button
if st.button('Predict Age'):
    try:
        # Check for valid input values
        if length <= 0 or diameter <= 0 or height <= 0 or whole_weight <= 0 or shucked_weight <= 0 or viscera_weight <= 0 or shell_weight <= 0:
            st.error("All input values must be greater than zero.")
        else:
            age = predict_age(sex, length, diameter, height, whole_weight, shucked_weight, viscera_weight, shell_weight)
            st.write(f'The predicted age of the abalone is: {age:.2f} years')
    except Exception as e:
        st.error(f"An error occurred: {e}")