Python: prétraitement dans l'apprentissage automatique: conversion de données

Conversion de valeur continue et de données catégorielles

Catégorisation des valeurs continues

Lors du prétraitement des données, vous souhaiterez peut-être diviser les valeurs continues en plages appropriées et les catégoriser.

Par exemple, si vous disposez de données d'âge telles que [20, 23, 30, 35, 42, 45] Le dernier chiffre de l'âge n'est pas très important, par exemple lorsque les adolescents sont des attributs importants.

Dans le cas de cet exemple, les données sont divisées tous les 10 ans et chaque donnée est divisée en catégories telles que 20, 30 et 40.

Pour ce processus

Utilisez la fonction de coupe de pandas.

Dans la fonction cut, les valeurs continues sont catégorisées en spécifiant principalement les quatre arguments suivants.

x     :Tableau unidimensionnel
bins  :Un tableau de nombres utilisés comme délimiteurs
labels:Un tableau de chaînes qui spécifie le nom de chaque délimiteur
right :Indique s'il faut faire du côté droit du délimiteur spécifié par bins une section fermée. Spécifiez Vrai ou Faux

Par exemple, si vous souhaitez diviser les [20, 23, 30, 35, 42, 45] précédents en 20, 30 et 40. Précisez comme suit.

x = [20, 23, 30, 35, 42, 45]
pd.cut(x, bins = [19, 29, 39, 49], labels= ['20 ans', '30 s', 'Quarante'])

Dans cet exemple, bins = [19, 29, 39, 49] Par défaut, la fonction cut utilise la valeur spécifiée pour les bacs. Le côté gauche est la section ouverte et le côté droit est la section fermée. Dans cet exemple, il est divisé en trois parties telles que 19 <x <= 29, 29 <x <= 39, 39 <x <= 49.

Si vous souhaitez que le côté gauche soit un intervalle fermé, spécifiez l'argument droit de la fonction de coupe sur False. Écrivez comme suit. Dans cet exemple, cela facilite la lecture intuitive de la signification du code source.

x = [20, 23, 30, 35, 42, 45]
pd.cut(x, bins = [20, 30, 40, 50], labels= ['20 ans', '30 s', 'Quarante'], right=False)

La sortie de la fonction cut donne un objet catégoriel comme suit:

[20 ans, 20 ans,30 s,30 s,Quarante,Quarante]
 Categories (3, object): [20 ans<30 s<Quarante]

Les objets catégoriels peuvent accéder à des éléments tels que des tableaux.

x = [20, 23, 30, 35, 42, 45]
result = pd.cut(x, bins = [20, 30, 40, 50], labels= ['20 ans', '30 s', 'Quarante'], right=False)
result[0] #La valeur est'20 ans'devenir

Si vous écrivez un code qui compte le numéro d'un certain modèle

import pandas as pd
x = [191, 184, 173, 162, 175, 183, 151, 160, 170, 182, 190, 192]

#Exemple d'utilisation
pd.cut(x, bins = [150, 160, 170, 180, 190, 200], labels= ['150 unités', '160 unités', '170 unités', '180 unités', '190 unités'], right=False)
#Résultat de sortie
[190 unités,180 unités,170 unités,160 unités,170 unités, ...,160 unités,170 unités,180 unités, 190 unités, 190 unités]
Length: 12
Categories (5, object): [150 unités<160 unités<170 unités<180 unités<190 unités]

Variable fictive des données catégorielles

Lorsqu'il existe des données catégorielles, traitez-les comme une variable distincte pour chaque valeur Vous souhaiterez peut-être avoir des valeurs de 1 et 0. Par exemple, si les données de la colonne âge sont catégoriques comme suit:

image.png

Si vous voulez quelque chose comme le tableau suivant.

image.png

Ce tableau comporte des lignes dans leurs 20, 30 et 40 ans. Si l'âge de certaines données est dans les années 20, la valeur dans la colonne dans les années 20 sera 1. Les autres colonnes dans la trentaine et la quarantaine sont 0.

Une telle conversion en est une-Aussi connu sous le nom de codage à chaud.
Cette conversion est
les pandas obtiennent_C'est facile à faire avec la fonction des mannequins.

Dans l'exemple précédent, si les données de source de conversion ont le DataFrame suivant,

df = pd.DataFrame({'age': ['20 ans', '20 ans', '30 s', '30 s', 'Quarante', 'Quarante']})

Vous pouvez obtenir les données converties au format DataFrame en utilisant la fonction get_dummies comme suit.

pd.get_dummies(df['age'])

Si vous spécifiez le DataFrame lui-même dans la fonction get_dummies au lieu d'une colonne spécifique comme indiqué ci-dessous. Toutes les colonnes catégorielles et les colonnes de chaînes incluses dans le DataFrame Vous pouvez obtenir un DataFrame qui contient toutes des variables factices.

