LaurentTRIPIED commited on
Commit
98691d1
1 Parent(s): c8c3cc4

V2 avec Data bziiit

Browse files
ActionsRSE.py CHANGED
@@ -1,4 +1,3 @@
1
-
2
  import streamlit as st
3
  import data_manager
4
 
@@ -8,7 +7,7 @@ def display_actions_rse():
8
 
9
  if total_hits > 0:
10
  # Ajout des titres en haut de l'écran, similaires à organisations_engagees.py mais avec un texte personnalisé
11
- st.markdown("## OPEN DATA RSE")
12
  st.markdown("### Découvrer les actions RSE des organisations engagées de Bordeaux Métropole")
13
 
14
  secteurs = sorted({record.get("libelle_section_naf") for record in data if record.get("libelle_section_naf")})
@@ -27,5 +26,9 @@ def display_actions_rse():
27
  st.markdown(f":green_heart: **Entreprise**: {action.get('nom_courant_denomination')}\n\n**Action**: {action.get('action_rse')}", unsafe_allow_html=True)
28
  else:
29
  st.write("Aucune action RSE correspondante trouvée.")
 
 
 
 
30
  else:
31
  st.write("Erreur lors de la récupération des données.")
 
 
1
  import streamlit as st
2
  import data_manager
3
 
 
7
 
8
  if total_hits > 0:
9
  # Ajout des titres en haut de l'écran, similaires à organisations_engagees.py mais avec un texte personnalisé
10
+ st.markdown("## OPEN DATA Bordeaux Métropole RSE")
11
  st.markdown("### Découvrer les actions RSE des organisations engagées de Bordeaux Métropole")
12
 
13
  secteurs = sorted({record.get("libelle_section_naf") for record in data if record.get("libelle_section_naf")})
 
26
  st.markdown(f":green_heart: **Entreprise**: {action.get('nom_courant_denomination')}\n\n**Action**: {action.get('action_rse')}", unsafe_allow_html=True)
27
  else:
28
  st.write("Aucune action RSE correspondante trouvée.")
29
+
30
+ # Afficher le total des actions RSE
31
+ st.markdown(f"**Total des actions RSE :** {len(actions_filtrees)}")
32
+
33
  else:
34
  st.write("Erreur lors de la récupération des données.")
AnalyseActionsRSE.py CHANGED
@@ -1,10 +1,164 @@
1
- # IA_RSE/AnalyseActionsRSE.py
2
  import streamlit as st
3
- import pandas as pd
 
4
  from data_manager import get_data
5
 
6
- # Fonction pour l'onglet "Analyse actions RSE"
 
 
 
 
 
 
 
7
  def display_analyse_actions_rse():
8
- st.markdown("## IA RSE")
9
- st.markdown("### Classification des actions RSE selon les critères de la norme ISO 26000")
10
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import streamlit as st
2
+ from ISO26000 import classify_actions_rse_ISO26000 as classify_iso26000
3
+ from impactscore import classify_actions_rse_IMPACTSCORE as classify_impactscore
4
  from data_manager import get_data
5
 
6
+ criteria = {}
7
+ if "Autres" not in criteria:
8
+ criteria["Autres"] = []
9
+
10
+ company_info = "Some company info"
11
+
12
+ criteria["Autres"].append(company_info)
13
+
14
  def display_analyse_actions_rse():
