Vaš prvi korak v podatkovni znanosti. Titanik

Kratka uvodna beseda

Menim, da bi lahko naredili več stvari, če bi dobili navodila po korakih, ki bi nam povedala, kaj in kako narediti. Sam se spomnim trenutkov v življenju, ko nečesa nisem mogel začeti, ker je bilo preprosto težko razumeti, kje začeti. Morda ste nekoč davno na internetu videli besede »Podatkovna znanost« in se odločili, da ste daleč od tega, ljudje, ki to počnejo, pa so bili nekje tam zunaj, v drugem svetu. Ne, tukaj so. In morda se je po zaslugi ljudi s tega področja na vašem viru pojavil članek. Obstaja veliko tečajev, ki vam bodo pomagali, da se navadite na to obrt, a tukaj vam bom pomagal narediti prvi korak.

No, si pripravljen? Naj vam takoj povem, da boste morali poznati Python 3, saj ga bom tukaj uporabljal. Svetujem vam tudi, da ga vnaprej namestite na Jupyter Notebook ali si ogledate, kako uporabljati google colab.

Prvi korak

Vaš prvi korak v podatkovni znanosti. Titanik

Kaggle je vaš pomemben pomočnik pri tej zadevi. Načeloma lahko brez tega, vendar bom o tem govoril v drugem članku. To je platforma, ki gosti tekmovanja Data Science. Na vsakem takem tekmovanju boste v zgodnjih fazah pridobili nerealno veliko izkušenj pri reševanju problemov različnih vrst, razvojnih izkušenj in izkušenj v timskem delu, kar je v našem času pomembno.

Od tam bomo prevzeli svojo nalogo. Imenuje se "Titanik". Pogoj je naslednji: napovedati, ali bo vsak posameznik preživel. Na splošno je naloga osebe, ki sodeluje pri DS, zbiranje podatkov, njihova obdelava, usposabljanje modela, napovedovanje ipd. V kaggle nam je dovoljeno preskočiti fazo zbiranja podatkov – predstavljeni so na platformi. Prenesti jih moramo in lahko začnemo!

To lahko storite takole:

zavihek Podatki vsebuje datoteke, ki vsebujejo podatke

Vaš prvi korak v podatkovni znanosti. Titanik

Vaš prvi korak v podatkovni znanosti. Titanik

Prenesli smo podatke, pripravili Jupyter zvezke in...

Drugi korak

Kako zdaj naložimo te podatke?

Najprej uvozimo potrebne knjižnice:

import pandas as pd
import numpy as np

Pandas nam bo omogočil prenos datotek .csv za nadaljnjo obdelavo.

Numpy je potreben za predstavitev naše podatkovne tabele kot matrike s številkami.
Kar daj. Vzemimo datoteko train.csv in jo naložimo k nam:

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

Naš izbor podatkov train.csv se bomo sklicevali prek spremenljivke nabora podatkov. Poglejmo, kaj je tam:

dataset.head()

Vaš prvi korak v podatkovni znanosti. Titanik

Funkcija head() nam omogoča, da si ogledamo prvih nekaj vrstic podatkovnega okvira.

Stolpci Preživeli so ravno naši rezultati, ki so znani v tem podatkovnem okviru. Za vprašanje naloge moramo predvideti stolpec Preživeli za podatke test.csv. V teh podatkih so shranjeni podatki o drugih potnikih Titanika, za katere pri reševanju problema ne vemo izida.

Torej, razdelimo našo tabelo na odvisne in neodvisne podatke. Tukaj je vse preprosto. Odvisni podatki so tisti podatki, ki so odvisni od neodvisnih podatkov, ki so v rezultatih. Neodvisni podatki so tisti podatki, ki vplivajo na rezultat.

Na primer, imamo naslednji niz podatkov:

»Vova je učil računalništvo - ne.
Vova je prejel 2 iz računalništva.”

Ocena iz računalništva je odvisna od odgovora na vprašanje: ali je Vova študiral računalništvo? Je jasno? Gremo naprej, smo že bližje cilju!

Tradicionalna spremenljivka za neodvisne podatke je X. Za odvisne podatke je y.

Naredimo naslednje:

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

Kaj je to? S funkcijo iloc[:, 2: ] povemo Pythonu: V spremenljivki X želim videti podatke, ki se začnejo od drugega stolpca (vključno in pod pogojem, da se štetje začne od nič). V drugi vrstici povemo, da želimo videti podatke v prvem stolpcu.

