NumPy avec Pandas pour une analyse de données plus efficace

NumPy avec Pandas pour une analyse de données plus efficace

Image de jcomp sur Freepik

En tant que spécialiste des données, Pandas est un outil essentiel pour la manipulation des données grâce à son interface intuitive et facile à utiliser. C’est pourquoi de nombreux programmes de formation en science des données incluent Pandas dans leur curriculum.

Pandas repose sur le package NumPy, en particulier sur les tableaux NumPy. De nombreuses fonctions et méthodologies de NumPy fonctionnent bien avec Pandas, ce qui nous permet d’utiliser NumPy pour améliorer notre analyse de données avec Pandas.

Dans cet article, nous explorerons plusieurs exemples montrant comment NumPy peut enrichir notre expérience d’analyse de données avec Pandas.

Allons-y.

Améliorer l’analyse de données avec Pandas et NumPy

Avant de commencer, assurez-vous d’avoir installé tous les packages nécessaires. Si ce n’est pas le cas, vous pouvez installer Pandas et NumPy avec le code suivant :

Nous allons d’abord expliquer comment Pandas et NumPy sont interconnectés. Comme mentionné précédemment, Pandas est construit sur le package NumPy. Voyons comment ils peuvent se compléter pour améliorer notre analyse de données.

Pour commencer, créons un tableau NumPy et un DataFrame Pandas avec leurs packages respectifs :

import numpy as np
import pandas as pd

np_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
pandas_df = pd.DataFrame(np_array, columns=['A', 'B', 'C'])

print(np_array)
print(pandas_df)

Output>>
[[1 2 3]
[4 5 6]
[7 8 9]]
A B C
0 1 2 3
1 4 5 6
2 7 8 9

Comme vous pouvez le voir, nous pouvons créer un DataFrame Pandas à partir d’un tableau NumPy avec la même structure dimensionnelle.

Ensuite, nous pouvons utiliser NumPy pour le traitement et le nettoyage des données dans Pandas. Par exemple, nous pouvons utiliser l’objet NumPy NaN comme espace réservé pour les données manquantes :

df = pd.DataFrame({
'A': [1, 2, np.nan, 4, 5],
'B': [5, np.nan, np.nan, 3, 2],
'C': [1, 2, 3, np.nan, 5]
})
print(df)

Output>>
A B C
0 1.0 5.0 1.0
1 2.0 NaN 2.0
2 NaN NaN 3.0
3 4.0 3.0 NaN
4 5.0 2.0 5.0

Comme vous pouvez le voir, l’objet NumPy NaN représente les données manquantes dans Pandas. Nous pouvons également compter le nombre d’objets NaN dans chaque colonne du DataFrame :

Output>>
A 1
B 2
C 1
dtype: int64

Si les valeurs manquantes sont représentées par des chaînes, nous pouvons les remplacer par des objets NumPy NaN :

df['A'] = df['A'].replace('missing data', np.nan)

NumPy peut également être utilisé pour détecter les valeurs aberrantes. Voici comment :

df = pd.DataFrame({
'A': np.random.normal(0, 1, 1000),
'B': np.random.normal(0, 1, 1000)
})

df.loc[10, 'A'] = 100
df.loc[25, 'B'] = -100

def detect_outliers(data, threshold=3):
z_scores = np.abs((data - data.mean()) / data.std())
return z_scores > threshold

outliers = detect_outliers(df)
print(df[outliers.any(axis=1)])

Output>>
A B
10 100.000000 0.355967
25 0.239933 -100.000000

Dans cet exemple, nous générons des nombres aléatoires avec NumPy, puis créons une fonction pour détecter les valeurs aberrantes à l’aide des scores Z. Le résultat est un DataFrame contenant les valeurs aberrantes.

Nous pouvons également effectuer des analyses statistiques avec Pandas, en utilisant NumPy pour faciliter le processus d’agrégation :

df = pd.DataFrame({
'Category': [np.random.choice(['A', 'B']) for i in range(100)],
'Values': np.random.rand(100)
})

print(df.groupby('Category')['Values'].agg([np.mean, np.std, np.min, np.max]))

Output>>
mean std amin amax
Category
A 0.524568 0.288471 0.025635 0.999284
B 0.525937 0.300526 0.019443 0.999090

En utilisant NumPy, nous pouvons effectuer des analyses statistiques sur un DataFrame Pandas et obtenir des statistiques globales similaires à celles ci-dessus.

Enfin, nous aborderons les opérations vectorisées avec Pandas et NumPy. Les opérations vectorisées permettent d’effectuer des opérations sur les données simultanément, ce qui est plus rapide et optimisé en mémoire. Par exemple, nous pouvons effectuer des additions élément par élément entre les colonnes d’un DataFrame :

data = {'A': [15, 20, 25, 30, 35], 'B': [10, 20, 30, 40, 50]}

df = pd.DataFrame(data)
df['C'] = np.add(df['A'], df['B'])

print(df)

Output>>
A B C
0 15 10 25
1 20 20 40
2 25 30 55
3 30 40 70
4 35 50 85

Nous pouvons également transformer une colonne de DataFrame en utilisant une fonction mathématique de NumPy :

df['B_exp'] = np.exp(df['B'])
print(df)

Output>>
A B C B_exp
0 15 10 25 2.202647e+04
1 20 20 40 4.851652e+08
2 25 30 55 1.068647e+13
3 30 40 70 2.353853e+17
4 35 50 85 5.184706e+21

Il est également possible d’effectuer des remplacements conditionnels avec NumPy pour un DataFrame Pandas :

df['A_replaced'] = np.where(df['A'] > 20, df['B'] * 2, df['B'] / 2)
print(df)

Output>>
A B C B_exp A_replaced
0 15 10 25 2.202647e+04 5.0
1 20 20 40 4.851652e+08 10.0
2 25 30 55 1.068647e+13 60.0
3 30 40 70 2.353853e+17 80.0
4 35 50 85 5.184706e+21 100.0

Ces exemples montrent comment les fonctions de NumPy peuvent améliorer votre processus d’analyse de données.

Conclusion

Dans cet article, nous avons expliqué comment NumPy peut améliorer l’efficacité de l’analyse de données avec Pandas. Nous avons exploré le prétraitement des données, le nettoyage des données, l’analyse statistique et les opérations vectorisées avec Pandas et NumPy.

J’espère que cela vous sera utile !

Cornellius Yudha Wijaya est directeur adjoint de la science des données et rédacteur de données. Tout en travaillant à temps plein chez Allianz Indonesia, il aime partager des conseils sur Python et les données via les réseaux sociaux et la rédaction. Cornellius écrit sur une variété de sujets liés à l’IA et à l’apprentissage automatique.

Source