15
+ st.markdown("## IA RSE :mag_right:")
16
+ st.markdown("### Classification des actions RSE selon 3 approches :")
17
+
18
+ approach = st.radio(
19
+ "Choisissez l'approche de classification :point_down:",
20
+
21
+ ["Norme ISO 26000", "ODD Objectifs de Développement Durable (en cours de développement)","Impact Score (en cours de développement)"],
22
+ index=0,
23
+ format_func=lambda x: x.split(" :")[0]
24
+ )
25
+
26
+ if approach == "Norme ISO 26000":
27
+ # Récupérer les données depuis data_manager.py
28
+ data, total_hits = get_data()
29
+
30
+ st.markdown("""<hr style='border-color: darkgrey;'>""", unsafe_allow_html=True)
31
+
32
+ st.markdown("""
33
+ :earth_africa: **QU'EST-CE QUE LA NORME ISO 26000 ?**
34
+
35
+ La norme ISO 26000 propose une grille de lecture de la thématique développement durable ultra-pratique pour déployer une politique RSE d'entreprise bien structurée, qui ne laisse rien de côté. Publiée en 2010, cette norme volontaire a été élaborée en concertation avec près de 90 pays à travers le monde, dont la France.
36
+
37
+ **COMMENT EST-ELLE STRUCTURÉE ?**
38
+
39
+ ISO 26000 : Une grille de lecture à 7 entrées
40
+
41
+ - 🏢 La gouvernance de la structure
42
+ - 👨‍👩‍👧‍👦 Les droits humains
43
+ - 🤝 Les conditions et relations de travail
44
+ - 🌱 La responsabilité environnementale
45
+ - ⚖️ La loyauté des pratiques
46
+ - 🛍️ Les questions relatives au consommateur et à la protection du consommateur
47
+ - 🌍 Les communautés et le développement local.
48
+ """)
49
+ st.markdown("""<small>Source AFNOR : <a href="https://www.afnor.org/developpement-durable/demarche-iso-26000/" target="_blank">www.afnor.org/developpement-durable/demarche-iso-26000/</a></small>""", unsafe_allow_html=True)
50
+
51
+ st.markdown("""<hr style='border-color: darkgrey;'>""", unsafe_allow_html=True)
52
+ st.markdown("### Classification des actions RSE selon ISO 26000")
53
+
54
+ pictograms = {
55
+ "Gouvernance de la structure": "🏢",
56
+ "Droits humains": "👨‍👩‍👧‍👦",
57
+ "Conditions et relations de travail": "🤝",
58
+ "Responsabilité environnementale": "🌱",
59
+ "Loyauté des pratiques": "⚖️",
60
+ "Questions relatives au consommateur": "🛍️",
61
+ "Communautés et développement local": "🌍",
62
+ "Autres": "❓"
63
+ }
64
+
65
+ criteria_counts = classify_iso26000(data)
66
+
67
+ total_actions = 0
68
+
69
+ for category, actions in criteria_counts.items():
70
+ if category in pictograms:
71
+ st.subheader(f"{pictograms[category]} {category}")
72
+ else:
73
+ st.subheader(f"{pictograms['Autres']} Autres")
74
+ total_actions += len(actions)
75
+ for action in actions:
76
+ nom_entreprise = action.get('nom_courant_denomination', 'Information non disponible')
77
+ st.write(f"Entreprise : {action.get('name','N/A')}, Action RSE : {action.get('action_rse', 'N/A')}, Activité : {action.get('activity', 'N/A')}, Ville : {action.get('city', 'N/A')}")
78
+
79
+ st.markdown("""<hr style='border-color: darkgrey;'>""", unsafe_allow_html=True)
80
+ st.markdown(f"**Total des actions RSE :** {total_actions}")
81
+
82
+ elif approach == "Impact Score (en cours de développement)":
83
+ # Récupérer les données depuis data_manager.py
84
+ data, total_hits = get_data()
85
+
86
+ st.markdown("""<hr style='border-color: darkgrey;'>""", unsafe_allow_html=True)
87
+
88
+ st.markdown("""
89
+ 🌳 **QU'EST-CE QUE L'IMPACT SCORE ?**
90
+
91
+ Ce référentiel commun et unique a été co-construit par 30 réseaux d’entreprises afin de publier en transparence leurs données d’impact, exigence européenne depuis 2024.
92
+
93
+ **COMMENT EST-IL STRUCTURÉE ?**
94
+
95
+ IMPACT SCORE repose sur 3 piliers essentiels :
96
+
97
+ - 🚫 LIMITATION DES EXTERNALITÉS NÉGATIVES
98
+ - 💡 PARTAGE DU POUVOIR ET DE LA VALEUR
99
+ - 🎯 STRATÉGIE À IMPACT
100
+ """)
101
+
102
+
103
+ st.markdown("""<small>Source MOUVEMENT IMPACT FRANCE : <a href="https://impactscore.fr/comprendre-limpact-score/" target="_blank">https://impactscore.fr/comprendre-limpact-score/</a></small>""", unsafe_allow_html=True)
104
+
105
+ st.markdown("""<hr style='border-color: darkgrey;'>""", unsafe_allow_html=True)
106
+
107
+ criteria_counts = classify_impactscore(data)
108
+
109
+ total_actions = sum([len(actions) for actions in criteria_counts.values()])
110
+ st.markdown(f"**Total des actions RSE :** {total_actions}")
111
+
112
+ ### OBJECTIF DE DEVELOPPEMENT DURABLE ###
113
+ elif approach == "ODD Objectifs de Développement Durable (en cours de développement)":
114
+ # Récupérer les données depuis data_manager.py
115
+ data, total_hits = get_data()
116
+
117
+ st.markdown("""<hr style='border-color: darkgrey;'>""", unsafe_allow_html=True)
118
+
119
+ st.markdown("""
120
+ 🌳 **QU'EST-CE QUE LES 17 ODD ?**
121
+
122
+ Au cœur de l’Agenda 2030, 17 Objectifs de développement durable (ODD) ont été fixés. Ils couvrent l’intégralité des enjeux de développement dans tous les pays tels que le climat, la biodiversité, l’énergie, l’eau, la pauvreté, l’égalité des genres, la prospérité économique ou encore la paix, l’agriculture, l’éducation, etc.
123
+
124
+ **COMMENT SONT-ILS STRUCTURÉS ?**
125
+
126
+ - ODD n°1 - Pas de pauvreté
127
+ - ODD n°2 - Faim « Zéro »
128
+ - ODD n°3 - Bonne santé et bien-être
129
+ - ODD n°4 - Éducation de qualité
130
+ - ODD n°5 - Égalité entre les sexes
131
+ - ODD n°6 - Eau propre et assainissement
132
+ - ODD n°7 - Énergie propre et d'un coût abordable
133
+ - ODD n°8 - Travail décent et croissance économique
134
+ - ODD n°9 - Industrie, innovation et infrastructure
135
+ - ODD n°10 - Inégalités réduites
136
+ - ODD n°11 - Villes et communautés durable
137
+ - ODD n°12 - Consommation et production responsables
138
+ - ODD n°13 - Lutte contre les changements climatiques
139
+ - ODD n°14 - Vie aquatique
140
+ - ODD n°15 - Vie terrestre
141
+ - ODD n°16 - Paix, justice et institutions efficaces
142
+ - ODD n°17 - Partenariats pour la réalisation des objectifs
143
+
144
+ """)
145
+
146
+
147
+ st.markdown("""<small>Source AGENDA 2030 EN FRANCE : <a href="https://www.agenda-2030.fr/17-objectifs-de-developpement-durable/?" target="_blank">https://impactscore.fr/comprendre-limpact-score/</a></small>""", unsafe_allow_html=True)
148
+
149
+ st.markdown("""<hr style='border-color: darkgrey;'>""", unsafe_allow_html=True)
150
+
151
+ criteria_counts = classify_impactscore(data)
152
+
153
+ total_actions = sum([len(actions) for actions in criteria_counts.values()])
154
+ st.markdown(f"**Total des actions RSE :** {total_actions}")
155
+
156
+ if approach == "Norme ISO 26000":
157
+ st.subheader("Synthèse par catégorie ISO 26000")
158
+ synthesis = {category: len(actions) for category, actions in criteria_counts.items()}
159
+ synthesis_sorted = dict(sorted(synthesis.items(), key=lambda item: item[1], reverse=True))
160
+ for category, count in synthesis_sorted.items():
161
+ st.write(f"{category}: {count} action(s) RSE")
162
+
163
+ if __name__ == "__main__":
164
+ display_analyse_actions_rse()
DATA_bziiit/__init__.py ADDED
File without changes
ISO26000.py ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from data_manager import get_data
2
+
3
+ def classify_actions_rse_ISO26000(data):
4
+ data, _ = get_data() # Récupérer les données depuis data_manager.py
5
+
6
+ criteria = {
7
+ "Gouvernance de la structure": [],
8
+ "Droits humains": [],
9
+ "Conditions et relations de travail": [],
10
+ "Responsabilité environnementale": [],
11
+ "Loyauté des pratiques": [],
12
+ "Questions relatives au consommateur": [],
13
+ "Communautés et développement local": [],
14
+ "Autres": []
15
+ }
16
+
17
+ # Keywords for each ISO 26000 category to help in classifying the actions
18
+ keywords = {
19
+ "Gouvernance de la structure": ["gouvernance", "structure", "organisation","leadership", "processus décisionnel", "responsabilité", "transparence", "éthique","entreprise à mission", "éthique d'entreprise", "transparence", "gouvernance responsable", "statuts", "loi pacte", "charte éthique","politique RSE dans la durée", "sens à la mission","fresque du climat"],
20
+ "Droits humains": ["droits humains", "droit", "humains","non-discrimination", "libertés fondamentales", "droits civils et politiques", "droits économiques, sociaux et culturels", "groupes vulnérables","humain au centre","lutter contre les discriminations"],
21
+ "Conditions et relations de travail": ["conditions de travail", "relations de travail", "emploi", "emploi et relations employeur-employé", "conditions de travail et protection sociale", "dialogue social", "santé et sécurité au travail", "développement des ressources humaines","télétravail", "semaine de 4 jours", "bien-être", "formation RSE", "sensibilisation RSE", "inclusion sociale", "diversité", "équilibre vie professionnelle", "qualité de vie au travail","inclusion des femmes","centrer sur l'humain","engagement des équipes"],
22
+ "Responsabilité environnementale": ["environnement", "écologie", "durable","prévention de la pollution", "utilisation durable des ressources", "atténuation et adaptation au changement climatique", "protection de l'environnement, de la biodiversité et restauration des habitats naturels","carbone", "véhicules électriques", "plantation d'arbres", "réduction plastique", "compost", "gestion de l'eau", "énergies renouvelables", "réduction émissions", "déchets", "recyclage", "mobilité durable", "transport en commun", "réutilisation", "reconditionné", "panneaux solaires","véhicules électriques","vélo électrique", "mobilité durable","décarbonation","réduction consommation d'eau","véhicules hybrides","véhicules hydrides","consommation d'eau"],
23
+ "Loyauté des pratiques": ["loyauté", "éthique", "pratiques","lutte contre la coruption", "comportement éthique", "concurrence loyale", "promotion de la responsabilité sociale dans la chaîne de valeur", "respect des droits de propriété","pratiques loyales en matière de marketing, d'information et de contrats", "protection de la santé et de la sécurité des consommateurs", "consommation durable", "service et assistance après-vente", "protection et confidentialité des données des consommateurs","commerce équitable", "marketing éthique", "droits des consommateurs", "transparence des informations", "pratiques loyales", "fournisseurs locaux","partenaires de proximité"],
24
+ "Questions relatives au consommateur": ["consommateur", "client", "service","service client", "protection du consommateur", "consommation responsable", "satisfaction client", "qualité des produits et services", "sécurité des produits et services", "information et éducation des consommateurs", "santé et sécurité des consommateurs", "service après-vente", "garantie", "retour produit", "éthique des affaires", "commerce équitable", "marketing éthique", "droits des consommateurs", "transparence des informations", "pratiques loyales"],
25
+ "Communautés et développement local": ["communauté", "développement local", "société","implication de la communauté", "éducation et culture", "création d'emplois et développement des compétences", "développement des technologies", "création de richesse et de revenus","engagement communautaire", "développement local", "actions caritatives", "événements sportifs", "soutien aux associations", "inclusion sociale", "lutte contre les discriminations", "coopération locale", "soutien à l'économie locale","écosystèmes sportifs", "touristiques", "culturels", "1% for the planet","préservation site", "dynamisation communauté","commun sportif", "transmission", "formations"],
26
+
27
+ }
28
+
29
+ for record in data:
30
+ action_rse = record.get("action_rse", "").lower()
31
+ company_info = {
32
+ "name": record.get("nom_courant_denomination", "N/A"),
33
+ "action_rse": action_rse,
34
+ "activity": record.get("libelle_section_naf", "N/A"),
35
+ "city": record.get("commune", "N/A")
36
+ }
37
+ found_category = False
38
+ for criterion, key_phrases in keywords.items():
39
+ if any(key_phrase in action_rse for key_phrase in key_phrases):
40
+ criteria[criterion].append(company_info)
41
+ found_category = True
42
+ break # Assuming each action belongs to one category only
43
+
44
+ # Si l'action n'a pas été classifiée dans une catégorie existante, la placer dans "Autres"
45
+ if not found_category:
46
+ criteria["Autres"].append(company_info)
47
+
48
+ return criteria
app.py CHANGED
@@ -8,40 +8,43 @@ from statistiques import main as display_statistics
8
  from ActionsRSE import display_actions_rse
