créé moi une app ou je peux avoir un graphe qui fait le suivi du coût par point d'injection pour trois produits chimiques différents (PERBREAK, PERCOR INHIB, PERDEFLOC K01), il n'y a qu'un seul des trois produits pour chaque point et les points d'injection sont au nombre de 10 (SPT_T500_IN, SPT_MANGARA_ARRIVAL, CPF_V100_IN, PAD_Z_MANIFOLD_PROD, PAD_Y_MANIFOLD_PROD, PAD_Y03_CONTROL_LINE, PAD_Y04_CONTROL_LINE, PAD_Y05_CONTROL_LINE, PAD_T_MANIFOLD_PROD_PAD_K_MANIFOLD_PROD
To upload files, please first save the app
import streamlit as st
import pandas as pd
import plotly.express as px
from datetime import datetime
import numpy as np
st.title("Suivi des Coûts des Produits Chimiques par Point d'Injection")
# Création des données d'exemple
points_injection = [
'SPT_T500_IN',
'SPT_MANGARA_ARRIVAL',
'CPF_V100_IN',
'PAD_Z_MANIFOLD_PROD',
'PAD_Y_MANIFOLD_PROD',
'PAD_Y03_CONTROL_LINE',
'PAD_Y04_CONTROL_LINE',
'PAD_Y05_CONTROL_LINE',
'PAD_T_MANIFOLD_PROD',
'PAD_K_MANIFOLD_PROD'
]
produits = ['PERBREAK', 'PERCOR INHIB', 'PERDEFLOC K01']
# Création d'un DataFrame pour stocker les données
if 'data' not in st.session_state:
# Initialisation avec des données aléatoires
data_init = []
for point in points_injection:
produit = np.random.choice(produits) # Un seul produit par point
cout = np.random.uniform(100, 1000) # Coût aléatoire entre 100 et 1000
data_init.append({
'Point_Injection': point,
'Produit': produit,
'Cout': cout,
'Date': datetime.now().strftime('%Y-%m-%d')
})
st.session_state.data = pd.DataFrame(data_init)
# Interface pour ajouter/modifier des données
with st.sidebar:
st.header("Ajouter/Modifier des données")
point_selected = st.selectbox("Point d'injection", points_injection)
produit_selected = st.selectbox("Produit chimique", produits)
cout = st.number_input("Coût", min_value=0.0, max_value=10000.0, step=0.1)
date = st.date_input("Date")
if st.button("Ajouter/Mettre à jour"):
# Mettre à jour ou ajouter une nouvelle entrée
mask = (st.session_state.data['Point_Injection'] == point_selected) & \
(st.session_state.data['Date'] == date.strftime('%Y-%m-%d'))
new_data = {
'Point_Injection': point_selected,
'Produit': produit_selected,
'Cout': cout,
'Date': date.strftime('%Y-%m-%d')
}
if mask.any():
st.session_state.data.loc[mask] = pd.Series(new_data)
else:
st.session_state.data = pd.concat([st.session_state.data,
pd.DataFrame([new_data])],
ignore_index=True)
st.success("Données mises à jour!")
# Affichage des données
st.subheader("Données actuelles")
st.dataframe(st.session_state.data)
# Création du graphique
fig = px.bar(st.session_state.data,
x='Point_Injection',
y='Cout',
color='Produit',
title='Coût par Point d\'Injection et par Produit',
labels={
'Point_Injection': 'Point d\'Injection',
'Cout': 'Coût',
'Produit': 'Produit Chimique'
})
fig.update_layout(
xaxis_tickangle=-45,
height=600
)
st.plotly_chart(fig, use_container_width=True)
# Option pour télécharger les données
csv = st.session_state.data.to_csv(index=False).encode('utf-8')
st.download_button(
label="Télécharger les données en CSV",
data=csv,
file_name="couts_produits_chimiques.csv",
mime="text/csv",
)
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?