Michel Macaulay

Doit connaître les fonctions Pandas pour le parcours d'apprentissage automatique

Nœud source: 1865356

Cet article a été publié dans le cadre du Blogathon sur la science des données

Introduction

Eh bien, il y a une bonne possibilité que vous le puissiez !

Pour les data scientists qui utilisent Python comme langage de programmation principal, le package Pandas est un outil d'analyse de données indispensable. Le package Pandas contient tout ce dont un scientifique des données a besoin, et chaque cours nous a appris à l'utiliser dans un premier temps. Il est si grand, puissant et effectue presque toutes les manipulations tabulaires que vous pouvez imaginer. Cependant, cette largeur peut parfois être un inconvénient.

Il possède de nombreuses fonctionnalités intéressantes qui résolvent des cas extrêmes rares, différents scénarios.

L'un des principaux inconvénients des pandas est qu'ils ont du mal avec de grands ensembles de données, car les pandas stockent leurs structures de données dans la RAM, ce qui peut devenir insuffisant à mesure que la taille des données augmente. Utilisez PySpark ou Dask pour cela.

Même si le package Pandas est largement utilisé, il existe encore de nombreuses fonctions que les gens peuvent ignorer, que ce soit parce qu'il est moins utilisé ou parce qu'ils ignorent son existence. Cet article a pour but de vous présenter ces fonctionnalités et de démontrer que Pandas est bien plus compétent que vous ne le pensiez auparavant.

Pipe

Pour effectuer le nettoyage des données de manière concise et compacte dans les pandas, on peut utiliser les fonctions Pipe, qui vous permettent de combiner plusieurs fonctions en une seule opération.

Par exemple, si vous aimez appliquer des fonctions telles que drop_duplicates, encode_categoricals, remove_outliers qui acceptent ses arguments.

df_cleaned = (diamonds.pipe(drop_duplicates). pipe(remove_outliers, ['price', 'carat', 'depth']). pipe(encode_categoricals, ['cut', 'color', 'clarity']) )

Factoriser

Cette fonction est une alternative à Sklearns Label Encoder.

# Attention aux [0] à la fin diamonds["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamonds["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Nom : cut_enc, dtype : int64

Factoriser les résultats un tuple de valeurs : la valeur encodée et une liste de catégories uniques.

valeurs, unique = pd.factorize(diamonds["cut"], sort=True) >>> values[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> unique ['Idéal', 'Premium', 'Très bien', 'Bon', 'Passable']

Exploser

Exploser | fonctions de pandas

Photo par Edewaa Foster on Unsplash

Explode est une fonction avec un nom intéressant. Commençons par un exemple puis une explication :

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("sale") >>> df
données | fonctions de pandas
Image par auteur

La colonne des caractéristiques comporte deux lignes désignées par des listes. Ce type de données est disponible dans les enquêtes où quelques questions acceptent des choix multiples.

>>> df.explode("sale", ignore_index=True)
les données explosent
Image par auteur

Cette fonction prend une cellule avec un tableau de valeurs et explose en plusieurs lignes. Pour conserver l'ordre d'un index numérique, utilisez ignore_index comme True.

Entre

Pour l'indexation booléenne des caractéristiques numériques dans une plage, voici une fonction pratique :

# Obtenez des diamants dont le prix est compris entre 3500 et 3700 dollars diamonds[diamonds["price"].between(3500, 3700, inclusive="nither")].sample(5)
entre les données | fonctions de pandas
Image par auteur

 

T

DataFrame a un attribut T simple, appelé transpose. Nous ne l'utilisons peut-être pas souvent, la méthode de description est utile lors de la visualisation des trames de données.

>>> boston.describe().T.head(10)
transposer
Image par auteur

 

Options de pandas

On peut utiliser les paramètres globaux des pandas qui permettent de modifier et de modifier les comportements par défaut.

>>> dir(pd.options) ['calculer', 'afficher', 'io', 'mode', 'tracer']

Il se compose de 5 modules. Voyons les options disponibles sous l'écran. De nombreuses options sont disponibles, mais j'utilise principalement max_columns.

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' , 'largeur']

La plupart des gens utilisent max_columns et precision

# Supprimer la limite pour afficher le nombre de cols pd.options.display.max_columns = None # Afficher seulement 5 nombres après la virgule pd.options.display.precision = 5 # se débarrasse de la notation scientifique

Convert_dtypes

Nous savons tous que les pandas ont la fâcheuse habitude de marquer certaines colonnes en tant que types de données d'objets. Plutôt que de définir directement leurs types, vous pouvez utiliser la méthode convert dtypes, qui tente de déduire le meilleur type de données :

sample = pd.read_csv("data/station_day.csv",usecols=["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes Objet StationId CO float64 O3 float64 Type d'objet AQI_Bucket : objet >>> sample.convert_dtypes().dtypes StationId chaîne CO float64 O3 float64 AQI_Bucket chaîne dtype : objet

Sélectionnez_dtypes

D'après le nom, je pense que ce que fait la fonction est clair. Vous pouvez utiliser les options d'inclusion et d'exclusion pour spécifier des colonnes qui incluent ou omettent des types de données spécifiques.

Choisissez uniquement des colonnes numériques avec np.number, par exemple :

# Choisissez uniquement les colonnes numériques diamonds.select_dtypes(include=np.number).head()
sélectionner les types
Image par auteur

 

Masques

Cette fonction permet de remplacer les valeurs lorsque la condition personnalisée n'est pas satisfaite.

# Créer des exemples de données d'âge = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages")
masque | Les données
Image par auteur

Après avoir effectué l'opération ci-dessus.

masquage effectué
Image par auteur

Min et Max

Bien que min et max soient bien connus, il a de meilleures propriétés pour certains cas limites.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] librairies = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) pour lib dans les bibliothèques}, index=index ) >>> df
min et max
Image par auteur 

