Spaces:
Sleeping
Sleeping
File size: 3,394 Bytes
153f5f2 715393b 5403c65 715393b 5403c65 715393b 6e8fc90 715393b 5f209db f4a45ca 715393b f4a45ca 715393b 3adb96e 715393b f4a45ca 153f5f2 f4a45ca 153f5f2 f4a45ca 715393b f4a45ca 3adb96e f4a45ca 5f209db f4a45ca 5f209db f4a45ca |
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 |
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",
)
|