[PYTHON] Notez que j'étais accro à l'interpolation des valeurs manquantes de sklearn (Imputer)

introduction

Je suis accro à essayer de compléter les valeurs manquantes dans un DataFrame qui contient une chaîne de données de chaîne, alors prenez-en note.

Qu'est-ce que l'achèvement de la valeur manquante?

Compléter des données inexistantes en utilisant les données environnantes.

Exemple de valeur manquante

Par exemple, supposons que vous ayez les données suivantes. La cinquième ligne de la colonne sexe est inconnue. Il existe diverses méthodes de complémentation, telles que l'utilisation de la valeur moyenne et de la valeur médiane, mais cette fois, je voudrais simplement compléter avec le sexe masculin, qui est le sexe de la majorité. sample.png

Ce que j'ai fait

Afin de saisir des données pour l'apprenant, il est nécessaire de convertir les données de la chaîne de caractères en données numériques. Par conséquent, j'ai écrit le code pour effectuer la complétion des valeurs manquantes après avoir converti un homme en 0 et une femme en 1. Autrement dit, remplacez unknown par 0 (male).

import pandas as pd
from sklearn.preprocessing import Imputer 

df_sample = pd.read_csv('sample.csv')
gender_map = {'male':0, 'female':1}
df_sample['gender'] = df_sample['gender'].map(gender_map) #Remplacer mâle par 0 et femelle par 1
imr = Imputer(missing_values='unknown', strategy='most_frequent', axis=0)#Création d'objets complémentaires
imputed_data = imr.fit_transform(df_sample) #Appliquer l'achèvement

Spécifiez les valeurs manquantes dans missing_values et la méthode d'achèvement (moyenne pour moyenne, médiane pour médiane) pour la stratégie.

Ici, j'ai rencontré l'erreur suivante.

TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

En regardant le DataFrame après avoir remplacé la chaîne de caractères par une valeur numérique, c'était comme suit. sample2.png

Cela était dû au fait que chaque colonne du DataFrame était un objet Series et que toutes les valeurs étaient du même type. En d'autres termes, la chaîne de caractères inconnue et la valeur numérique 0,1 ne peuvent pas coexister.

Solution

J'ai changé la partie «inconnue» du code en «NaN» et cela a fonctionné.

import pandas as pd
from sklearn.preprocessing import Imputer 

df_sample = pd.read_csv('sample.csv')
gender_map = {'male':0, 'female':1}
df_sample['gender'] = df_sample['gender'].map(gender_map) #Remplacer mâle par 0 et femelle par 1
imr = Imputer(missing_values='NaN', strategy='most_frequent', axis=0)#Création d'objets complémentaires
imputed_data = imr.fit_transform(df_sample) #Appliquer l'achèvement

Les références

Théorie et implémentation de la programmation Python Machine Learning par un expert en science des données (Impress)

Recommended Posts

Notez que j'étais accro à l'interpolation des valeurs manquantes de sklearn (Imputer)
Une histoire à laquelle j'étais accro chez np.where
J'étais accro au multitraitement + psycopg2
Une histoire à laquelle j'étais accro à appeler Lambda depuis AWS Lambda.
Une note à laquelle j'étais accro lors de l'émission d'un bip sous Linux
Une note à laquelle j'étais accro lors de la création d'une table avec SQL Alchemy
J'étais accro à pip installer mysqlclient
Notez que j'étais accro à accéder à la base de données avec mysql.connector de Python en utilisant une application Web
J'étais accro à Flask sur dotCloud
Ce que j'étais accro à Python autorun
J'étais accro à essayer Cython avec PyCharm, alors prenez note
Une note à laquelle j'étais accro lors de l'exécution de Python avec Visual Studio Code
Une histoire à laquelle j'étais accro après la communication SFTP avec python
Notez que j'étais accro à la configuration de TensowFlow
J'étais accro au grattage avec Selenium (+ Python) en 2020
J'étais accro à essayer logging.getLogger avec Flask 1.1.x
Ce à quoi j'étais accro lors de l'utilisation de Python tornado
Mémo (mars 2020) auquel j'étais accro lors de l'installation d'Arch Linux sur MacBook Air 11'Early 2015
[IOS] Animation GIF avec Pythonista3. J'en étais accro.
Ce à quoi j'étais accro lorsque l'utilisateur de traitement est passé à Python
[Réparer] J'étais accro au jugement alphanumérique des chaînes Python
Une histoire sur l'écriture d'AWS Lambda et de devenir un peu accro aux valeurs par défaut des arguments Python
Le record auquel j'étais accro en mettant MeCab dans Heroku
Ce à quoi j'étais accro en présentant ALE à Vim pour Python
Ce à quoi j'étais accro avec json.dumps dans l'encodage base64 de Python
J'étais accro aux variables de classe et aux variables d'instance erronées en Python
[Fabric] J'étais accro à l'utilisation de booléen comme argument, alors notez les contre-mesures.
Deux choses dont j'étais accro à la construction de Django + Apache + Nginx sous Windows
J'étais accro à l'exécution de tensorflow sur GPU avec le pilote NVIDIA 440 + CUDA 10.2
Une histoire à laquelle j'étais accro à essayer d'installer LightFM sur Amazon Linux
J'étais accro à la création d'un environnement Python venv avec VS Code
Une histoire à laquelle j'étais accro à essayer d'obtenir une URL de vidéo avec tweepy
Utilisez Python de Java avec Jython. J'étais aussi accro.
J'étais accro à ne pas pouvoir utiliser Markdown pour la description longue de pypi
Le nom du fichier était mauvais en Python et j'étais accro à l'importation
Je pensais que c'était la même chose que python, et j'étais accro au problème que l'interpréteur ruby ne démarre pas.