Skip to content

Commit a1d370c

Browse files
authored
Maj app.py
1 parent 013bab2 commit a1d370c

File tree

1 file changed

+96
-26
lines changed
  • POC - Réseaux de copublications

1 file changed

+96
-26
lines changed

POC - Réseaux de copublications/app.py

Lines changed: 96 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -55,48 +55,118 @@ def load_data():
5555
ville_col, org_col, annee_col, equipe_col, centre_col, pays_col = "Ville", "Organisme_copubliant", "Année", "Equipe", "Centre", "Pays"
5656

5757
# -------------------
58-
# Sidebar filtres
58+
# Sidebar filtres (version simplifiée & réactive)
5959
# -------------------
6060
with st.sidebar:
6161
try:
6262
st.image("logo.png", use_container_width=True)
6363
except:
6464
st.caption("Logo manquant")
65-
66-
st.markdown("<br>", unsafe_allow_html=True) #espace
65+
66+
st.markdown("<br>", unsafe_allow_html=True)
6767
st.markdown("### DATALAKE")
6868
st.markdown("<br>", unsafe_allow_html=True)
69-
centres = st.multiselect("Centre", sorted(df[centre_col].dropna().unique()))
70-
pays = st.multiselect("Pays", sorted(df[pays_col].dropna().unique()))
71-
villes = st.selectbox("Ville", ["Toutes"] + sorted(df[ville_col].dropna().unique()))
72-
organismes = st.multiselect("Organismes copubliants", sorted(df[org_col].dropna().unique()))
73-
annees = st.multiselect("Années", sorted(df[annee_col].dropna().unique()))
74-
equipes = st.multiselect("Équipes", sorted(df[equipe_col].dropna().unique()))
69+
70+
# --- Initialisation des clés ---
71+
for key in ["centres", "pays", "villes", "organismes", "annees", "equipes"]:
72+
if key not in st.session_state:
73+
if key == "villes":
74+
st.session_state[key] = "Toutes"
75+
else:
76+
st.session_state[key] = []
77+
78+
# --- Calcul des options selon sélection en cours ---
79+
# 1. Centres (global)
80+
centres_opts = sorted(df[centre_col].dropna().unique())
81+
st.session_state.centres = st.multiselect(
82+
"Centre",
83+
centres_opts,
84+
default=st.session_state.centres
85+
)
86+
87+
tmp = df.copy()
88+
if st.session_state.centres:
89+
tmp = tmp[tmp[centre_col].isin(st.session_state.centres)]
90+
91+
# 2. Pays
92+
pays_opts = sorted(tmp[pays_col].dropna().unique())
93+
st.session_state.pays = st.multiselect(
94+
"Pays",
95+
pays_opts,
96+
default=[x for x in st.session_state.pays if x in pays_opts]
97+
)
98+
99+
if st.session_state.pays:
100+
tmp = tmp[tmp[pays_col].isin(st.session_state.pays)]
101+
102+
# 3. Villes
103+
villes_opts = ["Toutes"] + sorted(tmp[ville_col].dropna().unique())
104+
st.session_state.villes = st.selectbox(
105+
"Ville",
106+
villes_opts,
107+
index=villes_opts.index(st.session_state.villes)
108+
if st.session_state.villes in villes_opts else 0
109+
)
110+
111+
if st.session_state.villes != "Toutes":
112+
tmp = tmp[tmp[ville_col] == st.session_state.villes]
113+
114+
# 4. Organismes
115+
orgs_opts = sorted(tmp[org_col].dropna().unique())
116+
st.session_state.organismes = st.multiselect(
117+
"Organismes copubliants",
118+
orgs_opts,
119+
default=[x for x in st.session_state.organismes if x in orgs_opts]
120+
)
121+
122+
if st.session_state.organismes:
123+
tmp = tmp[tmp[org_col].isin(st.session_state.organismes)]
124+
125+
# 5. Années
126+
annees_opts = sorted(tmp[annee_col].dropna().unique())
127+
st.session_state.annees = st.multiselect(
128+
"Années",
129+
annees_opts,
130+
default=[x for x in st.session_state.annees if x in annees_opts]
131+
)
132+
133+
if st.session_state.annees:
134+
tmp = tmp[tmp[annee_col].isin(st.session_state.annees)]
135+
136+
# 6. Équipes
137+
equipes_opts = sorted(tmp[equipe_col].dropna().unique())
138+
st.session_state.equipes = st.multiselect(
139+
"Équipes",
140+
equipes_opts,
141+
default=[x for x in st.session_state.equipes if x in equipes_opts]
142+
)
75143

76144
st.markdown("<br>", unsafe_allow_html=True)
77-
78-
# Texte en bas du contenu des filtres
79145
st.caption(
80146
"Proposé par le groupe **DATALAKE** : Kumar Guha, Daniel Da Silva et Andréa Nebot \n"
81147
"à la demande de Luigi Liquori et Maria Kazolea"
82148
)
83-
149+
84150
# -------------------
85-
# Filtrage
151+
# Filtrage final
86152
# -------------------
87-
df_filtered = df.copy()
88-
if centres:
89-
df_filtered = df_filtered[df_filtered[centre_col].isin(centres)]
90-
if pays:
91-
df_filtered = df_filtered[df_filtered[pays_col].isin(pays)]
92-
if villes != "Toutes":
93-
df_filtered = df_filtered[df_filtered[ville_col] == villes]
94-
if organismes:
95-
df_filtered = df_filtered[df_filtered[org_col].isin(organismes)]
96-
if annees:
97-
df_filtered = df_filtered[df_filtered[annee_col].isin(annees)]
98-
if equipes:
99-
df_filtered = df_filtered[df_filtered[equipe_col].isin(equipes)]
153+
def get_filtered_df():
154+
tmp = df.copy()
155+
if st.session_state.centres:
156+
tmp = tmp[tmp[centre_col].isin(st.session_state.centres)]
157+
if st.session_state.pays:
158+
tmp = tmp[tmp[pays_col].isin(st.session_state.pays)]
159+
if st.session_state.villes != "Toutes":
160+
tmp = tmp[tmp[ville_col] == st.session_state.villes]
161+
if st.session_state.organismes:
162+
tmp = tmp[tmp[org_col].isin(st.session_state.organismes)]
163+
if st.session_state.annees:
164+
tmp = tmp[tmp[annee_col].isin(st.session_state.annees)]
165+
if st.session_state.equipes:
166+
tmp = tmp[tmp[equipe_col].isin(st.session_state.equipes)]
167+
return tmp
168+
169+
df_filtered = get_filtered_df()
100170

101171
# -------------------
102172
# Fonctions utiles

0 commit comments

Comments
 (0)