Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import requests | |
| import pandas as pd | |
| import matplotlib.pyplot as plt | |
| from datetime import datetime, timedelta | |
| # Configuration de l'application | |
| st.title("Base de données des pesticides de l'UE") | |
| # Fonction pour récupérer la liste des produits | |
| def get_products(): | |
| url = "https://api.datalake.sante.service.ec.europa.eu/sante/pesticides/pesticide_residues_products" | |
| params = {"format": "json", "language": "FR", "api-version": "v2.0"} | |
| headers = { | |
| "User-Agent": "StreamlitApp/1.0" | |
| } | |
| response = requests.get(url, params=params, headers=headers) | |
| response.raise_for_status() | |
| return response.json() | |
| # Affichage temporaire pour vérifier la structure de la réponse | |
| products = get_products() | |
| st.write("Structure de la réponse de l'API :", products) | |
| # Vérifiez que 'products' est une liste de dictionnaires | |
| if isinstance(products, list) and all(isinstance(product, dict) for product in products): | |
| product_names = [product['name'] for product in products] | |
| else: | |
| st.error("La structure de la réponse de l'API n'est pas celle attendue.") | |
| product_names = [] | |
| selected_product = st.selectbox("Sélectionnez un produit agricole", product_names) | |
| # Filtrage par période | |
| period = st.radio("Filtrer par période", ["Toutes dates", "Dernière semaine", "Dernier mois", "6 prochains mois"]) | |
| # Bouton pour lancer l'analyse | |
| if st.button("Analyser les données"): | |
| if product_names: # Vérifiez que la liste n'est pas vide | |
| product_id = next(product['id'] for product in products if product['name'] == selected_product) | |
| mrls = get_mrls(product_id) | |
| # Filtrer les données par période | |
| today = datetime.today() | |
| if period == "Dernière semaine": | |
| start_date = today - timedelta(days=7) | |
| elif period == "Dernier mois": | |
| start_date = today - timedelta(days=30) | |
| elif period == "6 prochains mois": | |
| start_date = today + timedelta(days=180) | |
| else: | |
| start_date = datetime.min | |
| filtered_mrls = [mrl for mrl in mrls if datetime.strptime(mrl['date'], "%Y-%m-%d") >= start_date] | |
| # Afficher les résultats dans un tableau | |
| mrl_data = [] | |
| for mrl in filtered_mrls: | |
| substance_info = get_substance_info(mrl['substance_id']) | |
| mrl_data.append({ | |
| "Substance": substance_info['name'], | |
| "Valeur LMR": mrl['value'], | |
| "Date d'application": mrl['date'], | |
| "Règlement": f"[Lien]({mrl['regulation_url']})" | |
| }) | |
| df = pd.DataFrame(mrl_data) | |
| st.write(df) | |
| # Visualisation graphique | |
| plt.figure(figsize=(10, 6)) | |
| for substance in df['Substance'].unique()[:10]: # Limiter aux 10 substances les plus fréquentes | |
| subset = df[df['Substance'] == substance] | |
| plt.plot(subset['Date d\'application'], subset['Valeur LMR'], label=substance) | |
| plt.xlabel("Date d'application") | |
| plt.ylabel("Valeur LMR") | |
| plt.title("Évolution des LMR dans le temps") | |
| plt.legend() | |
| st.pyplot(plt) | |
| # Téléchargement CSV | |
| csv = df.to_csv(index=False) | |
| st.download_button( | |
| label="Télécharger les données en CSV", | |
| data=csv, | |
| file_name="lmr_data.csv", | |
| mime="text/csv", | |
| ) | |