Une introduction conviviale à l’analyse de données en Python

Au fil des ans, l’utilisation de python pour la science des données s’est incroyablement développée et ne cesse de croître chaque jour.

La science des données est un vaste domaine d’étude avec beaucoup de sous-domaines, dont l’analyse des données est incontestablement l’un des plus importants de tous ces domaines, et quel que soit son niveau de compétence en science des données, il est devenu de plus en plus important de comprendre ou en avoir au moins une connaissance de base.

Qu’est-ce que l’analyse de données ?

L’analyse des données est le nettoyage et la transformation d’une grande quantité de données non structurées ou non organisées, dans le but de générer des informations et des informations clés sur ces données qui aideraient à prendre des décisions éclairées.

Il existe divers outils utilisés pour l’analyse des données, Python, Microsoft Excel, Tableau, SaS, etc., mais dans cet article, nous nous concentrerons sur la façon dont l’analyse des données est effectuée en python. Plus précisément, comment c’est fait avec une bibliothèque python appelée Pandas.

C’est quoi Pandas ?

Pandas est une bibliothèque Python open source utilisée pour la manipulation et la manipulation de données. Il est rapide et très efficace et dispose d’outils pour charger plusieurs types de données en mémoire. Il peut être utilisé pour remodeler, étiqueter des tranches, indexer ou même regrouper plusieurs formes de données.

Structures de données dans les pandas

Il existe 3 structures de données dans Pandas, à savoir ;

La meilleure façon de différencier les trois est de voir l’un comme contenant plusieurs piles de l’autre. Ainsi, un DataFrame est une pile de séries et un Panel est une pile de DataFrames.

Une série est un tableau à une dimension

Une pile de plusieurs séries forme un DataFrame en 2 dimensions

Un Stack de plusieurs DataFrames fait un Panel en 3 dimensions

La structure de données avec laquelle nous travaillerions le plus est le DataFrame bidimensionnel qui peut également être le moyen de représentation par défaut pour certains ensembles de données que nous pourrions rencontrer.

Analyse de données dans les pandas

Pour cet article, aucune installation n’est nécessaire. Nous utiliserions un outil appelé colaboratoire créé par Google. Il s’agit d’un environnement python en ligne pour l’analyse de données, l’apprentissage automatique et l’IA. Il s’agit simplement d’un Jupyter Notebook basé sur le cloud qui est préinstallé avec presque tous les packages Python dont vous auriez besoin en tant que data scientist.

Maintenant, dirigez-vous vers https://colab.research.google.com/notebooks/intro.ipynb. Vous devriez voir ci-dessous.

Dans la navigation en haut à gauche, cliquez sur l’option de fichier et cliquez sur l’option « nouveau bloc-notes ». Vous verriez une nouvelle page de bloc-notes Jupyter chargée dans votre navigateur. La première chose que nous devons faire est d’importer des pandas dans notre environnement de travail. Nous pouvons le faire en exécutant le code suivant ;

import pandas as pd

Pour cet article, nous utiliserions un ensemble de données sur les prix des logements pour notre analyse des données. L’ensemble de données que nous utiliserions peut être trouvé ici. La première chose que nous voudrions faire est de charger cet ensemble de données dans notre environnement.

Nous pouvons le faire avec le code suivant dans une nouvelle cellule ;

df =  pd.read_csv('https://firebasestorage.googleapis.com/v0/b/ai6-portfolio-abeokuta.appspot.com/o/kc_house_data.csv?alt=media &token=6a5ab32c-3cac-42b3-b534-4dbd0e4bdbc0 ', sep=',')

Le .read_csv est utilisé lorsque nous voulons lire un fichier CSV et nous avons passé une propriété sep pour montrer que le fichier CSV est délimité par des virgules.

Nous devons également noter que notre fichier CSV chargé est stocké dans une variable df .