9
  from AnalyseActionsRSE import display_analyse_actions_rse
10
 
 
 
 
 
 
11
  def main():
12
  st.sidebar.title("OPEN DATA & IA au service de la RSE")
13
  section_principale = st.sidebar.radio(
14
  "Choisissez votre section",
15
- ["Data Bordeaux métropole", "Data bziiit", "IA RSE"]
16
  )
17
 
18
  if section_principale == "Data Bordeaux métropole":
19
  app_mode = st.sidebar.radio(
20
- "Choisissez votre onglet",
21
- ["Organisations engagées", "Localisations", "Statistiques", "Actions RSE"]
22
  )
23
- if app_mode == "Organisations engagées":
24
- display_organisations_engagees()
25
- elif app_mode == "Localisations":
26
  display_map()
 
 
27
  elif app_mode == "Statistiques":
28
  display_statistics()
29
  elif app_mode == "Actions RSE":
30
  display_actions_rse()
 
 
31
 
32
  elif section_principale == "Data bziiit":
33
  ia_mode = st.sidebar.radio(
34
- "Choisissez votre onglet",
35
- ["Projets RSE", "Labels RSE", "Marques engagées"]
36
  )
37
-
38
- elif section_principale == "IA RSE":
39
- ia_mode = st.sidebar.radio(
40
- "Choisissez votre onglet",
41
- ["Analyse actions RSE"]
42
- )
43
- if ia_mode == "Analyse actions RSE":
44
- display_analyse_actions_rse()
45
 
