MLRSTREAMLIT / apptest.py
MMOON's picture
Rename app.py to apptest.py
8c21d5b verified
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",
)