Compréhension des données

Avant de commencer tout projet d'apprentissage automatique, comme prédire le prix des maisons, identifier des chats et des chiens dans des images, ou recommander des films que vous pourriez aimer, nous devons d'abord faire face à l'une des étapes les plus fondamentales et critiques :Compréhension des données。

Nous pouvons imaginer la compréhension des données comme le processus d'un détective examinant attentivement tous les indices et dossiers avant d'enquêter sur une affaire. Si nous ne comprenons pas le contexte, l'authenticité et la signification des indices (données), tout raisonnement ultérieur (la modélisation) peut être construit sur une mauvaise base.

La compréhension des données est la pierre angulaire de l'ensemble du processus d'apprentissage automatique. Elle détermine comment nous nettoyons ensuite les données, choisissons les modèles, et affecte en fin de compte la réussite ou l'échec du modèle.


Qu'est-ce que la compréhension des données ?

La compréhension des données, comme son nom l'indique, consiste à acquérir une compréhension approfondie du jeu de données que vous avez entre les mains. Son objectif principal est de répondre aux questions suivantes :

  • Quelles données ai-je ?(Structure et types des données)
  • Quelle est la qualité des données ?(Les données sont-elles propres, complètes et fiables ?)
  • Que disent les données ?(Quels motifs, relations et distributions sont cachés dans les données ?)

Ce processus n'implique pas de code ni d'algorithmes complexes ; il s'agit plutôt de comprendre les données par l'observation, les statistiques et la visualisation.


Étapes et outils clés pour la compréhension des données

Nous utiliserons la bibliothèque d'analyse de données la plus populaire en PythonPandaset la bibliothèque de visualisationMatplotlib/Seabornpour la démonstration.

Avant de commencer, veuillez installer les bibliothèques de dépendances suivantes :

pip install pandas matplotlib seaborn

Description des trois principales bibliothèques d'analyse de données de Python :

  • pandas
    Bibliothèque centrale pour le traitement des données, spécialisée dans la lecture/écriture, le nettoyage, le filtrage et les calculs statistiques de données tabulaires ; prend en charge la lecture Excel/CSV et fournit la structure de table DataFrame.
  • matplotlib
    Bibliothèque de tracé de base de bas niveau, fondement de la visualisation en Python ; peut tracer divers graphiques de base tels que les courbes, les barres et les nuages de points, avec une grande flexibilité mais un code quelque peu verbeux.
  • seaborn
    Bibliothèque de tracé de haut niveau basée sur matplotlib, conçue pour les graphiques statistiques ; propose de belles palettes de couleurs et permet de tracer des graphiques de distribution, des cartes thermiques et des boîtes à moustaches en une seule ligne de code.

Étape 1 : Première rencontre - Chargement et aperçu

Tout d'abord, nous devons charger les données dans le programme et parcourir rapidement leur aspect général.

Pour commencer, téléchargez d'abord les données de test et placez-les dans le même répertoire que le code de test Python :

URL de téléchargement des données de test :https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv

Si le téléchargement réseau depuis githubusercontent échoue, vous pouvez cliquer directement sur le lien pour télécharger :/static.jyshare.com/download/iris.csv。

Exemple

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 1. Charger les données (ici en utilisant le jeu de données Iris classique comme exemple ; vous pouvez aussi charger votre propre fichier CSV)
# Charger depuis un fichier local
df = pd.read_csv('iris.csv')

# Charger depuis le réseau
# url = "https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv"
# df = pd.read_csv(url)

# 2. Afficher les premières lignes des données - première impression
print("Les 5 premières lignes des données :")
print(df.head())
print("\n" + "="*50 + "\n")

# 3. Afficher les informations globales sur les données : nombre de lignes, nombre de colonnes, types de données, utilisation de la mémoire
print("Informations de base sur le jeu de données :")
print(df.info())
print("\n" + "="*50 + "\n")

