Dein erster Schritt in Data Science. Titanic

Ein kurzes einführendes Wort

Ich denke, dass wir deutlich mehr tun könnten, wenn uns Schritt-für-Schritt-Anleitungen zur Verfügung stünden, die uns sagen, was und wie zu tun ist. Ich erinnere mich an Momente in meinem Leben, in denen ich nicht mit etwas beginnen konnte, weil es einfach schwer war zu verstehen, wo ich anfangen sollte. Vielleicht hast du vor langer Zeit im Internet die Worte „Data Science“ gesehen und dachtest, dass du weit davon entfernt bist, während die Menschen, die sich damit beschäftigen, irgendwo anders, in einer anderen Welt sind. Das ist jedoch nicht der Fall; sie sind direkt hier. Und vielleicht ist es den Menschen aus diesem Bereich zu verdanken, dass dir ein Artikel in deinem Feed begegnet ist. Es gibt viele Kurse, die dir helfen, dieses Handwerk zu erlernen, und hier helfe ich dir, den ersten Schritt zu machen.

Bist du bereit? Ich sage gleich, dass du Python 3 wissen musst, da ich es hier verwenden werde. Außerdem empfehle ich, Jupyter Notebook im Voraus zu installieren oder zu schauen, wie man Google Colab verwendet.

Schritt eins

Dein erster Schritt in Data Science. Titanic

Kaggle ist dein wichtiger Helfer in dieser Angelegenheit. Prinzipiell kann man auch ohne es auskommen, aber darüber werde ich in einem anderen Artikel sprechen. Es ist eine Plattform, auf der Wettbewerbe im Bereich Data Science stattfinden. In jedem dieser Wettkämpfe wirst du in den frühen Phasen eine enorme Menge an Erfahrung im Lösen verschiedener Aufgaben, in der Entwicklung und in der Teamarbeit sammeln, was in unserer Zeit wichtig ist.

Wir werden unsere Aufgabe dort nehmen. Sie heißt: „Titanic“. Die Bedingung ist: Vorherzusagen, ob jeder einzelne Mensch überlebt. Insgesamt gesagt, die Aufgabe eines Data Scientists besteht darin, Daten zu sammeln, sie zu verarbeiten, ein Modell zu trainieren, Vorhersagen zu machen und so weiter. Auf Kaggle können wir den Schritt der Datensammlung überspringen — sie sind auf der Plattform verfügbar. Wir müssen sie nur herunterladen, und dann können wir beginnen!

Das kannst du auf folgende Weise tun:

Im Tab Data befinden sich die Dateien, die die Daten enthalten.

Dein erster Schritt in Data Science. Titanic

Dein erster Schritt in Data Science. Titanic

Daten heruntergeladen, unsere Jupyter-Notizbücher vorbereitet und…

Schritt zwei

Wie laden wir jetzt diese Daten hoch?

Zuerst importieren wir die benötigten Bibliotheken:

import pandas as pd
import numpy as np

Pandas wird uns ermöglichen, .csv-Dateien für die weitere Verarbeitung zu laden.

Numpy wird benötigt, um unser Datenset in eine Matrix mit Zahlen umzuwandeln.
Gehen wir weiter. Nehmen wir die Datei train.csv und laden sie zu uns hoch:

dataset = pd.read_csv('train.csv')

Wir werden auf unser Datenbeispiel train.csv über die Variable dataset zugreifen. Lassen Sie uns sehen, was sich dort befindet:

dataset.head()

Dein erster Schritt in Data Science. Titanic

Die Funktion head() ermöglicht es uns, die ersten paar Zeilen des DataFrames anzusehen.

Die Spalte Survived zeigt unsere Ergebnisse, die in diesem DataFrame bekannt sind. In Bezug auf die Aufgabe müssen wir die Spalte Survived für die Daten test.csv vorhersagen. In diesen Daten sind Informationen über andere Passagiere der Titanic enthalten, deren Ergebnisse uns, die wir die Aufgabe lösen, unbekannt sind.

Also teilen wir unsere Tabelle in abhängige und unabhängige Daten auf. Das ist ganz einfach. Abhängige Daten sind die Daten, die von den unabhängigen abhängen, also das, was in den Ergebnissen steht. Unabhängige Daten sind diejenigen, die das Ergebnis beeinflussen.

Zum Beispiel haben wir folgenden Datensatz:

„Wowa hat Informatik gelernt — nein.
Wowa hat in Informatik eine 2 bekommen.“

Die Note in Informatik hängt von der Antwort auf die Frage ab: Hat Wowa Informatik gelernt? Verstehst du? Machen wir weiter, wir sind schon näher am Ziel!

Die traditionelle Variable für unabhängige Daten ist X. Für abhängige ist es y.

Wir machen Folgendes:

X = dataset.iloc[ : , 2 : ]
y = dataset.iloc[ : , 1 : 2 ]

Was ist das? Mit der Funktion iloc[:, 2: ] sagen wir Python: Ich möchte in der Variable X Daten sehen, die mit der zweiten Spalte beginnen (einschließlich, und vorausgesetzt, dass die Zählung bei null beginnt). In der zweiten Zeile sagen wir, dass wir in y die Daten der ersten Spalte sehen möchten.

[ a:b, c:d ] — das ist die Konstruktion, die wir in den Klammern verwenden. Wenn wir einige Variablen nicht angeben, werden sie standardmäßig beibehalten. Das heißt, wir können [:,: d] angeben und dann die Daten im DataFrame erhalten, die alle Spalten außer denen enthalten, die mit der Nummer d und darüber hinaus beginnen. Die Variablen a und b bestimmen die Zeilen, aber die brauchen wir alle, daher lassen wir das standardmäßig.

