MaxBDKT commited on
Commit
eb93b5a
·
verified ·
1 Parent(s): 2e9ef4e

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +11 -34
src/streamlit_app.py CHANGED
@@ -3,78 +3,55 @@ import pandas as pd
3
  import numpy as np
4
  import plotly.graph_objects as go
5
 
6
- # Configuration de la page
7
  st.set_page_config(page_title="Brake_Lab_Test", layout="wide")
8
  st.title("🔬 Lab_test_visual : Analyse de Performance")
9
 
10
- # --- PARAMÈTRES GOOGLE DRIVE (Lien direct CSV) ---
11
- # Votre ID : 16tPsyYoe8O3LGM9FGOx5B-Je3S7ggVqUZPrs9XYDUHA
12
- sheet_id = '16tPsyYoe8O3LGM9FGOx5B-Je3S7ggVqUZPrs9XYDUHA'
13
- # On force l'export de l'onglet 'Data' en format CSV pour plus de simplicité
14
- url = f'https://docs.google.com/spreadsheets/d/{sheet_id}/gviz/tq?tqx=out:csv&sheet=Data'
15
-
16
- @st.cache_data(ttl=300)
17
  def load_data():
18
- # Connexion directe sans gdown
19
- return pd.read_csv(url)
20
 
21
- # --- CHARGEMENT ET INTERFACE ---
22
  try:
23
  df = load_data()
 
24
 
25
- # Nettoyage des noms de colonnes (au cas où il y aurait des espaces)
26
- df.columns = df.columns.str.strip()
27
-
28
- # Barre latérale : Sélection de la valeur X (40 à 200)
29
  st.sidebar.header("⚙️ Configuration")
30
  x_input = st.sidebar.slider("Valeur cible (X)", 40, 200, 100)
31
 
32
- st.write(f"Comparaison des modèles pour une valeur d'entrée de **{x_input}**")
33
-
34
- # --- GRAPHIQUE DES RÉGRESSIONS ---
35
  fig = go.Figure()
36
  x_range = np.linspace(40, 200, 100)
37
-
38
  colors = ['#636EFA', '#EF553B', '#00CC96', '#AB63FA', '#FFA15A', '#19D3F3']
39
 
40
  for i, (index, row) in enumerate(df.iterrows()):
41
  color = colors[i % len(colors)]
42
  model = row['model name']
43
 
44
- # Calcul y = ax + b
45
  y_dry = row['dry a'] * x_range + row['dry b']
46
  y_wet = row['wet a'] * x_range + row['wet b']
47
 
48
  fig.add_trace(go.Scatter(x=x_range, y=y_dry, mode='lines',
49
  name=f"{model} (Sec)", line=dict(color=color, width=3)))
50
-
51
  fig.add_trace(go.Scatter(x=x_range, y=y_wet, mode='lines',
52
  name=f"{model} (Wet)", line=dict(color=color, width=2, dash='dot')))
53
 
54
  fig.add_vline(x=x_input, line_width=2, line_dash="dash", line_color="black")
55
-
56
- fig.update_layout(height=600, xaxis_title="Entrée (X)", yaxis_title="Performance (Y)", hovermode="x unified")
57
  st.plotly_chart(fig, use_container_width=True)
58
 
59
- # --- TABLEAU RÉCAPITULATIF ---
60
- st.subheader(f"📊 Performances calculées à X = {x_input}")
61
-
62
  recap_data = []
63
  for index, row in df.iterrows():
64
  val_dry = row['dry a'] * x_input + row['dry b']
65
  val_wet = row['wet a'] * x_input + row['wet b']
66
- perte = ((val_dry - val_wet) / val_dry) * 100 if val_dry != 0 else 0
67
-
68
  recap_data.append({
69
  "Modèle": row['model name'],
70
  "Résultat Sec": round(val_dry, 2),
71
- "Résultat Humide": round(val_wet, 2),
72
- "Perte d'efficacité (%)": f"{round(perte, 1)}%"
73
  })
74
-
75
  st.table(pd.DataFrame(recap_data))
76
 
77
  except Exception as e:
78
- st.error("⚠️ Impossible de lire l'onglet 'Data'.")
79
- st.write("Vérifiez que votre Google Sheet possède bien un onglet nommé **Data** (avec une majuscule au D).")
80
- st.info(f"Détail technique : {e}")
 
3
  import numpy as np
4
  import plotly.graph_objects as go
5
 
 
6
  st.set_page_config(page_title="Brake_Lab_Test", layout="wide")
7
  st.title("🔬 Lab_test_visual : Analyse de Performance")
8
 
9
+ # --- CHARGEMENT LOCAL ---
10
+ @st.cache_data
 
 
 
 
 
11
  def load_data():
12
+ # On lit le fichier que vous venez de déposer sur Hugging Face
13
+ return pd.read_excel("Brake_Lab_Test_Data.xlsx", sheet_name='data')
14
 
 
15
  try:
16
  df = load_data()
17
+ df.columns = df.columns.str.strip() # Nettoie les noms de colonnes
18
 
 
 
 
 
19
  st.sidebar.header("⚙️ Configuration")
20
  x_input = st.sidebar.slider("Valeur cible (X)", 40, 200, 100)
21
 
22
+ # --- GRAPHIQUE ---
 
 
23
  fig = go.Figure()
24
  x_range = np.linspace(40, 200, 100)
 
25
  colors = ['#636EFA', '#EF553B', '#00CC96', '#AB63FA', '#FFA15A', '#19D3F3']
26
 
27
  for i, (index, row) in enumerate(df.iterrows()):
28
  color = colors[i % len(colors)]
29
  model = row['model name']
30
 
31
+ # Calcul Sec et Humide
32
  y_dry = row['dry a'] * x_range + row['dry b']
33
  y_wet = row['wet a'] * x_range + row['wet b']
34
 
35
  fig.add_trace(go.Scatter(x=x_range, y=y_dry, mode='lines',
36
  name=f"{model} (Sec)", line=dict(color=color, width=3)))
 
37
  fig.add_trace(go.Scatter(x=x_range, y=y_wet, mode='lines',
38
  name=f"{model} (Wet)", line=dict(color=color, width=2, dash='dot')))
39
 
40
  fig.add_vline(x=x_input, line_width=2, line_dash="dash", line_color="black")
41
+ fig.update_layout(height=600, xaxis_title="Entrée (X)", yaxis_title="Performance (Y)")
 
42
  st.plotly_chart(fig, use_container_width=True)
43
 
44
+ # --- TABLEAU ---
 
 
45
  recap_data = []
46
  for index, row in df.iterrows():
47
  val_dry = row['dry a'] * x_input + row['dry b']
48
  val_wet = row['wet a'] * x_input + row['wet b']
 
 
49
  recap_data.append({
50
  "Modèle": row['model name'],
51
  "Résultat Sec": round(val_dry, 2),
52
+ "Résultat Humide": round(val_wet, 2)
 
53
  })
 
54
  st.table(pd.DataFrame(recap_data))
55
 
56
  except Exception as e:
57
+ st.error(f"Erreur de lecture : {e}")