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",
        )