Schauen wir mal, was wir herausgeholt haben:

X.head()

Dein erster Schritt in Data Science. Titanic

y.head()

Dein erster Schritt in Data Science. Titanic

Um diese kurze Lektion zu vereinfachen, werden wir die Spalten entfernen, die besondere "Pflege" erfordern oder überhaupt keinen Einfluss auf das Überleben haben. Sie enthalten Daten vom Typ str.

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X.drop(count, inplace=True, axis=1)

Super! Gehen wir zum nächsten Schritt.

Schritt drei

Hier müssen wir unsere Daten kodieren, damit die Maschine besser versteht, wie diese Daten das Ergebnis beeinflussen. Aber wir kodieren nicht alles, sondern nur die str-Daten, die wir belassen haben. Die Spalte „Sex“. Wie wollen wir kodieren? Stellen wir die Informationen zum Geschlecht einer Person als Vektor dar: 10 – männlich, 01 – weiblich.

Zunächst wandeln wir unsere Tabellen in eine NumPy-Matrix um:

X = np.array(X)
y = np.array(y)

Und nun schauen wir:

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X = np.array(ct.fit_transform(X))

Die Bibliothek sklearn ist eine großartige Bibliothek, die es uns ermöglicht, umfassende Arbeiten im Bereich Data Science zu leisten. Sie enthält eine große Anzahl interessanter Modelle für maschinelles Lernen und ermöglicht es uns auch, Daten vorzubereiten.

OneHotEncoder ermöglicht es uns, das Geschlecht einer Person so zu kodieren, wie wir es beschrieben haben. Es werden 2 Klassen erstellt: männlich, weiblich. Wenn eine Person ein Mann ist, wird in die Spalte „männlich“ eine 1 und in die „weiblich“ entsprechend eine 0 geschrieben.

Nach OneHotEncoder() folgt [1] – das bedeutet, dass wir die Spalte Nummer 1 kodieren möchten (Zählung beginnt bei Null).

Super. Gehen wir noch weiter!

Es kommt häufig vor, dass einige Daten nicht ausgefüllt sind (d.h. NaN – not a number). Zum Beispiel gibt es Informationen über eine Person: ihren Namen, ihr Geschlecht. Aber es gibt keine Daten über ihr Alter. In diesem Fall wenden wir eine Methode an: Wir berechnen den Durchschnitt über alle Spalten und, falls Daten in einer Spalte fehlen, füllen wir die Lücken mit dem arithmetischen Mittel aus.

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X)
X = imputer.transform(X)

Und jetzt berücksichtigen wir, dass es Situationen gibt, in denen die Daten sehr stark streuen. Einige Daten liegen im Bereich [0:1], andere können mehrere Hundert oder Tausend betragen. Um diese Streuung auszuschließen und dass der Computer genauere Berechnungen anstellt, skalieren wir die Daten. Lassen Sie uns sicherstellen, dass alle Zahlen nicht mehr als drei betragen. Dafür nutzen wir die Funktion StandardScaler.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X[:, 2:] = sc.fit_transform(X[:, 2:])

Jetzt sehen unsere Daten so aus:

Dein erster Schritt in Data Science. Titanic

Klasse. Wir sind schon nah an unserem Ziel!

Vierter Schritt

Wir werden unser erstes Modell trainieren! In der Bibliothek sklearn finden wir eine riesige Menge an interessanten Dingen. Ich habe für diese Aufgabe das Modell Gradient Boosting Classifier verwendet. Wir verwenden einen Klassifikator, da es sich bei unserer Aufgabe um eine Klassifikationsaufgabe handelt. Es gilt vorherzusagen, ob es sich um 1 (überlebt) oder 0 (nicht überlebt) handelt.

from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(learning_rate=0.5, max_depth=5, n_estimators=150)
gbc.fit(X, y)

Die Funktion fit sagt Python: Lass das Modell die Abhängigkeiten zwischen X und y suchen.

Weniger als eine Sekunde und das Modell ist bereit.

Dein erster Schritt in Data Science. Titanic

Wie wendet man es an? Jetzt werden wir es sehen!

Schritt fünf. Fazit

Jetzt müssen wir die Tabelle mit unseren Testdaten laden, für die eine Prognose erstellt werden muss. Wir werden mit dieser Tabelle die gleichen Schritte durchführen, die wir bei X gemacht haben.

X_test = pd.read_csv('test.csv', index_col=0)

count = ['Name', 'Ticket', 'Kabine', 'Eingestiegen']
X_test.drop(count, inplace=True, axis=1)

X_test = np.array(X_test)

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1])],
                       remainder='passthrough')
X_test = np.array(ct.fit_transform(X_test))

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X_test)
X_test = imputer.transform(X_test)

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_test[:, 2:] = sc.fit_transform(X_test[:, 2:])

Lassen Sie uns unser Modell schon anwenden!

gbc_predict = gbc.predict(X_test)

Alles klar. Wir haben die Prognose erstellt. Jetzt muss sie in eine CSV-Datei geschrieben und auf die Website hochgeladen werden.

np.savetxt('my_gbc_predict.csv', gbc_predict, delimiter=',', header='Überlebt')

Fertig. Wir haben eine Datei erhalten, die die Vorhersagen für jeden Passagier enthält. Jetzt bleibt nur noch, diese Lösungen auf die Website hochzuladen und die Prognosebewertung zu erhalten. Diese einfache Lösung liefert nicht nur 74 % korrekte Antworten in der Öffentlichkeit, sondern gibt auch einen gewissen Anstoß im Bereich Data Science. Die Neugierigen können mir jederzeit eine private Nachricht senden und Fragen stellen. Vielen Dank!

Quelle: habr.com

60GB SSD 8Gb DDR4