Nous n’avons pas besoin d’utiliser la fonction print() dans Jupyter Notebook. Nous pouvons simplement taper un nom de variable dans notre cellule et Jupyter Notebook l’imprimera pour nous.

Nous pouvons essayer cela en tapant df dans une nouvelle cellule et en l’exécutant, il imprimera toutes les données de notre ensemble de données en tant que DataFrame pour nous.

Mais nous ne voulons pas toujours voir toutes les données, parfois nous voulons juste voir les premières données et leurs noms de colonne. Nous pouvons utiliser la fonction df.head() pour imprimer les cinq premières colonnes et df.tail() pour imprimer les cinq dernières. La sortie de l’un ou l’autre des deux ressemblerait à cela;

Nous voudrions vérifier les relations entre ces plusieurs lignes et colonnes de données. La fonction .describe() fait exactement cela pour nous.

L’exécution de df.describe() donne la sortie suivante ;

Nous pouvons voir immédiatement que le .describe() donne la moyenne, l’écart type, les valeurs minimales et maximales et les centiles de chaque colonne du DataFrame. Ceci est particulièrement utile.

Nous pouvons également vérifier la forme de notre DataFrame 2D pour savoir combien de lignes et de colonnes il contient. Nous pouvons le faire en utilisant df.shape qui renvoie un tuple au format (lignes, colonnes).

Nous pouvons également vérifier les noms de toutes les colonnes de notre DataFrame en utilisant df.columns.

Que se passe-t-il si nous voulons sélectionner une seule colonne et renvoyer toutes les données qu’elle contient ? Ceci est fait d’une manière similaire au découpage d’un dictionnaire. Tapez le code suivant dans une nouvelle cellule et exécutez-le

df['price ']

Le code ci-dessus renvoie la colonne de prix, nous pouvons aller plus loin en l’enregistrant dans une nouvelle variable en tant que telle

price = df['price']

Maintenant, nous pouvons effectuer toutes les autres actions pouvant être effectuées sur un DataFrame sur notre variable de prix, car il ne s’agit que d’un sous-ensemble d’un DataFrame réel. Nous pouvons faire des choses comme df.head(), df.shape etc.

Nous pourrions également sélectionner plusieurs colonnes en passant une liste de noms de colonnes dans df en tant que tel

data = df[['price ', 'bedrooms']]

Ce qui précède sélectionne les colonnes avec les noms ‘prix’ et ‘chambres’, si nous tapons data.head() dans une nouvelle cellule, nous aurions ce qui suit

La manière ci-dessus de découper les colonnes renvoie tous les éléments de ligne de cette colonne, que se passe-t-il si nous voulons renvoyer un sous-ensemble de lignes et un sous-ensemble de colonnes de notre ensemble de données ? Cela peut être fait en utilisant .iloc et est indexé d’une manière similaire aux listes python. Nous pouvons donc faire quelque chose comme

df.iloc[50: , 3]

Ce qui renvoie la 3e colonne de la 50e ligne jusqu’à la fin. C’est assez soigné et identique au découpage des listes en python.

Faisons maintenant des choses vraiment intéressantes, notre ensemble de données sur le prix du logement a une colonne qui nous indique le prix d’une maison et une autre colonne nous indique le nombre de chambres à coucher de cette maison particulière. Le prix du logement est une valeur continue, il est donc possible que nous n’ayons pas deux maisons qui aient le même prix. Mais le nombre de chambres est un peu discret, on peut donc avoir plusieurs maisons de deux, trois, quatre chambres, etc.

Que se passe-t-il si nous voulons obtenir toutes les maisons avec le même nombre de chambres et trouver le prix moyen de chaque chambre discrète ? C’est relativement facile de faire ça chez les pandas, ça peut se faire comme ça ;

df.groupby('bedrooms ')['price '].mean()

