Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung

Umwandlung von kontinuierlichen Wert- und kategorialen Daten

Sequentielle Wertekategorisierung

Bei der Vorverarbeitung von Daten möchten Sie möglicherweise fortlaufende Werte in geeignete Bereiche unterteilen und diese kategorisieren.

Zum Beispiel, wenn Sie Altersdaten wie [20, 23, 30, 35, 42, 45] haben. Die letzte Ziffer des Alters ist nicht sehr wichtig, beispielsweise wenn Jugendliche als Attribut wichtig sind.

In diesem Beispiel werden die Daten alle 10 Jahre und alle Daten in Kategorien wie 20er, 30er und 40er Jahre unterteilt.

Für diesen Prozess

Verwenden Sie die Pandas Cut-Funktion.

In der Schnittfunktion werden fortlaufende Werte kategorisiert, indem hauptsächlich die folgenden vier Argumente angegeben werden.

x     :Eindimensionales Array
bins  :Ein Array von Zahlen, die als Trennzeichen verwendet werden
labels:Ein Array von Zeichenfolgen, die den Namen jedes Trennzeichens angeben
right :Gibt an, ob die rechte Seite des durch Bins angegebenen Trennzeichens zu einem geschlossenen Abschnitt gemacht werden soll. Geben Sie True oder False an

Zum Beispiel, wenn Sie die vorherigen [20, 23, 30, 35, 42, 45] in 20er, 30er und 40er Jahre unterteilen möchten. Geben Sie Folgendes an.

x = [20, 23, 30, 35, 42, 45]
pd.cut(x, bins = [19, 29, 39, 49], labels= ['20er Jahre', '30er Jahre', 'Vierziger Jahre'])

In diesem Beispiel ist Bins = [19, 29, 39, 49] Standardmäßig verwendet die Schnittfunktion den für Bins angegebenen Wert. Die linke Seite ist der offene Abschnitt und die rechte Seite ist der geschlossene Abschnitt. In diesem Beispiel ist es in drei Teile unterteilt, z. B. 19 <x <= 29, 29 <x <= 39, 39 <x <= 49.

Wenn die linke Seite ein geschlossenes Intervall sein soll, geben Sie das Argument rechts von der Schnittfunktion auf False an. Schreiben Sie wie folgt. In diesem Beispiel ist die Bedeutung des Quellcodes dadurch leichter intuitiv zu lesen.

x = [20, 23, 30, 35, 42, 45]
pd.cut(x, bins = [20, 30, 40, 50], labels= ['20er Jahre', '30er Jahre', 'Vierziger Jahre'], right=False)

Die Ausgabe der Schnittfunktion ergibt ein kategoriales Objekt wie folgt:

[20er Jahre, 20er Jahre,30er Jahre,30er Jahre,Vierziger Jahre,Vierziger Jahre]
 Categories (3, object): [20er Jahre<30er Jahre<Vierziger Jahre]

Kategoriale Objekte können auf Elemente wie Arrays zugreifen.

x = [20, 23, 30, 35, 42, 45]
result = pd.cut(x, bins = [20, 30, 40, 50], labels= ['20er Jahre', '30er Jahre', 'Vierziger Jahre'], right=False)
result[0] #Wert ist'20er Jahre'werden

Wenn Sie einen Code schreiben, der die Nummer eines bestimmten Modells zählt

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

#Anwendungsbeispiel
pd.cut(x, bins = [150, 160, 170, 180, 190, 200], labels= ['150 Einheiten', '160 Einheiten', '170 Einheiten', '180 Einheiten', '190 Einheiten'], right=False)
#Ausgabeergebnis
[190 Einheiten,180 Einheiten,170 Einheiten,160 Einheiten,170 Einheiten, ...,160 Einheiten,170 Einheiten,180 Einheiten, 190 Einheiten, 190 Einheiten]
Length: 12
Categories (5, object): [150 Einheiten<160 Einheiten<170 Einheiten<180 Einheiten<190 Einheiten]

Dummy-Variable kategorialer Daten

Wenn kategoriale Daten vorhanden sind, behandeln Sie diese als separate Variable für jeden Wert Möglicherweise möchten Sie Werte von 1 und 0 haben. Zum Beispiel, wenn die Daten in der Altersspalte wie folgt kategorisiert sind:

