import streamlit as st import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import base64 import plotly.express as px from streamlit_option_menu import option_menu from numerize.numerize import numerize from streamlit_extras.metric_cards import style_metric_cards import time from pycaret.classification import load_model #importation des principaux modules st.set_option('deprecation.showPyplotGlobalUse', False) @st.cache_data def load_data(dataset): df = pd.read_csv(dataset) return df # fonction permettant de charger un dataset st.set_page_config(page_title="Cardio", layout="wide", page_icon="💗") # titre et icon de la page # image du sidebar ci-dessous st.markdown("

APPLICATION DE PREDICTION DES ARRETS CARDIAQUES

",unsafe_allow_html=True) # titre st.sidebar.image('https://media.tenor.com/PWenw46fhbAAAAAj/stethoscope-heart.gif',caption="") theme_plotly = None #image d'entĂȘte def prediction(): data = load_data("brain_stroke.csv") model = load_model("strokemodel") col1, col2, col3 = st.columns(3) col4,col5=st.columns(2) with col1: # Nous avons ci-dessous tous les champs qui permettrons Ă  l'utilisateur d'entrer des donnĂ©es pour faire des prĂ©dictions gender1 = st.selectbox('Selectionner le genre',data["gender"].unique()) with col2: age2 = st.text_input('Age') with col3: hyper3 = st.selectbox('Hypertendu?',["Oui","Non"]) with col1: heart4 = st.selectbox('heart_disease?',["Oui","Non"]) with col2: married5 = st.selectbox('ever_married?',["Oui","Non"]) with col3: work6 = st.selectbox('type de travail?',data["work_type"].unique()) with col4: place7 = st.selectbox('type de rĂ©sidence?',data["Residence_type"].unique()) with col5: gluco8 = st.text_input('Moyenne Glucose') with col4: bmi9 = st.text_input('Bmi') with col5: smoke10 = st.selectbox('fume?',data["smoking_status"].unique()) a = '' # creating a button for Prediction a =st.button('PrĂ©dire') #Boutton permettant d'afficher le resultat if smoke10 and bmi9 and gluco8 and age2: # le code s'execute en dessous de se bloque si tous les champs sont renseignĂ©s if a: hyperf = 0 if hyper3 == "oui": hyperf = 1 else: hyperf = 0 heartf = 0 if heart4 == "oui": heartf = 1 else: heartf = 0 marriedf = 0 if married5 == "oui": marriedf = 1 else: marriedf = 0 d = {'gender':gender1,'age':age2,'hypertension':hyperf,'heart_disease':heartf,'ever_married':marriedf,'work_type':work6,'Residence_type':place7,'avg_glucose_level':gluco8,'bmi':bmi9,'smoking_status':smoke10} csv = {'gender':gender1,'age':age2,'hypertension':hyperf,'heart_disease':heartf,'ever_married':marriedf,'work_type':work6,'Residence_type':place7,'avg_glucose_level':gluco8,'bmi':bmi9,'smoking_status':smoke10} features = pd.DataFrame(d,index=[0]) # la varaible d est transformĂ© en datafram et sera utile pour les prĂ©dictions # user_input = [float(x) for x in user_input] prediction = model.predict(features) # prediction msg = "" if prediction[0] == 1: msg = "Nous avons un risque de d'arrĂȘt cardiaque" else: msg = "Nous n'avons pas de risque d'arrĂȘt cardiaque" resp = f'{msg}' # afficher le resultat des prĂ©dictions csv['Stroke'] = prediction[0] #la variable csv sera utiliser ^pour exporter les donnĂ©es du processus de prĂ©diction st.success(resp) # une reponse est affichĂ© contenant le resultat de la prĂ©diction csv = pd.DataFrame(csv,index=[0]) # crĂ©ation du dataset csv.to_csv('./prediction_results.csv', index=False) st.write("Table:") st.write(csv) #visualisation des donnĂ©es et du resultat sur un tableau avec possibilitĂ© de tĂ©lĂ©charger le reultat # en csv pour une utilisation ultĂ©rieure # Create a download button else: if a: st.error("Some fields are empty") # se message s'affiche dans le cas ou tous les champs ne sont pas renseignĂ©s slider_labels = [ ("Size (cm)", "Size (cm)"), ] def Home(): df = load_data('brain_stroke.csv') # importation du dataset with st.expander("VISUALISATION DES DONNEES"): showData=st.multiselect('Filter: ',df.columns,default=["age","hypertension","ever_married","bmi"]) st.dataframe(df[showData],use_container_width=True) # visualisation des donnĂ©es #compute top analytics meanage = float(pd.Series(df['age']).mean()) meanbmi = float(pd.Series(df['bmi']).mean()) meanavg = float(pd.Series(df['avg_glucose_level']).mean()) # cacul des moyennes de age, bmi et avg-glucose level total1,total3,total4=st.columns(3,gap='large') # trois colonnes affichants les moyennes with total1: st.info('Age',icon="🧔") st.metric(label="Moyenne",value=f"{meanage:,.0f}") with total3: st.info('Bmi',icon="❀") st.metric(label="Moyenne",value=f"{meanbmi:,.0f}") with total4: st.info('Glucose',icon="🍬") st.metric(label="Moyenne",value=f"{meanavg:,.0f}") style_metric_cards(background_color="#6c5ce7", border_left_color="#e74c3c",border_color="#000000",box_shadow="#F71938") #variable distribution Histogram with st.expander("DISTRIBUTIONS PAR FREQUENCE"): df.hist(figsize=(16,8),color='#898784', zorder=2, rwidth=0.9,legend = ['Investment']) st.pyplot() st.video("https://videos.pexels.com/video-files/8460293/8460293-sd_640_360_24fps.mp4", format="video/mp4", start_time=0,autoplay = True, loop=True) st.write("Une crise cardiaque, Ă©galement appelĂ©e infarctus du myocarde, est une urgence mĂ©dicale grave qui survient lorsque l'apport de sang riche en oxygĂšne Ă  une partie du muscle cardiaque est soudainement bloquĂ©. Voici quelques informations clĂ©s sur les crises cardiaques Causes : La cause la plus frĂ©quente est l'obstruction d'une artĂšre coronaire par un caillot sanguin qui empĂȘche le sang d'irriguer correctement une partie du cƓur.SymptĂŽmes : Les principaux symptĂŽmes d'une crise cardiaque sont une douleur ou un inconfort dans la poitrine, pouvant s'Ă©tendre au bras, au cou ou Ă  la mĂąchoire, ainsi que des difficultĂ©s Ă  respirer, des sueurs froides et des nausĂ©es. GravitĂ© : Une crise cardiaque est une urgence mĂ©dicale potentiellement mortelle si elle n'est pas prise en charge rapidement. Elle peut entraĂźner des lĂ©sions irrĂ©versibles du muscle cardiaque. Traitement : Le traitement rapide par des mĂ©dicaments et/ou une intervention chirurgicale (angioplastie, pontage) est essentiel pour limiter les dommages au cƓur et prĂ©venir les complications. PrĂ©vention : Les facteurs de risque comme le tabagisme, l'hypertension, le diabĂšte ou l'obĂ©sitĂ© doivent ĂȘtre pris en charge pour prĂ©venir les crises cardiaques.") def visualisation(): graphs() data = load_data('brain_stroke.csv') # on upload le dataset st.write(data.head(5))# visualisation du dataset if st.checkbox('Summary'): st.write(data.describe().head()) # Analyse sommaire elif st.checkbox('Correlation'): plt.figure(figsize=(15,15)) # Matrice de corrĂ©lation st.write(sns.heatmap(data.drop(["gender","ever_married","work_type","Residence_type","smoking_status"],axis=1).corr(),annot=True)) st.pyplot() def sideBar(): with st.sidebar: selected=option_menu( menu_title="Main Menu", options=["Accueil","Visualisation","Predictions","Contribution"], icons=["house","eye","clipboard-data","people"], menu_icon="cast", default_index=0 ) if selected=="Accueil": #st.subheader(f"Page: {selected}") Home() if selected=="Visualisation": #st.subheader(f"Page: {selected}") visualisation() if selected == "Predictions": prediction() if selected == "Contribution": st.markdown("

