Streamlit : fonction multiselect

Bonjour ,

J’aimerais utiliser la fonction « st.multiselect() » à la place de « st.selectbox() » dans ce code sauf que ça ne marche pas et j’aimerais avoir de l’aide SVP.

if radio == « Statistiques Exploratoires »:

equipe_1 = st.selectbox("EQUIPE A DOMICILE", df['home_team'].unique())
equipe_2 = st.selectbox("EQUIPE A L'EXTERIEUR",df['away_team'].unique())

st.subheader("ATTAQUE")

with st.container():
    col1, col2 = st.columns(2)

    with col1:

        fig1 = px.histogram(df[df['home_team']==equipe_1], x='season', y='home_shots_on_target', histfunc='avg',
                            height=300,
                            title='Home Shots On Target')
        st.plotly_chart(fig1)

    with col2 :
        fig2 = px.histogram(df[df['away_team'] == equipe_2], x='season', y='away_shots_on_target', histfunc='avg',
                            height=300,
                            title='Away Shots On Target')
        st.plotly_chart(fig2)

Merci d’avance

Bonjour Iheb,
Pouvez vous nous donner plus de précisions sur ce qui ne marche pas ? Est ce simplement que le Streamlit renvoie une erreur (et donc ajouter le message d’erreur) ou est-ce que cela affiche bien des figures mais pas comme vous l’entendiez ?
J’ai repris et adapté votre code et il semble bien fonctionner :

import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
#Loading data 
df = pd.read_csv("results.csv")

st.sidebar.title("Sidebar")
pages = ["Statistiques Exploratoires","Project Presentation","Data Viz","Modeling Match","Modeling Group Stage","Modeling the whole Tournament"]
page = st.sidebar.radio("Choose a page",options =pages)

if page == pages[0]:

    equipe_1 = st.selectbox("EQUIPE A DOMICILE", df['home_team'].unique())
    equipe_2 = st.selectbox("EQUIPE A L'EXTERIEUR",df['away_team'].unique())

    st.subheader("ATTAQUE")

    with st.container():
        col1, col2 = st.columns(2)

        with col1:

            fig1 = px.histogram(df[df['home_team']==equipe_1], x='tournament', y='home_score', histfunc='avg',
                                height=300,
                                title='Home Shots On Target')
            st.plotly_chart(fig1)

        with col2 :
            fig2 = px.histogram(df[df['away_team'] == equipe_2], x='tournament', y='away_score', histfunc='avg',
                                height=300,
                                title='Away Shots On Target')
            st.plotly_chart(fig2)

Bonjour Robin , merci de votre réponse.

Le code que je vous ai envoyé fonctionne. Sauf qu’il ne fonctionne pas quand je veux faire un « multiselect » à la place de « selectbox » ; ça m’affiche une erreur sur les tailles.

Au fait , je veux pouvoir mettre deux équipes ou plus dans un même graphe pour comparer les statistiques en passant par le « multiselect »

Merci de votre aide

Bonjour Iheb, j’ai repris mon script pour inclure deux selectbox, vous pouvez vous en inspirer :

import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px

df = pd.read_csv("results.csv")

st.sidebar.title("Sidebar")
pages = ["Statistiques Exploratoires","Project Presentation","Data Viz","Modeling Match","Modeling Group Stage","Modeling the whole Tournament"]
page = st.sidebar.radio("Choose a page",options =pages)

if page == pages[0]:

    equipe_1= st.multiselect(
    'Choose Home Teams',
    options = df['home_team'].unique(),
    default =['France'])

    equipe_2 = st.multiselect(
    'Choose Away Teams',
    options = df['away_team'].unique(),
    default =['England'])

    #equipe1 =st.selectbox("EQUIPE A DOMICILE", df['home_team'].unique())
    #equipe_2 = st.selectbox("EQUIPE A L'EXTERIEUR",df['away_team'].unique())

    st.subheader("ATTAQUE")

    with st.container():
        col1, col2 = st.columns(2)

        with col1:

            fig1 = px.histogram(df[df['home_team'].isin(equipe_1)], x='tournament', y='home_score', histfunc='avg',
                                height=300,
                                title='Home Shots On Target')
            st.plotly_chart(fig1)

        with col2 :
            fig2 = px.histogram(df[df['away_team'].isin(equipe_2)], x='tournament', y='away_score', histfunc='avg',
                                height=300,
                                title='Away Shots On Target')
            st.plotly_chart(fig2)

Mais je pense que si vous partagiez le message d’erreur exact en entier, cela pourrait m’aider à vous aider plus exactement.

Merci Robin , je l’ai fais fonctionné . L’astuce était dans la fonction « isin() » ; juste pour savoir , on met « isin » parce qu’on peut sélectionner plusieurs équipes et non plus une n’est ce pas ?

sinon pour que les équipes n’aient pas les mêmes couleurs , comment faire ? y’a t’il un attribut « color » ou quelque chose du genre ? je vais chercher de mon côté mais c’est mieux de faire une couleur par équipe.

Merci pour votre aide

.isin() est l’équivalent du test d’égalité pour plusieurs valeurs, on va sélectionner seulement les lignes dont les valeurs sont contenues dans une liste (ici l’ensemble des équipes choisies par l’utilisateur).
Pour afficher plusieurs couleurs, il faut bien utiliser l’argument color

Dernière question Robin svp

dans ce code :

classement = classement.sort_values([‹ season ›, ‹ home_team ›, ‹ points ›])

    season = st.selectbox("Season", df['season'].unique())

    fig = px.histogram(classement[classement['season'] == season].sort_values('points',ascending=False), x='home_team', y='points',
                            height=300,
                            title='Number of Points',
                            color="season",
                            color_discrete_map={"Arsenal": "blue"},
                            barmode='group')
    st.plotly_chart(fig)

je veux changer la couleur d’Arsenal , ceci est possible si je mets dans l’argument « color » : « home_team » sauf que si je le fais , cela ne me donnerait pas la figure que je veux.

Du coup , n’y’aurait il pas une astuce pour contourner le problème.

Merci d’avance

j’aimerais que la barre d’Arsenal soit de couleur différente.