image.png

Wenn Sie so etwas wie die folgende Tabelle wollen.

image.png

Diese Tabelle enthält Spalten für Personen in den 20ern, 30ern und 40ern. Wenn das Alter einiger Daten in den 20er Jahren liegt, ist der Wert in der Spalte in den 20er Jahren 1. Die anderen Spalten in ihren 30ern und 40ern sind 0.

Eine solche Umwandlung ist eine-Wird auch als Hot-Codierung bezeichnet.
Diese Konvertierung ist
Pandas bekommen_Mit der Dummies-Funktion ist das ganz einfach.

Wenn im vorherigen Beispiel die Konvertierungsquelldaten den folgenden DataFrame haben,

df = pd.DataFrame({'age': ['20er Jahre', '20er Jahre', '30er Jahre', '30er Jahre', 'Vierziger Jahre', 'Vierziger Jahre']})

Sie können die konvertierten Daten im DataFrame-Format abrufen, indem Sie die Funktion get_dummies wie folgt verwenden.

pd.get_dummies(df['age'])

Wenn DataFrame selbst in der Funktion get_dummies anstelle einer bestimmten Spalte angegeben wird, wie unten gezeigt Alle im DataFrame enthaltenen kategorialen Spalten und Zeichenfolgenspalten Sie können einen DataFrame erhalten, der alle Dummy-Variablen enthält.

pd.get_dummies(df)

Zum leichteren Verständnis der Quellenspalte Wenn Sie den ursprünglichen Spaltennamen in der konvertierten Spalte beibehalten möchten Sie können der Funktion get_dummies ein Präfix übergeben.

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

Anschließend wird der Spalte mit den Konvertierungsergebnissen das folgende Präfix hinzugefügt.

image.png

Zusammenfassend sieht es so aus.

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

pd.get_dummies(df['height'])

Transformation von Datenskala und -verteilung

Konvertierung der Datenskala

Vergleichen Sie die zum Lernen des maschinellen Lernens verwendeten Daten mit anderen Datenelementen Wenn Datenelemente mit relativ großen Werten gemischt werden, wenn sie so trainiert werden, wie sie sind Ich bin von Datenelementen betroffen, die große Werte enthalten Es ist möglicherweise nicht möglich, die Parameter des analytischen Modells effizient zu lernen.

Skalieren Sie in solchen Fällen die Datenelemente aller numerischen Typen so, dass sie in einen bestimmten Standard passen.

Die häufigste Skalenanpassung ist eine Anpassung mit einem Mittelwert von 0 und einer Varianz von 1.

Zum Beispiel, wenn Sie die folgenden Daten haben

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

Wenn Sie so einstellen, dass der Durchschnitt 0 und die Varianz 1 ist, sind die Daten wie folgt.

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

Diese Einstellung

scikit-Im Vorverarbeitungsmodul lernen
Dies kann leicht mit der Skalierungsfunktion erreicht werden.
scaled_x = preprocessing.scale(x)
#skaliert konvertiert durch die Skalierungsfunktion_x ist wie zuvor das folgende Array.

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

Klicken Sie hier für Anwendungsbeispiele

import numpy as np
from sklearn import preprocessing

np.random.seed(0)

#Generieren Sie 10 Normalverteilungsdaten mit Mittelwert 50 und Varianz 10
data = np.random.normal(50, 10, 10)

preprocessing.scale(data)
#Ausgabeergebnis
array([ 1.06095671, -0.34936741,  0.2489091 ,  1.55402992,  1.16798583,
       -1.7736924 ,  0.21928426, -0.91965619, -0.86987913, -0.33857068])

Box-Cox-Konvertierung

Bei Verwendung eines analytischen Modells, das eine Normalverteilung erklärender Variablen voraussetzt, z. B. eine lineare multiple Regressionsanalyse Möglicherweise möchten Sie die Daten so transformieren, dass sie sich einer Normalverteilung nähern.

In einem solchen Fall

Box-Führt eine Konvertierung namens Cox-Konvertierung durch.

Die Box-Cox-Konvertierung konvertiert die Originaldaten xi wie folgt in yi:

image.png

