tbaig1605's picture
Update app.py
e607e8c verified
import streamlit as st
import pandas as pd
@st.cache_data
def load_aisc_data():
df = pd.read_csv("AISC_Shape_Database.csv")
df.columns = df.columns.str.strip() # clean column headers
# Normalize section names to uppercase and strip spaces
df['AISC_Manual_Label'] = df['AISC_Manual_Label'].str.strip().str.upper()
return df[['AISC_Manual_Label', 'W']]
def main():
st.title("Steel Weight Estimator Using AISC Data")
aisc_df = load_aisc_data()
st.write("Sample AISC sections:", aisc_df['AISC_Manual_Label'].head(10).tolist())
price_per_kg = st.number_input("Price per kg (e.g. 150)", min_value=0.0, format="%.2f")
user_input = st.text_area(
"Enter Section and Length separated by comma (one per line)\nExample:\nW44X408, 5.5\nHSS11.75X.250, 3"
)
if st.button("Calculate Weight and Price"):
if not user_input.strip():
st.error("Please enter section and length data.")
return
if price_per_kg <= 0:
st.error("Please enter a valid price per kg.")
return
lines = user_input.strip().split('\n')
results = []
for line in lines:
try:
section, length_str = line.split(',')
section = section.strip().upper() # Normalize user input
length_m = float(length_str.strip())
st.write(f"Checking section: '{section}'") # debug output
row = aisc_df[aisc_df['AISC_Manual_Label'] == section]
if row.empty:
results.append((section, length_m, None, None))
continue
weight_lb_per_ft = float(row['W'].values[0])
length_ft = length_m * 3.28084
total_weight_lb = weight_lb_per_ft * length_ft
total_weight_kg = total_weight_lb * 0.453592
total_price = total_weight_kg * price_per_kg
results.append((section, length_m, total_weight_kg, total_price))
except Exception as e:
results.append((line, None, None, None))
st.write("### Results:")
st.write("| Section | Length (m) | Weight (kg) | Price |")
st.write("|---------|------------|-------------|-------|")
for res in results:
section, length_m, weight_kg, price = res
if weight_kg is None:
st.write(f"| {section} | {length_m if length_m else '-'} | Not found | - |")
else:
st.write(f"| {section} | {length_m:.2f} | {weight_kg:.2f} | {price:.2f} |")
if __name__ == "__main__":
main()