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 über das Datenverständnis in dieser Vorverarbeitung sprechen.
Lassen Sie uns grob erklären, wie die Datenvorverarbeitung beim maschinellen Lernen aussieht, aber machen wir es mit etwas Code.
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. Mit Datenrahmen können Sie mit Daten in Zeilen und Spalten arbeiten.
** Daten prüfen **
Überprüfen Sie zunächst den Datenrahmen. Mal sehen, welche Art von Spalten es gibt.
print(train_df.columns)
print(len(train_df.columns))
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype='object') 12
Als nächstes folgt die Bestätigung des Datentyps. In der Pandas-Bibliothek ist der Datentyp für jede Spalte festgelegt. Es ist notwendig, je nach Typ zu arbeiten.
train_df.dtypes
PassengerId int64 Survived int64 Pclass int64 Name object Sex object Age float64 SibSp int64 Parch int64 Ticket object Fare float64 Cabin object Embarked object dtype: object
object
ist ein Datentyp wie eine Zeichenfolge, und die anderen sind numerische Datentypen.
** Spaltenreferenz ** Sie können sich auch spaltenweise auf die Daten im Datenrahmen beziehen. Wenn Sie eine Zeichenfolge für eine Spalte oder einen Spaltennamen vom Listentyp für mehrere Spalten angeben, können Sie nur auf diese Daten verweisen.
Datenrahmen [Spaltenname]
Datenrahmen [[Spaltenname, Spaltenname]]
** Grundlegende Aggregation von Datenrahmen **
Das erste, was Sie tun müssen, wenn Sie die Daten erhalten, ist die grundlegende Tabellierung. Pandas können grundlegende Statistiken für Datenrahmen berechnen.
#Grundlegende Statistik numerischer Daten
train_df.describe()
PassengerId | Survived | Pclass | Age | SibSp | Parch | Fare | |
---|---|---|---|---|---|---|---|
count | 891 | 891 | 891 | 714 | 891 | 891 | 891 |
mean | 446 | 0.383838 | 2.308642 | 29.699118 | 0.523008 | 0.381594 | 32.204208 |
std | 257.353842 | 0.486592 | 0.836071 | 14.526497 | 1.102743 | 0.806057 | 49.693429 |
min | 1 | 0 | 1 | 0.42 | 0 | 0 | 0 |
25% | 223.5 | 0 | 2 | 20.125 | 0 | 0 | 7.9104 |
50% | 446 | 0 | 3 | 28 | 0 | 0 | 14.4542 |
75% | 668.5 | 1 | 3 | 38 | 1 | 0 | 31 |
max | 891 | 1 | 3 | 80 | 8 | 6 | 512.3292 |
Holen Sie sich die grundlegenden Statistiken für numerische Spalten. Sie können sehen, wie viele Daten vorhanden sind und wie sie aussehen.
** Datentyp bestätigen ** Welche Datenkategorie und wie viel gibt es, da Daten vom Typ Zeichenfolgen nicht einfach aggregiert werden können? Sie kann mit einer Methode namens "value_counts" berechnet werden.
Datenrahmen ['Spaltenname']. Value_counts ()
train_df['Pclass'].value_counts()
3 491 1 216 2 184 Name: Pclass, dtype: int64
** Gruppierung nach Aggregation **
Verwenden Sie group by
, um eine Aggregation mit mehreren Spalten durchzuführen.
Datenrahmen [['Spaltenname', 'Spaltenname', 'Spaltenname']]. Groupby (['Spaltenname', 'Spaltenname']). Aggregate function ()
#Bestätigung der Anzahl der Überlebenden nach Geschlecht(0:Tod, 1:Überleben)
train_df[['Sex','Survived','PassengerId']].groupby(['Sex','Survived']).count()
PassengerId | ||
---|---|---|
Sex | Survived | |
female | 0 | 81 |
1 | 233 | |
male | 0 | 468 |
1 | 109 |
Mit der gruppierten Aggregation können Sie verschiedene Aggregationen durchführen. (Durchschnitt, Minimum, Maximum usw.)
Betrachtet man dies, so scheint es einen erheblichen Unterschied zwischen der Überlebensrate von Frauen und der Überlebensrate von Männern zu geben. Viele Männer sind "Survived = 0" und können in überwältigenden Booten sterben sehen.
** Kreuztabelle **
Sie können Kreuztabellen (Zählen der Stückzahl) durchführen, indem Sie mehrere Spalten zusammenfassen.
pd.crosstab (Datenrahmen [Spaltenname], Datenrahmen [Spaltenname])
pd.crosstab ([Datenrahmen [Spaltenname], Datenrahmen [Spaltenname]], [Datenrahmen [Spaltenname], Datenrahmen [Spaltenname]])
pd.crosstab([train_df['Sex'], train_df['Survived']], train_df['Pclass'])
Pclass | 1 | 2 | 3 | |
---|---|---|---|---|
Sex | Survived | |||
female | 0 | 3 | 6 | 72 |
1 | 91 | 70 | 72 | |
male | 0 | 77 | 91 | 300 |
1 | 45 | 17 | 47 |
pd.crosstab([train_df['Sex'], train_df['Survived']], [train_df['Pclass'], train_df['Embarked']],margins=True)
Pclass | 1 | 2 | 3 | |||||||
---|---|---|---|---|---|---|---|---|---|---|
Embarked | C | Q | S | C | Q | S | C | Q | S | |
Sex | Survived | |||||||||
female | 0 | 1 | 0 | 2 | 0 | 0 | 6 | 8 | 9 | 55 |
1 | 42 | 1 | 46 | 7 | 2 | 61 | 15 | 24 | 33 | |
male | 0 | 25 | 1 | 51 | 8 | 1 | 82 | 33 | 36 | 231 |
1 | 17 | 0 | 28 | 2 | 0 | 15 | 10 | 3 | 34 | |
All | 85 | 2 | 127 | 17 | 3 | 164 | 66 | 72 | 353 |
Wir werden untersuchen, um welche Art von Daten es sich handelt, indem wir eine solche Aggregation für jede Spalte durchführen.
** Datenvisualisierung **
Sie können die Daten mit matplotlib
visualisieren.
Diagramme können aus Daten wie Histogrammen, Balkendiagrammen und Streudiagrammen erstellt werden. Zeichnen wir ein Histogramm.
Das Histogramm ist ein Diagramm, wenn die horizontale Achse der Wert und die vertikale Achse die Zahl ist. Der Bin ist die Anzahl der Stufen, wenn die Daten in Stufen unterteilt werden.
** Histogramm anzeigen **
Datenrahmen ['Spaltenname']. Plot (kind = 'hist', bin = Anzahl der Bins)
Datenrahmen ['Spaltenname']. Hist (bin = Anzahl der Bins)
train_df['Fare'].plot(figsize=(16, 5),kind='hist',bins=20)
plt.show()
train_df['Age'].plot(figsize=(16, 5),kind='hist',bins=20)
plt.show()
** Zustandsspezifikation **
Durch Hinzufügen von Extraktionsbedingungen zum Datenrahmen können Sie das, was Sie visualisieren möchten, in Ebenen unterteilen.
Datenrahmen [bedingter Ausdruck] ['Spaltenname']
Bedingungen | Symbol |
---|---|
und Zustand | & |
oder Zustand | | |
Im Falle einer Nichtbedingung | ~ |
#Extrahieren Sie Datenrahmen, indem Sie Bedingungen angeben
train_df[train_df['Survived']==0]['Age'].head()
0 22.0 4 35.0 5 NaN 6 54.0 7 2.0 Name: Age, dtype: float64
#Zeichnen Sie ein Histogramm für Überlebende und Tote nach Alter
train_df[train_df['Survived']==0]['Age'].hist(figsize=(16,5),bins=16,color="#F8766D", alpha=0.3)
train_df[train_df['Survived']==1]['Age'].hist(figsize=(16,5),bins=16,color="#5F9BFF", alpha=0.3)
plt.show()
#Zeichnen Sie nur für Männer ein Histogramm, das für Überlebende und Tote nach Alter getrennt ist
train_df[(train_df['Survived']==0)&(train_df['Sex']=='male')]['Age'].hist(figsize=(16,5),bins=10,color="#F8766D", alpha=0.3)
train_df[(train_df['Survived']==1)&(train_df['Sex']=='male')]['Age'].hist(figsize=(16,5),bins=10,color="#5F9BFF", alpha=0.3)
plt.show()
#Nur Frauen zeichnen ein Histogramm separat für Überlebende und Tote nach Alter
train_df[(train_df['Survived']==0)&(train_df['Sex']=='female')]['Age'].hist(figsize=(16,5),bins=10,color="#F8766D", alpha=0.3)
train_df[(train_df['Survived']==1)&(train_df['Sex']=='female')]['Age'].hist(figsize=(16,5),bins=10,color="#5F9BFF", alpha=0.3)
plt.show()
Die Visualisierung der Ergebnisse verschiedener Tabellen erleichtert das Erkennen der Unterschiede und das Auffinden von Dingen, die bei der Vorhersage der Daten wahrscheinlich effektiv sind.
Es ist ersichtlich, dass zwischen der Verteilung der Männer und der Verteilung der Frauen ein erheblicher Unterschied in Leben und Tod besteht.
Als nächstes zeigen wir das Streudiagramm an.
** Streudiagramm anzeigen **
Das Streudiagramm ist "Streuung". Da es sich um eine Visualisierung mit zwei numerischen Werten handelt, geben Sie zwei Spalten mit einigen numerischen Werten an.
Datenrahmen [['Spaltenname', 'Spaltenname']]. Plot (x = 'horizontaler Spaltenname', y = 'vertikaler Spaltenname', Art = 'Streuung')
train_df[['Fare','Age']].plot(x='Fare', y='Age', figsize=(16, 9),kind='scatter')
plt.show()
Ich möchte nach Geschlecht färben, aber da die Daten eine Zeichenfolge sind, muss ich sie nummerieren. Fügen Sie eine Spalte hinzu und ersetzen Sie den Wert durch den in einen numerischen Wert konvertierten Typ.
** Spalte für Datenrahmen hinzufügen **
Datenrahmen ['Spaltenname'] = Wert
** Ersetzen von Zeichen im Datenrahmen **
Dataframe.replace ({'Zeichenfolge vor dem Ersetzen': Wert nach dem Ersetzen})
#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 |
Ganz am Ende haben Sie eine Spalte mit dem Geschlecht 0,1.
Sie haben jetzt eine Wertespalte mit dem Geschlecht "Geschlecht" hinzugefügt.
Ich werde es ausmalen und ein Streudiagramm zeichnen.
#Färbung der Streukarte(0 Männer,1 Frau)
train_df[['Fare','Age']].plot(x='Fare', y='Age', figsize=(16, 5),kind='scatter',c=train_df['Sex2'],cmap='winter')
plt.show()
Lassen Sie uns die Überlebenden und die Toten farblich kennzeichnen.
#Färbung der Streukarte(0:Tod, 1:Überleben)
train_df[['Fare','Age']].plot(x='Fare', y='Age', figsize=(16, 5),kind='scatter',c=train_df['Survived'],cmap='winter')
plt.show()
Ich denke, es fühlt sich ziemlich ähnlich an, wenn es nach Geschlecht und Leben oder Tod farblich gekennzeichnet ist.
** Visualisierung mit Seaborn **
Es gibt eine Bibliothek namens "seaborn", um "matplotlib" etwas schöner darzustellen.
Es gibt auch eine Visualisierungsmethode, die von matplotlib
in seaborn La
Ibrari nicht ausgedrückt werden kann.
Ein Streudiagramm numerischer Daten wird zusammen angezeigt.
sns.pairplot (Datenrahmen, Farbton" String Type Type Column ")
#Wenn Werte fehlen, können einige nicht angezeigt werden. Füllen Sie daher die fehlenden Werte mit dem Durchschnittswert.
for name in ['Age']:
train_df[name] = train_df[name].fillna(train_df[name].mean())
train_df['Survived2'] = train_df['Survived'].replace({0:'death',1:'survived'})
train_df['Sex2'] = train_df['Sex'].replace({'male':0,'female':1})
# pairplot
#Überprüfen Sie die Korrelation zwischen Datenreihen
#Für dieselben Daten wird ein Balkendiagramm und für verschiedene Daten ein Streudiagramm angezeigt.
sns.pairplot(train_df[['Pclass','Age','Fare','Sex2','Survived2']], hue="Survived2")
plt.show()
factorplot
Faktorplot
kann Diagramme nach Faktor sortieren.
factorplot (x = 'horizontaler Spaltenname', y = 'vertikaler Spaltenname', Farbton = 'Typ Spaltenname', col = 'Spaltenname', Daten = Datenrahmen)
# factorplot (Typvergleichsdiagramm)
sns.factorplot(x='Pclass', y='Age', hue='Survived', col='Sex2', data=train_df)
plt.show()
Sie können es in einen Box-Whisker ändern, indem Sie kind = 'box' hinzufügen.
sns.factorplot(x='Pclass', y='Age', hue='Survived', col='Sex2',kind='box', data=train_df)
plt.show()
lmplot
Es ist ein Diagramm, das ein Streudiagramm und eine lineare Regressionslinie zwischen zwei Variablen visualisiert.
sns.lmplot (x = Spalte der horizontalen Achse, y = Spalte der vertikalen Achse, Farbton = 'Färbungssache', Daten = Datenrahmen, x_bins = Bin-Wert)
#Geben Sie die Altersgruppe an
generations = [10,20,30,40,50,60,70,80]
#Zeichnen Sie die Kundendemografie, die Überlebensrate nach Alter und die Regressionslinie
sns.lmplot('Age', 'Survived', hue='Pclass', data=train_df,hue_order=[1,2,3], x_bins=generations)
plt.show()
Um die Daten zu verstehen, aggregieren Sie das Ganze, um zu verstehen, welche Art von Daten verfügbar ist, und probieren Sie verschiedene Visualisierungen durch Schichtung aus. Mal sehen, welche Art von Datenverteilung es hat.
Organisieren Sie nach dem Betrachten der Daten, welche Art von Daten für die Vorhersage verwendet werden können. Von hier aus werden wir die Daten korrigieren, die für maschinelles Lernen verwendet werden können.
Lassen Sie uns zuerst den rauen Fluss lernen.
22 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