# -*- coding: utf-8 -*- """ Created on Fri Mar 31 17:45:36 2023 @author: Gaspar Avit Ferrero """ import streamlit as st from htbuilder import HtmlElement, div, hr, a, p, styles from htbuilder.units import percent, px from catboost import CatBoostClassifier ############################### ## ------- FUNCTIONS ------- ## ############################### def link(link, text, **style): return a(_href=link, _target="_blank", style=styles(**style))(text) def layout(*args): style = """ """ style_div = styles( position="fixed", left=0, bottom=0, margin=px(0, 0, 0, 0), width=percent(100), color="black", text_align="center", height="auto", opacity=1 ) style_hr = styles( display="block", margin=px(8, 8, "auto", "auto"), border_style="inset", border_width=px(0) ) body = p() foot = div( style=style_div )( hr( style=style_hr ), body ) st.markdown(style, unsafe_allow_html=True) for arg in args: if isinstance(arg, str): body(arg) elif isinstance(arg, HtmlElement): body(arg) st.markdown(str(foot), unsafe_allow_html=True) def footer(): myargs = [ "Made with ❤️ by ", link("https://www.linkedin.com/in/gaspar-avit/", "Gaspar Avit"), ] layout(*myargs) def update_prediction(): """Callback to automatically update prediction if button has already been clicked""" if is_clicked: launch_prediction() def input_layout(): input_expander = st.expander('Input parameters', True) with input_expander: # Row 1 col_age, col_sex = st.columns(2) col_age = st.slider('Age', 18, 75, on_change=update_prediction()) col_sex = st.radio('Sex', ['Female', 'Male'], on_change=update_prediction()) st.write('div.row-widget.stRadio > div{flex-direction: row \ justify-content: center}', unsafe_allow_html=True) # Row 2 col_height, col_weight = st.columns(2) col_height = st.slider( 'Height', 140, 200, on_change=update_prediction()) col_weight = st.slider( 'Weight', 40, 140, on_change=update_prediction()) # Row 3 col_ap_hi, col_ap_lo = st.columns(2) col_ap_hi = st.slider( 'AP Hi', 90, 200, on_change=update_prediction()) col_ap_lo = st.slider( 'AP Lo', 50, 120, on_change=update_prediction()) ############################### ## --------- MAIN ---------- ## ############################### if __name__ == "__main__": # Initialize image variable poster = None ## --- Page config ------------ ## # Set page title st.title(""" Cardiovascular Disease predictor #### This app aims to give a scoring of how probable is that an individual \ would suffer from a cardiovascular disease given its physical \ characteristics #### Just enter your info and get a prediction. """) # Set page footer footer() # Load classification model model = CatBoostClassifier() # parameters not required. model.load_model('./train/model.cbm') # Define inputs input_layout()