Primul pas în Data Science. Titanic

Un scurt cuvânt introductiv

Cred că am putea face mai multe lucruri dacă ni s-ar oferi instrucțiuni pas cu pas care ne-ar spune ce să facem și cum să facem. Eu însumi îmi amintesc momentele din viața mea când nu puteam începe ceva pentru că era pur și simplu greu de înțeles de unde să încep. Poate că odată pe Internet ai văzut cuvintele „Data Science” și ai decis că ești departe de asta, iar oamenii care fac asta erau undeva acolo, într-o altă lume. Nu, sunt chiar aici. Și, poate, datorită oamenilor din acest domeniu, a apărut un articol în feedul tău. Există o mulțime de cursuri care te vor ajuta să te simți confortabil cu acest meșteșug, dar aici te voi ajuta să faci primul pas.

Ei bine, ești gata? Permiteți-mi să vă spun imediat că va trebui să cunoașteți Python 3, deoarece acesta este ceea ce voi folosi aici. De asemenea, vă sfătuiesc să îl instalați pe Jupyter Notebook în avans sau să vedeți cum să utilizați google colab.

Шаг первый

Primul pas în Data Science. Titanic

Kaggle este asistentul tău important în această chestiune. În principiu, te poți descurca fără el, dar despre asta voi vorbi într-un alt articol. Aceasta este o platformă care găzduiește competiții Data Science. În fiecare astfel de competiție, în primele etape veți dobândi o cantitate nerealistă de experiență în rezolvarea problemelor de diferite tipuri, experiență de dezvoltare și experiență de lucru în echipă, ceea ce este important în timpul nostru.

Ne vom lua sarcina de acolo. Se numește „Titanic”. Condiția este aceasta: preziceți dacă fiecare persoană individuală va supraviețui. În general, sarcina unei persoane implicate în DS este colectarea datelor, prelucrarea acestora, formarea unui model, prognozarea și așa mai departe. În kaggle, avem voie să sărim peste etapa de colectare a datelor - acestea sunt prezentate pe platformă. Trebuie să le descarcăm și putem începe!

Acest lucru se poate face după cum urmează:

fila Date conține fișiere care conțin date

Primul pas în Data Science. Titanic

Primul pas în Data Science. Titanic

Am descărcat datele, ne-am pregătit caietele Jupyter și...

Шаг второй

Cum încărcăm acum aceste date?

Mai întâi, să importăm bibliotecile necesare:

import pandas as pd
import numpy as np

Pandas ne va permite să descarcăm fișiere .csv pentru procesare ulterioară.

Numpy este necesar pentru a reprezenta tabelul nostru de date ca o matrice cu numere.
Daţi-i drumul. Să luăm fișierul train.csv și să-l încărcăm:

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

Ne vom referi la selecția noastră de date train.csv prin variabila set de date. Sa vedem ce e acolo:

dataset.head()

Primul pas în Data Science. Titanic

Funcția head() ne permite să privim primele câteva rânduri ale unui cadru de date.

Coloanele Survived sunt tocmai rezultatele noastre, care sunt cunoscute în acest cadru de date. Pentru întrebarea despre sarcină, trebuie să anticipăm coloana Supraviețuit pentru datele test.csv. Aceste date stochează informații despre alți pasageri ai Titanicului, pentru care noi, rezolvând problema, nu știm rezultatul.

Deci, să împărțim tabelul nostru în date dependente și independente. Totul este simplu aici. Datele dependente sunt acele date care depind de datele independente care se află în rezultate. Datele independente sunt acele date care influențează rezultatul.

De exemplu, avem următorul set de date:

„Vova a predat informatica - nu.
Vova a primit nota 2 la informatică.”

Nota la informatică depinde de răspunsul la întrebarea: Vova a studiat informatica? Este clar? Să mergem mai departe, suntem deja mai aproape de obiectiv!

Variabila tradițională pentru datele independente este X. Pentru datele dependente, y.

Facem următoarele:

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

Ce este? Cu funcția iloc[:, 2: ] îi spunem lui Python: Vreau să văd în variabila X datele începând din a doua coloană (inclusiv și cu condiția ca numărarea să înceapă de la zero). În a doua linie spunem că vrem să vedem datele din prima coloană.

[ a:b, c:d ] este construcția a ceea ce folosim între paranteze. Dacă nu specificați nicio variabilă, acestea vor fi salvate ca implicite. Adică putem specifica [:,: d] și apoi vom obține toate coloanele din cadrul de date, cu excepția celor care merg de la numărul d în sus. Variabilele a și b definesc șiruri de caractere, dar avem nevoie de toate, așa că lăsăm acest lucru ca implicit.

