File size: 2,676 Bytes
bdbfec0
c6aa119
 
fadc8f0
 
1883e68
fadc8f0
 
c6aa119
 
 
f8cfe0e
188de0e
 
 
554c057
 
bf92384
188de0e
 
 
 
 
 
554c057
b9b1499
188de0e
b9b1499
f88e06d
e95156c
fadc8f0
 
79104c9
 
f8cfe0e
 
8f47c03
f8cfe0e
 
 
 
 
8f47c03
e95156c
 
2c9e460
e95156c
bf92384
554c057
 
 
 
 
 
e95156c
4b29661
fadc8f0
b807d87
6983fe3
e95156c
6983fe3
e95156c
6983fe3
 
fadc8f0
 
895d632
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
import streamlit as st
import pandas as pd
import requests
import folium
from streamlit_folium import folium_static

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", [])
        if not records:
            st.error("Aucun enregistrement trouvé dans les données de l'API.")
            return []
        cleaned_data = []
        for record in records:
            fields = record.get("fields", {})
            point_geo = fields.get("geolocalisation")
            if point_geo and isinstance(point_geo, list) and len(point_geo) == 2:
                lat, lon = point_geo
                fields["latitude"] = lat
                fields["longitude"] = lon
                cleaned_data.append(fields)
        return cleaned_data
    else:
        st.error(f"Échec de la récupération des données de l'API. Statut: {response.status_code}")
        return []

def display_organisations_engagees(data):
    st.markdown("## OPEN DATA RSE")
    st.markdown("### Découvrez les organisations engagées RSE de la métropole de Bordeaux")
    num_etablissements = len(data)
    st.markdown(f"Nombre d'établissements : {num_etablissements}")
    if data:
        df = pd.DataFrame(data)
        st.dataframe(df[['nom_courant_denomination', 'commune', 'libelle_section_naf', 'tranche_effectif_entreprise', 'action_rse']].rename(columns={
            'nom_courant_denomination': 'Nom',
            'commune': 'Commune',
            'libelle_section_naf': 'Section NAF',
            'tranche_effectif_entreprise': 'Effectif',
            'action_rse': 'Action RSE'
        }))

def display_map(data):
    m = folium.Map(location=[44.837789, -0.57918], zoom_start=12)
    for item in data:
        # Utilise les coordonnées extraites
        if "latitude" in item and "longitude" in item:
            folium.Marker(
                [item["latitude"], item["longitude"]],
                icon=folium.Icon(color="green", icon="leaf"),
                popup=item.get('nom_courant_denomination', 'Information non disponible'),
            ).add_to(m)
    folium_static(m)

def main():
    st.sidebar.title("Navigation")
    app_mode = st.sidebar.radio("Choisissez l'onglet", ["Organisations engagées", "Localisation des Entreprises"])
    data = get_data()
    if app_mode == "Organisations engagées":
        display_organisations_engagees(data)
    elif app_mode == "Localisation des Entreprises":
        display_map(data)

if __name__ == "__main__":
    main()