Exercise 001_06
Cahier des charges⚓
1
# 001_06 — Analyse statistique avancée sur les données de fiabilité2
3
## Objectifs4
- Calculer des statistiques descriptives complètes sur ttf(i)5
- Calculer le MTBF (Mean Time Between Failures)6
- Ajouter des colonnes calculées : taux de défaillance λ(i), fiabilité R(i)7
- Générer plusieurs feuilles Excel avec différentes vues statistiques8
9
## Structure des feuilles10
11
### Feuille "do_stats"12
Statistiques descriptives sur ttf(i) :
13
- Moyenne, médiane, mode14
- Écart-type, variance15
- Min, max, étendue16
- Quartiles (Q1, Q2, Q3)17
- MTBF (Mean Time Between Failures)18
19
### Feuille "do_fiabilite"20
Calculs de fiabilité :
21
- Colonnes : i, ttf(i), N(i), R(i), λ(i), F(i)22
- R(i) = N(i) / N(0) : Fiabilité23
- λ(i) = dN(i) / (N(i) × Δt) : Taux de défaillance24
- F(i) = 1 - R(i) : Fonction de répartition (défaillance cumulée)25
26
### Feuille "do_summary"27
Résumé consolidé :
28
- Nombre total d'observations29
- Durée totale d'observation30
- Nombre de défaillances31
- MTBF32
- Taux de défaillance moyen33
34
## Formules utilisées35
36
### MTBF37
```38
MTBF = Σ(ttf(i)) / nombre_defaillances39
```40
41
### Fiabilité R(i)42
```43
R(i) = N(i) / N(0)44
```45
Proportion de composants encore fonctionnels
46
47
### Taux de défaillance λ(i)48
```49
λ(i) = dN(i) / (N(i-1) × Δt)50
```51
où Δt = ttf(i) - ttf(i-1)
52
53
### Fonction de répartition F(i)54
```55
F(i) = 1 - R(i)56
```57
Probabilité de défaillance avant le temps i
58
Code Python⚓
1
# TD_EDC_01_001_06.py2
# Résumé : Analyse statistique avancée - MTBF, taux de défaillance, fiabilité3
# Génère trois feuilles : do_stats, do_fiabilite, do_summary4
from pathlib import Path
5
import subprocess
6
import pandas as pd
7
import numpy as np
8
import xlsxwriter
9
10
11
def build_paths() -> Path:
12
"""Calcule le chemin du fichier Excel de sortie."""13
script = Path(__file__).resolve()
14
root = script.parent.parent
15
stem = script.stem
16
base_dir_name = script.parent.name
17
xlsx_dir = root / f"{base_dir_name}_do"
18
xlsx_dir.mkdir(parents=True, exist_ok=True)
19
20
xlsx_path = (xlsx_dir / f"{stem}.xlsx").resolve()
21
return xlsx_path
22
23
24
def delete_if_exists(file_path: Path) -> None:
25
"""Supprime le fichier s'il existe déjà."""26
if file_path.exists():
27
file_path.unlink()
28
29
30
def prepare_data(n: int = 9, ttf_values: list = None) -> pd.DataFrame:
31
"""Prépare les données de base."""32
i_values = list(range(n + 1))
33
dN_values = [0] + [1] * n
34
N_values = [n - i for i in range(n + 1)]
35
36
df = pd.DataFrame({
37
'i': i_values,
38
'ttf(i)': ttf_values if ttf_values else [0] * (n + 1),
39
'dN(i)': dN_values,
40
'N(i)': N_values
41
})
42
43
return df
44
45
46
def calculate_statistics(df: pd.DataFrame) -> pd.DataFrame:
47
"""Calcule les statistiques descriptives sur ttf(i)."""48
ttf = df['ttf(i)']
49
50
stats = {
51
'Statistique': ['Moyenne', 'Médiane', 'Écart-type', 'Variance',
52
'Min', 'Max', 'Étendue', 'Q1', 'Q2', 'Q3', 'MTBF'],
53
'Valeur': [54
ttf.mean(),
55
ttf.median(),
56
ttf.std(),
57
ttf.var(),
58
ttf.min(),
59
ttf.max(),
60
ttf.max() - ttf.min(),
61
ttf.quantile(0.25),
62
ttf.quantile(0.50),
63
ttf.quantile(0.75),
64
ttf.sum() / df['dN(i)'].sum() # MTBF
65
]
66
}
67
68
return pd.DataFrame(stats)
69
70
71
def calculate_reliability(df: pd.DataFrame) -> pd.DataFrame:
72
"""Calcule les indicateurs de fiabilité."""73
N_0 = df['N(i)'].iloc[0]
74
75
# Fiabilité R(i) = N(i) / N(0)76
R_i = df['N(i)'] / N_0
77
78
# Fonction de répartition F(i) = 1 - R(i)79
F_i = 1 - R_i
80
81
# Taux de défaillance λ(i) = dN(i) / (N(i-1) × Δt)82
lambda_i = []
83
for i in range(len(df)):
84
if i == 0:
85
lambda_i.append(0)
86
else:87
delta_t = df['ttf(i)'].iloc[i] - df['ttf(i)'].iloc[i-1]
88
N_prev = df['N(i)'].iloc[i-1]
89
dN = df['dN(i)'].iloc[i]
90
if delta_t > 0 and N_prev > 0:
91
lambda_i.append(dN / (N_prev * delta_t))
92
else:93
lambda_i.append(0)
94
95
df_reliability = pd.DataFrame({
96
'i': df['i'],
97
'ttf(i)': df['ttf(i)'],
98
'N(i)': df['N(i)'],
99
'R(i)': R_i,
100
'F(i)': F_i,
101
'λ(i)': lambda_i
102
})
103
104
return df_reliability
105
106
107
def create_summary(df: pd.DataFrame) -> pd.DataFrame:
108
"""Crée un résumé consolidé."""109
total_obs = len(df) - 1 # Exclure la première ligne
110
duree_totale = df['ttf(i)'].max()
111
nb_defaillances = df['dN(i)'].sum()
112
mtbf = df['ttf(i)'].sum() / nb_defaillances if nb_defaillances > 0 else 0
113
lambda_moyen = nb_defaillances / duree_totale if duree_totale > 0 else 0
114
115
summary = {
116
'Indicateur': [117
'Nombre d\'observations',118
'Durée totale (heures)',119
'Nombre de défaillances',120
'MTBF (heures)',121
'Taux de défaillance moyen (1/h)'122
],
123
'Valeur': [124
total_obs,125
duree_totale,126
nb_defaillances,127
mtbf,128
lambda_moyen129
]
130
}
131
132
return pd.DataFrame(summary)
133
134
135
def write_to_excel(xlsx_path: Path, df_stats: pd.DataFrame,
136
df_reliability: pd.DataFrame, df_summary: pd.DataFrame) -> None:
137
"""Écrit les trois DataFrames dans le fichier Excel."""138
workbook = xlsxwriter.Workbook(str(xlsx_path))
139
140
# Feuille 1 : Statistiques descriptives141
ws_stats = workbook.add_worksheet("do_stats")
142
for col_num, col_name in enumerate(df_stats.columns):
143
ws_stats.write(0, col_num, col_name)
144
for row_num, row_data in enumerate(df_stats.values, start=1):
145
for col_num, value in enumerate(row_data):
146
ws_stats.write(row_num, col_num, value)
147
print(f"✓ Feuille 'do_stats' créée avec {len(df_stats)} statistiques")
148
149
# Feuille 2 : Fiabilité150
ws_reliability = workbook.add_worksheet("do_fiabilite")
151
for col_num, col_name in enumerate(df_reliability.columns):
152
ws_reliability.write(0, col_num, col_name)
153
for row_num, row_data in enumerate(df_reliability.values, start=1):
154
for col_num, value in enumerate(row_data):
155
ws_reliability.write(row_num, col_num, value)
156
print(f"✓ Feuille 'do_fiabilite' créée avec {len(df_reliability)} lignes")
157
158
# Feuille 3 : Résumé159
ws_summary = workbook.add_worksheet("do_summary")
160
for col_num, col_name in enumerate(df_summary.columns):
161
ws_summary.write(0, col_num, col_name)
162
for row_num, row_data in enumerate(df_summary.values, start=1):
163
for col_num, value in enumerate(row_data):
164
ws_summary.write(row_num, col_num, value)
165
print(f"✓ Feuille 'do_summary' créée avec {len(df_summary)} indicateurs")
166
167
workbook.close()
168
169
170
def open_in_excel(xlsx_path: Path) -> None:
171
"""Ouvre le classeur généré dans Excel."""172
subprocess.Popen(["start", "excel", str(xlsx_path)], shell=True)
173
174
175
def main() -> None:
176
"""Pipeline : calculs statistiques et de fiabilité."""177
xlsx_path = build_paths()
178
179
ttf_i = [0, 250, 400, 550, 700, 850, 1000, 1150, 1300, 1450]
180
181
# Préparer les données182
df = prepare_data(n=9, ttf_values=ttf_i)
183
print("Données préparées")
184
185
# Calculer les statistiques186
df_stats = calculate_statistics(df)
187
print("\nStatistiques descriptives :")
188
print(df_stats)
189
print()190
191
# Calculer la fiabilité192
df_reliability = calculate_reliability(df)
193
print("Indicateurs de fiabilité :")
194
print(df_reliability)
195
print()196
197
# Créer le résumé198
df_summary = create_summary(df)
199
print("Résumé consolidé :")
200
print(df_summary)
201
print()202
203
# Écrire dans Excel204
delete_if_exists(xlsx_path)
205
write_to_excel(xlsx_path, df_stats, df_reliability, df_summary)
206
207
print(f"Fichier créé : {xlsx_path}")
208
open_in_excel(xlsx_path)
209
210
211
if __name__ == "__main__":
212
main()213
Documentation⚓
1
# 001_06.py — Analyse statistique avancée2
3
Ce script Python effectue une analyse statistique avancée incluant le calcul du MTBF (Mean Time Between Failures), du taux de défaillance et de la fiabilité.
4
5
## Objectifs pédagogiques6
- Comprendre les concepts de fiabilité et de MTBF7
- Calculer le taux de défaillance (λ) et la fiabilité R(t)8
- Générer plusieurs feuilles Excel avec des analyses différentes9
- Utiliser pandas et numpy pour les calculs statistiques10
11
## Fonctionnement12
1. **Génération de données TTF (Time To Failure)**
13
- Création d'un jeu de données de temps avant défaillance14
- Calcul du MTBF à partir des données observées15
16
2. **Calculs de fiabilité**
17
- Taux de défaillance λ = 1/MTBF18
- Fonction de fiabilité R(t) = e^(-λt)19
- Calculs sur différentes périodes20
21
3. **Export multi-feuilles**
22
- Feuille `do_stats` : statistiques descriptives
23
- Feuille `do_fiabilite` : calculs de fiabilité
24
- Feuille `do_summary` : résumé et indicateurs clés
25
26
## Points techniques27
- Utilisation de `pandas` pour l'analyse de données
28
- Utilisation de `numpy` pour les calculs exponentiels
29
- Export multi-feuilles avec `xlsxwriter`
30
- Structure de données tabulaire pour analyses statistiques31
32
## Utilisation33
Ce script sert de modèle pour effectuer des analyses de fiabilité sur des données de défaillance, avec export automatisé dans Excel.
34
35
---36
*Fichier généré automatiquement par GitHub Copilot (GPT-4.1) — 11/12/2025*37