LaurentTRIPIED commited on
Commit
881a55d
1 Parent(s): c6aa119

Changement colonne

Browse files
Files changed (1) hide show
  1. app.py +25 -32
app.py CHANGED
@@ -1,60 +1,53 @@
1
- # Importation des bibliothèques nécessaires
2
  import streamlit as st
3
  import pandas as pd
4
  import requests
5
 
6
- # Fonction pour récupérer les données de l'API
7
- def get_data():
8
  """
9
- Cette fonction effectue une requête GET vers l'API spécifiée et retourne une liste des enregistrements (records).
10
- Elle utilise l'URL de l'API pour récupérer les données des établissements engagés dans la RSE à Bordeaux.
11
- La fonction gère également les éventuelles erreurs de requête.
12
 
 
 
 
 
13
  Returns:
14
- List[Dict]: Une liste de dictionnaires chaque dictionnaire représente les données d'un établissement.
15
  """
16
- # URL de l'API pour accéder aux données des établissements RSE
17
- url = "https://opendata.bordeaux-metropole.fr/api/records/1.0/search/?dataset=met_etablissement_rse&q=&rows=100"
18
- # Envoi de la requête GET à l'API
19
  response = requests.get(url)
20
- # Vérification du statut de la réponse
21
  if response.status_code == 200:
22
- # Conversion de la réponse en JSON
23
  data = response.json()
24
- # Récupération des enregistrements (records) depuis la réponse
25
  records = data.get("records", [])
26
- # Extraction des champs (fields) de chaque enregistrement
27
- return [record["fields"] for record in records]
28
  else:
29
- # Retourne une liste vide si la requête échoue
30
- return []
31
 
32
- # Fonction pour afficher les organisations engagées dans l'application Streamlit
33
  def display_organisations_engagees():
34
  """
35
- Cette fonction récupère les données des organisations engagées via la fonction `get_data`, les convertit en un DataFrame pandas,
36
- puis utilise Streamlit pour les afficher dans un tableau sur l'interface utilisateur.
37
  """
38
- # Récupération des données via la fonction get_data
39
- data = get_data()
40
- # Vérification si des données ont été récupérées
 
41
  if data:
42
- # Conversion des données en DataFrame pandas pour une manipulation et un affichage plus faciles
43
  df = pd.DataFrame(data)
44
- # Affichage du DataFrame dans l'application Streamlit
45
- st.write("Organisations engagées", df)
 
 
 
 
 
 
46
  else:
47
- # Message d'erreur en cas d'absence de données
48
  st.write("Aucune donnée disponible.")
49
 
50
- # Point d'entrée principal de l'application Streamlit
51
  if __name__ == "__main__":
52
- # Configuration de la barre latérale pour la navigation entre différents onglets
53
  st.sidebar.title("Navigation")
54
- # Option de sélection pour les différents onglets de l'application
55
  app_mode = st.sidebar.selectbox("Choisissez l'onglet", ["Organisations engagées", "Autre Onglet"])
56
 
57
- # Affichage de l'onglet "Organisations engagées" si sélectionné
58
  if app_mode == "Organisations engagées":
59
  display_organisations_engagees()
60
- # Cette structure peut être étendue pour ajouter d'autres onglets à l'application
 
 
1
  import streamlit as st
2
  import pandas as pd
3
  import requests
4
 
5
+ def get_data(page, rows_per_page=25):
 
6
  """
7
+ Récupère les données paginées de l'API.
 
 
8
 
9
+ Args:
10
+ page (int): Numéro de la page à récupérer.
11
+ rows_per_page (int): Nombre de lignes par page.
12
+
13
  Returns:
14
+ List[Dict]: Données de la page spécifiée sous forme de liste de dictionnaires.
15
  """
16
+ # Construction de l'URL avec pagination
17
+ url = f"https://opendata.bordeaux-metropole.fr/api/records/1.0/search/?dataset=met_etablissement_rse&q=&rows={rows_per_page}&start={page * rows_per_page}"
 
18
  response = requests.get(url)
 
19
  if response.status_code == 200:
 
20
  data = response.json()
 
21
  records = data.get("records", [])
22
+ return [record["fields"] for record in records], data.get("nhits", 0)
 
23
  else:
24
+ return [], 0
 
25
 
 
26
  def display_organisations_engagees():
27
  """
28
+ Affiche les organisations engagées avec pagination et colonnes réordonnées.
 
29
  """
30
+ # Pagination
31
+ page_number = st.sidebar.number_input("Page number", min_value=0, value=0, step=1)
32
+ data, total_hits = get_data(page_number)
33
+
34
  if data:
 
35
  df = pd.DataFrame(data)
36
+ # Réordonner les colonnes selon la spécification
37
+ cols_order = ["nom_courant_denomination", "tranche_effectif_entreprise", "commune", "hierarchie_naf", "action_rse"]
38
+ # Filtre les colonnes pour s'assurer qu'elles existent dans les données
39
+ cols_order = [col for col in cols_order if col in df.columns]
40
+ df = df[cols_order]
41
+
42
+ # Affichage des données avec les colonnes réordonnées
43
+ st.write(f"Organisations engagées - Page {page_number + 1} sur {((total_hits - 1) // 25) + 1}", df)
44
  else:
 
45
  st.write("Aucune donnée disponible.")
46
 
 
47
  if __name__ == "__main__":
 
48
  st.sidebar.title("Navigation")
 
49
  app_mode = st.sidebar.selectbox("Choisissez l'onglet", ["Organisations engagées", "Autre Onglet"])
50
 
 
51
  if app_mode == "Organisations engagées":
52
  display_organisations_engagees()
53
+