Klicken Sie hier bis gestern
Sie werden in 100 Tagen Ingenieur - Tag 76 - Programmierung - Über maschinelles Lernen
Sie werden Ingenieur in 100 Tagen - Tag 70 - Programmieren - Über Scraping
Sie werden in 100 Tagen Ingenieur - Tag 63 - Programmierung - Über Wahrscheinlichkeit 1
Sie werden in 100 Tagen Ingenieur - Tag 59 - Programmierung - Über Algorithmen
Sie werden in 100 Tagen Ingenieur --- Tag 53 - Git - Über Git
Sie werden in 100 Tagen Ingenieur - Tag 42 - Cloud - Über Cloud-Dienste
Sie werden in 100 Tagen Ingenieur - Tag 36 - Datenbank - Über die Datenbank
Sie werden Ingenieur in 100-Tage-24-Python-Grundlagen der Python-Sprache 1
Sie werden in 100 Tagen Ingenieur - Tag 18 - JavaScript - Grundlagen von JavaScript 1
Sie werden in 100 Tagen Ingenieur - 14. Tag - CSS - CSS-Grundlagen 1
Sie werden in 100 Tagen Ingenieur - Tag 6 - HTML - HTML-Grundlagen 1
Diese Zeit ist eine Fortsetzung der Geschichte über maschinelles Lernen.
Der Arbeitsfluss beim Einbeziehen von maschinellem Lernen ist wie folgt.
Davon werden 2-3 Teile als Datenvorverarbeitung bezeichnet.
Dieses Mal möchte ich aus dieser Vorverarbeitung einen Datamart erstellen.
Sprache ist Python Bibliotheken für maschinelles Lernen sind "Pandas" und "Numpy" Die Bibliothek zur Visualisierung verwendet "seaborn", "matplotlib".
** Laden der Bibliothek **
#Bibliothek laden
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
** Datenangaben **
Die diesmal verwendeten Daten sind die "Titanic Passagierliste".
PassengerID:Passagierausweis
Survived:Überlebensergebnis(0=Tod, 1=Überleben)
Pclass:Passagierklasse(Ich scheint der Beste zu sein)
Name:Passagier-Name
Sex:Sex
Age:Alter
SibSp Anzahl der Brüder und Ehepartner
Parch Anzahl der Eltern und Kinder
Ticket Ticketnummer
Tarifgebühr
Kabinenraumnummer
Eingeschiffter Hafen an Bord
Angenommen, Sie haben eine Datei mit dem Namen "titanic_train.csv".
** Datei lesen **
In der Pandas-Bibliothek gibt es viele Lesemethoden für das Dateiformat "read_xxx". Verwenden Sie sie daher zum Lesen der Datei. Diesmal handelt es sich um eine CSV-Datei, also um "read_csv".
Die Pandas-Bibliothek ist eine Bibliothek, die Datenformate verarbeitet, die als tabellarische Datenrahmen bezeichnet werden. Laden Sie die Datei in den Datenrahmen.
#Daten aus Datei lesen
file_path = 'data/titanic_train.csv'
train_df = pd.read_csv(file_path,encoding='utf-8')
train_df.head()
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22 | 1 | 0 | A/5 21171 | 7.25 | NaN | S |
1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26 | 0 | 0 | STON/O2. 3101282 | 7.925 | NaN | S |
3 | 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35 | 1 | 0 | 113803 | 53.1 | C123 | S |
4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35 | 0 | 0 | 373450 | 8.05 | NaN | S |
Die Daten sehen so aus.
Beim letzten Mal habe ich mir den Inhalt verschiedener Daten angesehen und gefragt, welche Art von Daten verwendet werden könnten. Dieses Mal werden wir damit fortfahren, Daten verwenden, die als verwendbar erscheinen, und sie in Daten für maschinelles Lernen integrieren.
** Auf fehlende Werte prüfen **
Wenn Daten gelesen werden und keine Daten vorhanden sind, werden sie als fehlender Wert im Datenrahmen behandelt.
Wie viele fehlende Werte sind
Datenrahmen .isnull (). Sum ()
Sie können die Anzahl der fehlenden Werte in jeder Spalte mit überprüfen.
train_df.isnull().sum()
PassengerId 0 Survived 0 Pclass 0 Name 0 Sex 0 Age 177 SibSp 0 Parch 0 Ticket 0 Fare 0 Cabin 687 Embarked 2 dtype: int64
Betrachtet man dies, so scheinen nur einige Spalten fehlende Werte zu haben. Es scheint einen Defekt in "Age", "Cabin" und "Embarked" zu geben.
Lassen Sie uns nur das Teil mit dem fehlenden Wert anzeigen.
** Extrahieren Sie Zeilen, die den Bedingungen entsprechen **
Datenrahmen [bedingter Ausdruck]
** Zeilen mit fehlenden Werten extrahieren **
Datenrahmen [Datenrahmen ['Spaltenname']. Isnull ()]
train_df[train_df['Embarked'].isnull()]
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
61 | 62 | 1 | 1 | Icard, Miss. Amelie | female | 38 | 0 | 0 | 113572 | 80 | B28 | NaN |
829 | 830 | 1 | 1 | Stone, Mrs. George Nelson (Martha Evelyn) | female | 62 | 0 | 0 | 113572 | 80 | B28 | NaN |
Betrachtet man den Wert in der Spalte "Eingeschifft", so ist dies "NaN". Fehlende Werte im Datenrahmen werden als "NaN" angezeigt.
Bei fehlenden Nummern ·Durchschnittswert ·Median ・ Beliebiger Wert In vielen Fällen werden fehlende Werte ergänzt.
Kategoriewerte wie "Eingeschifft" sind keine Zahlen und können nicht durch Zahlen ersetzt werden.
Wenn Sie die fehlenden Werte eingeben möchten, können Sie sie mit fillna
füllen.
** Ergänzen Sie fehlende Werte mit beliebigen Werten **
Datenrahmen .fillna (Füllwert)
Wenn Sie den Durchschnittswert dieser Spalte ergänzen möchten, suchen Sie zuerst den Durchschnittswert.
** Spaltenmittel berechnen **
Datenrahmen ['Spaltenname']. Mean ()
** Finde den Medianwert der Spalte **
Datenrahmen ['Spaltenname']. Median ()
print(train_df['Fare'].mean())
print(train_df['Fare'].median())
32.2042079685746 14.4542
#Ergänzungsalter mit Durchschnittswert
train_df['Age'] = train_df['Age'].fillna(train_df['Age'].mean())
** Vektorisierung von Kategoriewerten **
Beim maschinellen Lernen müssen grundsätzlich alle für die Berechnung verwendeten Werte numerische Werte sein. Bei einem Kategoriewert, der aus Zeichenfolgen besteht, kann er in vielen Fällen, mit Ausnahme einiger Modelle, nicht als maschinelles Lerndaten verwendet werden.
Daher wird der Kategoriewert als "One-Hot-Vektor" in einen numerischen Wert umgewandelt.
** Machen Sie den Kategoriewert zu einem One-Hot-Vektor **
one-hot vector
sind die Daten, die eine Spalte mit Kategoriewerten erstellen und den Wert auf 1 setzen, wenn der Spaltenname unterschiedlich ist, und auf 0, wenn der Wert unterschiedlich ist.
pd.get_dummies (Datenrahmen [['Spaltenname']])
#Klassifizierung der Einstiegsorte
train_df["Embarked"] = train_df["Embarked"].fillna('N')
one_hot_df = pd.get_dummies(train_df["Embarked"],prefix='Em')
one_hot_df.head()
Em_C | Em_N | Em_Q | Em_S | |
---|---|---|---|---|
0 | 0 | 0 | 0 | 1 |
1 | 1 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 1 |
3 | 0 | 0 | 0 | 1 |
4 | 0 | 0 | 0 | 1 |
Da die Spalte "Eingeschifft" einen Fehler aufweist, wird der Fehler durch "N" ersetzt und anschließend der Kategoriewert verwendet. Erzeugt einen neuen Datenrahmen, der durch 1 ersetzt wird, wenn ein Kategoriewert vorhanden ist, und 0, wenn dies nicht der Fall ist.
Sie erstellen Spalten für jeden Datentyp. Wenn es zu viele Datentypen gibt, sind die Daten roh (fast 0). Es ist eine gute Idee, kategoriale Variablen nur für diejenigen zu erstellen, die in gewissem Umfang eingeschränkt sind.
** Umwandlung von Zahlen und Zeichenfolgen ** Wir werden die Daten von einer Zeichenfolge in einen numerischen Wert ändern oder den numerischen Wert in eine Zeichenfolge ändern, um Daten zu erhalten, die für maschinelles Lernen verwendet werden können.
Da "Geschlecht (Geschlecht)" eine Zeichenkette ist, kann sie nicht wie sie ist für maschinelles Lernen verwendet werden. Wir werden von einer Zeichenfolge in einen numerischen Wert konvertieren.
Datenrahmen ['Spaltenname']. Ersetzen ({Wert: Wert, Wert: Wert ...})
#Geschlechtsquantifizierung(0 Männer,1 Frau)
train_df['Sex2'] = train_df['Sex'].replace({'male':0,'female':1})
train_df.head()
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | Sex2 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22 | 1 | 0 | A/5 21171 | 7.25 | NaN | S | 0 |
1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38 | 1 | 0 | PC 17599 | 71.2833 | C85 | C | 1 |
2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26 | 0 | 0 | STON/O2. 3101282 | 7.925 | NaN | S | 1 |
3 | 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35 | 1 | 0 | 113803 | 53.1 | C123 | S | 1 |
4 | 5 | 0 | 3 | Allen, Mr. William Henry | male | 35 | 0 | 0 | 373450 | 8.05 | NaN | S | 0 |
Erstellt eine neue Geschlechtsspalte.
Sie können auch Ersetzen verwenden, wenn Sie von einer Zahl in eine Zeichenfolge konvertieren. Beim Ändern des gesamten Datentyps einer Spalte
Datenrahmen ['Spaltenname']. Astype (np. Datentyp)
** Numerisierung **
Berechnen wir das Alter anhand des Alters. Wenn Sie das Alter durch 10 teilen, um das Alter zu erhalten. Sie können auch eine Spalte für fehlende Elemente ohne Alter erstellen.
#Alterskategorisierung
train_df['period'] = train_df['Age']//10
train_df['period'] = train_df['period'].fillna('NaN')
train_df['period'] = train_df['period'].astype(np.str)
period_df = pd.get_dummies(train_df["period"],prefix='Pe')
period_df.head()
Pe_0.0 | Pe_1.0 | Pe_2.0 | Pe_3.0 | Pe_4.0 | Pe_5.0 | Pe_6.0 | Pe_7.0 | Pe_8.0 | |
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
3 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
4 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
** Datenrahmen kombinieren **
Wir werden die neu erstellten Datenrahmen zu einem kombinieren. Verwenden Sie pd.concat
, um es zusammenzusetzen.
pd.concat ([Datenrahmen, Datenrahmen], Achse = 1)
con_df = pd.concat([train_df,period_df],axis=1)
con_df = pd.concat([con_df,one_hot_df],axis=1)
con_df.head(1)
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | ... | Pe_3.0 | Pe_4.0 | Pe_5.0 | Pe_6.0 | Pe_7.0 | Pe_8.0 | Em_C | Em_N | Em_Q | Em_S | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22 | 1 | 0 | A/5 21171 | 7.25 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Sie haben die Datenrahmen jetzt horizontal verkettet.
** Unnötige Daten löschen **
Beim Kombinieren von Datenrahmen wird die ursprüngliche Spalte gelöscht, da die Daten vor der Konvertierung nicht erforderlich sind.
Data frame.drop (['Spaltenname'], Achse = 1)
data_df = con_df.drop(['PassengerId','Pclass','Name','Age','Ticket','Cabin','Embarked','period','Sex'], axis=1)
data_df.head()
Survived | SibSp | Parch | Fare | Sex2 | Pe_0.0 | Pe_1.0 | Pe_2.0 | Pe_3.0 | Pe_4.0 | Pe_5.0 | Pe_6.0 | Pe_7.0 | Pe_8.0 | Em_C | Em_N | Em_Q | Em_S | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 0 | 7.25 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
1 | 1 | 1 | 0 | 71.2833 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
2 | 1 | 0 | 0 | 7.925 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
3 | 1 | 1 | 0 | 53.1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
4 | 0 | 0 | 0 | 8.05 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Alle Daten sind numerische Werte. Auf diese Weise kann es als endgültige Daten für maschinelles Lernen verwendet werden.
Heute habe ich die Daten verarbeitet und einen Datamart für maschinelles Lernen erstellt. Wir haben heute nur wenige Verarbeitungsmethoden eingeführt.
Lassen Sie uns zuerst den rauen Fluss lernen. Und wenn Sie es bis zu einem gewissen Grad verstanden haben, halte ich es für eine gute Idee, Wege zu finden, um die Genauigkeit zu verbessern oder neue Methoden auszuprobieren.
21 Tage bis Sie Ingenieur werden
HP von Otsu py: http://www.otupy.net/
Youtube: https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw
Twitter: https://twitter.com/otupython