λ ist ein Parameter für die Umwandlung. Der Wert von λ ist Die wahrscheinlichste Schätzung wird vorgenommen, damit die konvertierten Daten eine Normalverteilung haben oder ein beliebiger Wert angegeben werden kann.

Wie Sie der obigen Formel entnehmen können, muss x, konvertiert durch Box-Cox-Konvertierung, eine positive Zahl sein. Dies liegt daran, dass log (x) nicht berechnet werden kann.

Unter Verwendung der Box-Cox-Transformation werden die folgenden Daten mit einer χ ^ 2-Verteilung mit 2 Freiheitsgraden erstellt

image.png

Es nähert sich der Normalverteilung wie folgt.

image.png

Diese Box-Cox-Konvertierung

Dies kann leicht mit der Boxcox-Funktion des Statistikmoduls von scipy erreicht werden.
y, lambda_value = stats.boxcox(x)

Die scipy boxcox-Funktion hat zwei Rückgabewerte. Im obigen Code als Rückgabewert der Funktion

Konvertiertes Array in y
Das wahrscheinlichste geschätzte λ ist Lambda_Es wird im Wert gespeichert.

Zusammenfassend sieht es so aus.

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

np.random.seed(0)

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

#Anwendungsbeispiel
y, lambda_value = stats.boxcox(x)
plt.hist(y)
plt.show()

Vertikale und horizontale Daten

Was sind vertikale und horizontale Daten?

Als gängige Datenstrukturkonvertierung in der Vorverarbeitung Es gibt eine gegenseitige Konvertierung zwischen vertikalen und horizontalen Daten.

Dies ist anhand eines Beispiels leichter zu verstehen. Beginnen wir also mit einem Beispiel.

Nachfolgend finden Sie die Daten der Testergebnisse an der Schule.

image.png

Dies sind horizontale Daten. Denn in dieser Datenstruktur zum Beispiel, wenn die Informationen als Testperson zunehmen Dies liegt daran, dass Sie als Datenbank Spalten horizontal hinzufügen müssen. Nach dem Erhöhen der Spalten wird die Tabelle wie folgt horizontal erweitert.

image.png

Horizontale Daten können beispielsweise von einer Person mit einer Tabellenberechnungssoftware überprüft werden. Es wird häufig verwendet, weil es leicht zu verstehen ist und es einfach ist, Aggregation usw. intuitiv durchzuführen.

Andererseits muss die Datenstruktur beim Hinzufügen neuer Informationen geändert werden. (Wenn es sich um eine Datenbank handelt, müssen Sie der Tabelle Spalten hinzufügen), also die Daten, die horizontal im System gespeichert sind Durch die Implementierung einer Datenstruktur, wenn sich die erforderlichen Daten ändern Es ist wahrscheinlicher, dass Tabellenänderungen und logische Änderungen vorgenommen werden, die ineffizient sein können.

Daher kann in einem solchen Fall die folgende Datenstruktur verwendet werden.

image.png

Dies sind vertikale Daten. In dieser Struktur, wenn die Informationen als Testperson zunehmen Keine Notwendigkeit, die Struktur der Daten zu ändern (keine Spaltenzusätze in der Datenbank erforderlich) Sie müssen die Daten lediglich wie folgt vertikal erhöhen.

image.png

Auf den ersten Blick mag es schwierig erscheinen, die Situation mit vertikalen Daten zu erfassen. Bei der Implementierung in einem System ist es einfach, auf Änderungen in der Datenstruktur und Logik zu reagieren Dies hat den Vorteil, dass die Wartungskosten reduziert werden können.

Bei der Datenanalyse kommt es darauf an, wie die zu erfassenden Daten verwendet wurden. Es können vertikal oder horizontal gehaltene Daten sein. Abhängig vom verwendeten Modell der Datenanalyse möchten Sie möglicherweise die Datenstruktur in eines der beiden Formate umwandeln.

Konvertieren Sie vertikale Daten in horizontale Daten

Beim Konvertieren vertikal gehaltener Daten in horizontal gehaltene Daten

Verwenden Sie die Pandas-Pivot-Funktion.

Die Argumente der Pivot-Funktion lauten wie folgt.

