créé moi une app qui permet de suivre les débits injectés de 3 produits chimiques (BIOPER, PERCOR INHIB, PERDEFLOC K01) sur 2 sites différents (MIOC et REP) en fonction du temps (sur 3 mois) avec des valeurs fictives. L'axe des ordonnées sera le débit injecté en L/j.
To upload files, please first save the app
import streamlit as st
import pandas as pd
import plotly.express as px
import datetime
import numpy as np
# Configuration de la page
st.set_page_config(page_title="Suivi des Débits d'Injection", layout="wide")
# Titre de l'application
st.title("Suivi des Débits d'Injection des Produits Chimiques")
# Création des données fictives
def generate_data():
# Créer une plage de dates sur 3 mois
dates = pd.date_range(start='2023-01-01', end='2023-03-31', freq='D')
# Définir les sites et produits
sites = ['MIOC', 'REP']
products = ['BIOPER', 'PERCOR INHIB', 'PERDEFLOC K01']
# Création des données
data = []
for site in sites:
for product in products:
# Générer des débits aléatoires avec une tendance
base_flow = np.random.uniform(50, 150)
noise = np.random.normal(0, 5, len(dates))
trend = np.linspace(0, 20, len(dates))
flows = base_flow + noise + trend
for date, flow in zip(dates, flows):
data.append({
'Date': date,
'Site': site,
'Produit': product,
'Débit (L/j)': max(0, flow) # Assurer que le débit n'est pas négatif
})
return pd.DataFrame(data)
# Charger les données
df = generate_data()
# Filtres dans la barre latérale
st.sidebar.header("Filtres")
# Sélection du site
selected_sites = st.sidebar.multiselect(
"Sélectionner les sites",
options=df['Site'].unique(),
default=df['Site'].unique()
)
# Sélection des produits
selected_products = st.sidebar.multiselect(
"Sélectionner les produits",
options=df['Produit'].unique(),
default=df['Produit'].unique()
)
# Filtrer les données
filtered_df = df[
(df['Site'].isin(selected_sites)) &
(df['Produit'].isin(selected_products))
]
# Création du graphique
fig = px.line(
filtered_df,
x='Date',
y='Débit (L/j)',
color='Produit',
line_dash='Site',
title='Évolution des Débits d\'Injection par Produit et Site',
labels={'Débit (L/j)': 'Débit (L/j)', 'Date': 'Date'}
)
fig.update_layout(
height=600,
hovermode='x unified',
legend=dict(
orientation="h",
yanchor="bottom",
y=1.02,
xanchor="right",
x=1
)
)
# Afficher le graphique
st.plotly_chart(fig, use_container_width=True)
# Afficher les statistiques
st.header("Statistiques par Site et Produit")
# Calculer les statistiques
stats_df = filtered_df.groupby(['Site', 'Produit'])['Débit (L/j)'].agg([
('Moyenne', 'mean'),
('Min', 'min'),
('Max', 'max')
]).round(2)
# Afficher le tableau des statistiques
st.dataframe(stats_df, use_container_width=True)
# Afficher les données brutes
if st.checkbox("Afficher les données brutes"):
st.dataframe(filtered_df)
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?