créé moi une application qui me permet d'avoir un graphique qui indique le budget consommé par produits chimiques et par site à une date T. Il faut que le cout soit calculé en dollars et qu'il y ait la possibilité de sélectionner plusieurs sites (et les colonnes seront côte à côte). Les 6 produits chimiques sont : PERDEFLOC K01, PERMEA SCAV, PERCOR INHIB, PERSUPERCLEAN, BIOPER, PERDEFOAM.
To upload files, please first save the app
import streamlit as st
import pandas as pd
import plotly.graph_objects as go
from datetime import datetime, date
# Configuration de la page
st.set_page_config(page_title="Suivi Budget Produits Chimiques", layout="wide")
# Titre de l'application
st.title("Suivi Budget Produits Chimiques par Site")
# Création des données exemple
def create_sample_data():
sites = ["Site A", "Site B", "Site C", "Site D", "Site E"]
chemicals = [
"PERDEFLOC K01",
"PERMEA SCAV",
"PERCOR INHIB",
"PERSUPERCLEAN",
"BIOPER",
"PERDEFOAM"
]
data = []
for site in sites:
for chemical in chemicals:
# Génération de données aléatoires pour l'exemple
cost = float(pd.DataFrame({'cost': [100, 200, 300, 400, 500]}).sample().iloc[0])
data.append({
'Site': site,
'Produit': chemical,
'Coût ($)': cost
})
return pd.DataFrame(data)
# Chargement des données
df = create_sample_data()
# Sélection des sites
sites_disponibles = df['Site'].unique()
sites_selectionnes = st.multiselect(
'Sélectionnez les sites à afficher',
options=sites_disponibles,
default=sites_disponibles[0]
)
# Date de référence
date_reference = st.date_input(
"Sélectionnez la date de référence",
date.today()
)
# Filtrage des données selon les sites sélectionnés
df_filtered = df[df['Site'].isin(sites_selectionnes)]
# Création du graphique
if sites_selectionnes:
fig = go.Figure()
# Ajout des barres pour chaque site
for site in sites_selectionnes:
site_data = df_filtered[df_filtered['Site'] == site]
fig.add_trace(go.Bar(
name=site,
x=site_data['Produit'],
y=site_data['Coût ($)'],
text=site_data['Coût ($)'].round(2),
textposition='auto',
))
# Mise en forme du graphique
fig.update_layout(
title=f"Budget consommé par produits chimiques au {date_reference}",
xaxis_title="Produits Chimiques",
yaxis_title="Coût ($)",
barmode='group',
height=600
)
# Affichage du graphique
st.plotly_chart(fig, use_container_width=True)
# Affichage des données en tableau
st.subheader("Détail des données")
st.dataframe(
df_filtered.pivot(index='Produit', columns='Site', values='Coût ($)')
.round(2)
)
else:
st.warning("Veuillez sélectionner au moins un site.")
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?