Summary

Ce document est une introduction à la fouille de données avec Python. Il explique les concepts de base et les différentes applications de la fouille de données dans des secteurs variés comme le commerce, la finance et la santé. Il met l'accent sur l'importance de la fouille de données dans un monde où les données sont omniprésentes.

Full Transcript

Cours Fouille donnée avec python 1. Introduction à la fouille de données avec Python La fouille de données, également connue sous le nom de data mining, est un processus fondamental dans le domaine de la science des données. Elle con- siste à explorer et analyser de vastes ensembles de données pour...

Cours Fouille donnée avec python 1. Introduction à la fouille de données avec Python La fouille de données, également connue sous le nom de data mining, est un processus fondamental dans le domaine de la science des données. Elle con- siste à explorer et analyser de vastes ensembles de données pour extraire des informations utiles, identifier des modèles cachés et découvrir des relations sig- nificatives qui ne sont pas immédiatement apparentes. En utilisant diverses techniques statistiques, mathématiques et informatiques, la fouille de données permet de transformer des données brutes en connaissances exploitables, qui peuvent être utilisées pour la prise de décisions éclairées. 1.1 Concepts et Importance Définition de la fouille de données La fouille de données se définit comme le processus d’extraction de connaissances à partir de grandes quantités de données, généralement non structurées ou semi-structurées. Elle implique l’utilisation d’algorithmes sophistiqués pour découvrir des tendances et des modèles cachés, qui peuvent être prédictifs ou descriptifs. Les techniques de fouille de données incluent l’analyse statistique, le machine learning, la reconnaissance de motifs et l’exploration visuelle des données. Importance de la fouille de données Dans un monde où les données sont omniprésentes, la capacité à analyser et interpréter ces données de manière efficace est cruciale. Voici quelques raisons pour lesquelles la fouille de données est importante : 1. Prise de décisions éclairées : Les entreprises et les organisations peu- vent utiliser les résultats de la fouille de données pour prendre des déci- sions basées sur des données empiriques plutôt que sur des intuitions ou des suppositions. Par exemple, les analyses de tendance peuvent aider à prévoir les comportements des consommateurs et à ajuster les stratégies de marketing en conséquence. 2. Optimisation des processus : En identifiant les inefficacités et les goulots d’étranglement dans les processus d’affaires, la fouille de données permet aux entreprises d’optimiser leurs opérations. Cela peut se traduire par des économies de coûts, une augmentation de la productivité, et une amélioration de la qualité des produits et services. 3. Détection de fraudes et anomalies : La fouille de données est essen- tielle pour la détection de comportements inhabituels qui peuvent signaler une fraude ou une activité criminelle. Les institutions financières, par ex- emple, utilisent des techniques de fouille de données pour identifier les transactions suspectes et prévenir les fraudes. 4. Personnalisation des services : Les entreprises peuvent utiliser la 1 fouille de données pour analyser les préférences et les habitudes des clients, permettant ainsi une personnalisation accrue des produits et services. Par exemple, les recommandations de produits sur les plateformes de com- merce électronique sont souvent basées sur des modèles de fouille de don- nées. 5. Découvertes scientifiques : Dans le domaine de la recherche, la fouille de données permet aux scientifiques de découvrir des relations complexes dans des données expérimentales. Par exemple, en bio-informatique, elle aide à identifier les relations entre les gènes et les maladies. 1.2 Applications Pratiques de la Fouille de Données La fouille de données trouve des applications dans une variété de secteurs, allant du commerce de détail à la médecine, en passant par les finances et les réseaux sociaux. Voici quelques applications pratiques qui illustrent l’importance et la diversité de la fouille de données : Marketing et vente au détail Les détaillants utilisent la fouille de données pour analyser les comportements d’achat des clients, identifier les produits les plus populaires, et ajuster leurs stocks en conséquence. Les programmes de fidélité et les campagnes de marketing ciblé reposent également sur l’analyse des données clients pour maximiser l’engagement et la satisfaction. Finance et banque Dans le secteur bancaire, la fouille de données est utilisée pour évaluer les risques de crédit, détecter les fraudes, et prévenir le blanchiment d’argent. Les banques analysent les historiques de transactions pour identifier des modèles de comportement qui pourraient indiquer des activités frauduleuses. Santé et médecine Les hôpitaux et les organisations de soins de santé utilisent la fouille de données pour analyser les dossiers médicaux des patients, améliorer les diagnostics, et personnaliser les plans de traitement. Par exemple, l’analyse des données de santé peut aider à identifier les facteurs de risque de certaines maladies et à prévenir leur apparition. Analyse des réseaux sociaux Les plateformes de réseaux sociaux utilisent la fouille de données pour comprendre les interactions entre les utilisateurs, détecter les tendances et les sujets populaires, et personnaliser les flux d’informations. Les entreprises peuvent également analyser les sentiments des utilisateurs à l’égard de leurs produits ou services en temps réel. Industrie manufacturière Dans le secteur manufacturier, la fouille de don- nées est utilisée pour surveiller la qualité de la production, prévoir la mainte- nance des machines, et optimiser les chaînes d’approvisionnement. L’analyse des données de production permet de réduire les temps d’arrêt et d’améliorer l’efficacité opérationnelle. 2 1.3 Introduction aux Outils et Langages Utilisés en Fouille de Données Pourquoi utiliser Python pour la fouille de données ? Python est l’un des langages de programmation les plus populaires pour la fouille de données en raison de sa simplicité, de sa flexibilité et de la richesse de son écosystème de bib- liothèques. Python offre des outils puissants pour le traitement, l’analyse, et la visualisation des données. Ses bibliothèques comme Numpy, Pandas, Matplotlib, Seaborn, et Scikit-learn, sont largement utilisées pour effectuer des tâches de fouille de données complexes avec facilité. Outils courants de fouille de données Numpy : Une bibliothèque fondamentale pour le calcul scientifique en Python, offrant des capacités de manipulation de tableaux multidimen- sionnels et des opérations mathématiques de haut niveau. Pandas : Une bibliothèque de manipulation de données puissante qui fournit des structures de données comme les DataFrames pour un traite- ment efficace des données tabulaires. Matplotlib et Seaborn : Bibliothèques de visualisation de données qui permettent de créer des graphiques statiques et informatifs. Scikit-learn : Une bibliothèque de machine learning qui fournit des outils simples et efficaces pour l’apprentissage supervisé et non supervisé. Plotly : Une bibliothèque pour la création de visualisations de données interactives et dynamiques. 2. Bibliothèques Python pour l’analyse de données Python est largement reconnu comme l’un des langages de programmation les plus utilisés dans le domaine de la science des données et de la fouille de don- nées. Sa popularité est en grande partie due à sa syntaxe simple et à son vaste écosystème de bibliothèques dédiées à l’analyse de données. Ces bibliothèques fournissent des outils puissants pour la manipulation, l’analyse, et la visualisa- tion des données, permettant aux analystes et aux scientifiques des données de travailler de manière efficace et productive. Dans cette section, nous explorerons deux des bibliothèques Python les plus importantes pour l’analyse de données : Numpy et Pandas. 2.1 Numpy : Tableaux et Opérations Mathématiques Qu’est-ce que Numpy ? Numpy (Numerical Python) est une bibliothèque de calcul numérique très utilisée en Python. Elle offre des objets de tableau multidimensionnel de haute performance appelés arrays, ainsi qu’une vaste col- lection de routines pour effectuer des opérations mathématiques sur ces tableaux. Numpy est souvent utilisé comme base pour d’autres bibliothèques scientifiques 3 et de machine learning, en raison de son efficacité dans la manipulation de grands ensembles de données. Principales fonctionnalités de Numpy Tableaux multidimensionnels (arrays) : Les arrays de Numpy sont similaires aux listes Python, mais ils permettent de stocker des données de manière plus compacte et d’effectuer des opérations mathématiques plus rapidement. Les arrays peuvent être unidimensionnels (vecteurs), bidimensionnels (matrices), ou de dimensions supérieures. Opérations vectorisées : Numpy permet d’effectuer des opérations arithmétiques sur des arrays de manière vectorisée, c’est-à-dire sans avoir à utiliser des boucles explicites. Cela améliore considérablement la vitesse de calcul par rapport aux boucles Python classiques. Fonctions mathématiques avancées : Numpy propose un large éven- tail de fonctions mathématiques, telles que les fonctions trigonométriques, logarithmiques, exponentielles, ainsi que des fonctions de calcul statis- tique. Manipulation de tableaux : Les fonctionnalités de Numpy incluent la possibilité de trier, filtrer, et modifier des tableaux. On peut également effectuer des opérations de redimensionnement, de transposition, et de fusion de tableaux. Intégration avec d’autres bibliothèques : Numpy s’intègre parfaite- ment avec d’autres bibliothèques Python telles que Pandas, Scikit-learn, et Matplotlib, facilitant ainsi le flux de travail d’analyse de données. Exemples d’utilisation de Numpy Création d’un tableau Numpy et opérations de base : import numpy as np # Création d'un tableau unidimensionnel array_1d = np.array([1, 2, 3, 4, 5]) # Création d'un tableau bidimensionnel (matrice) array_2d = np.array([[1, 2, 3], [4, 5, 6]]) # Opérations mathématiques sur des tableaux array_sum = array_1d + 5 # Ajoute 5 à chaque élément du tableau array_product = array_2d * 2 # Multiplie chaque élément par 2 Calculs statistiques avec Numpy : # Calcul de la moyenne, de l'écart type et de la somme des éléments mean_value = np.mean(array_1d) 4 std_dev = np.std(array_1d) total_sum = np.sum(array_1d) Manipulation des tableaux : # Transposition d'une matrice transposed_array = np.transpose(array_2d) # Redimensionnement d'un tableau reshaped_array = np.reshape(array_1d, (5, 1)) 2.2 Pandas : Structures de Données et Manipulation des DataFrames Qu’est-ce que Pandas ? Pandas est une bibliothèque Python incontournable pour l’analyse de données. Elle fournit des structures de données de haut niveau et des outils puissants pour manipuler, nettoyer, et analyser des ensembles de données de manière efficace. La structure de données la plus couramment utilisée dans Pandas est le DataFrame, qui ressemble à une table de données avec des lignes et des colonnes, similaire à une feuille de calcul Excel ou à une table de base de données. Principales fonctionnalités de Pandas Structures de données flexibles : Les deux structures de base de Pandas sont les Series (tableaux unidimensionnels avec des étiquettes) et les DataFrames (tableaux bidimensionnels avec des étiquettes de lignes et de colonnes). Ces structures facilitent la manipulation et l’analyse des données. Chargement de données : Pandas permet de lire des données à partir de diverses sources, y compris des fichiers CSV, Excel, JSON, SQL, et plus encore. Cela simplifie l’importation des données dans un format facile à utiliser. Nettoyage et préparation des données : Pandas offre des outils pour gérer les valeurs manquantes, supprimer les doublons, transformer les types de données, et effectuer des opérations de filtrage et de sélection. Manipulation des données : Pandas facilite la manipulation des don- nées à travers des opérations telles que le tri, l’agrégation, le regroupement, le pivotement et la fusion de plusieurs ensembles de données. Analyse statistique et calculs : Pandas fournit des fonctions intégrées pour effectuer des statistiques descriptives, des calculs de corrélation, et d’autres analyses statistiques. Exemples d’utilisation de Pandas Création d’un DataFrame et opérations de base : 5 import pandas as pd # Création d'un DataFrame à partir d'un dictionnaire data = { 'Nom': ['Alice', 'Bob', 'Claire', 'David'], 'Âge': [24, 30, 35, 22], 'Score': [88, 92, 95, 80] } df = pd.DataFrame(data) # Affichage des premières lignes du DataFrame print(df.head()) # Accès à une colonne spécifique print(df['Âge']) Chargement de données à partir d’un fichier CSV : # Lecture des données depuis un fichier CSV df = pd.read_csv('chemin/vers/fichier.csv') # Affichage des informations sur le DataFrame print(df.info()) # Affichage des statistiques descriptives print(df.describe()) Manipulation et nettoyage des données : # Suppression des valeurs manquantes df_cleaned = df.dropna() # Remplacement des valeurs manquantes par la moyenne de la colonne df['Âge'].fillna(df['Âge'].mean(), inplace=True) # Suppression des doublons df_unique = df.drop_duplicates() Regroupement et agrégation : # Regroupement des données par une colonne et calcul de la moyenne df_grouped = df.groupby('Nom')['Score'].mean() # Agrégation des données par plusieurs fonctions df_aggregated = df.groupby('Nom').agg({'Âge': 'mean', 'Score': 'sum'}) 6 2.3 Intégration de Numpy et Pandas pour l’analyse avancée Bien que Numpy et Pandas soient des bibliothèques puissantes individuelle- ment, leur véritable potentiel se manifeste lorsqu’elles sont utilisées ensemble. Numpy est souvent utilisé pour des opérations mathématiques de bas niveau, tandis que Pandas est utilisé pour manipuler des ensembles de données de haut niveau. L’intégration de ces deux bibliothèques permet de créer des pipelines de traitement de données efficaces, du nettoyage des données brutes à l’analyse statistique avancée. Utilisation de Numpy avec Pandas : # Création d'un DataFrame Pandas à partir d'un tableau Numpy array_data = np.random.rand(5, 3) df = pd.DataFrame(array_data, columns=['A', 'B', 'C']) # Application de fonctions Numpy sur des colonnes Pandas df['A_normalized'] = (df['A'] - np.mean(df['A'])) / np.std(df['A']) 2.4 Conclusion Numpy et Pandas sont les piliers de l’écosystème Python pour l’analyse de données. En combinant la puissance de manipulation de tableaux de Numpy avec les capacités avancées de manipulation de données tabulaires de Pandas, les analystes de données peuvent traiter des ensembles de données complexes avec une grande efficacité. La compréhension approfondie de ces bibliothèques est essentielle pour toute personne cherchant à maîtriser l’analyse de données et la fouille de données avec Python. 3. Nettoyage et préparation des données Le nettoyage et la préparation des données constituent des étapes fondamentales dans le processus de fouille de données. En effet, les données brutes collectées à partir de diverses sources peuvent souvent contenir des erreurs, des incohérences, des valeurs manquantes, des doublons, et d’autres anomalies. Pour garantir la précision et la fiabilité des analyses, il est crucial de procéder à un nettoyage et une préparation appropriés des données avant toute analyse. Cette section explore les principales techniques et étapes de nettoyage et de préparation des données, y compris la gestion des valeurs manquantes, la transformation des variables, et la fusion et l’agrégation des données. 3.1 Gestion des valeurs manquantes et des doublons Valeurs manquantes Les valeurs manquantes sont courantes dans les ensem- bles de données réels et peuvent résulter de divers facteurs tels que des erreurs 7 de saisie, des problèmes de collecte de données, ou des limitations dans les pro- cessus de mesure. La gestion des valeurs manquantes est essentielle, car elles peuvent biaiser les analyses statistiques et les modèles de machine learning si elles ne sont pas traitées correctement. Identification des valeurs manquantes : La première étape pour gérer les valeurs manquantes consiste à les identifier. En Python, la biblio- thèque Pandas fournit des fonctions pratiques pour détecter les valeurs manquantes dans un DataFrame. import pandas as pd # Exemple de DataFrame avec des valeurs manquantes data = {'Nom': ['Alice', 'Bob', 'Claire', 'David'], 'Âge': [24, None, 35, 22], 'Score': [88, 92, None, 80]} df = pd.DataFrame(data) # Détection des valeurs manquantes print(df.isnull()) # Affiche un DataFrame booléen indiquant les valeurs manquantes print(df.isnull().sum()) # Affiche le nombre de valeurs manquantes par colonne Suppression des valeurs manquantes : Une méthode simple pour traiter les valeurs manquantes consiste à supprimer les lignes ou les colonnes qui les contiennent. Cependant, cette approche peut entraîner une perte importante d’informations, surtout si les valeurs manquantes sont nombreuses. # Suppression des lignes contenant des valeurs manquantes df_cleaned = df.dropna() # Suppression des colonnes contenant des valeurs manquantes df_cleaned_columns = df.dropna(axis=1) Imputation des valeurs manquantes : Une méthode plus courante consiste à imputer (remplacer) les valeurs manquantes par des valeurs raisonnables, telles que la moyenne, la médiane, ou une valeur spécifique. L’imputation permet de conserver toutes les observations tout en réduisant l’impact des valeurs manquantes. # Remplacement des valeurs manquantes par la moyenne de la colonne df['Âge'].fillna(df['Âge'].mean(), inplace=True) # Remplacement des valeurs manquantes par une valeur spécifique df['Score'].fillna(0, inplace=True) Doublons Les doublons dans les ensembles de données peuvent entraîner des biais et affecter la qualité des analyses. Les doublons se produisent lorsque des 8 enregistrements identiques ou très similaires apparaissent plusieurs fois dans un ensemble de données. Détection des doublons : Pandas permet de détecter facilement les doublons dans un DataFrame. # Détection des doublons duplicates = df.duplicated() print(duplicates) # Affiche une série booléenne indiquant les doublons Suppression des doublons : Une fois identifiés, les doublons peuvent être supprimés pour nettoyer l’ensemble de données. # Suppression des doublons df_unique = df.drop_duplicates() 3.2 Transformation des variables La transformation des variables est une étape cruciale pour préparer les données en vue d’une analyse ou d’un modèle de machine learning. Cela peut inclure la conversion de types de données, la normalisation des valeurs, et l’encodage des variables catégorielles. Normalisation et standardisation La normalisation et la standardisation sont des techniques utilisées pour redimensionner les valeurs numériques afin qu’elles s’inscrivent dans une plage spécifique ou pour qu’elles aient une moyenne et un écart type prédéfinis. Ces techniques sont souvent nécessaires lorsque les variables ont des plages de valeurs différentes, ce qui peut affecter les perfor- mances des modèles de machine learning. Normalisation : La normalisation consiste à mettre à l’échelle les valeurs de sorte qu’elles se situent entre 0 et 1. Cela est particulièrement utile pour les méthodes de machine learning sensibles à l’échelle des données. from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() df['Âge_normalisé'] = scaler.fit_transform(df[['Âge']]) Standardisation : La standardisation met les données à une échelle avec une moyenne de 0 et un écart type de 1. C’est utile lorsque les données suivent une distribution gaussienne. from sklearn.preprocessing import StandardScaler scaler = StandardScaler() df['Âge_standardisé'] = scaler.fit_transform(df[['Âge']]) 9 Encodage des variables catégorielles Les modèles de machine learning nécessitent des données numériques, ce qui signifie que les variables catégorielles (c’est-à-dire, des colonnes avec des valeurs telles que “Homme” ou “Femme”) doivent être converties en un format numérique. Encodage d’étiquettes (Label Encoding) : Cette méthode attribue une valeur numérique unique à chaque catégorie. Cependant, elle peut introduire un ordre entre les catégories qui n’existe pas. from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() df['Genre_encoded'] = encoder.fit_transform(df['Nom']) Encodage one-hot (One-Hot Encoding) : Cette méthode crée des colonnes binaires pour chaque catégorie, évitant ainsi l’introduction d’un ordre. Pandas fournit une méthode pratique pour effectuer cet encodage. # Encodage one-hot pour une colonne catégorielle df_one_hot = pd.get_dummies(df, columns=['Nom']) Binning des variables Le binning consiste à transformer des variables con- tinues en variables catégorielles en les regroupant en intervalles ou en bins. Cela peut aider à réduire le bruit et à rendre les modèles plus robustes. Exemple de binning : Créer des catégories d’âge telles que “Jeune”, “Moyen”, et “Senior”. # Définition des intervalles bins = [0, 18, 35, 65, 100] labels = ['Enfant', 'Jeune Adulte', 'Adulte', 'Senior'] # Application du binning df['Âge_cat'] = pd.cut(df['Âge'], bins=bins, labels=labels) 3.3 Fusion et agrégation des données Dans de nombreux projets de fouille de données, il est nécessaire de combiner plusieurs sources de données pour obtenir un ensemble de données complet et cohérent. Cela peut inclure la fusion de tables de données, l’agrégation de données pour obtenir des résumés statistiques, ou la concaténation de différents ensembles de données. Fusion de données (Merge/Join) La fusion de données est une opération essentielle lorsque des informations provenant de différentes sources doivent être combinées. Pandas fournit des fonctions de fusion similaires aux opérations de jointure SQL. 10 Exemple de fusion : Fusionner deux DataFrames sur une colonne com- mune. # Exemple de DataFrames df1 = pd.DataFrame({'ID': [1, 2, 3], 'Nom': ['Alice', 'Bob', 'Claire']}) df2 = pd.DataFrame({'ID': [1, 2, 4], 'Score': [88, 92, 85]}) # Fusion des DataFrames sur la colonne 'ID' df_merged = pd.merge(df1, df2, on='ID', how='inner') Agrégation de données L’agrégation permet de regrouper les données par certaines clés et de calculer des statistiques sur chaque groupe. C’est utile pour résumer des données et extraire des informations clés. Exemple d’agrégation : Calculer la moyenne des scores par groupe. # Exemple de DataFrame avec des groupes df = pd.DataFrame({'Groupe': ['A', 'A', 'B', 'B'], 'Score': [88, 92, 95, 80]}) # Calcul de la moyenne des scores par groupe df_grouped = df.groupby('Groupe').mean() Concaténation de données La concaténation est utilisée pour combiner des ensembles de données l’un à côté de l’autre ou de haut en bas. Cela peut être nécessaire lorsque les données sont stockées dans plusieurs fichiers ou tableaux. Exemple de concaténation : # Exemple de DataFrames df1 = pd.DataFrame({'Nom': ['Alice', 'Bob'], 'Âge': [24, 30]}) df2 = pd.DataFrame({'Nom': ['Claire', 'David'], 'Âge': [35, 22]}) # Concaténation verticale (ajout de lignes) df_concat = pd.concat([df1, df2], axis=0) # Concaténation horizontale (ajout de colonnes) df_concat_columns = pd.concat([df1, df2], axis=1) 3.4 Conclusion Le nettoyage et la préparation des données sont des étapes critiques dans tout projet de fouille de données. En gérant efficacement les valeurs manquantes, en supprimant les doublons, en transformant les variables, et en fusionnant dif- férentes sources de données, on améliore la qualité des données et on maximise la fiabilité des résultats analytiques. Ces techniques de nettoyage et de pré- paration des données garantissent que les analyses et les modèles de machine 11 learning reposent sur des données cohérentes et significatives, ce qui est essentiel pour la prise de décisions éclairées et précises. 4. Visualisation des données La visualisation des données est une étape essentielle dans le processus de fouille de données et d’analyse de données. Elle permet de représenter graphiquement des informations et des tendances issues des données, facilitant ainsi leur com- préhension et leur interprétation. Les graphiques et les visualisations aident à identifier des motifs, des relations et des anomalies qui ne seraient pas im- médiatement apparents à partir des données brutes. Cette section aborde les principales bibliothèques Python utilisées pour la visualisation des données : Matplotlib, Seaborn, et Plotly. Chaque outil est exploré avec des exemples pra- tiques illustrant comment ils peuvent être utilisés pour créer des visualisations informatives et interactives. 4.1 Matplotlib et Seaborn pour la création de graphiques Matplotlib : La bibliothèque de base pour la visualisation Mat- plotlib est l’une des bibliothèques les plus populaires et les plus largement utilisées pour la visualisation de données en Python. Elle fournit une inter- face flexible et puissante pour créer des graphiques statiques de haute qualité. Matplotlib peut être utilisé pour créer des diagrammes en courbes, des his- togrammes, des diagrammes à barres, des nuages de points, et bien plus encore. C’est la bibliothèque de base sur laquelle de nombreuses autres bibliothèques de visualisation, telles que Seaborn, sont construites. Principales caractéristiques de Matplotlib Flexibilité : Matplotlib offre une grande flexibilité pour personnaliser tous les aspects d’un graphique, y compris les couleurs, les étiquettes, les titres, les légendes, et les axes. Compatibilité : Elle est compatible avec les environnements de développement Python populaires tels que Jupyter Notebook, Spyder, et PyCharm. Large gamme de types de graphiques : Matplotlib permet de créer des graphiques simples comme des lignes, des barres, et des secteurs, ainsi que des graphiques plus complexes comme des graphiques 3D, des cartes thermiques, et des graphiques en histogramme à deux dimensions. Exemples d’utilisation de Matplotlib 1. Création d’un graphique en courbes simple : import matplotlib.pyplot as plt # Données pour le graphique 12 x = [1, 2, 3, 4, 5] y = [10, 15, 7, 10, 13] # Création du graphique plt.plot(x, y, color='blue', marker='o', linestyle='dashed', linewidth=2, markersize=8) plt.title('Graphique en Courbes') plt.xlabel('X-axis') plt.ylabel('Y-axis') plt.grid(True) # Affichage du graphique plt.show() 2. Création d’un histogramme : import numpy as np # Génération de données aléatoires data = np.random.randn(1000) # Création de l'histogramme plt.hist(data, bins=30, color='green', alpha=0.7) plt.title('Histogramme des données aléatoires') plt.xlabel('Valeur') plt.ylabel('Fréquence') # Affichage du graphique plt.show() Seaborn : Visualisation statistique améliorée Seaborn est une biblio- thèque de visualisation de données basée sur Matplotlib. Elle est conçue pour simplifier la création de visualisations statistiques attrayantes et informatives. Seaborn offre des interfaces de haut niveau pour créer des graphiques qui af- fichent des relations statistiques entre plusieurs variables. Elle s’intègre par- faitement avec Pandas, ce qui facilite l’utilisation directe de DataFrames pour la visualisation. Principales caractéristiques de Seaborn Facilité d’utilisation : Seaborn offre des fonctions prédéfinies pour créer des graphiques complexes en quelques lignes de code. Intégration avec Pandas : Elle permet d’utiliser directement des DataFrames Pandas, ce qui simplifie la manipulation et la visualisation des données. Visualisations statistiques : Seaborn propose des visualisations avancées comme les diagrammes de régression, les cartes thermiques, les 13 nuages de points avec ajustements de régression, et les diagrammes en paire. Exemples d’utilisation de Seaborn 1. Création d’un nuage de points avec régression : import seaborn as sns import pandas as pd # Création d'un DataFrame de données d'exemple df = pd.DataFrame({'taille': [150, 160, 170, 180, 190], 'poids': [55, 65, 70, 80, 85]}) # Création d'un nuage de points avec une ligne de régression sns.lmplot(x='taille', y='poids', data=df) # Affichage du graphique plt.title('Nuage de points avec régression') plt.show() 2. Création d’une carte thermique (heatmap) : # Génération de données aléatoires pour la carte thermique data = np.random.rand(10, 12) # Création de la carte thermique sns.heatmap(data, cmap='viridis', annot=True) # Affichage du graphique plt.title('Carte Thermique des Données') plt.show() 4.2 Visualisations interactives avec Plotly Plotly est une bibliothèque Python qui permet de créer des visualisations de données interactives et dynamiques. Contrairement à Matplotlib et Seaborn, Plotly est particulièrement bien adapté pour créer des graphiques qui peuvent être zoomés, déplacés, et mis à jour en temps réel, ce qui le rend idéal pour les tableaux de bord interactifs et les applications Web. Principales caractéristiques de Plotly Interactivité : Les graphiques Plotly sont interactifs par défaut. Les utilisateurs peuvent passer la souris sur les éléments du graphique pour afficher des informations détaillées, zoomer, et dézoomer. 14 Graphiques complexes : Plotly permet de créer des graphiques com- plexes tels que des graphiques en 3D, des cartes géographiques interactives, et des graphiques de surface. Compatibilité avec Jupyter Notebook : Plotly s’intègre bien avec Jupyter Notebook, ce qui facilite l’affichage des graphiques interactifs dans les environnements de développement interactif. Exemples d’utilisation de Plotly 1. Création d’un graphique en courbes interactif : import plotly.graph_objs as go import plotly.offline as pyo # Données pour le graphique x = [1, 2, 3, 4, 5] y = [10, 15, 7, 10, 13] # Création de la trace trace = go.Scatter(x=x, y=y, mode='lines+markers', name='Courbe') # Définition de la disposition du graphique layout = go.Layout(title='Graphique en Courbes Interactif', xaxis=dict(title='X-axis'), yaxis=dict(title='Y-axis')) # Création de la figure fig = go.Figure(data=[trace], layout=layout) # Affichage du graphique pyo.iplot(fig) 2. Création d’une carte géographique interactive : import plotly.express as px import pandas as pd # Création d'un DataFrame avec des données de localisation df = pd.DataFrame({'Pays': ['France', 'Canada', 'Brésil', 'Australie'], 'Valeur': [300, 200, 100, 400]}) # Création de la carte fig = px.choropleth(df, locations='Pays', locationmode='country names', color='Valeur', color_continuous_scale='Viridis', title='Carte Géographique Interac # Affichage de la carte fig.show() 15 4.3 Bonnes pratiques de visualisation des données La création de visualisations efficaces ne se résume pas seulement à utiliser les bonnes bibliothèques. Voici quelques bonnes pratiques à suivre pour s’assurer que les visualisations communiquent les informations de manière claire et efficace : 1. Choisir le bon type de graphique : Sélectionnez le type de graphique qui correspond le mieux aux données que vous essayez de représenter. Par exemple, les nuages de points sont excellents pour visualiser des relations entre deux variables, tandis que les histogrammes conviennent mieux pour représenter la distribution d’une seule variable. 2. Éviter la surcharge visuelle : Trop d’informations ou de détails sur un graphique peuvent le rendre difficile à lire. Simplifiez les graphiques en évitant les couleurs trop nombreuses ou les éléments superflus. 3. Utiliser des étiquettes et des titres clairs : Assurez-vous que chaque axe est étiqueté et que le graphique a un titre descriptif. Les légendes doivent également être claires pour que les utilisateurs puissent facilement comprendre ce que chaque élément du graphique représente. 4. Considérer la palette de couleurs : Utilisez des palettes de couleurs cohérentes et adaptées aux personnes daltoniennes. Évitez d’utiliser trop de couleurs vives qui peuvent distraire ou confondre. 5. Tester l’interactivité : Si vous utilisez des visualisations interactives, assurez-vous que l’interaction améliore la compréhension de l’utilisateur. Testez les graphiques pour vous assurer que les interactions fonctionnent comme prévu. 4.4 Conclusion La visualisation des données est un outil puissant pour l’analyse et la présen- tation des résultats. Les bibliothèques Python comme Matplotlib, Seaborn, et Plotly offrent une gamme complète de fonctionnalités pour créer des graphiques statiques et interactifs, allant des graphiques simples aux visualisations com- plexes et dynamiques. En maîtrisant ces outils, les analystes et les scientifiques des données peuvent communiquer efficacement leurs découvertes et insights, rendant les résultats de l’analyse accessibles et compréhensibles pour un public plus large. 5. Techniques de fouille de données Les techniques de fouille de données permettent d’explorer, d’analyser et de mod- éliser des données pour en extraire des informations utiles et des motifs cachés. Ces techniques sont essentielles pour transformer de grandes quantités de don- nées en connaissances exploitables, facilitant la prise de décisions basées sur des preuves empiriques. Dans cette section, nous aborderons plusieurs techniques 16 de fouille de données couramment utilisées : l’analyse exploratoire des données (EDA), la réduction de la dimensionnalité avec l’analyse en composantes princi- pales (PCA), le clustering avec des méthodes telles que K-means et le clustering hiérarchique, et enfin, la classification avec des algorithmes tels que la régression logistique et les arbres de décision. 5.1 Analyse exploratoire des données (EDA) L’analyse exploratoire des données (Exploratory Data Analysis, EDA) est une étape initiale dans le processus de fouille de données. Elle consiste à examiner des ensembles de données pour en découvrir des caractéristiques importantes, des motifs, des anomalies, et des relations. L’EDA aide à formuler des hy- pothèses pour une analyse plus approfondie et à identifier les variables perti- nentes pour la modélisation. Objectifs de l’EDA Comprendre la structure des données : Identifier les types de vari- ables (numériques, catégorielles), leur distribution, et leurs relations. Détecter les anomalies et les valeurs aberrantes : Identifier les valeurs extrêmes qui pourraient influencer les résultats de l’analyse. Vérifier les hypothèses : Valider les hypothèses initiales sur la base des données disponibles. Préparer les données pour la modélisation : Identifier les transfor- mations nécessaires pour améliorer la qualité des données (normalisation, encodage des variables catégorielles, etc.). Techniques et outils pour l’EDA 1. Statistiques descriptives : Calcul des mesures de tendance centrale (moyenne, médiane) et de dispersion (écart-type, variance). Pandas four- nit des fonctions pratiques pour calculer ces statistiques. import pandas as pd # Chargement des données df = pd.read_csv('chemin/vers/fichier.csv') # Calcul des statistiques descriptives print(df.describe()) 2. Visualisations graphiques : Utilisation de graphiques tels que les his- togrammes, les boîtes à moustaches (boxplots), et les nuages de points pour explorer les distributions et les relations entre les variables. import matplotlib.pyplot as plt import seaborn as sns 17 # Histogramme de la distribution d'une variable sns.histplot(df['variable'], kde=True) plt.title('Distribution de la variable') plt.show() # Nuage de points pour visualiser la relation entre deux variables sns.scatterplot(x='variable1', y='variable2', data=df) plt.title('Relation entre variable1 et variable2') plt.show() 3. Cartes de corrélation : Les cartes de corrélation (ou heatmaps) mon- trent les relations linéaires entre les variables. Elles aident à identifier les paires de variables corrélées. # Calcul de la matrice de corrélation correlation_matrix = df.corr() # Affichage de la carte de corrélation sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm') plt.title('Carte de corrélation') plt.show() 5.2 Réduction de la dimensionnalité (PCA) La réduction de la dimensionnalité est une technique essentielle lorsque l’on travaille avec des ensembles de données à haute dimensionnalité (avec de nom- breuses variables). L’analyse en composantes principales (Principal Component Analysis, PCA) est une méthode statistique utilisée pour réduire le nombre de variables tout en conservant autant que possible la variance présente dans les données originales. La PCA aide à simplifier les modèles, à réduire le surap- prentissage, et à visualiser des données complexes. Comment fonctionne la PCA ? La PCA transforme les variables d’origine en un nouvel ensemble de variables non corrélées appelées composantes princi- pales. Ces composantes principales sont des combinaisons linéaires des variables d’origine et sont ordonnées de telle sorte que la première composante principale capture la plus grande part de la variance des données, la deuxième composante principale capture la deuxième plus grande part, et ainsi de suite. Étapes de l’application de la PCA 1. Normalisation des données : La PCA est sensible à l’échelle des don- nées. Les variables doivent donc être normalisées (standardisées) pour avoir une moyenne de 0 et un écart-type de 1. from sklearn.preprocessing import StandardScaler # Normalisation des données 18 features = df[['variable1', 'variable2', 'variable3']] scaler = StandardScaler() features_scaled = scaler.fit_transform(features) 2. Calcul des composantes principales : Application de la PCA pour réduire la dimensionnalité des données. from sklearn.decomposition import PCA # Application de la PCA pca = PCA(n_components=2) # Réduire à 2 dimensions principal_components = pca.fit_transform(features_scaled) # Création d'un DataFrame pour les composantes principales df_pca = pd.DataFrame(data=principal_components, columns=['PC1', 'PC2']) print(df_pca.head()) 3. Visualisation des composantes principales : Représentation des don- nées projetées sur les composantes principales pour identifier des motifs ou des clusters. # Visualisation des composantes principales plt.scatter(df_pca['PC1'], df_pca['PC2']) plt.xlabel('PC1') plt.ylabel('PC2') plt.title('Projection des données sur les composantes principales') plt.show() 5.3 Clustering (Regroupement) Le clustering est une technique de fouille de données non supervisée qui consiste à regrouper des observations en groupes ou clusters basés sur des similitudes dans leurs caractéristiques. Les méthodes de clustering aident à découvrir des structures et des motifs cachés dans les données. Types de méthodes de clustering 1. K-means clustering : Une méthode de clustering populaire qui divise les données en un nombre prédéfini de clusters (K) en minimisant la variance intra-cluster. K-means est simple à implémenter et rapide, mais nécessite de spécifier le nombre de clusters à l’avance. from sklearn.cluster import KMeans # Définir le nombre de clusters kmeans = KMeans(n_clusters=3, random_state=0) # Ajuster le modèle aux données kmeans.fit(features_scaled) 19 # Ajouter les étiquettes de cluster au DataFrame df['Cluster'] = kmeans.labels_ # Visualisation des clusters sns.scatterplot(x='PC1', y='PC2', hue='Cluster', data=df_pca) plt.title('Clustering K-means') plt.show() 2. Clustering hiérarchique : Cette méthode regroupe les données en for- mant une hiérarchie de clusters. Le clustering hiérarchique peut être ag- glomératif (commençant par chaque point comme un cluster et les fusion- nant) ou divisif (commençant avec tous les points dans un cluster et les di- visant). Les résultats sont souvent visualisés à l’aide d’un dendrogramme. from scipy.cluster.hierarchy import dendrogram, linkage # Calcul de la matrice de liaison linked = linkage(features_scaled, method='ward') # Visualisation du dendrogramme plt.figure(figsize=(10, 7)) dendrogram(linked, orientation='top', distance_sort='descending', show_leaf_counts=True plt.title('Dendrogramme de clustering hiérarchique') plt.show() 5.4 Classification La classification est une technique de fouille de données supervisée qui consiste à attribuer une étiquette ou une classe à des observations sur la base de leurs caractéristiques. Elle est utilisée dans divers domaines tels que la détection de fraude, la reconnaissance d’image, le diagnostic médical, et bien d’autres. Algorithmes de classification courants 1. Régression logistique : Un modèle de classification linéaire qui prédit la probabilité d’appartenance à une classe. Bien que simple, il est efficace pour des problèmes de classification binaire (deux classes). from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report, confusion_matrix # Division des données en ensembles d'entraînement et de test X = df[['variable1', 'variable2', 'variable3']] y = df['classe'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0 20 # Création et entraînement du modèle de régression logistique model = LogisticRegression() model.fit(X_train, y_train) # Prédictions et évaluation y_pred = model.predict(X_test) print(classification_report(y_test, y_pred)) print(confusion_matrix(y_test, y_pred)) 2. Arbres de décision : Un modèle de classification non linéaire qui divise les données en segments en fonction de règles de décision. Les arbres de décision sont interprétables et peuvent capturer des relations complexes entre les caractéristiques. from sklearn.tree import DecisionTreeClassifier from sklearn import tree # Création et entraînement d'un arbre de décision clf = DecisionTreeClassifier() clf.fit(X_train, y_train) # Visualisation de l'arbre de décision plt.figure(figsize=(12, 8)) tree.plot_tree(clf, filled=True, feature_names=['variable1', 'variable2', 'variable3'], plt.title('Arbre de décision') plt.show() # Prédictions et évaluation y_pred_tree = clf.predict(X_test) print(classification_report(y_test, y_pred_tree)) print(confusion_matrix(y_test, y_pred_tree)) 5.5 Conclusion Les techniques de fouille de données, telles que l’EDA, la PCA, le clustering, et la classification, jouent un rôle crucial dans l’extraction de connaissances exploitables à partir de grandes quantités de données. Chaque technique a ses propres forces et faiblesses, et le choix de la méthode dépend des objectifs de l’analyse et de la nature des données. En maîtrisant ces techniques, les analystes et les scientifiques des données peuvent révéler des tendances cachées, faire des prédictions précises et prendre des décisions éclairées basées sur des données. 6. Introduction au Machine Learning avec Scikit-learn Le machine learning (apprentissage automatique) est une branche de l’intelligence artificielle qui permet aux ordinateurs d’apprendre et de faire des 21 prédictions à partir de données sans être explicitement programmés. Scikit- learn, une bibliothèque Python populaire, offre une suite complète d’outils pour le machine learning. Elle est conçue pour interagir avec d’autres bibliothèques scientifiques telles que Numpy et Pandas, facilitant ainsi l’intégration dans les workflows d’analyse de données. Cette section présente les concepts fondamentaux du machine learning, le processus de création de pipelines de machine learning, et l’importance de la validation croisée et de l’évaluation des modèles. 6.1 Concepts Fondamentaux du Machine Learning Le machine learning repose sur des algorithmes capables de détecter des mo- tifs et d’apprendre à partir de données pour effectuer des prédictions ou des classifications. Voici les principaux concepts : Types de Machine Learning 1. Apprentissage supervisé : Ce type d’apprentissage utilise des données étiquetées (données d’entrée avec leur résultat attendu) pour entraîner un modèle. Les exemples incluent la régression linéaire, la régression lo- gistique, les arbres de décision, et les forêts aléatoires. L’objectif est de prédire la sortie pour de nouvelles données d’entrée. Régression : Prédire une valeur continue (ex. : prédiction du prix d’une maison en fonction de ses caractéristiques). Classification : Prédire une catégorie ou une classe (ex. : déter- miner si un e-mail est spam ou non). 2. Apprentissage non supervisé : Ici, le modèle apprend des structures et des relations à partir de données non étiquetées. Les techniques incluent le clustering (ex. : K-means) et la réduction de dimensionnalité (ex. : PCA). L’objectif est de découvrir des motifs cachés dans les données. 3. Apprentissage semi-supervisé : Combinaison des deux approches précédentes, utilisant une petite quantité de données étiquetées et une grande quantité de données non étiquetées. 4. Apprentissage par renforcement : Un agent apprend en interagissant avec un environnement et en recevant des récompenses ou des pénalités en fonction de ses actions. Utilisé dans des applications telles que les jeux et la robotique. Ensemble de données : Caractéristiques et étiquettes Caractéristiques (features) : Les variables d’entrée utilisées pour prédire la sortie (par exemple, la taille et le poids pour prédire l’IMC). Étiquettes (labels) : La sortie ou la variable cible que le modèle doit prédire (par exemple, le prix d’une maison). 22 6.2 Pipelines de Machine Learning Un pipeline de machine learning est une séquence automatisée d’étapes qui transforme les données brutes en prédictions. Scikit-learn fournit une API ro- buste pour créer et gérer des pipelines. Un pipeline typique inclut des étapes telles que le prétraitement des données, la transformation des caractéristiques, l’entraînement du modèle, et l’évaluation des performances. Étapes d’un Pipeline de Machine Learning 1. Prétraitement des données : Nettoyage des données, gestion des valeurs manquantes, normalisation ou standardisation des caractéris- tiques. from sklearn.preprocessing import StandardScaler from sklearn.impute import SimpleImputer from sklearn.pipeline import Pipeline from sklearn.compose import ColumnTransformer # Exemple de pipeline de prétraitement pour un ensemble de caractéristiques numeric_features = ['taille', 'poids', 'âge'] numeric_transformer = Pipeline(steps=[ ('imputer', SimpleImputer(strategy='mean')), ('scaler', StandardScaler()) ]) 2. Transformation des caractéristiques : Création de nouvelles carac- téristiques, encodage des variables catégorielles, réduction de la dimen- sionnalité. from sklearn.preprocessing import OneHotEncoder # Pipeline de transformation pour les caractéristiques catégorielles categorical_features = ['genre', 'région'] categorical_transformer = Pipeline(steps=[ ('encoder', OneHotEncoder(handle_unknown='ignore')) ]) # Combinaison des transformations pour les caractéristiques numériques et catégorielles preprocessor = ColumnTransformer( transformers=[ ('num', numeric_transformer, numeric_features), ('cat', categorical_transformer, categorical_features) ] ) 3. Entraînement du modèle : Sélection et ajustement du modèle de ma- chine learning. 23 from sklearn.linear_model import LogisticRegression # Création d'un pipeline combinant prétraitement et modèle model_pipeline = Pipeline(steps=[ ('preprocessor', preprocessor), ('classifier', LogisticRegression()) ]) 4. Validation croisée et ajustement des hyperparamètres : Utilisation de la validation croisée pour évaluer la performance du modèle et ajuster ses hyperparamètres afin de maximiser sa précision. from sklearn.model_selection import GridSearchCV # Définition des hyperparamètres à ajuster param_grid = { 'classifier__C': [0.1, 1.0, 10], 'classifier__solver': ['liblinear', 'saga'] } # Recherche de grille pour trouver les meilleurs hyperparamètres grid_search = GridSearchCV(model_pipeline, param_grid, cv=5) grid_search.fit(X_train, y_train) print(f"Meilleurs hyperparamètres : {grid_search.best_params_}") 5. Évaluation du modèle : Utilisation des métriques de performance pour évaluer le modèle sur des données de test non vues. from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # Prédictions sur les données de test y_pred = grid_search.predict(X_test) # Calcul des métriques de performance print(f"Accuracy : {accuracy_score(y_test, y_pred)}") print(f"Precision : {precision_score(y_test, y_pred)}") print(f"Recall : {recall_score(y_test, y_pred)}") print(f"F1 Score : {f1_score(y_test, y_pred)}") 6.3 Validation Croisée et Évaluation des Modèles La validation croisée est une méthode essentielle pour évaluer la performance d’un modèle de machine learning. Elle permet de tester la capacité du modèle à généraliser sur des données non vues, en divisant les données d’entraînement en plusieurs sous-ensembles. Pourquoi utiliser la validation croisée ? 24 Éviter le surapprentissage (overfitting) : Elle réduit le risque de surapprentissage en s’assurant que le modèle ne s’adapte pas trop aux données d’entraînement. Utilisation efficace des données : Toutes les données disponibles sont utilisées pour l’entraînement et la validation, maximisant ainsi l’apprentissage du modèle. Évaluation robuste : Les résultats de la validation croisée sont plus stables et représentatifs de la performance réelle du modèle. Types de validation croisée 1. Validation croisée k-fold : Les données sont divisées en k sous- ensembles. Le modèle est entraîné sur k-1 sous-ensembles et testé sur le sous-ensemble restant. Ce processus est répété k fois, chaque sous-ensemble étant utilisé une fois comme jeu de test. from sklearn.model_selection import cross_val_score # Validation croisée k-fold avec 5 folds scores = cross_val_score(model_pipeline, X, y, cv=5, scoring='accuracy') print(f"Scores de validation croisée : {scores}") print(f"Moyenne des scores : {scores.mean()}") 2. Validation croisée Leave-One-Out (LOOCV) : Une version extrême de k-fold où k est égal au nombre d’observations. Chaque observation est utilisée comme jeu de test une fois, tandis que toutes les autres servent d’ensemble d’entraînement. from sklearn.model_selection import LeaveOneOut # Validation croisée Leave-One-Out loo = LeaveOneOut() scores = cross_val_score(model_pipeline, X, y, cv=loo, scoring='accuracy') print(f"Moyenne des scores LOOCV : {scores.mean()}") Métriques d’évaluation Les métriques d’évaluation permettent de quanti- fier la performance du modèle. Les choix de métriques varient en fonction du type de problème (classification, régression) et de l’objectif de l’analyse. 1. Métriques pour les problèmes de classification : Précision (Accuracy) : Proportion de prédictions correctes parmi toutes les prédictions. Précision (Precision) : Proportion de prédictions positives cor- rectes parmi toutes les prédictions positives. Rappel (Recall) : Proportion de vrais positifs parmi tous les posi- tifs réels. F1 Score : Moyenne harmonique de la précision et du rappel, utile lorsque les classes sont déséquilibrées. 25 2. Métriques pour les problèmes de régression : Erreur quadratique moyenne (Mean Squared Error, MSE) : Moyenne des carrés des erreurs de prédiction. Erreur absolue moyenne (Mean Absolute Error, MAE) : Moyenne des valeurs absolues des erreurs de prédiction. Coefficient de détermination (R²) : Mesure de la proportion de variance expliquée par le modèle. from sklearn.metrics import mean_squared_error, r2_score # Prédictions pour un modèle de régression y_pred_reg = model_pipeline.predict(X_test) # Calcul des métriques de régression mse = mean_squared_error(y_test, y_pred_reg) r2 = r2_score(y_test, y_pred_reg) print(f"Erreur quadratique moyenne (MSE) : {mse}") print(f"Coefficient de détermination (R²) : {r2}") 6.4 Conclusion Scikit-learn est une bibliothèque puissante qui facilite l’implémentation et l’évaluation de modèles de machine learning. En comprenant comment créer des pipelines efficaces, utiliser la validation croisée, et évaluer les modèles avec des métriques appropriées, les praticiens de la science des données peuvent développer des modèles robustes capables de généraliser sur de nouvelles données. Ces compétences sont essentielles pour transformer des données en insights exploitables et pour résoudre des problèmes complexes dans divers domaines tels que la finance, la santé, le marketing, et plus encore. Travaux pratiques Voici quelques cas pratiques pour la prise en main de Pandas et Numpy. Ces exercices couvrent une gamme de manipulations courantes avec ces bib- liothèques, y compris la création et la manipulation de tableaux avec Numpy, ainsi que la gestion et l’analyse de données tabulaires avec Pandas. Cas pratique 1 : Manipulation de tableaux avec Numpy Objectif Apprendre à créer, manipuler, et effectuer des opérations sur des tableaux Numpy. Étapes 1. Création d’un tableau Numpy à partir d’une liste 26 Créez un tableau unidimensionnel avec les valeurs [10, 20, 30, 40, 50]. Affichez le tableau, sa forme et son type de données. import numpy as np # Création du tableau array_1d = np.array([10, 20, 30, 40, 50]) # Affichage du tableau, de sa forme et de son type de données print("Tableau :", array_1d) print("Forme :", array_1d.shape) print("Type de données :", array_1d.dtype) 2. Création d’un tableau 2D et accès aux éléments Créez un tableau 2D avec les valeurs suivantes : [[1, 2, 3], [4, 5, 6], [7, 8, 9]] Accédez à l’élément en ligne 2, colonne 3. Accédez à la deuxième colonne. # Création du tableau 2D array_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Accès à l'élément de la deuxième ligne, troisième colonne element = array_2d[1, 2] print("Élément à la position [1, 2] :", element) # Accès à la deuxième colonne second_column = array_2d[:, 1] print("Deuxième colonne :", second_column) 3. Opérations mathématiques sur les tableaux Multipliez chaque élément du tableau 2D par 2. Calculez la somme de tous les éléments du tableau. # Multiplication de chaque élément par 2 multiplied_array = array_2d * 2 print("Tableau après multiplication par 2 :", multiplied_array) # Somme de tous les éléments total_sum = np.sum(array_2d) print("Somme de tous les éléments :", total_sum) 4. Redimensionnement et transposition Redimensionnez le tableau 2D en une matrice de 1 ligne et 9 colonnes. Transposez le tableau 2D. # Redimensionnement du tableau reshaped_array = array_2d.reshape(1, 9) print("Tableau redimensionné :", reshaped_array) 27 # Transposition du tableau transposed_array = np.transpose(array_2d) print("Tableau transposé :", transposed_array) Cas pratique 2 : Analyse de données avec Pandas Objectif Se familiariser avec la manipulation des données tabulaires, le net- toyage des données, et les analyses de base avec Pandas. Étapes 1. Création d’un DataFrame à partir d’un dictionnaire Créez un DataFrame avec les informations suivantes : Nom : ['Alice', 'Bob', 'Claire', 'David'] Âge : [25, 30, 27, 22] Ville : ['Paris', 'Londres', 'Berlin', 'Madrid'] Affichez le DataFrame et ses informations de base. import pandas as pd # Création du DataFrame data = { 'Nom': ['Alice', 'Bob', 'Claire', 'David'], 'Âge': [25, 30, 27, 22], 'Ville': ['Paris', 'Londres', 'Berlin', 'Madrid'] } df = pd.DataFrame(data) # Affichage du DataFrame et des informations print(df) print(df.info()) print(df.describe()) 2. Sélection et filtrage des données Sélectionnez la colonne ‘Nom’. Filtrez les données pour afficher uniquement les personnes de plus de 25 ans. # Sélection de la colonne 'Nom' noms = df['Nom'] print("Colonne 'Nom' :", noms) # Filtrage des personnes de plus de 25 ans filtrage_age = df[df['Âge'] > 25] print("Personnes de plus de 25 ans :", filtrage_age) 3. Ajout et suppression de colonnes Ajoutez une colonne ‘Score’ avec les valeurs [88, 92, 85, 90]. Supprimez la colonne ‘Ville’. 28 # Ajout de la colonne 'Score' df['Score'] = [88, 92, 85, 90] print("DataFrame avec la colonne 'Score' ajoutée :", df) # Suppression de la colonne 'Ville' df_sans_ville = df.drop(columns=['Ville']) print("DataFrame sans la colonne 'Ville' :", df_sans_ville) 4. Gestion des valeurs manquantes Modifiez les données pour introduire une valeur manquante dans la colonne ‘Âge’ (par exemple, remplacer l’âge de ‘Bob’ par None). Remplissez les valeurs manquantes avec la moyenne de la colonne. # Introduction d'une valeur manquante df.loc[1, 'Âge'] = None print("DataFrame avec une valeur manquante :", df) # Remplissage des valeurs manquantes avec la moyenne df['Âge'].fillna(df['Âge'].mean(), inplace=True) print("DataFrame après remplissage des valeurs manquantes :", df) 5. Agrégation et regroupement Regroupez les données par ‘Ville’ et calculez la moyenne de l’âge pour chaque ville. Calculez le score total pour chaque ville. # Ajout d'une colonne 'Ville' pour cette étape df['Ville'] = ['Paris', 'Londres', 'Berlin', 'Paris'] # Regroupement par 'Ville' et calcul de la moyenne d'âge moyenne_age_par_ville = df.groupby('Ville')['Âge'].mean() print("Moyenne d'âge par ville :", moyenne_age_par_ville) # Calcul du score total par ville score_total_par_ville = df.groupby('Ville')['Score'].sum() print("Score total par ville :", score_total_par_ville) 6. Fusion de DataFrames Créez un deuxième DataFrame avec les informations suivantes : Nom : ['Alice', 'Claire', 'Eve'] Pays : ['France', 'Allemagne', 'Espagne'] Fusionnez les deux DataFrames sur la colonne ‘Nom’. # Création du deuxième DataFrame data2 = { 'Nom': ['Alice', 'Claire', 'Eve'], 'Pays': ['France', 'Allemagne', 'Espagne'] } df2 = pd.DataFrame(data2) # Fusion des deux DataFrames sur la colonne 'Nom' df_merged = pd.merge(df, df2, on='Nom', how='outer') 29 print("DataFrame fusionné :", df_merged) Cas pratique 3 : Analyse de données réelles avec Pandas Objectif Appliquer les compétences acquises pour analyser un ensemble de données réelles, tel qu’un fichier CSV contenant des informations sur des ventes ou des clients. Étapes 1. Chargement des données Chargez un fichier CSV (par exemple, ‘ventes.csv’) dans un DataFrame. Affichez les premières lignes et les informations du DataFrame. # Chargement des données df = pd.read_csv('ventes.csv') # Affichage des premières lignes et des informations print(df.head()) print(df.info()) 2. Exploration des données Calculez les statistiques descriptives des colonnes numériques. Identifiez les colonnes avec des valeurs manquantes. # Statistiques descriptives print(df.describe()) # Identification des valeurs manquantes valeurs_manquantes = df.isnull().sum() print("Valeurs manquantes par colonne :", valeurs_manquantes) 3. Nettoyage des données Remplissez les valeurs manquantes avec des valeurs appropriées (par exemple, la moyenne, la médiane, ou une valeur spécifique). Supprimez les doublons dans les données. # Remplissage des valeurs manquantes df.fillna(df.mean(), inplace=True) # Suppression des doublons df.drop_duplicates(inplace=True) 4. Analyse des ventes Calculez les ventes totales par catégorie de produit. Identifiez le produit le plus vendu. # Ventes totales par catégorie de produit ventes_par_categorie = df.groupby('Categorie')['Ventes'].sum() 30 print("Ventes totales par catégorie :", ventes_par_categorie) # Identification du produit le plus vendu produit_le_plus_vendu = df.groupby('Produit')['Ventes'].sum().idxmax() print("Produit le plus vendu :", produit_le_plus_vendu) 5. Visualisation des données Créez un graphique à barres montrant les ventes par catégorie de produit. Créez un graphique linéaire montrant l’évolution des ventes au fil du temps. import matplotlib.pyplot as plt # Graphique à barres des ventes par catégorie ventes_par_categorie.plot(kind='bar', color='blue') plt.title('Ventes par catégorie de produit') plt.xlabel('Catégorie') plt.ylabel('Ventes') plt.show() # Graphique linéaire de l'évolution des ventes au fil du temps df['Date'] = pd.to_datetime(df['Date']) ventes_par_date = df.groupby('Date')['Ventes'].sum() ventes_par_date.plot(kind='line', color='green') plt.title('Évolution des ventes au fil du temps') plt.xlabel('Date') plt.ylabel('Ventes') plt.show() Cas pratique 4 : Analyse Exploratoire des Données (EDA) Objectif Réaliser une analyse exploratoire des données pour comprendre la structure de l’ensemble de données, identifier des motifs, des relations entre les variables, et des anomalies éventuelles. Étapes 1. Chargement des données Chargez un ensemble de données (par exemple, un fichier CSV contenant des informations sur les clients ou les ventes) dans un DataFrame Pandas. import pandas as pd # Chargement des données df = pd.read_csv('clients.csv') 31 # Affichage des premières lignes et des informations du DataFrame print(df.head()) print(df.info()) 2. Statistiques descriptives Calculez les statistiques descriptives (moyenne, médiane, écart-type) pour les variables numériques. Identifiez les valeurs aberrantes (outliers) dans les données. # Statistiques descriptives print(df.describe()) # Détection des valeurs aberrantes avec un boxplot import seaborn as sns import matplotlib.pyplot as plt sns.boxplot(x=df['Revenu']) plt.title('Boxplot du revenu') plt.show() 3. Visualisations univariées Créez des histogrammes pour visualiser la distribution des variables numériques comme l’âge, le revenu, etc. # Histogramme de l'âge sns.histplot(df['Âge'], kde=True, bins=10) plt.title('Distribution de l\'âge') plt.show() # Histogramme du revenu sns.histplot(df['Revenu'], kde=True, bins=10) plt.title('Distribution du revenu') plt.show() 4. Analyse bivariée Explorez les relations entre les variables. Par exemple, utilisez des nuages de points pour examiner la relation entre l’âge et le revenu. # Nuage de points âge vs revenu sns.scatterplot(x='Âge', y='Revenu', data=df) plt.title('Relation entre l\'âge et le revenu') plt.show() 5. Analyse de corrélation Calculez la matrice de corrélation pour identifier les relations linéaires entre les variables. Visualisez cette matrice à l’aide d’une carte de chaleur (heatmap). # Matrice de corrélation correlation_matrix = df.corr() # Carte de chaleur de la matrice de corrélation sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm') plt.title('Matrice de corrélation') 32 plt.show() Cas pratique 5 : Réduction de la Dimensionnalité avec PCA Objectif Utiliser l’analyse en composantes principales (PCA) pour réduire la dimensionnalité d’un ensemble de données tout en conservant le maximum de variance possible. Étapes 1. Prétraitement des données Normalisez les variables numériques pour qu’elles aient une moyenne de 0 et un écart-type de 1. from sklearn.preprocessing import StandardScaler # Sélection des caractéristiques numériques features = ['Âge', 'Revenu', 'Dépenses'] # Normalisation des caractéristiques scaler = StandardScaler() features_scaled = scaler.fit_transform(df[features]) 2. Application de la PCA Appliquez la PCA pour réduire la dimensionnalité à 2 composantes principales. Affichez la variance expliquée par chaque composante. from sklearn.decomposition import PCA # Application de la PCA pca = PCA(n_components=2) principal_components = pca.fit_transform(features_scaled) # Affichage des composantes principales print("Variance expliquée par chaque composante :", pca.explained_variance_ratio_) # Création d'un DataFrame avec les composantes principales df_pca = pd.DataFrame(data=principal_components, columns=['PC1', 'PC2']) print(df_pca.head()) 3. Visualisation des composantes principales Visualisez les données projetées sur les deux premières composantes principales à l’aide d’un nuage de points. # Visualisation des composantes principales sns.scatterplot(x='PC1', y='PC2', data=df_pca) plt.title('Projection sur les deux premières composantes principales') plt.show() 33 Cas pratique 6 : Clustering (K-means) Objectif Appliquer l’algorithme de K-means pour regrouper les observations en clusters similaires, et visualiser les résultats. Étapes 1. Prétraitement des données Assurez-vous que les données sont normalisées. Si ce n’est pas fait, normalisez les caractéristiques sélectionnées. # Normalisation des caractéristiques (si nécessaire) features_scaled = scaler.fit_transform(df[features]) 2. Application de l’algorithme K-means Appliquez l’algorithme K-means pour créer 3 clusters. Ajoutez les étiquettes de cluster au DataFrame. from sklearn.cluster import KMeans # Application de K-means avec 3 clusters kmeans = KMeans(n_clusters=3, random_state=0) df['Cluster'] = kmeans.fit_predict(features_scaled) print("Centres des clusters :", kmeans.cluster_centers_) print("Étiquettes des clusters :", df['Cluster'].value_counts()) 3. Visualisation des clusters Utilisez un nuage de points pour visualiser les clusters en fonction des deux premières composantes principales. # Visualisation des clusters sns.scatterplot(x=df_pca['PC1'], y=df_pca['PC2'], hue=df['Cluster'], palette='Set1') plt.title('Clusters K-means sur les composantes principales') plt.show() 4. Évaluation des clusters Calculez l’inertie (la somme des distances carrées des points aux cen- tres des clusters) pour évaluer la qualité du clustering. Effectuez l’analyse du coude (elbow method) pour déterminer le nom- bre optimal de clusters. # Inertie du modèle K-means print("Inertie du modèle K-means :", kmeans.inertia_) # Méthode du coude pour déterminer le nombre optimal de clusters inertias = [] k_values = range(1, 10) for k in k_values: kmeans = KMeans(n_clusters=k, random_state=0) 34 kmeans.fit(features_scaled) inertias.append(kmeans.inertia_) plt.plot(k_values, inertias, '-o') plt.title('Méthode du coude') plt.xlabel('Nombre de clusters (k)') plt.ylabel('Inertie') plt.show() Cas pratique 7 : Classification avec Régression Logistique Objectif Construire un modèle de régression logistique pour prédire une classe binaire, évaluer la performance du modèle, et interpréter les résultats. Étapes 1. Préparation des données Divisez les données en un ensemble de caractéristiques (X) et une cible (y). Divisez les données en ensembles d’entraînement et de test. from sklearn.model_selection import train_test_split # Sélection des caractéristiques et de la cible X = df[['Âge', 'Revenu', 'Dépenses']] y = df['Cible'] # Par exemple, 0 ou 1 pour une classification binaire # Division en ensembles d'entraînement et de test X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=4 2. Entraînement du modèle de régression logistique Entraînez le modèle sur l’ensemble d’entraînement. Faites des prédictions sur l’ensemble de test. from sklearn.linear_model import LogisticRegression # Création et entraînement du modèle model = LogisticRegression() model.fit(X_train, y_train) # Prédictions sur l'ensemble de test y_pred = model.predict(X_test) 3. Évaluation du modèle Évaluez la performance du modèle en utilisant des métriques telles que l’exactitude, la précision, le rappel, et le score F1. from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, co # Évaluation du modèle 35 print("Exactitude :", accuracy_score(y _test, y_pred)) print("Précision :", precision_score(y_test, y_pred)) print("Rappel :", recall_score(y_test, y_pred)) print("Score F1 :", f1_score(y_test, y_pred)) # Matrice de confusion print("Matrice de confusion :\n", confusion_matrix(y_test, y_pred)) 4. Interprétation des coefficients Interprétez les coefficients de la régression logistique pour compren- dre l’impact de chaque caractéristique sur la probabilité de la classe prédite. # Interprétation des coefficients coefficients = pd.DataFrame({"Caractéristiques": X.columns, "Coefficients": model.coef_ print(coefficients) Cas pratique 8 : Clustering Hiérarchique Objectif Appliquer le clustering hiérarchique pour regrouper les observations, visualiser les résultats avec un dendrogramme, et déterminer les clusters opti- maux. Étapes 1. Prétraitement des données Assurez-vous que les données sont prêtes pour le clustering (normal- isation si nécessaire). # Normalisation des caractéristiques (si nécessaire) features_scaled = scaler.fit_transform(df[features]) 2. Application du clustering hiérarchique Utilisez la méthode de liaison (linkage method) pour effectuer le clus- tering hiérarchique. Affichez le dendrogramme. from scipy.cluster.hierarchy import dendrogram, linkage # Application du clustering hiérarchique avec la méthode de Ward linked = linkage(features_scaled, method='ward') # Visualisation du dendrogramme plt.figure(figsize=(10, 7)) dendrogram(linked, orientation='top', distance_sort='descending', show_leaf_counts=True plt.title('Dendrogramme de clustering hiérarchique') plt.show() 3. Découpage des clusters 36 Découpez le dendrogramme à un certain niveau pour obtenir un nom- bre spécifique de clusters. Ajoutez les étiquettes de cluster au DataFrame. from scipy.cluster.hierarchy import fcluster # Découpage du dendrogramme pour obtenir 3 clusters df['Cluster_HC'] = fcluster(linked, 3, criterion='maxclust') # Affichage des clusters print(df['Cluster_HC'].value_counts()) 4. Visualisation des clusters Visualisez les clusters dans l’espace des deux premières composantes principales. # Visualisation des clusters hiérarchiques sur les composantes principales sns.scatterplot(x=df_pca['PC1'], y=df_pca['PC2'], hue=df['Cluster_HC'], palette='Set2') plt.title('Clusters hiérarchiques sur les composantes principales') plt.show() 37

Use Quizgecko on...
Browser
Browser