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 @st.cache_data 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", )