46
  # Instructions communes à toutes les sections
47
  st.sidebar.markdown("---")
@@ -51,4 +54,4 @@ def main():
51
  st.sidebar.markdown("---")
52
 
53
  if __name__ == "__main__":
54
- main()
 
8
  from ActionsRSE import display_actions_rse
9
  from AnalyseActionsRSE import display_analyse_actions_rse
10
 
11
+ # Import modifiédes fonctions liées aux scripts
12
+ from projetRSE import display_rse_projects
13
+ from labelRSE import display_rse_labels
14
+ from marquesengagees import display_engaged_brands
15
+
16
  def main():
17
  st.sidebar.title("OPEN DATA & IA au service de la RSE")
18
  section_principale = st.sidebar.radio(
19
  "Choisissez votre section",
20
+ ["Data Bordeaux métropole", "Data bziiit"]
21
  )
22
 
23
  if section_principale == "Data Bordeaux métropole":
24
  app_mode = st.sidebar.radio(
25
+ "Choisissez votre sous-section",
26
+ ["Localisations", "Organisations engagées", "Statistiques", "Actions RSE", "Analyse actions RSE"]
27
  )
28
+ if app_mode == "Localisations":
 
 
29
  display_map()
30
+ elif app_mode == "Organisations engagées":
31
+ display_organisations_engagees()
32
  elif app_mode == "Statistiques":