Le DataFrame fictif ci-dessus montre les résultats de quatre bibliothèques d'amplification de gradient différentes sur cinq ensembles de données. Nous recherchons le package qui a fait le meilleur sur chaque ensemble de données. Voici comment l'accomplir avec max d'une manière élégante:

>>> df.max(axis=1) Diamants 99.52684 Titanic 99.63650 Iris 99.10989 Maladie cardiaque 99.31627 Défaut de prêt 97.96728 dtype: float64

Nle plus grand et Nle plus petit

Le nlargest et le nsmallest sont utiles pour afficher les valeurs N supérieures ou ~(N supérieures) d'une variable.

diamants.nlargest(5, "prix")
le plus grand et le plus petit
Image par auteur
diamants.nsmallest(5, "prix")
le plus petit
Image par auteur

 

Idxmax et Idxmin

Les pandas renvoient le plus grand/le plus petit nombre lorsque vous appelez max ou min sur une colonne. Cependant, il existe des situations où vous avez besoin de la position du min/max, que ces fonctions ne fournissent pas.

À la place, vous pouvez utiliser idxmax/idxmin :

>>> diamants.prix.idxmax() 27749 >>> diamants.carat.idxmin() 14

Value_Counts

Un moyen courant de trouver le pourcentage des valeurs manquantes consiste à combiner isnull et sum et à diviser par la taille du tableau.

Mais, value_counts avec des arguments pertinents fait la même chose :

