File size: 4,038 Bytes
d0661bd
d2c8f3c
 
0527fa6
 
9603f8e
d0661bd
854dede
2392756
854dede
 
10118ca
0527fa6
 
d2c8f3c
 
 
 
bda553e
d2c8f3c
bda553e
9ee810a
0527fa6
d2c8f3c
0527fa6
 
bda553e
0527fa6
d2c8f3c
 
10118ca
 
 
 
 
 
 
 
 
9ee810a
9603f8e
0a64f3b
bd6f02f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9603f8e
bd6f02f
9603f8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bd6f02f
9603f8e
f3a6502
 
9603f8e
 
 
 
 
 
0527fa6
f3a6502
0527fa6
f3a6502
9603f8e
48d778d
f3a6502
 
0a64f3b
 
9603f8e
 
0527fa6
 
10118ca
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import streamlit as st
import pandas as pd
import requests
import folium
from streamlit_folium import folium_static
from transformers import pipeline

import tensorflow as tf
assert tf.__version__.startswith('2.')
print("TensorFlow version:", tf.__version__)

# Fonction pour récupérer les données de l'API
def get_data():
    url = "https://opendata.bordeaux-metropole.fr/api/records/1.0/search/?dataset=met_etablissement_rse&q=&rows=100"
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        records = data.get("records", [])
        return [record["fields"] for record in records], data.get("nhits", 0)
    else:
        return [], 0

# Fonction pour l'onglet "Organisations engagées"
def display_organisations_engagees():
    st.markdown("## OPEN DATA RSE")
    st.markdown("### Découvrez les organisations engagées RSE de la métropole de Bordeaux")
    
    data, _ = get_data()
    if data:
        df = pd.DataFrame(data)
        df = df.rename(columns={
            "nom_courant_denomination": "Nom",
            "commune": "Commune",
            "libelle_section_naf": "Section NAF",
            "tranche_effectif_entreprise": "Effectif",
            "action_rse": "Action RSE"
        })
        df = df[["Nom", "Commune", "Section NAF", "Effectif", "Action RSE"]]
        st.dataframe(df, width=None, height=None)

# Fonction pour l'onglet "GeoRSE Insights"
def display_geo_rse_insights():
    data, _ = get_data()
    if data:
        m = folium.Map(location=[44.84474, -0.60711], zoom_start=11)
        for item in data:
            point_geo = item.get('point_geo', [])
            if point_geo:
                lat, lon = point_geo
                lat, lon = float(lat), float(lon)
                if lat and lon:
                    folium.Marker(
                        [lat, lon],
                        popup=f"<b>{item.get('nom_courant_denomination', 'Sans nom')}</b><br>Action RSE: {item.get('action_rse', 'Non spécifié')}",
                        icon=folium.Icon(color="green", icon="leaf"),
                    ).add_to(m)
        folium_static(m)

# Fonction pour la classification des actions RSE
def classify_rse_actions(descriptions):
    classifier = pipeline("zero-shot-classification", model="typeform/distilbert-base-uncased-mnli")
    categories = [
        "La gouvernance de la structure",
        "Les droits humains",
        "Les conditions et relations de travail",
        "La responsabilité environnementale",
        "La loyauté des pratiques",
        "Les questions relatives au consommateur et à la protection du consommateur",
        "Les communautés et le développement local"
    ]
    
    classified_data = []
    for description in descriptions:
        result = classifier(description, categories)
        top_category = result['labels'][0]
        classified_data.append(top_category)
    
    return classified_data

# Nouvelle fonction pour l'onglet de classification RSE
def display_rse_categorizer():
    st.header("Classification des Actions RSE")
    st.write("Cet outil classe les actions RSE des entreprises selon les normes ISO 26000.")
    
    data, _ = get_data()
    if data:
        descriptions = [item['action_rse'] for item in data if 'action_rse' in item]
        categories = classify_rse_actions(descriptions)
        for i, category in enumerate(categories):
            st.write(f"Action RSE: {descriptions[i]}")
            st.write(f"Catégorie prédite: {category}")
            st.write("---")

# Main function orchestrating the app UI
def main():
    st.sidebar.title("Navigation")
    app_mode = st.sidebar.radio("Choisissez l'onglet", ["Organisations engagées", "GeoRSE Insights", "Classification RSE"])

    if app_mode == "Organisations engagées":
        display_organisations_engagees()
    elif app_mode == "GeoRSE Insights":
        display_geo_rse_insights()
    elif app_mode == "Classification RSE":
        display_rse_categorizer()

if __name__ == "__main__":
    main()