Encodage des données univariées

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, Q1Q1 (premier quartile), la médiane (median), Q3Q3 (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.

  1. Créer une échelle horizontale s'étendant du minimum au maximum du jeu de données.
  2. 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.
  3. Tracer une ligne verticale à l'intérieur du rectangle, située au niveau de la médiane.
  4. 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.
  5. 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 :

Salaire minimum=$42000Salaire du premier quartile=$54000Salaire médian=$65000Salaire du troisième quartile=$92000Salaire maximum=$140000Salaire minimum=$42000Salaire du premier quartile=$54000Salaire médian=$65000Salaire du troisième quartile=$92000Salaire maximum=$140000

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 :

Boîte à moustaches montrant la distribution des salaires chez ABC Corporation. Le salaire minimum est de 40 000 $, le premier quartile (Q1) est de 54 000 $, la médiane est de 65 000 $, le troisième quartile (Q3) est de 92 000 $ et le salaire maximum est de 140 000 $.

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 $92,000−$54,000$92,000−$54,000, 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 Q3Q3 jusqu'au maximum est plus longue que la moustache du côté gauche du rectangle qui s'étend de Q1Q1 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
Tableau 9.1 Jeu de données sur les joueurs de baseball (SOCR-small.csv)
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 :

Une boîte à moustaches verticale illustrant les âges des joueurs de baseball de la ligue majeure. L'axe Y va de 26 à 40. Le graphique indique un âge médian de 29 ans, la plupart des joueurs se situant entre 28 et 32 ans. La moustache partant verticalement du haut du rectangle est plus longue que la moustache partant verticalement du bas du rectangle, ce qui indique une distribution asymétrique à droite.

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 :

Boîtes à moustaches côte à côte comparant les prix médians des logements à San Francisco et San Jose. Les prix des logements à San Francisco varient d'environ 900 000 $ à 1 500 000 $ avec un prix médian autour de 1 200 000 $. Les prix des logements à San Jose varient d'environ 600 000 $ à 1 600 000 $ avec un prix médian autour de 1 300 000 $. San Jose présente une plus grande dispersion des prix avec des valeurs aberrantes supérieures plus élevées.

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.

Un histogramme montrant la distribution des tailles (en pouces au demi-pouce près) de 100 joueurs de football masculin semi-professionnels. L'axe X est intitulé tailles et s'étend de 59,95 à 75,95. L'axe Y est intitulé fréquence relative et s'étend de 0 à 0,4. La barre la plus haute (0,4) correspond à des tailles comprises entre 65,95 et 67,95 pouces.
Figure 9.2 Histogramme affichant la distribution des tailles (en pouces au demi-pouce près) de 100 joueurs de football masculin semi-professionnels

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 :

Largeur de chaque classe=max−minnombre de classesLargeur de chaque classe=max−minnombre de classes

À 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.

Un histogramme en cloche avec un axe X de 4 à 10 représentant une distribution normale. Les données sont concentrées entre 6 et 8 avec la barre la plus haute au centre à 7.
Figure 9.3 Histogramme en cloche
Un histogramme montrant une distribution asymétrique à gauche. L'axe X s'étend de 4 à 8 et les barres les plus hautes se trouvent sur le côté droit.
Figure 9.4 Histogramme asymétrique à gauche
Un histogramme montrant une distribution asymétrique à droite. L'axe X s'étend de 6 à 10 et les barres les plus hautes se trouvent sur le côté gauche.
Figure 9.5 Histogramme asymétrique à droite

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 :

  1. Déterminer le nombre de classes.
  2. Calculer la largeur de chaque classe.
  3. É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.
  4. 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 :

Un histogramme en cloche intitulé histogramme des ventes. L'axe X est intitulé Montants des ventes ($) et s'étend de 2 000 à 7 000. L'axe Y est intitulé Fréquence et s'étend de 0 à 10. Il présente une distribution normale avec la barre la plus haute au centre à 5 000.

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
Tableau 9.2 Données sur les défauts de téléphones intelligents

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 :

Un diagramme de Pareto des défauts de fabrication de smartphones. L'axe X propose les options « Rayures », « Ne charge pas », « Écran fissuré », « Bouton d'alimentation » et « Commandes de volume ». L'axe Y a une fréquence allant de 0 à 1 600. Un graphique linéaire se superpose aux barres, montrant le pourcentage cumulé des défauts. Le graphique révèle que ces cinq types de défauts représentent 100 % des défauts enregistrés.

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.