YOUNDA NANDJOU LENZ

",unsafe_allow_html=True) st.image("https://media.istockphoto.com/id/1324905417/fr/photo/%C3%A9quipe-de-r%C3%A9flexion.jpg?b=1&s=612x612&w=0&k=20&c=eAhgTO-E0Ro1yAQ9IfNJsWpcoZYP1Pf3A_hwYhW2BLI=",width=900) st.balloons() def graphs(): df = load_data('brain_stroke.csv') investment_by_business_type=( df.groupby(by=["gender"]).count()[["avg_glucose_level"]] ) fig_investment=px.bar( investment_by_business_type, x="avg_glucose_level", y=investment_by_business_type.index, orientation="h", title="avg_glucose_level en fonction du genre", color_discrete_sequence=["#0083B8"]*len(investment_by_business_type), template="plotly_white", ) fig_investment.update_layout( plot_bgcolor="rgba(0,0,0,0)", font=dict(color="black"), yaxis=dict(showgrid=True, gridcolor='#cecdcd'), # Show y-axis grid and set its color paper_bgcolor='rgba(0, 0, 0, 0)', # Set paper background color to transparent xaxis=dict(showgrid=True, gridcolor='#cecdcd'), # Show x-axis grid and set its color ) #simple line graph investment by state investment_state=df.groupby(by=["work_type"]).count()[["age"]] fig_state=px.line( investment_state, x=investment_state.index, y="age", orientation="v", title=" Age en fonction du travail", color_discrete_sequence=["#0083b8"]*len(investment_state), template="plotly_white", ) fig_state.update_layout( xaxis=dict(tickmode="linear"), plot_bgcolor="rgba(0,0,0,0)", yaxis=(dict(showgrid=False)) ) left,right,center=st.columns(3) left.plotly_chart(fig_state,use_container_width=True) right.plotly_chart(fig_investment,use_container_width=True) with center: #pie chart fig = px.pie(df, values='age', names='smoking_status', title='Age && Smoking status') fig.update_layout(legend_title="Regions", legend_y=0.9) fig.update_traces(textinfo='percent+label', textposition='inside') st.plotly_chart(fig, use_container_width=True, theme=theme_plotly) # If the file was imported as a module, the code would not run. if __name__ == '__main__': sideBar()