[a:b, c:d] je konstrukcija tega, kar uporabljamo v oklepaju. Če ne podate nobene spremenljivke, bodo shranjene kot privzete. To pomeni, da lahko določimo [:,: d] in potem bomo dobili vse stolpce v podatkovnem okviru, razen tistih, ki gredo od številke d naprej. Spremenljivki a in b definirata nize, vendar jih potrebujemo vse, zato pustimo to privzeto.

Poglejmo, kaj imamo:

X.head()

Vaš prvi korak v podatkovni znanosti. Titanik

y.head()

Vaš prvi korak v podatkovni znanosti. Titanik

Da bi poenostavili to malo lekcijo, bomo odstranili stolpce, ki zahtevajo posebno nego ali sploh ne vplivajo na preživetje. Vsebujejo podatke tipa str.

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

Super! Pojdimo na naslednji korak.

Tretji korak

Tukaj moramo zakodirati naše podatke, da stroj bolje razume, kako ti podatki vplivajo na rezultat. Vendar ne bomo kodirali vsega, ampak samo str podatke, ki smo jih pustili. Stolpec "Seks". Kako želimo kodirati? Podatke o spolu osebe predstavimo kot vektor: 10 - moški, 01 - ženska.

Najprej pretvorimo naše tabele v matriko NumPy:

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

In zdaj poglejmo:

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

Knjižnica sklearn je tako kul knjižnica, ki nam omogoča popolno delo v Data Science. Vsebuje veliko število zanimivih modelov strojnega učenja in nam omogoča tudi pripravo podatkov.

OneHotEncoder nam bo omogočil kodiranje spola osebe v tej predstavitvi, kot smo opisali. Ustvarjena bosta 2 razreda: moški in ženske. Če je oseba moški, bo v stolpcu »moški« zapisan 1, v stolpcu »ženska« pa 0.

Za OneHotEncoder() je [1] - to pomeni, da želimo kodirati stolpec številka 1 (šteto od nič).

Super. Gremo še dlje!

Praviloma se to zgodi, da nekateri podatki ostanejo prazni (to je NaN - ne številka). Na primer, obstajajo informacije o osebi: njeno ime, spol. Vendar ni podatkov o njegovi starosti. V tem primeru bomo uporabili naslednjo metodo: po vseh stolpcih bomo poiskali aritmetično sredino in če v stolpcu manjka kakšen podatek, bomo praznino zapolnili z aritmetično sredino.

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

Upoštevajmo, da se situacije dogajajo, ko je podatkov zelo veliko. Nekateri podatki so v razponu [0:1], nekateri pa lahko presežejo stotine in tisoče. Da bi odpravili takšno razpršenost in naredili računalnik natančnejše izračune, bomo skenirali podatke in jih prilagodili. Naj vse številke ne presegajo tri. Za to bomo uporabili funkcijo StandardScaler.

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

Zdaj so naši podatki videti takole:

Vaš prvi korak v podatkovni znanosti. Titanik

Razred. Smo že blizu cilja!

Četrti korak

Usposobimo naš prvi model! V knjižnici sklearn lahko najdemo ogromno zanimivih stvari. Za to težavo sem uporabil model Gradient Boosting Classifier. Klasifikator uporabljamo, ker je naša naloga klasifikacijska naloga. Napoved mora biti dodeljena 1 (preživel) ali 0 (ni preživel).

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

Funkcija prileganja pove Pythonu: Naj model poišče odvisnosti med X in y.

Manj kot sekunda in model je pripravljen.

Vaš prvi korak v podatkovni znanosti. Titanik

Kako ga uporabiti? Zdaj bomo videli!

Peti korak. Zaključek

Zdaj moramo naložiti tabelo z našimi testnimi podatki, za katere moramo narediti napoved. S to tabelo bomo izvedli vsa ista dejanja, kot smo jih izvedli za 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:])

Uporabimo naš model zdaj!

gbc_predict = gbc.predict(X_test)

Vse. Naredili smo napoved. Zdaj ga je treba posneti v csv in poslati na spletno stran.

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

pripravljena Prejeli smo datoteko z napovedmi za vsakega potnika. Preostane le še nalaganje teh rešitev na spletno stran in pridobitev ocene napovedi. Takšna primitivna rešitev ne daje le 74% pravilnih odgovorov v javnosti, ampak tudi nekaj zagona v Data Science. Najbolj radovedni mi lahko kadarkoli pišete v zasebna sporočila in postavite vprašanje. Hvala vsem!

Vir: www.habr.com

Dodaj komentar