logement = pd.read_csv("train.csv") >>> logement["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 Nom : FireplaceQu, type : float64

Agrafe

La fonction clip aide à trouver les valeurs aberrantes en dehors d'une plage et à les remplacer par des limites strictes.

>>> âges.clip (50, 60)
données pour le clip
Image par auteur

 

À_heure et entre_heure

Ces fonctions sont utiles lorsque vous travaillez avec des séries temporelles de haute granularité.

at_time permet d'obtenir des valeurs à une date ou une heure spécifique.

index = pd.date_range("2021-08-01", periodes=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
exemple at_time | fonctions de pandas
Image par auteur

>>> df.at_time(“15:00”)

.at_time | fonctions de pandas
Image par auteur

between_time utilisé pour récupérer des lignes dans une plage personnalisée.

de datetime importer datetime >>> df.between_time("09:45", "12:00")
entre_temps
Image par auteur

 

Bdate_range

Cette fonction permet de créer des indices de séries chronologiques avec une fréquence de jours ouvrables. Le monde financier a ce type de fréquence. Ainsi, cette fonction peut être utile au moment de la réindexation des séries temporelles avec la fonction de réindexation.

series = pd.bdate_range("2021-01-01", "2021-01-31") # Une période d'un mois >>> len(series) 21

À et Iat

Ces deux accesseurs sont sensiblement plus rapides que loc et iloc. Cependant, ils ont un inconvénient. Ils ne vous permettent de choisir ou de remplacer qu'une valeur à la fois :

# [index, label] >>> diamonds.at[234, "cut"] 'Ideal' # [index, index] >>> diamonds.iat[1564, 4] 61.2 # Remplacer la 16541ème ligne de la colonne des prix >> > diamants.at[16541, "prix"] = 10000

Arsort

Cette fonction permet d'extraire des indices qui trieraient un tableau des caractéristiques.

tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # Maintenant, triez les `tips` en fonction de total_bill tips.iloc[sort_idx].head()
arg_sort
Image par auteur

 

Accessoire de chat

Les pandas autorisent les fonctions intégrées de python sur les dates et les chaînes en utilisant des accesseurs comme str ou dt.

>>> diamonds.dtypes carat float64 catégorie de taille catégorie de couleur catégorie de pureté profondeur float64 table float64 prix int64 x float64 y float64 z float64 cut_enc int64 dtype: object

On peut utiliser de nombreuses fonctions spéciales en utilisant l'accesseur cat sur les colonnes catégorielles. Il a des fonctions telles que des catégories pour trouver des catégories uniques, rename_categories pour renommer les fonctionnalités.

diamants["new_cuts"] = diamants["cut"].cat.rename_categories(list("ABCDE")) >>> diamants["new_cuts"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='objet')

Consultez ceci pour plus de liste de fonctions sous accessoire de chat.

La technique “squeeze”

Squeeze est une fonction utilisée dans des circonstances de bord rares mais aggravantes.

Lorsqu'une valeur unique est renvoyée à partir d'une condition utilisée pour sous-ensemble d'un DataFrame, il s'agit de l'un de ces cas. Considérez le scénario suivant :

sous-ensemble = diamonds.loc[diamonds.index >> sous-ensemble
prix

Même s'il n'y a qu'une seule cellule, renvoyez le DataFrame. C'est gênant car vous devez maintenant utiliser.loc avec à la fois le nom de la colonne et l'index pour obtenir le prix.

Vous n'êtes pas obligé de le faire si vous savez serrer. Un axe peut être supprimé d'un DataFrame ou d'une série à cellule unique à l'aide de cette fonction. Considérez le scénario suivant :

>>> sous-ensemble.squeeze() 326

Il est possible de spécifier l'axe à supprimer. Il n'était redevenu scalaire que maintenant.

>>> subset.squeeze("columns") # ou "rows" 0 326 Nom : prix, type : int64

Notez que cette fonction ne fonctionne que pour Series ou DataFrame avec des valeurs uniques.

Rédacteur_Excel

C'est une classe générique pour créer des fichiers Excel et y écrire DataFrame. Considérez, nous avons ces deux ensembles de données.

# Charger deux jeux de données diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Ecrire dans le même fichier excel avec pd.ExcelWriter("data/data.xlsx") comme écrivain : diamonds.to_excel (writer, sheet_name="diamonds") tips.to_excel(writer, sheet_name="tips")

Il a des propriétés pour spécifier le format DateTime à utiliser, que vous ayez besoin d'un nouveau fichier ou que vous en modifiiez un existant, que se passe-t-il si une feuille existe. Vérifie ça Documentation pour plus de détails.

Conclusion

Il ne s'agit pas d'un aperçu exhaustif des pandas, et le Documentation contient plus d'informations sur le code et les fonctionnalités. Je vous recommande d'expérimenter différentes variantes des extraits de code fournis ici, ainsi que divers paramètres. On peut pleinement comprendre le pouvoir des pandas en faisant cela.

Des bibliothèques comme Dask et datatable remplacent progressivement Pandas avec leurs nouvelles fonctionnalités flashy pour la gestion de grands ensembles de données, Pandas reste l'outil de manipulation de données le plus largement utilisé dans la communauté de la science des données Python. En raison de son intégration dans la pile SciPy actuelle, la bibliothèque sert de paradigme à d'autres packages à suivre et à construire.

J'espère que vous avez trouvé cet article pertinent et merci de m'avoir lu.

Les médias présentés dans cet article ne sont pas la propriété d'Analytics Vidhya et sont utilisés à la discrétion de l'auteur.

Source : https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

Horodatage:

Plus de Analytique Vidhya