pd.get_dummies(df)

Pour faciliter la compréhension de la colonne source Si vous souhaitez conserver le nom de la colonne d'origine dans la colonne convertie Vous pouvez passer un préfixe à la fonction get_dummies.

pd.get_dummies(df['age'], prefix='age')

Ensuite, le préfixe suivant sera ajouté à la colonne des résultats de la conversion.

image.png

En résumé, ça ressemble à ça.

import pandas as pd
df = pd.DataFrame({'height': ['190 unités', '180 unités', '170 unités', '160 unités', '170 unités', '180 unités', '150 unités']})

pd.get_dummies(df['height'])

Transformation de l'échelle et de la distribution des données

Conversion d'échelle de données

Comparez les données utilisées pour l'apprentissage automatique avec d'autres éléments de données Si des éléments de données contenant des valeurs relativement importantes sont mélangés, lorsqu'ils sont formés tels quels Je suis concerné par les éléments de données contenant de grandes valeurs Il peut ne pas être possible d'apprendre efficacement les paramètres du modèle analytique.

Dans de tels cas, mettez à l'échelle les éléments de données de tous les types numériques afin qu'ils correspondent à une certaine norme.

L'ajustement d'échelle le plus courant est un ajustement avec une moyenne de 0 et une variance de 1.

Par exemple, si vous disposez des données suivantes

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

En ajustant pour que la moyenne soit 0 et que la variance soit 1, les données seront comme suit.

scaled_x = [
    -1.5666989,  -1.21854359,  -0.87038828, -0.52223297, -0.17407766,
    0.17407766,   0.52223297,   0.87038828,  1.21854359,  1.5666989 
]

Cet ajustement

scikit-Dans le module de prétraitement de learn
Ceci peut être facilement réalisé en utilisant la fonction d'échelle.
scaled_x = preprocessing.scale(x)
#mise à l'échelle convertie par la fonction de mise à l'échelle_x sera le tableau suivant comme auparavant.

scaled_x = [
    -1.5666989,  -1.21854359,  -0.87038828, -0.52223297, -0.17407766,
    0.17407766,   0.52223297,   0.87038828,  1.21854359,  1.5666989 
]

Cliquez ici pour des exemples d'utilisation

import numpy as np
from sklearn import preprocessing

np.random.seed(0)

#Générer 10 données de distribution normale avec une moyenne de 50 et une variance de 10
data = np.random.normal(50, 10, 10)

preprocessing.scale(data)
#Résultat de sortie
array([ 1.06095671, -0.34936741,  0.2489091 ,  1.55402992,  1.16798583,
       -1.7736924 ,  0.21928426, -0.91965619, -0.86987913, -0.33857068])

Conversion Box-Cox

Lors de l'utilisation d'un modèle analytique qui suppose une distribution normale de variables explicatives, comme une analyse de régression multiple linéaire Vous souhaiterez peut-être transformer les données pour qu'elles se rapprochent d'une distribution normale.

Dans ce cas

Box-Effectue une conversion appelée conversion Cox.

La conversion Box-Cox convertit les données d'origine xi en yi comme suit:

image.png

λ est un paramètre de conversion. La valeur de λ est L'estimation la plus probable est faite pour que les données converties aient une distribution normale, ou n'importe quelle valeur peut être spécifiée.

Comme vous pouvez le voir dans la formule ci-dessus, x converti par conversion Box-Cox doit être un nombre positif. Cela est dû au fait que le journal (x) ne peut pas être calculé.

En utilisant la transformation Box-Cox, les données suivantes avec une distribution χ ^ 2 avec 2 degrés de liberté

image.png

Il se rapproche de la distribution normale comme suit.

image.png

Cette conversion Box-Cox

Ceci est facilement réalisé en utilisant la fonction boxcox du module stats de scipy.
y, lambda_value = stats.boxcox(x)

La fonction scipy boxcox a deux valeurs de retour. Dans le code ci-dessus, comme valeur de retour de la fonction

Tableau converti en y
Le λ estimé le plus probable est lambda_Il est stocké en valeur.

En résumé, ça ressemble à ça.

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

np.random.seed(0)

x = np.random.chisquare(3, 20000)

#Exemple d'utilisation
y, lambda_value = stats.boxcox(x)
plt.hist(y)
plt.show()

Données verticales et données horizontales

Que sont les données verticales et les données horizontales?

En tant que conversion de structure de données commune lors du prétraitement Il existe une conversion mutuelle entre les données verticales et les données horizontales.

C'est plus facile à comprendre avec un exemple, alors commençons par un exemple.

Voici les données des résultats des tests à l'école.

image.png