Să vedem ce avem:

X.head()

Primul pas în Data Science. Titanic

y.head()

Primul pas în Data Science. Titanic

Pentru a simplifica această mică lecție, vom elimina coloanele care necesită îngrijire specială sau care nu afectează deloc supraviețuirea. Acestea contin date de tip str.

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

Super! Să trecem la pasul următor.

Pasul al treilea

Aici trebuie să ne codificăm datele, astfel încât aparatul să înțeleagă mai bine modul în care aceste date afectează rezultatul. Dar nu vom codifica totul, ci doar datele str pe care le-am lăsat. Coloana „Sex”. Cum vrem să codificăm? Să reprezentăm datele despre genul unei persoane ca vector: 10 - bărbat, 01 - femeie.

Mai întâi, să convertim tabelele noastre într-o matrice NumPy:

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

Și acum să ne uităm:

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))

Biblioteca sklearn este o bibliotecă atât de grozavă care ne permite să lucrăm complet în Data Science. Conține un număr mare de modele interesante de învățare automată și, de asemenea, ne permite să facem pregătirea datelor.

OneHotEncoder ne va permite să codificăm genul unei persoane în acea reprezentare, așa cum am descris. Se vor crea 2 clase: masculin, feminin. Dacă persoana este bărbat, atunci se va scrie 1 în coloana „masculin”, respectiv 0 în coloana „femeie”.

După OneHotEncoder() există [1] - asta înseamnă că dorim să codificăm coloana numărul 1 (numărând de la zero).

Super. Să mergem și mai departe!

De regulă, acest lucru se întâmplă ca unele date să rămână necompletate (adică NaN - nu un număr). De exemplu, există informații despre o persoană: numele ei, sexul. Dar nu există informații despre vârsta lui. În acest caz, vom aplica următoarea metodă: vom găsi media aritmetică peste toate coloanele și, dacă unele date lipsesc în coloană, atunci vom umple golul cu media aritmetică.

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

Acum să luăm în considerare că se întâmplă situații când datele sunt foarte mari. Unele date sunt în intervalul [0:1], în timp ce unele pot depăși sute și mii. Pentru a elimina o astfel de împrăștiere și pentru a face computerul mai precis în calculele sale, vom scana datele și le vom scala. Toate numerele să nu depășească trei. Pentru a face acest lucru, vom folosi funcția StandardScaler.

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

Acum datele noastre arată astfel:

Primul pas în Data Science. Titanic

Clasă. Suntem deja aproape de obiectivul nostru!

Pasul patru

Să ne antrenăm primul model! Din biblioteca sklearn putem găsi un număr imens de lucruri interesante. Am aplicat la această problemă modelul Gradient Boosting Classifier. Folosim un clasificator deoarece sarcina noastră este o sarcină de clasificare. Prognosticul ar trebui să fie atribuit la 1 (a supraviețuit) sau 0 (nu a supraviețuit).

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

Funcția fit îi spune lui Python: Lăsați modelul să caute dependențe între X și y.

Mai puțin de o secundă și modelul este gata.

Primul pas în Data Science. Titanic

Cum se aplică? Vom vedea acum!

Pasul cinci. Concluzie

Acum trebuie să încărcăm un tabel cu datele noastre de testare pentru care trebuie să facem o prognoză. Cu acest tabel vom face toate aceleași acțiuni pe care le-am făcut pentru X.

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

count = ['Name', 'Ticket', 'Cabin', 'Embarked']
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:])

Să aplicăm modelul nostru acum!

gbc_predict = gbc.predict(X_test)

Toate. Am făcut o prognoză. Acum trebuie să fie înregistrat în csv și trimis pe site.

np.savetxt('my_gbc_predict.csv', gbc_predict, delimiter=",", header = 'Survived')

Gata. Am primit un fișier care conținea predicții pentru fiecare pasager. Tot ce rămâne este să încărcați aceste soluții pe site și să obțineți o evaluare a prognozei. O astfel de soluție primitivă oferă nu numai 74% din răspunsurile corecte publicului, ci și un impuls în Data Science. Cei mai curioși pot oricând să-mi scrie în mesaje private și să pună o întrebare. Mulțumiri tuturor!

Sursa: www.habr.com

Adauga un comentariu