9.1 Encodage des données univariées
Objectifs d'apprentissage
À la fin de cette section, vous devriez être en mesure de :
- 9.1.1 Visualiser des données à l'aide de boîtes à moustaches, d'histogrammes et de diagrammes de Pareto correctement étiquetés.
- 9.1.2 Utiliser Python pour générer diverses visualisations de données pour des données univariées.
Nous avons vu que les données peuvent provenir d'enquêtes, d'expériences, de sondages, de questionnaires, de capteurs ou d'autres sources. Les données peuvent être représentées sous forme de valeurs numériques, comme l'âge ou le salaire, ou sous forme de catégories, comme la couleur des cheveux, l'affiliation politique, etc. Une fois les données recueillies et organisées, une personne travaillant en science des données s'intéresse à la création de diverses visualisations, graphiques et diagrammes pour faciliter la communication et aider à détecter des tendances et des motifs.
L'encodage de texte consiste à convertir le texte en une représentation numérique que les algorithmes d'apprentissage automatique peuvent traiter (voir Nettoyage et prétraitement des données). Les données univariées (Univariate data) comprennent des observations ou des mesures portant sur une seule caractéristique ou un seul attribut, et les données doivent être converties dans un format structuré convenant à l'analyse et à la visualisation. Les données bivariées (Bivariate data) désignent des données recueillies sur deux variables (éventuellement liées) telles que « les années d'expérience » et « le salaire ». La méthode de visualisation de données choisie dépendra du caractère univarié ou bivarié des données, comme nous le verrons plus loin dans ce chapitre. Par exemple, des boîtes à moustaches peuvent être utilisées pour représenter des données univariées, tandis qu'un nuage de points peut servir à représenter des données bivariées.
Les données univariées peuvent être visualisées de nombreuses manières, notamment sous la forme de diagrammes à barres. Les graphiques à barres (Bar graphs) présentent des données catégorielles sous une forme résumée basée sur la fréquence ou la fréquence relative. Par exemple, un administrateur d'université pourrait vouloir créer un diagramme à barres pour illustrer la diversité géographique des étudiants qui s'inscrivent à l'université au cours d'un semestre donné.
Dans cette section, nous abordons trois méthodes de visualisation couramment utilisées : les boîtes à moustaches, les histogrammes et les diagrammes de Pareto.
Boîtes à moustaches
Un diagramme en boîte (boxplot), ou boîte à moustaches (box-and-whisker plot), est un graphique utilisé pour afficher la distribution d'un jeu de données en se basant sur les quartiles, le minimum et le maximum des données. C'est ce qu'on appelle le résumé à cinq nombres ; ainsi, une boîte à moustaches affiche le minimum, (premier quartile), la médiane (median), (troisième quartile) et le maximum d'un jeu de données. Notez qu'une boîte à moustaches peut être créée dans un format horizontal ou vertical. Une boîte à moustaches peut également comporter plusieurs tracés, ce qui est utile pour comparer deux variables ou plus côte à côte. Une boîte à moustaches est également utile pour repérer les valeurs aberrantes (outliers) et étudier l'asymétrie d'un jeu de données.
Par exemple, un gestionnaire des ressources humaines pourrait vouloir comparer les salaires des employés masculins et féminins et créer deux boîtes à moustaches côte à côte montrant la distribution des salaires des hommes par rapport à ceux des femmes dans l'entreprise. Un exemple de boîte à moustaches côte à côte créée à l'aide de Python est présenté dans Utiliser Python pour créer des boîtes à moustaches.
Les étapes nécessaires à la création d'une boîte à moustaches horizontale sont énumérées ci-dessous ; n'oubliez pas que nous utilisons généralement un outil tel que Python ou Excel pour créer ces boîtes à moustaches.
- Créer une échelle horizontale s'étendant du minimum au maximum du jeu de données.
- Dessiner un rectangle au-dessus de l'échelle numérique, où le côté gauche du rectangle est placé au premier quartile du jeu de données et le côté droit du rectangle est placé au troisième quartile du jeu de données.
- Tracer une ligne verticale à l'intérieur du rectangle, située au niveau de la médiane.
- Tracer une moustache vers la gauche s'étendant du rectangle jusqu'à l'emplacement du minimum. Tracer également une moustache vers la droite s'étendant du rectangle jusqu'à l'emplacement du maximum.
- Une étape facultative consiste à tracer les valeurs aberrantes sur la boîte à moustaches, soit à gauche de la moustache gauche, soit à droite de la moustache droite. (Voir Statistiques descriptives : mesures statistiques et distributions de probabilité pour de plus amples explications sur l'identification des valeurs aberrantes). En règle générale, une valeur aberrante est représentée par un astérisque ou un autre symbole sur la boîte à moustaches. Une boîte à moustaches qui inclut les valeurs aberrantes est parfois appelée boîte à moustaches modifiée.
Notez que les boîtes à moustaches peuvent également être créées sous un format vertical ; un exemple de boîte à moustaches verticale créée avec Python est présenté dans l'Exemple 9.1.
Les boîtes à moustaches fournissent des informations importantes aux spécialistes des données pour les aider à identifier la forme de la distribution d'un jeu de données. Après avoir créé la boîte à moustaches, la personne qui effectue la recherche peut visualiser la distribution pour identifier sa forme, déterminer s'il y a des valeurs aberrantes et vérifier la présence d'une asymétrie éventuelle.
Les directives suivantes peuvent être utiles pour déterminer la forme d'une distribution dans une boîte à moustaches :
- Variabilité : Rappelez-vous que la longueur de la boîte représente l'écart interquartile (IQR). L'IQR ainsi que la longueur des moustaches peuvent fournir des informations sur l'étalement et la variabilité des données. Une boîte plus étroite et des moustaches plus courtes indiquent une variabilité plus faible, tandis qu'une boîte plus large et des moustaches plus longues indiquent une variabilité plus élevée.
- Valeurs aberrantes : Les boîtes à moustaches peuvent fournir une représentation visuelle des valeurs aberrantes dans les données. Les valeurs aberrantes sont des points de données qui peuvent être tracés à l'extérieur des moustaches de la boîte. L'identification des valeurs aberrantes peut donner un aperçu des queues de la distribution et aider à déterminer si la distribution est asymétrique.
- Asymétrie : Les boîtes à moustaches peuvent aider à déceler une asymétrie dans la distribution. Rappelez-vous, d'après Collecte et préparation des données, que l'asymétrie fait référence au manque de symétrie dans une distribution de données. Si une moustache (gauche ou droite) est plus longue que l'autre, cela indique une asymétrie vers ce côté. Par exemple, si la moustache gauche est plus longue, la distribution peut être asymétrique à gauche, tandis que si la moustache droite est plus longue, la distribution peut être asymétrique à droite.
- Symétrie : La symétrie de la distribution peut être déterminée en examinant la position de la ligne médiane (la ligne à l'intérieur du rectangle). Si la ligne médiane est plus proche d'une extrémité de la boîte, la distribution peut être asymétrique dans cette direction. Si la ligne médiane est positionnée près du centre de la boîte, la distribution est vraisemblablement symétrique.
Utiliser Python pour créer des boîtes à moustaches
Pour faciliter la visualisation des données, Python intègre de nombreuses fonctionnalités graphiques dans un paquet appelé Matplotlib, que nous avons présenté pour la première fois dans Les bases de Python pour la science des données.
Matplotlib est une bibliothèque contenant une variété de routines graphiques utilisées pour créer des visualisations et des graphiques de haute qualité afin de générer des tracés pour l'exploration, l'analyse et la présentation des données. Matplotlib contient des fonctions telles que bar, plot, boxplot et scatter qui peuvent être utilisées pour générer respectivement des diagrammes à barres, des graphiques de séries temporelles, des boîtes à moustaches et des nuages de points. Nous avons déjà vu comment ce paquet est utilisé pour générer une variété de visualisations, y compris des nuages de points (dans Statistiques inférentielles et analyse de régression), des graphiques de séries temporelles (dans Séries temporelles et prévisions, et des résultats de clustering (dans Prise de décision à l'aide des bases de l'apprentissage automatique). Nous montrons ici comment il peut être utilisé pour créer des boîtes à moustaches, des histogrammes et des diagrammes de Pareto.
La commande Python suivante permet d'importer cette bibliothèque et de la désigner par plt dans le code Python :
import matplotlib.pyplot as plt
Commande d'importation
Les commandes d'importation permettent à l'utilisateur de créer une référence abrégée pour la commande ; ainsi, dans l'exemple précédent, la référence raccourcie plt peut être utilisée pour désigner le paquet Matplotlib.
Une fois la commande d'importation exécutée, une boîte à moustaches peut être créée dans Python à l'aide de la syntaxe suivante :
plt.boxplot([minimum, q1, median, q3, maximum], vert=False, labels = [‘specific label’], widths = 0.1)
Le paramètre vert contrôle si la boîte à moustaches doit être affichée dans un format vertical ou horizontal.
Le paramètre labels spécifie une étiquette à placer à côté de la boîte à moustaches.
Le paramètre widths spécifie la largeur du rectangle.
Considérons un gestionnaire des ressources humaines qui recueille les données salariales suivantes pour un échantillon d'employés d'une entreprise (données en dollars américains) :
42000, 43500, 47900, 52375, 54000, 56125, 58350, 62429, 65000, 71325, 79428, 85984, 92000, 101860, 119432, 139450, 140000
Voici le résumé à cinq nombres (five-number summary) pour ce jeu de données et la boîte à moustaches correspondante montrant la distribution des salaires dans une entreprise (reportez-vous à Statistiques descriptives : mesures statistiques et distributions de probabilité pour plus de détails sur le calcul de la médiane et des quartiles d'un jeu de données) :
Résumé à cinq nombres pour les salaires au sein d'une entreprise :
Le code Python suivant génère la boîte à moustaches des salaires sous un format horizontal.
Code Python
# import matplotlib
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
# Given values for the five-number summary
minimum = 42000
q1 = 54000
median = 65000
q3 = 92000
maximum = 140000
# Define a function to format the ticks with commas as thousands separators
def format_ticks(value, tick_number):
return f'{value:,.0f}'
# Create a boxplot using the given values
plt.boxplot([[minimum, q1, median, q3, maximum]], vert=False, labels=['Salaries'], widths=0.1)
# Add labels and title
plt.xlabel('Salaries of Employees at ABC Corporation')
plt.title('Boxplot Showing Distribution of Salaries ($)')
# Apply the custom formatter to the x-axis
plt.gca().xaxis.set_major_formatter(ticker.FuncFormatter(format_ticks))
# Show the plot
plt.show()
Le résultat obtenu ressemble à ceci :
Remarquez que dans la boîte à moustaches ci-dessus, le bord gauche et le bord droit du rectangle représentent respectivement le premier quartile et le troisième quartile. Rappelons d'après Mesures de position que l'écart interquartile (IQR) (interquartile range (IQR)) est calculé comme le troisième quartile moins le premier quartile, et l'IQR est donc représenté par la largeur du rectangle affiché dans la boîte à moustaches. Dans cet exemple, le premier quartile est de 54 000 $ et le troisième quartile est de 92 000 $, ce qui donne un IQR de , soit 38 000 $. La ligne verticale à l'intérieur du rectangle indique la médiane ; dans cet exemple, le salaire médian est de 65 000 $. Enfin, la moustache du côté gauche de la boîte à moustaches indique le minimum du jeu de données et la moustache du côté droit représente le maximum du jeu de données. Dans cet exemple, le salaire minimum dans l'entreprise est de 42 000 $ et le salaire maximum est de 140 000 $.
Remarquez sur la boîte à moustaches que la ligne verticale à l'intérieur de la boîte n'est pas centrée dans le rectangle ; cela indique que la distribution n'est pas symétrique. De plus, constatez que la moustache du côté droit du rectangle qui s'étend de jusqu'au maximum est plus longue que la moustache du côté gauche du rectangle qui s'étend de jusqu'au minimum ; cela donne l'indication d'une distribution asymétrique (asymétrie à droite).
L'Exemple 9.1 fournit une illustration de ce cas, en utilisant la même commande Python pour générer une boîte à moustaches sous un format vertical.
Exemple 9.1
Problème
Écrivez du code Python pour générer une boîte à moustaches au format vertical pour les âges de joueurs de baseball de la Ligue majeure en vous basant sur le jeu de données suivant : SOCR-small.csv, fourni dans le Tableau 9.1. (Ce jeu de données a été initialement présenté dans Que sont les données et la science des données ?).
| Nom | Équipe | Poste | Taille (pouces) | Poids (livres) | Âge (années) |
|---|---|---|---|---|---|
| Paul_McAnulty | SD | Outfielder | 70 | 220 | 26.01 |
| Terrmel_Sledge | SD | Outfielder | 72 | 185 | 29.95 |
| Jack_Cust | SD | Outfielder | 73 | 231 | 28.12 |
| Jose_Cruz_Jr. | SD | Outfielder | 72 | 210 | 32.87 |
| Russell_Branyan | SD | Outfielder | 75 | 195 | 31.2 |
| Mike_Cameron | SD | Outfielder | 74 | 200 | 34.14 |
| Brian_Giles | SD | Outfielder | 70 | 205 | 36.11 |
| Mike_Thompson | SD | Pitcher | 76 | 200 | 26.31 |
| Clay_Hensley | SD | Pitcher | 71 | 190 | 27.50 |
| Chris_Young | SD | Pitcher | 82 | 250 | 27.77 |
| Greg_Maddux | SD | Pitcher | 72 | 185 | 40.88 |
| Jake_Peavy | SD | Pitcher | 73 | 180 | 25.75 |
source : http://wiki.stat.ucla.edu/socr/index.php/SOCR_Data_MLB_HeightsWeights
Solution
Voici le code Python permettant de générer une boîte à moustaches verticale pour les âges d'un échantillon de joueurs de baseball. (Remarque : afin de générer une boîte à moustaches au format vertical, définissez le paramètre vert sur TRUE.)
Code Python
import matplotlib.pyplot as plt
# Sample data
ages = [26.01, 29.95, 28.12, 32.87, 31.2, 34.14, 36.11, 26.31, 27.5, 27.77, 40.88, 25.75]
# Creating the boxplot
plt.boxplot(ages, vert="TRUE")
# Adding title and labels
plt.title('Vertical Boxplot for Ages of Major League Baseball Players')
plt.ylabel('Ages')
# Display the plot
plt.show()
Le résultat obtenu ressemble à ceci :
Remarquez que dans la boîte à moustaches, la ligne horizontale représentant la médiane n'est pas centrée dans le rectangle, ce qui indique que la distribution n'est pas symétrique. De plus, constatez que la moustache s'étendant verticalement depuis le haut du rectangle est plus longue que la moustache s'étendant verticalement depuis le bas du rectangle, ce qui donne l'indication d'une distribution asymétrique (asymétrie à droite).
L'exemple suivant illustre la génération d'une boîte à moustaches côte à côte à l'aide de Python.
Exemple 9.2
Problème
Un agent immobilier souhaite comparer la distribution des prix des logements à San Francisco, en Californie, par rapport à San Jose, en Californie. L'agent recueille les données pour un échantillon de logements récemment vendus comme suit (les prix des logements sont en milliers de dollars américains).
Prix des logements à San Francisco :
1250, 1050, 972, 1479, 1550, 1000, 1499, 1140, 1388, 1050, 1465
Prix des logements à San Jose :
615, 712, 879, 992, 1125, 1300, 1305, 1322, 1498, 1510, 1623
Solution
Le code Python de cet exemple utilise la routine boxplot, qui fait partie de la bibliothèque Matplotlib :
Code Python
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
# Housing prices for two cities (data in thousands)
SanFran_prices = [1250, 1050, 972, 1479, 1550, 1000, 1499, 1140, 1388, 1050, 1465]
SanJose_prices = [615, 712, 879, 992, 1125, 1300, 1305, 1322, 1498, 1510, 1623]
# Put data into an array
home_prices = [SanFran_prices, SanJose_prices]
# Create the figure and axis
fig, ax = plt.subplots()
# Create the boxplot using boxplot routine
ax.boxplot(home_prices, labels=['San Francisco Home Prices', 'San Jose Home Prices'])
# Add titles and labels
plt.title('Side-by-Side Boxplots Comparing Housing Prices for San Francisco and San Jose')
plt.ylabel('Home Prices (in Thousands)')
# Define a function to format the ticks for the y-axis to include dollar signs
def format_ticks(value, tick_number):
return f'${value:,.0f}'
# Apply the custom formatter to the y-axis
ax.yaxis.set_major_formatter(ticker.FuncFormatter(format_ticks))
ax.set_ylabel('Home Prices (in Thousands)')
# Show the plot
plt.show()
Le résultat obtenu ressemble à ceci :
Remarquez que sur la boîte à moustaches des prix des logements à San Francisco, la distribution semble symétrique et le prix médian des logements semble être d'environ 1 250 $. Le prix médian des logements à San Jose semble être d'environ 1 200 $. La boîte à moustaches des prix des logements à San Jose indique une plus grande dispersion par rapport à celle des prix à San Francisco.
Histogrammes
Un histogramme (histogram) est une représentation graphique de la distribution de données numériques. Les histogrammes sont particulièrement utiles pour afficher la distribution de données continues ; ils fournissent la visualisation d'un tableau de distribution de fréquences (ou de fréquences relatives).
Par exemple, la Figure 9.2 présente la distribution des tailles (en pouces au demi-pouce près) de 100 joueurs de football masculin semi-professionnels. Dans cet histogramme, les tailles sont tracées sur l'axe horizontal et la fréquence relative d'apparition est portée sur l'axe vertical. Remarquez que la barre la plus haute de l'histogramme correspond à des tailles comprises entre 65,95 et 67,95 pouces.
Les histogrammes sont largement utilisés dans l'analyse exploratoire des données et les statistiques descriptives pour mieux appréhender la distribution des données numériques, identifier des motifs, détecter les valeurs aberrantes et faire des comparaisons entre différents jeux de données.
Un histogramme est similaire à un diagramme à barres, sauf qu'un histogramme ne comporte aucun espace entre les barres, alors qu'un diagramme à barres présente généralement des espacements entre les barres. Un histogramme est construit comme une série d'intervalles continus où la hauteur de chaque barre représente une fréquence ou un dénombrement de points de données se situant dans chaque intervalle. L'axe vertical d'un histogramme représente généralement la fréquence (dénombrement) ou la fréquence relative, et l'axe horizontal est basé sur des intervalles spécifiques pour les données (appelés classes).
L'intervalle de valeurs du jeu de données est divisé en intervalles, également appelés classes (bins). Ces classes sont généralement de largeur égale et sont créées après un examen du minimum et du maximum d'un jeu de données. Il n'existe pas de règle absolue quant au nombre de classes à employer, mais une règle empirique consiste à définir le nombre de classes de manière à ce qu'il se rapproche de la racine carrée du nombre de points de données. Par exemple, s'il y a 500 valeurs de données, une personne effectuant des recherches pourrait décider d'utiliser environ 22 classes pour organiser les données. En règle générale, plus le jeu de données est volumineux, plus on utilise de classes. Une personne travaillant en science des données doit expérimenter différents nombres de classes, puis déterminer si l'histogramme qui en résulte fournit une visualisation adéquate pour représenter la distribution de la variable.
La largeur de chaque classe peut être déterminée à l'aide d'une formule simple basée sur le maximum et le minimum du jeu de données :
À l'instar de la boîte à moustaches, un histogramme peut fournir un résumé visuel de la distribution des données, notamment des informations sur la tendance centrale, la dispersion, l'asymétrie et la présence de valeurs aberrantes.
La forme d'un histogramme peut renseigner sur les caractéristiques de la distribution sous-jacente des données. Si l'histogramme présente des barres dont la plus haute est au centre de l'histogramme et dont la hauteur diminue vers la gauche et vers la droite du centre, cela indique une distribution en cloche, également appelée distribution normale (normal distribution) (voir Figure 9.3).
Si l'histogramme montre des barres plus hautes sur le côté gauche ou sur le côté droit, cela indique une distribution asymétrique. Des barres plus hautes sur le côté gauche impliquent une queue plus longue sur le côté droit de l'histogramme, ce qui indique alors une distribution asymétrique à droite, tandis que des barres plus hautes sur le côté droit de l'histogramme impliquent une queue plus longue sur le côté gauche de l'histogramme, ce qui indique alors une distribution asymétrique à gauche.
Des exemples de distributions asymétriques sont présentés dans la Figure 9.4 et la Figure 9.5.
Pour aller plus loin
Déterminer une distribution asymétrique ou symétrique à l'aide de la moyenne et de la médiane
Une autre méthode permettant de distinguer les distributions asymétriques des distributions en cloche (symétriques) repose sur l'utilisation de la moyenne et de la médiane. Dans une distribution symétrique, nous nous attendons à ce que la moyenne et la médiane soient approximativement égales. Dans une distribution asymétrique à droite, la moyenne est généralement supérieure à la médiane. Dans une distribution asymétrique à gauche, la moyenne est généralement inférieure à la médiane. Ce site web Briefed by Data propose des animations et plus de détails sur les formes des distributions, y compris des exemples de distributions asymétriques.
Un histogramme présentant plusieurs pics indique une distribution bimodale ou multimodale, ce qui révèle la présence possible de sous-populations au sein du jeu de données.
Un histogramme montrant des barres qui ont toutes approximativement la même hauteur indique une distribution uniforme, dans laquelle les points de données sont uniformément répartis sur l'intervalle de valeurs.
Pour créer un histogramme, suivez ces étapes :
- Déterminer le nombre de classes.
- Calculer la largeur de chaque classe.
- Établir un tableau de distribution de fréquences à deux colonnes : la première colonne indique l'intervalle de chaque classe et la deuxième colonne représente la fréquence pour cet intervalle, c'est-à-dire le décompte du nombre de valeurs de données situées dans l'intervalle donné pour chaque ligne du tableau.
- Créer l'histogramme en traçant les intervalles des classes sur l'axe des x et en dessinant des barres dont les hauteurs sont déterminées par la fréquence de chaque ligne du tableau.
Utiliser Python pour créer des histogrammes
En règle générale, les histogrammes sont générés à l'aide d'outils technologiques. Python comprend une fonction nommée hist() intégrée à la bibliothèque Matplotlib pour générer des histogrammes, comme le montre l'Exemple 9.3.
Exemple 9.3
Problème
Un directeur commercial analyse les données de ventes mensuelles suivantes pour 30 vendeurs (les montants des ventes étant exprimés en dollars américains) :
4969, 4092, 2277, 4381, 3675, 6134, 4490, 6381, 6849, 3134, 7174, 2809, 6057, 7501, 4745, 3415, 2174, 4570, 5957, 5999, 3452, 3390, 3872, 4491, 4670, 5288, 5210, 5934, 6832, 4933
Générez un histogramme à l'aide de Python pour ces données et commentez la forme de la distribution. Utilisez 5 classes pour l'histogramme.
Solution
La fonction hist(), qui fait partie de la bibliothèque Matplotlib, peut être utilisée pour générer l'histogramme.
Le programme Python utilise la fonction plot.hist(), et le tableau de données ainsi que le nombre de classes sont précisés.
Code Python
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
# Define a function to format the ticks with commas as thousands separators
def format_ticks(value, tick_number):
return f'{value:,.0f}'
# Dataset of sales amounts
sales = [4969, 4092, 2277, 4381, 3675, 6134, 4490, 6381, 6849, 3134, 7174, 2809, 6057, 7501, 4745, 3415, 2174, 4570, 5957, 5999, 3452, 3390, 3872, 4491, 4670, 5288, 5210, 5934, 6832, 4933]
# Create histogram
# specify 5 bins to be used when creating the histogram
plt.hist(sales, bins=5, color='blue', edgecolor='black')
# Add labels and title
plt.xlabel('Sales Amounts ($)')
plt.ylabel('Frequency')
plt.title('Histogram of Sales ')
# Display the histogram
plt.show()
Le résultat obtenu ressemble à ceci :
Remarquez que la forme de l'histogramme apparaît en cloche et symétrique, dans le sens où la barre la plus haute se trouve au centre de l'histogramme et les barres diminuent de hauteur vers la gauche et vers la droite du centre.
Diagrammes de Pareto
Un diagramme de Pareto (Pareto chart) est un graphique à barres pour données catégorielles où les barres les plus hautes se situent sur le côté gauche du graphique et les barres sont disposées par ordre de hauteur décroissante de la gauche vers la droite.
Un diagramme de Pareto est unique en ce sens qu'il combine à la fois des graphiques à barres et des graphiques linéaires pour représenter les données par ordre décroissant de fréquence ou d'importance, ainsi que le pourcentage cumulé du total. Le diagramme porte le nom de Vilfredo Pareto, un économiste italien qui a établi la règle des 80/20, selon laquelle environ 80 % des effets proviennent de 20 % des causes. Ce type de graphique est couramment utilisé dans les démarches d'amélioration de la qualité, lorsqu'un chercheur souhaite identifier rapidement les principaux facteurs contribuant à un problème.
Lors de la création d'un diagramme de Pareto, deux échelles verticales sont généralement employées. L'échelle verticale gauche est basée sur la fréquence, tandis que l'échelle verticale droite est basée sur le pourcentage cumulé. L'échelle verticale gauche correspond au graphique à barres et les barres sont alors orientées par ordre décroissant de fréquence, de sorte que la hauteur des barres diminue de gauche à droite. L'échelle verticale droite est utilisée pour montrer la fréquence cumulée des différentes catégories et correspond au tracé linéaire sur le graphique. Le graphique linéaire (line chart) permet au lecteur de déterminer rapidement quelles catégories contribuent de manière significative au pourcentage global. Par exemple, le graphique linéaire permet de déterminer plus facilement quelles catégories représentent 80 % de la fréquence cumulée, comme le montre l'Exemple 9.4.
Exemple 9.4
Problème
Un ingénieur de fabrication s'intéresse à l'analyse d'un niveau élevé de défaillances sur une chaîne de fabrication de téléphones intelligents et recueille les données de défaillance suivantes sur une période d'un mois (voir le Tableau 9.2).
| Catégorie de défaillance | Fréquence (nombre de défauts) |
|---|---|
| Écran fissuré | 1348 |
| Bouton d'alimentation non fonctionnel | 739 |
| Rayures sur le boîtier | 1543 |
| Ne charge pas | 1410 |
| Commandes de volume non fonctionnelles | 595 |
Créez un diagramme de Pareto pour ces catégories de défaillance à l'aide de Python.
Solution
Nous pouvons utiliser pandas pour créer un DataFrame afin de stocker les catégories de défaillance et le nombre de défauts. Nous calculerons ensuite les pourcentages de fréquence cumulée pour les afficher sur le diagramme de Pareto.
Le DataFrame est trié par ordre décroissant du nombre de défauts. Le pourcentage cumulé est calculé à l'aide de la fonction Python cusum().
La référence à ax1 correspond à l'axe des y principal pour la fréquence (c'est-à-dire l'axe des y de gauche). La référence à ax2 correspond à l'axe des y qui tracera la fréquence cumulée (axe des y de droite). La référence à la fonction twinx est une méthode de Matplotlib qui permet aux deux échelles de l'axe des y de partager le même axe des x.
Code Python
import pandas as pd
import matplotlib.pyplot as plt
# Manufacturing data results for one-month time period
data = {
'Failure_Category': ['Cracked Screen', 'Power Button', 'Scratches', 'Does Not Charge', 'Volume Controls'],
'Frequency': [1348, 739, 1543, 1410, 595]
}
# Create a DataFrame from the data
df = pd.DataFrame(data)
# Sort the DataFrame in descending order based on the frequency
df_sorted = df.sort_values(by='Frequency', ascending=False)
# Calculate the cumulative percentage
df_sorted['Cumulative Percentage'] = (df_sorted['Frequency'].cumsum() / df_sorted['Frequency'].sum()) * 100
# Create the Pareto chart
fig, ax1 = plt.subplots()
# Plot the bars in descending order
ax1.bar(df_sorted['Failure_Category'], df_sorted['Frequency'])
ax1.set_ylabel('Frequency')
# Plot the cumulative frequency line chart
ax2 = ax1.twinx()
ax2.plot(df_sorted['Failure_Category'], df_sorted['Cumulative Percentage'], color='blue', marker='o')
ax2.set_ylabel('Cumulative Percentage (%)')
# Set x-axis labels
ax1.set_xticklabels(df_sorted['Failure_Category'], rotation=45, ha='right')
# Title
plt.title('Pareto Chart of Smartphone Manufacturing Defects')
# Show the plot
plt.show()
Le résultat obtenu ressemble à ceci :
Remarquez sur le graphique de Pareto obtenu que les trois barres les plus à gauche représentent environ 75 % du niveau global de défauts ; un ingénieur qualité peut donc rapidement déterminer que les trois catégories « Rayures », « Ne charge pas » et « Écran fissuré » représentent la majorité des défauts et constituent ainsi les anomalies sur lesquelles concentrer les efforts d'amélioration de la qualité.
Selon le diagramme de Pareto ainsi créé, les trois catégories de défauts « Rayures », « Ne charge pas » et « Écran fissuré » contribuent de manière prépondérante au niveau de défauts et doivent être examinées en priorité absolue. Les deux catégories de défauts « Bouton d'alimentation » et « Commandes de volume » ne constituent pas des facteurs majeurs et doivent être examinées avec une priorité moindre.