awacke1's picture
Update app.py
666122b
import streamlit as st
# Function to calculate calories burned during swimming based on swim style, now in pounds
def calories_swim(time_hr, weight_lb, style_mets):
return (time_hr * style_mets * 3.5 * weight_lb) / 10
# Function to calculate calories burned during pull-ups based on grip style
def calories_pullup(reps, weight, grip_style_factor):
return (reps * 5 * weight) / 150 * grip_style_factor
# Streamlit UI
st.title("Calories Burned Calculator πŸŠβ€β™‚οΈπŸ’ͺ")
st.sidebar.header("Input Parameters πŸ› οΈ")
# Swimming parameters
time_swim = st.sidebar.slider("Swimming Time (hours)", 0.0, 5.0, 2.0)
weight = st.sidebar.number_input("Your weight (lbs)", 100, 300, 175)
# Pull-Up parameters
reps = st.sidebar.slider("Number of Pull-Ups", 0, 500, 200)
# Choose Exercise Type
st.sidebar.subheader("Choose Exercise Type πŸ€Έβ€β™‚οΈ")
exercise_type = st.sidebar.selectbox(
"",
["Swim Jim πŸŠβ€β™‚οΈ", "Ring King πŸ‘‘", "Both Boost πŸš€"]
)
# Revised Swim Styles with METs to meet your requirement
swim_styles = {
"Treading Water 🌊": 6,
"Backstroke πŸŠβ€β™‚οΈ": 9,
"Breaststroke 🐸": 10,
"Freestyle Light πŸ¦‹": 11,
"Freestyle Vigorous πŸš€": 14.3,
"Butterfly πŸ¦‹": 14.3,
"Dog Paddle 🐢": 7
}
# Grip Styles with factors
grip_styles = {
"Standard 🌟": 1,
"Mixed Grip ✨": 1.1,
"Wide Grip 🌠": 1.2
}
st.sidebar.subheader("Choose Swim Style 🌊")
swim_style = st.sidebar.selectbox(
"",
list(swim_styles.keys())
)
st.sidebar.subheader("Choose Ring Style πŸͺ")
grip_style = st.sidebar.selectbox(
"",
list(grip_styles.keys())
)
# Calculation
calories_from_swimming = calories_swim(time_swim, weight, swim_styles[swim_style])
calories_from_pullups = calories_pullup(reps, weight, grip_styles[grip_style])
# Display Results
st.subheader(f"Calories Burned πŸ”₯")
if exercise_type == "Swim Jim πŸŠβ€β™‚οΈ":
st.write(f"Calories burned from swimming: {calories_from_swimming:.2f}")
elif exercise_type == "Ring King πŸ‘‘":
st.write(f"Calories burned from pull-ups: {calories_from_pullups:.2f}")
else:
total_calories = calories_from_swimming + calories_from_pullups
st.write(f"Total calories burned: {total_calories:.2f}")
st.subheader("Muscle Groups Worked 🦾")
if exercise_type == "Swim Jim πŸŠβ€β™‚οΈ":
st.write("Swimming works the back, shoulders, arms, and legs.")
elif exercise_type == "Ring King πŸ‘‘":
st.write("Pull-ups work the back, biceps, and forearms.")
else:
st.write("Doing both exercises works almost all major muscle groups!")
st.subheader(f"Swim Style: {swim_style} 🌊")
st.write(f"METS for chosen style: {swim_styles[swim_style]}")
st.subheader(f"Ring Style: {grip_style} πŸͺ")
st.write(f"Factor for chosen grip: {grip_styles[grip_style]}")
# BMR Calculator
import streamlit as st
import pandas as pd
import os
from datetime import datetime
# Constants
GRAVITATIONAL_FORCE = 9.8 # Earth's gravitational force in m/s^2
POUND_TO_KG = 0.453592 # Conversion factor from pounds to kilograms
INCH_TO_METER = 0.0254 # Conversion factor from inches to meters
AVERAGE_CALORIES_MALE = 2500 # Average daily calorie burn for males
AVERAGE_CALORIES_FEMALE = 2000 # Average daily calorie burn for females
# Convert pounds to kilograms
def pounds_to_kg(pounds):
return pounds * POUND_TO_KG
# Convert feet and inches to meters
def feet_inches_to_meters(feet, inches):
total_inches = feet * 12 + inches
return total_inches * INCH_TO_METER
# Calculate Basal Metabolic Rate
def calculate_bmr(gender):
return AVERAGE_CALORIES_MALE if gender == 'Male' else AVERAGE_CALORIES_FEMALE
# Calculate Calories Burned Lifting Weights
def calculate_calories_burned(mass_kg, height_diff, sets, reps):
total_mass_lifted = mass_kg * sets * reps
joules = total_mass_lifted * GRAVITATIONAL_FORCE * height_diff
return joules / 4184 # Convert joules to kilocalories
# Save to file
def save_data(gender, height, weight, calories):
filename = f"data_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"
df = pd.DataFrame({'Date': [datetime.now()], 'Gender': [gender], 'Height': [height], 'Weight Lifted (lbs)': [weight], 'Calories Burned': [calories]})
df.to_csv(filename, index=False)
return filename
# Load history
def load_history():
files = [f for f in os.listdir('.') if f.startswith('data_')]
return files
# UI
st.title('πŸ‹οΈ Personalized Calorie Counter for Weightlifting πŸ‹οΈ')
with st.form('input_form'):
gender = st.radio('Select your Gender:', ('Male', 'Female'))
feet = st.number_input('Height (feet):', min_value=0, value=5)
inches = st.number_input('Height (inches):', min_value=0, value=11)
weight = st.number_input('Enter the weight lifted (lbs):', min_value=0.0, value=30.0)
sets = st.number_input('Number of sets:', min_value=1, value=10)
reps = st.number_input('Repetitions per set:', min_value=1, value=10)
submitted = st.form_submit_button('Calculate')
if submitted:
height_meters = feet_inches_to_meters(feet, inches)
weight_kg = pounds_to_kg(weight)
bmr = calculate_bmr(gender)
calories_burned = calculate_calories_burned(weight_kg, height_meters, sets, reps)
save_file = save_data(gender, f'{feet}\'{inches}"', weight, calories_burned)
st.success(f'πŸ”₯ Estimated Daily Calorie Burn (BMR): {bmr} kcal/day')
st.success(f'πŸ”₯ Calories Burned in Session: {calories_burned:.4f} kcal')
st.sidebar.success(f'πŸ“ Saved as {save_file}')
# Display history
st.sidebar.header('πŸ“š History')
for file in load_history():
if st.sidebar.button(f'πŸ“… {file}', key=file):
df = pd.read_csv(file)
st.sidebar.write(df)