index  :Die ursprüngliche DataFrame-Spalte wird als Schlüsselwert verwendet und als horizontale Spalte in einer Zeile zusammengefasst
columns:Die ursprüngliche DataFrame-Spalte, die zum Erweitern als horizontale Spalte verwendet wird
values :Ursprüngliche DataFrame-Spalte, die als Wert für die horizontal gehaltene Spalte verwendet werden soll

Insbesondere wenn Sie die folgenden Daten haben,

image.png

Wenn Sie die Pivot-Funktion wie folgt verwenden,

df.pivot(index='Name', columns='Gegenstand', values='Ergebnis')

Sie können die folgenden Konvertierungsergebnisse erhalten.

image.png

Im konvertierten DataFrame wird die für den Index der Pivot-Funktion angegebene Spalte für den Zeilenindex verwendet. Das Namensattribut des Zeilenindex ist "Name" und das Namensattribut des Spaltenindex ist "Betreff". Oft möchten Sie den für den Index verwendeten Wert als reguläre DataFrame-Spalte behandeln.

In diesem Fall setzen Sie wie folgt zurück_Index ausführen.
pivoted_df = df.pivot(index='Name',columns='Gegenstand', values='Ergebnis').reset_index()

Dann kann der Indexwert wie unten gezeigt als Spaltendaten behandelt werden.

image.png

Außerdem bleibt "subject" das Namensattribut des Spaltenindex. Es macht keinen Sinn, hat aber folgende Spalten im DataFrame: Ersetzen Sie das Index-Objekt, um es zu verarbeiten.

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

Der endgültige DataFrame lautet wie folgt.

image.png

Wenn der Inhalt zusammengefasst ist, sieht es so aus.

import pandas as pd
import numpy as np


data = pd.DataFrame({
      'Gelegenheit': np.append(np.repeat('Gelegenheit1', 3), np.repeat('Gelegenheit2', 3)),
      'Name': np.tile(['Ishikawa', 'Kawai', 'Kimura'], 2),
      'Beitragsgrad': [50, 25, 25, 60, 20, 20]
})

#Anwendungsbeispiel
pivoted_data = data.pivot(index='Gelegenheit', columns='Name', values='Beitragsgrad')
pivoted_data = pivoted_data.reset_index()
pivoted_data.columns = pivoted_data.columns.set_names(None)
pivoted_data

Vor der Verarbeitung

image.png

Nach der Behandlung

image.png

Konvertieren Sie horizontal gehaltene Daten in vertikal gehaltene Daten

Zum Konvertieren horizontal gehaltener Daten in vertikal gehaltene Daten

Verwenden Sie die Pandas-Schmelzfunktion.

Die Hauptargumente der Schmelzfunktion sind:

frame     :DataFrame, den Sie konvertieren möchten
id_vars   :Geben Sie die Spalte an, die als Konvertierungsschlüssel als Array verwendet werden soll
value_vars:Geben Sie die Spalte an, die nach der Konvertierung als Array als Wert verwendet werden soll
var_name  :Nach der Konvertierung der Name der Variablenspalte zum Gruppieren der Spalten horizontaler Daten
value_name:Der Name der Spalte, die nach der Konvertierung der Wert ist

Wenn die folgenden Daten als die Daten vorliegen, die Sie konvertieren möchten

image.png

Wenn Sie die Schmelzfunktion wie folgt verwenden,

pd.melt(data, id_vars=['Name'], value_vars=['Landessprache', 'Englisch', 'Mathematik', 'Wissenschaft', 'Gesellschaft'], var_name='Gegenstand', value_name='Ergebnis')

Sie können die folgenden Konvertierungsergebnisse erhalten.

image.png

Klicken Sie hier für Anwendungsbeispiele

import pandas as pd

data = pd.DataFrame({
    'Gelegenheit': ['Gelegenheit1', 'Gelegenheit2'],
    'Kimura': [25, 20],
    'Kawai': [25, 20],
    'Ishikawa': [50, 60]
})

#Anwendungsbeispiel
pd.melt(data, id_vars=['Gelegenheit'], value_vars=['Kimura', 'Kawai', 'Ishikawa'], var_name='Name', value_name='Beitragsgrad')

Vor der Verarbeitung

image.png

Nach der Behandlung

image.png

Recommended Posts