33
  display_statistics()
34
  elif app_mode == "Actions RSE":
35
  display_actions_rse()
36
+ elif app_mode == "Analyse actions RSE":
37
+ display_analyse_actions_rse()
38
 
39
  elif section_principale == "Data bziiit":
40
  ia_mode = st.sidebar.radio(
41
+ "Choisissez votre sous-section",
42
+ ["Labels RSE", "Projets RSE"]
43
  )
44
+ if ia_mode == "Labels RSE":
45
+ display_rse_labels()
46
+ elif ia_mode == "Projets RSE":
47
+ display_rse_projects()
 
 
 
 
48
 
49
  # Instructions communes à toutes les sections
50
  st.sidebar.markdown("---")
 
54
  st.sidebar.markdown("---")
55
 
56
  if __name__ == "__main__":
57
+ main()
data_manager.py CHANGED
@@ -1,4 +1,4 @@
1
- # data_manager.py
2
  import requests
3
 
4
  def get_data():
 
1
+
2
  import requests
3
 
4
  def get_data():
data_manager_bziiit.py ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import requests
3
+
4
+ # URL de base de l'API bziiit
5
+ BASE_URL = "https://bziiitapi-api.azurewebsites.net"
6
+
7
+ def get_labels():
8
+ # Récupère les labels RSE depuis l'API bziiit
9
+ response = requests.get(f"{BASE_URL}/opendata/labels")
10
+ if response.status_code == 200:
11
+ return response.json()["response"]
12
+ else:
13
+ return []
14
+
15
+ def get_rse_projects():
16
+ # Récupère les projets RSE depuis l'API bziiit
17
+ response = requests.get(f"{BASE_URL}/opendata/bordeaux-rse/projects")
18
+ if response.status_code == 200:
19
+ return response.json()["response"]
20
+ else:
21
+ return []
22
+
23
+ def get_engaged_brands():
24
+ # Récupère les marques engagées depuis l'API bziiit
25
+ response = requests.get(f"{BASE_URL}/opendata/bordeaux-rse/brands")
26
+ if response.status_code == 200:
27
+ return response.json()["response"]
28
+ else:
29
+ return []
impactscore.py ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ print("""
2
+ 🌍 QU'EST-CE QUE LA NORME ISO 26000 ?
3
+
4
+ La norme ISO 26000 propose une grille de lecture de la thématique développement durable ultra-pratique pour déployer une politique RSE d'entreprise bien structurée, qui ne laisse rien de côté. Publiée en 2010, cette norme volontaire a été élaborée en concertation avec près de 90 pays à travers le monde, dont la France.
5
+
6
+ COMMENT EST-ELLE STRUCTURÉE ?
7
+
8
+ ISO 26000 : Une grille de lecture à 7 entrées
9
+
10
+ 🏢 La gouvernance de la structure
11
+ 👨‍👩‍👧‍👦 Les droits humains
12
+ 🤝 Les conditions et relations de travail
13
+ 🌱 La responsabilité environnementale
14
+ ⚖️ La loyauté des pratiques
15
+ 🛍️ Les questions relatives au consommateur et à la protection du consommateur
16
+ 🌍 Les communautés et le développement local.
17
+ Source AFNOR : www.afnor.org/developpement-durable/demarche-iso-26000/
18
+ """)
19
+
20
+ from data_manager import get_data
21
+
22
+ def classify_actions_rse_IMPACTSCORE(data):
23
+ data, _ = get_data() # Récupérer les données depuis data_manager.py
24
+
25
+ criteria = {
26
+ "Initiatives pour réduire l'empreinte carbone": [],
27
+ "Amélioration des conditions de travail": [],
28
+ "Promotion du recyclage": [],
29
+ "Autres": []
30
+ }
31
+
32
+ keywords = {
33
+ "Initiatives pour réduire l'empreinte carbone": ["empreinte carbone", "réduction des émissions", "transition énergétique"],
34
+ "Amélioration des conditions de travail": ["conditions de travail", "santé et sécurité au travail", "équilibre vie professionnelle"],
35
+ "Promotion du recyclage": ["recyclage", "gestion des déchets", "économie circulaire"],
36
+ }
37
+
38
+ for record in data:
39
+ action_rse = record.get("action_rse", "").lower()
40
+ company_info = {
41
+ "name": record.get("nom_courant_denomination", "N/A"),
42
+ "action_rse": action_rse,
43
+ "activity": record.get("libelle_section_naf", "N/A"),
44
+ "city": record.get("commune", "N/A")
45
+ }
46
+ found_category = False
47
+ for criterion, key_phrases in keywords.items():
48
+ if any(key_phrase in action_rse for key_phrase in key_phrases):
49
+ criteria[criterion].append(company_info)
50
+ found_category = True
51
+ break # Assuming each action belongs to one category only
52
+
53
+ # Si l'action n'a pas été classifiée dans une catégorie existante, la placer dans "Autres"
54
+ if not found_category:
55
+ criteria["Autres"].append(company_info)
56
+
57
+ return criteria
labelRSE.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from collections import Counter
3
+
4
+ from data_manager import get_data
5
+ from data_manager_bziiit import get_labels, get_engaged_brands
6
+
7
+ def display_rse_labels():
8
+ st.markdown("## OPEN DATA bziiit Labels RSE")
9
+ st.markdown("### Découvrez les labels et certifications (RSE, Qualité...)")
10
+
11
+ labels_option = st.radio(
12
+ "Choisissez les labels à afficher :",
13
+ ("Tous les labels / Certifications DATA bziiit", "Labels / Certifications des organisations engagées Bdx Métropole")
14
+ )
15
+
16
+ st.markdown("""<hr style='border-color: darkgrey;'>""", unsafe_allow_html=True)
17
+
18
+ labels = get_labels()
19
+ if labels_option == "Tous les labels / Certifications DATA bziiit":
20
+ labels.sort(key=lambda x: x['name'])
21
+ else:
22
+ # Get the data from Bordeaux Metropole API
23
+ data, _ = get_data()
24
+
25
+ # Get the engaged brands
26
+ engaged_brands = get_engaged_brands()
27
+
28
+ # Get the names of the organizations from Bordeaux Metropole API
29
+ org_names = set(org['nom_courant_denomination'] for org in data if 'nom_courant_denomination' in org)
30
+
31
+ # Filter the engaged brands to include only the organizations in Bordeaux Metropole
32
+ engaged_brands = [brand for brand in engaged_brands if brand['name'] in org_names]
33
+
34
+ # Get the labels used by the organizations
35
+ org_labels = [label['name'] for brand in engaged_brands if 'labels' in brand and brand['labels'] for label in brand['labels']]
36
+
37
+ # Count the labels
38
+ label_counts = Counter(org_labels)
39
+
40
+ # Filter the labels and add the count
41
+ labels = [{'name': label['name'], 'logo_url': label['logo_url'], 'count': label_counts[label['name']]} for label in labels if label['name'] in label_counts]
42
+
43
+ # Sort the labels by count in descending order
44
+ labels.sort(key=lambda x: x['count'], reverse=True)
45
+
46
+ # Display the total number of unique labels
47
+ unique_labels = set(label['name'] for label in labels)
48
+ st.markdown(f"**Nombre de labels / certifications :** {len(unique_labels)}")
49
+
50
+ # Display the labels
51
+ for i in range(0, len(labels), 5):
52
+ cols = st.columns(5)
53
+ for j in range(5):
54
+ if i + j < len(labels):
55
+ label = labels[i + j]
56
+ with cols[j]:
57
+ st.image(label['logo_url'])
58
+ if labels_option == "Tous les labels / Certifications DATA bziiit":
59
+ st.markdown(f'<p style="text-align: center; font-size: 10px;"><a href="{label["website"]}" style="color: darkgray;">Site web</a></p>', unsafe_allow_html=True)
60
+ else:
61
+ st.markdown(f'<p style="text-align: center; font-size: 10px; color: darkgray;">Nb marques certifiées : {label["count"]}</p>', unsafe_allow_html=True)
localisation.py CHANGED
@@ -8,7 +8,7 @@ def display_map():
8
  data, total_hits = get_data()