Ce sont des données horizontales. Parce que dans cette structure de données, par exemple, lorsque les informations augmentent en tant que sujet de test En effet, s'il s'agit d'une base de données, vous devez ajouter des colonnes horizontalement, et après avoir augmenté les colonnes, la table sera étendue horizontalement comme suit.

image.png

Données conservées horizontalement, par exemple, lorsqu'une personne les confirme avec un logiciel de calcul de table, etc. Il est souvent utilisé car il est facile à comprendre et il est facile d'effectuer une agrégation etc. intuitivement.

D'autre part, la structure des données doit être modifiée lors de l'ajout de nouvelles informations. (S'il s'agit d'une base de données, vous devez ajouter des colonnes à la table), de sorte que les données qui sont conservées horizontalement dans le système En implémentant une structure de données, lorsque les données requises changent Il est plus probable que cela implique des changements de table et des changements de logique, ce qui peut être inefficace.

Par conséquent, dans un tel cas, la structure de données suivante peut être utilisée.

image.png

Ce sont des données verticales. Dans cette structure, lorsque l'information augmente en tant que sujet de test Pas besoin de changer la structure des données (aucun ajout de colonne requis dans la base de données) Tout ce que vous avez à faire est d'augmenter les données verticalement comme suit.

image.png

À première vue, il peut sembler difficile d'appréhender la situation avec des données verticales. Lorsqu'il est mis en œuvre dans un système, il est facile de répondre aux changements de structure et de logique des données Il présente l'avantage de réduire les coûts de maintenance.

Dans l'analyse des données, cela dépend de la manière dont les données à acquérir ont été utilisées. Il peut s'agir de données détenues verticalement ou de données détenues horizontalement. Ensuite, selon le modèle d'analyse de données que vous utilisez, vous souhaiterez peut-être transformer la structure de données dans l'un ou l'autre format.

Convertir les données verticales en données horizontales

Lors de la conversion de données détenues verticalement en données détenues horizontalement

Utilisez la fonction de pivot des pandas.

Les arguments de la fonction pivot sont les suivants.

index  :Colonne DataFrame d'origine utilisée comme valeur de clé à combiner en une seule ligne sous forme de colonne horizontale
columns:La colonne DataFrame d'origine utilisée pour se développer en tant que colonne horizontale
values :Colonne DataFrame d'origine à utiliser comme valeur de la colonne maintenue horizontalement

Plus précisément, si vous disposez des données suivantes,

image.png

Si vous utilisez la fonction de pivot comme suit,

df.pivot(index='Nom', columns='Matière', values='But')

Vous pouvez obtenir les résultats de conversion suivants.

image.png

Dans le DataFrame converti, la colonne spécifiée pour l'index de la fonction pivot est utilisée pour l'index de ligne. L'attribut de nom de l'index de ligne est "nom" et l'attribut de nom de l'index de colonne est "sujet". Vous souhaitez souvent traiter la valeur utilisée pour l'index comme une colonne DataFrame standard.

Dans ce cas, réinitialisez comme suit_Exécuter l'index.
pivoted_df = df.pivot(index='Nom',columns='Matière', values='But').reset_index()

Ensuite, la valeur d'index peut être traitée comme des données de colonne comme indiqué ci-dessous.

image.png

De plus, "sujet" reste comme attribut de nom de l'index de colonne. Cela n'a pas de sens, mais il a comme colonnes dans le DataFrame comme ceci: Remplacez l'objet Index pour le gérer.

pivoted_df.columns = pivoted_df.columns.set_names(None)

Le DataFrame final sera comme suit.

image.png

Lorsque le contenu est résumé, cela ressemble à ceci.

import pandas as pd
import numpy as np


data = pd.DataFrame({
      'Opportunité': np.append(np.repeat('Opportunité1', 3), np.repeat('Opportunité2', 3)),
      'Nom': np.tile(['Ishikawa', 'Kawai', 'Kimura'], 2),
      'Degré de contribution': [50, 25, 25, 60, 20, 20]
})

#Exemple d'utilisation
pivoted_data = data.pivot(index='Opportunité', columns='Nom', values='Degré de contribution')
pivoted_data = pivoted_data.reset_index()
pivoted_data.columns = pivoted_data.columns.set_names(None)
pivoted_data

Avant le traitement

image.png

Après le traitement

image.png

Convertir les données maintenues horizontalement en données tenues verticalement

Pour convertir des données maintenues horizontalement en données tenues verticalement

Utilisez la fonction de fonte des pandas.

Les principaux arguments de la fonction melt sont:

frame     :DataFrame que vous souhaitez convertir
id_vars   :Spécifiez la colonne à utiliser comme clé de conversion en tant que tableau
value_vars:Spécifiez la colonne à utiliser comme valeur après la conversion en tant que tableau
var_name  :Après conversion, le nom de la colonne variable pour regrouper les colonnes de données horizontales
value_name:Le nom de la colonne qui sera la valeur après la conversion

Lorsqu'il y a les données suivantes comme données que vous souhaitez convertir

image.png

Si vous utilisez la fonction de fusion comme suit,

pd.melt(data, id_vars=['Nom'], value_vars=['langue nationale', 'Anglais', 'Math', 'Science', 'société'], var_name='Matière', value_name='But')

Vous pouvez obtenir les résultats de conversion suivants.

image.png

Cliquez ici pour des exemples d'utilisation

import pandas as pd

data = pd.DataFrame({
    'Opportunité': ['Opportunité1', 'Opportunité2'],
    'Kimura': [25, 20],
    'Kawai': [25, 20],
    'Ishikawa': [50, 60]
})

#Exemple d'utilisation
pd.melt(data, id_vars=['Opportunité'], value_vars=['Kimura', 'Kawai', 'Ishikawa'], var_name='Nom', value_name='Degré de contribution')

Avant le traitement

image.png

Après le traitement

image.png

Recommended Posts

Python: prétraitement dans l'apprentissage automatique: conversion de données
Prétraitement dans l'apprentissage automatique 4 Conversion de données
Python: prétraitement en machine learning: acquisition de données
Python: prétraitement dans l'apprentissage automatique: présentation
Prétraitement dans l'apprentissage automatique 2 Acquisition de données
Prétraitement dans l'apprentissage automatique 1 Processus d'analyse des données
[Python] Analyse de données, pratique du machine learning (Kaggle) -Prétraitement des données-
J'ai commencé l'apprentissage automatique avec le prétraitement des données Python
Python: prétraitement en machine learning: gestion des données manquantes / aberrantes / déséquilibrées
Apprentissage automatique dans Delemas (acquisition de données)
[python] Techniques souvent utilisées dans l'apprentissage automatique
[Python] Première analyse de données / apprentissage automatique (Kaggle)
[Python] Enregistrement des résultats d'apprentissage (modèles) dans l'apprentissage automatique
Astuces de fourniture de données utilisant deque dans l'apprentissage automatique
Touchons une partie de l'apprentissage automatique avec Python
Ensemble de données pour l'apprentissage automatique
Gérer les données ambiantes en Python
Apprentissage automatique dans Delemas (s'entraîner)
Créez un environnement interactif pour l'apprentissage automatique avec Python
Défis d'apprentissage automatique de Coursera en Python: ex2 (retour logistique)
À propos du prétraitement des données des systèmes utilisant l'apprentissage automatique
Outil MALSS (basique) qui prend en charge l'apprentissage automatique en Python
Apprentissage automatique avec Python! Préparation
Notes d'apprentissage sur l'analyse des données Python
Programmation Python Machine Learning> Mots-clés
Coursera Machine Learning Challenge en Python: ex1 (régression linéaire)
Utilisé en EDA pour l'apprentissage automatique
Tentative d'inclusion du modèle d'apprentissage automatique dans le package python
Commencer avec l'apprentissage automatique Python
Conversion de type de données d'image [Python]
MALSS (introduction), un outil qui prend en charge l'apprentissage automatique en Python
Le résultat de l'apprentissage automatique des ingénieurs Java avec Python www
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 2)
Défis d'apprentissage automatique de Coursera en Python: ex7-2 (analyse principale)
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 1)
Obtenez des données LeapMotion en Python.
Mettre en œuvre l'apprentissage de l'empilement en Python [Kaggle]
Lire les données des tampons de protocole avec Python3
Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques
Apprentissage automatique par python (1) Classification générale
Résumé de l'apprentissage automatique par les débutants de Python
Automatisez les tâches de routine dans l'apprentissage automatique
Gérez les données au format NetCDF avec Python
Règles d'apprentissage Widrow-Hoff implémentées en Python
Classification et régression dans l'apprentissage automatique
Notes personnelles de prétraitement des données Python Pandas
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
Hashing de données en R et Python
Implémentation des règles d'apprentissage Perceptron en Python
Recherche de semences aléatoires dans l'apprentissage automatique
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
Procédure d'apprentissage automatique de base: ② Préparer les données
Comment collecter des données d'apprentissage automatique
Que diriez-vous d'Anaconda pour créer un environnement d'apprentissage automatique avec Python?
Défis de Coursera Machine Learning en Python: ex5 (ajustement des paramètres de régularisation)
Apprentissage automatique
apprentissage de python
Obtenez des données supplémentaires vers LDAP avec python
Conversion de la chaîne <-> date (date, datetime) en Python
Entrée / sortie de données en Python (CSV, JSON)