Python: Vorverarbeitung beim maschinellen Lernen: Datenkonvertierung
Vorverarbeitung beim maschinellen Lernen 4 Datenkonvertierung
Python: Vorverarbeitung beim maschinellen Lernen: Datenerfassung
Python: Vorverarbeitung beim maschinellen Lernen: Übersicht
Vorverarbeitung beim maschinellen Lernen 2 Datenerfassung
Vorverarbeitung beim maschinellen Lernen 1 Datenanalyseprozess
[Python] Datenanalyse, maschinelles Lernen (Kaggle) -Datenvorverarbeitung-
Ich habe mit der maschinellen Vorverarbeitung von Python Data begonnen
Python: Vorverarbeitung beim maschinellen Lernen: Umgang mit fehlenden / Ausreißern / unausgeglichenen Daten
Maschinelles Lernen in Delemas (Datenerfassung)
[Python] Techniken, die häufig beim maschinellen Lernen verwendet werden
[Python] Erste Datenanalyse / maschinelles Lernen (Kaggle)
[Python] Speichern von Lernergebnissen (Modellen) beim maschinellen Lernen
Datenversorgungstricks mit deque beim maschinellen Lernen
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Datensatz für maschinelles Lernen
Behandeln Sie Umgebungsdaten in Python
Maschinelles Lernen in Delemas (Praxis)
Erstellen Sie mit Python eine interaktive Umgebung für maschinelles Lernen
Coursera-Herausforderungen beim maschinellen Lernen in Python: ex2 (Logistic Return)
Informationen zur Datenvorverarbeitung von Systemen, die maschinelles Lernen verwenden
Tool MALSS (Basic), das maschinelles Lernen in Python unterstützt
Maschinelles Lernen mit Python! Vorbereitung
Lernnotizen zur Python-Datenanalyse
Python Machine Learning Programming> Schlüsselwörter
Coursera Machine Learning Challenge in Python: ex1 (lineare Regression)
Wird in EDA für maschinelles Lernen verwendet
Versuchen Sie, das Modell des maschinellen Lernens in das Python-Paket aufzunehmen
Beginnend mit maschinellem Python-Lernen
Konvertierung von Bilddatentypen [Python]
MALSS (Einführung), ein Tool, das maschinelles Lernen in Python unterstützt
Das Ergebnis des maschinellen Lernens von Java-Ingenieuren mit Python www
Leistungsüberprüfung der Datenvorverarbeitung für maschinelles Lernen (numerische Daten) (Teil 2)
Coursera-Herausforderungen für maschinelles Lernen in Python: ex7-2 (Primäranalyse)
Leistungsüberprüfung der Datenvorverarbeitung für maschinelles Lernen (numerische Daten) (Teil 1)
Holen Sie sich LeapMotion-Daten in Python.
Implementieren Sie das Stacking-Lernen in Python [Kaggle]
Lesen Sie die Protokollpufferdaten mit Python3
Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten
Maschinelles Lernen mit Python (1) Gesamtklassifizierung
Zusammenfassung des maschinellen Lernens von Python-Anfängern
Automatisieren Sie Routineaufgaben beim maschinellen Lernen
Behandeln Sie Daten im NetCDF-Format mit Python
In Python implementierte Widrow-Hoff-Lernregeln
Klassifikation und Regression beim maschinellen Lernen
Persönliche Notizen zur Vorverarbeitung von Python Pandas-Daten
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
Hashing von Daten in R und Python
Implementierte Perceptron-Lernregeln in Python
Random Seed Research im maschinellen Lernen
"Scraping & maschinelles Lernen mit Python" Lernnotiz
Grundlegendes maschinelles Lernverfahren: ② Daten vorbereiten
Sammeln von Daten zum maschinellen Lernen
Wie wäre es mit Anaconda zum Erstellen einer maschinellen Lernumgebung mit Python?
Coursera-Herausforderungen beim maschinellen Lernen in Python: ex5 (Anpassung der Regularisierungsparameter)
Maschinelles Lernen
Python lernen
Holen Sie sich mit Python zusätzliche Daten zu LDAP
Konvertierung der Zeichenfolge <-> Datum (Datum, Datum / Uhrzeit) in Python
Dateneingabe / -ausgabe in Python (CSV, JSON)