9
  if data:
10
  # Ajout des titres en haut de l'écran
11
- st.markdown("## OPEN DATA RSE")
12
  st.markdown("### Localiser les organisations engagées RSE de Bordeaux Métropole")
13
 
14
  secteurs = sorted({record.get("libelle_section_naf") for record in data if record.get("libelle_section_naf")})
 
8
  data, total_hits = get_data()
9
  if data:
10
  # Ajout des titres en haut de l'écran
11
+ st.markdown("## OPEN DATA Bordeaux Métropole RSE")
12
  st.markdown("### Localiser les organisations engagées RSE de Bordeaux Métropole")
13
 
14
  secteurs = sorted({record.get("libelle_section_naf") for record in data if record.get("libelle_section_naf")})
marquesengagees.py ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+
2
+ # Dans marquesengagees.py
3
+ import streamlit as st
4
+
5
+ def display_engaged_brands():
6
+ # Exemple de code pour afficher des marques engagées
7
+ st.write("Liste des marques engagées")
organisations_engagees.py CHANGED
@@ -4,7 +4,7 @@ from data_manager import get_data
4
 
5
  # Fonction pour l'onglet "Organisations engagées"
6
  def display_organisations_engagees():
7
- st.markdown("## OPEN DATA RSE")
8
  st.markdown("### Découvrez les organisations engagées RSE de Bordeaux Métropole")