Ce qui précède regroupe d’abord le DataFrame par les ensembles de données avec un numéro de chambre identique à l’aide de la fonction df.groupby(), puis nous lui disons de nous donner uniquement la colonne de la chambre et d’utiliser la fonction .mean() pour trouver la moyenne de chaque maison dans l’ensemble de données .

Et si nous voulons visualiser ce qui précède ? Nous voudrions pouvoir vérifier comment varie le prix moyen de chaque numéro de chambre distinct. Nous avons juste besoin d’enchaîner le code précédent à une fonction .plot() en tant que telle ;

df.groupby('bedrooms ')['price '].mean().plot()

Nous aurons une sortie qui ressemble à cela;

Ce qui précède nous montre certaines tendances dans les données. Sur l’axe horizontal, nous avons un nombre distinct de chambres (Notez que plus d’une maison peut avoir X chambres), Sur l’axe vertical, nous avons la moyenne des prix par rapport au nombre de chambres correspondant sur l’horizontale axe. Nous pouvons maintenant remarquer immédiatement que les maisons qui ont entre 5 et 10 chambres coûtent beaucoup plus cher que les maisons avec 3 chambres. Il deviendra également évident que les maisons qui ont environ 7 ou 8 chambres coûtent beaucoup plus cher que celles qui ont 15, 20 ou même 30 pièces.

Des informations comme celles ci-dessus expliquent pourquoi l’analyse des données est très importante, nous sommes en mesure d’extraire des informations utiles des données qui ne sont pas immédiatement ou tout à fait impossibles à remarquer sans analyse.

Données manquantes

Supposons que je participe à un sondage composé d’une série de questions. Je partage un lien vers l’enquête avec des milliers de personnes afin qu’elles puissent donner leur avis. Mon objectif ultime est d’exécuter une analyse de données sur ces données afin que je puisse obtenir des informations clés à partir des données.

Maintenant, beaucoup de choses pourraient mal tourner, certains enquêteurs pourraient se sentir mal à l’aise de répondre à certaines de mes questions et laisser le champ vide. Beaucoup de gens pourraient faire la même chose pour plusieurs parties des questions de mon sondage. Cela pourrait ne pas être considéré comme un problème, mais imaginez si je devais collecter des données numériques dans mon enquête et qu’une partie de l’analyse me demandait d’obtenir la somme, la moyenne ou une autre opération arithmétique. Plusieurs valeurs manquantes conduiraient à de nombreuses inexactitudes dans mon analyse, je dois trouver un moyen de trouver et de remplacer ces valeurs manquantes par des valeurs qui pourraient leur être un substitut proche.

Les pandas nous fournissent une fonction pour trouver les valeurs manquantes dans un DataFrame appelé isnull().

La fonction isnull() peut être utilisée telle quelle ;

df.isnull()

Cela renvoie un DataFrame de booléens qui nous indique si les données présentes à l’origine étaient vraiment manquantes ou faussement manquantes. La sortie ressemblerait à telle;

Nous avons besoin d’un moyen pour pouvoir remplacer toutes ces valeurs manquantes, le plus souvent le choix des valeurs manquantes peut être pris égal à zéro. Parfois, il peut être considéré comme la moyenne de toutes les autres données ou peut-être la moyenne des données qui l’entourent, selon le scientifique des données et le cas d’utilisation des données analysées.

Pour remplir toutes les valeurs manquantes dans un DataFrame, on utilise la fonction .fillna() utilisée comme telle ;

df.fillna(0)

Dans ce qui précède, nous remplissons toutes les données vides avec la valeur zéro. Il pourrait aussi bien s’agir de n’importe quel autre numéro que nous spécifions.

L’importance des données ne peut être surestimée, elles nous aident à obtenir des réponses directement à partir de nos données elles-mêmes !. Selon eux, l’analyse des données est le nouveau pétrole pour les économies numériques.

Tous les exemples de cet article se trouvent ici.

Pour en savoir plus en profondeur, consultez Cours en ligne sur l’analyse de données avec Python et Pandas.