# 4. Afficher les dimensions des données (combien de lignes, combien de colonnes)
print(f"Dimensions du jeu de données : {df.shape}") # Sortie (lignes, colonnes)
print(f"Il y a {df.shape)

Explication de code:

  • df.head(): Tout comme feuilleter la table des matières d'un livre, affichez rapidement les premières lignes des données pour comprendre à quoi ressemblent les données.
  • df.info(): C'est le "rapport d'examen physique" des données. Il vous dira :
    • Le nom de chaque colonne (Column)
    • Le nombre de valeurs non nulles (Non-Null Count), ce qui vous permet de découvrir immédiatement s'il y a des valeurs manquantes
    • Types de données (Dtype), tels queint64(integer),float64(float),object(texte ou type mixte)
  • df.shape: Obtenir directement les dimensions de la table de données.

Après avoir exécuté le code ci-dessus, la sortie est similaire à ce qui suit :

数据的前5行:
   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

==================================================

数据集的基本信息:
<class 'pandas.DataFrame'>

Étape 2 : Contrôle qualité - Détection des valeurs manquantes et des anomalies

Les données sont rarement parfaites. Les « maladies des données » courantes incluentles valeurs manquantes(certaines positions sont vides) etles valeurs aberrantes(certains nombres sont anormalement grands ou anormalement petits).

Exemple

# 1. Vérifier les valeurs manquantes
print("Nombre de valeurs manquantes par caractéristique :")
print(df.isnull().sum())
print("\n" + "="*50 + "\n")

# S'il y a de nombreuses valeurs manquantes, vous pouvez calculer la proportion de valeurs manquantes
missing_ratio = df.isnull().sum() / len(df) * 100
print("Proportion de valeurs manquantes par caractéristique (%) :")
print(missing_ratio)
print("\n" + "="*50 + "\n")

# 2. Vérifier le résumé statistique des caractéristiques numériques - peut révéler des indices sur les valeurs aberrantes
print("Description statistique des caractéristiques numériques :")
print(df.describe())

Explication de code:

  • df.isnull().sum(): Calculer le nombre total de valeurs nulles (NaN) dans chaque colonne.
  • df.describe(): Générer un résumé statistique des colonnes numériques, comprenant :
    • count: nombre (peut servir à vérifier les valeurs manquantes)
    • mean: moyenne
    • std: écart-type (l'ampleur des fluctuations des données)
    • min: valeur minimale
    • 25%, 50%(médiane),75%: quartiles
    • max: valeur maximale
    • En observantminetmax, vous pouvez juger de manière préliminaire s'il y a des valeurs aberrantes(par exemple, une colonne d'âge contenant 200 ans).

Étape 3 : Analyse approfondie - Visualisation des distributions et des relations

Le texte et les nombres sont abstraits, tandis que les graphiques nous permettent de « voir » intuitivement les données. C'est la partie la plus intéressante de la compréhension des données.

Exemple

# Définir le style du graphique
sns.set(style="whitegrid")

# 1. Distribution univariée - comprendre la distribution de chaque variable elle-même
fig, axes = plt.subplots(2, 2, figsize=(12, 8)) # Créer un canevas 2x2
features = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
colors = ['skyblue', 'lightgreen', 'salmon', 'gold']

for i, (ax, feature, color) in enumerate(zip(axes.flat, features, colors)):
    # Tracer un histogramme (distribution) et une courbe d'estimation de densité par noyau
    sns.histplot(df[feature], kde=True, ax=ax, color=color, bins=20)
    ax.set_title(f'Distribution de {feature}', fontsize=14)
    ax.set_xlabel(feature)
    ax.set_ylabel('Fréquence')

plt.tight_layout()
plt.show()

# 2. Boîte à moustaches - visualiser la distribution des données et les valeurs aberrantes (plus intuitif)
plt.figure(figsize=(10, 6))
# Sélectionner les colonnes numériques pour tracer une boîte à moustaches
df_box = df.drop(columns=['species']) # On suppose que 'species' est une colonne d'étiquettes textuelles, la retirer d'abord
sns.boxplot(data=df_box)
plt.title('Diagramme en boîte de chaque variable numérique (visualiser la distribution et les valeurs aberrantes)', fontsize=14)
plt.xticks(rotation=45)
plt.show()

# 3. Relations entre les variables - matrice de nuages de points
print("\nTracé de la matrice de nuages de points des relations entre les variables... (Cela peut nous aider à découvrir des associations entre les variables.)")
# Utiliser pairplot de Seaborn, le paramètre hue peut colorer par catégorie (par ex., les espèces d'Iris)
sns.pairplot(df, hue='species', height=2.5)
plt.suptitle('Matrice de nuages de points des relations entre les variables (colorée par espèce)', y=1.02, fontsize=16)
plt.show()

# 4. Carte thermique de corrélation - quantifier les relations linéaires entre les variables
plt.figure(figsize=(8, 6))
# Calculer le coefficient de corrélation entre les variables numériques
numeric_df = df.select_dtypes(include=['float64', 'int64'])
correlation_matrix = numeric_df.corr()
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', center=0, square=True)
plt.title('Carte thermique de corrélation des caractéristiques', fontsize=14)
plt.show()

Explication du graphique:

  • Histogramme: Montre comment les valeurs d'une caractéristique (comme la longueur des pétales) sont distribuées. Sont-elles concentrées dans un certain intervalle, ou dispersées ?
  • Diagramme en boîte:
    • La ligne au milieu de la boîte représente lamédiane。
    • Les limites supérieure et inférieure de la boîte représentent les25e (Q1) et 75e (Q3) percentiles。
    • Les "moustaches" s'étendant vers le haut et vers le bas représentent généralement l'intervalle raisonnable (Q1 - 1.5 IQR à Q3 + 1.5 IQR).
    • Les points individuelssont probablementdes valeurs aberrantes!
  • Matrice de nuages de points: Visualiser la relation entre deux caractéristiques quelconques simultanément. Si les points forment une distribution en bande, ils peuvent être corrélés.
  • Carte thermique de corrélation: Représente précisément le degré de corrélation linéaire entre deux caractéristiques à l'aide de couleurs et de nombres (-1 à 1).
    • 1: Corrélation positive parfaite (l'une augmente, l'autre augmente aussi)
    • -1: Corrélation négative parfaite (l’une augmente, l’autre diminue)
    • 0: Aucune relation linéaire

Sortie de la compréhension des données : un rapport d’investigation sur les données

Après avoir terminé les étapes ci-dessus, vous devriez être en mesure de résumer un rapport clair sur le jeu de données actuel, par exemple :

Rapport d’investigation sur le jeu de données Iris

Aperçu des données: 150 échantillons au total, 5 caractéristiques (4 caractéristiques numériques : longueur et largeur des sépales/pétales ; 1 étiquette de catégorie : espèce).

Qualité des données: Aucune valeur manquante ; toutes les caractéristiques numériques se situent dans des plages biologiques raisonnables ; aucune valeur aberrante évidente détectée.

Aperçus des données:

  • Longueur du pétale (petal_length) et largeur du pétale (petal_width) ont une corrélation extrêmement élevée (>0.96), ce qui peut indiquer une redondance d’informations.
  • Les différentes espèces d’Iris se distinguent clairement par la taille des pétales, et le nuage de points montre un regroupement net.
  • Largeur du sépale (sepal_width) la distribution est approximativement normale.
Autres extensions