9
 
10
  data, total_hits = get_data()
 
4
 
5
  # Fonction pour l'onglet "Organisations engagées"
6
  def display_organisations_engagees():
7
+ st.markdown("## OPEN DATA Bordeaux Métropole RSE")
8
  st.markdown("### Découvrez les organisations engagées RSE de Bordeaux Métropole")
9
 
10
  data, total_hits = get_data()
projetRSE.py ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import re # Importer la bibliothèque pour les expressions régulières
3
+ from data_manager_bziiit import get_rse_projects
4
+
5
+ def remove_html_tags(text):
6
+ """Supprimer les balises HTML d'une chaîne de caractères."""
7
+ clean_text = re.sub('<.*?>', '', text) # Remplacer toute balise HTML par une chaîne vide
8
+ return clean_text
9
+
10
+ def display_rse_projects():
11
+ st.markdown("""
12
+ <style>
13
+ table {
14
+ background-color: inherit !important;
15
+ }
16
+ </style>
17
+ """, unsafe_allow_html=True)
18
+
19
+ st.markdown("## OPEN DATA bziiit Projet RSE")
20
+ st.markdown("### Découvrez tous les projets RSE des marques référencées")
21
+
22
+ projects = get_rse_projects()
23
+ if projects:
24
+ categories = list({project["rse_category"] if project["rse_category"] is not None else "Non catégorisé" for project in projects})
25
+ categories.sort()
26
+ categories.insert(0, 'Toutes')
27
+ selected_category = st.selectbox("Filtre par catégorie RSE", categories, index=0)
28
+
29
+ if selected_category != 'Toutes':
30
+ filtered_projects = [project for project in projects if project["rse_category"] == selected_category or (selected_category == "Non catégorisé" and project["rse_category"] is None)]
31
+ else:
32
+ filtered_projects = projects
33
+
34
+ st.markdown(f"**Nombre de projets :** {len(filtered_projects)}")
35
+
36
+ # Display the projects as thumbnails
37
+ for i in range(0, len(filtered_projects), 5):
38
+ cols = st.columns(5)
39
+ for j in range(5):
40
+ if i + j < len(filtered_projects):
41
+ project = filtered_projects[i + j]
42
+ with cols[j]:
43
+ if project['logo_url']: # Ajouter cette vérification ici
44
+ st.image(project['logo_url'])
45
+ st.markdown(f'<p style="text-align: center;"><b>{project["brand"]["name"]}</b></p>', unsafe_allow_html=True)
46
+ st.markdown(f'<p style="text-align: center;"><b>"{project["name"]}"</b></p>', unsafe_allow_html=True) # Ajouter cette ligne
47
+ st.markdown(f'<p style="text-align: center; font-size: 10px; color: darkgray;">{project["rse_category"] if project["rse_category"] is not None else "Non catégorisé"}</p>', unsafe_allow_html=True)
48
+ st.markdown('<hr style="border-top: 1px dotted lightgray; width:100%;">', unsafe_allow_html=True) # Modifier cette ligne
statistiques.py CHANGED
@@ -50,7 +50,7 @@ def main():
50
  df = pd.DataFrame(data)
51
 
52
  if not df.empty:
53
- st.markdown("## OPEN DATA RSE")
54
  st.markdown("### Statistiques sur les entreprises engagées RSE")
55
 
56
  st.header("Répartition des entreprises par secteur d'activité")
 
50
  df = pd.DataFrame(data)
51
 
52
  if not df.empty:
53
+ st.markdown("## OPEN DATA Bordeaux Métropole RSE")
54
  st.markdown("### Statistiques sur les entreprises engagées RSE")
55
 
56
  st.header("Répartition des entreprises par secteur d'activité")