Vaš prvi korak u nauci o podacima. Titanic

Kratka uvodna riječ

Vjerujem da bismo mogli učiniti više stvari kada bismo dobili uputstva korak po korak koja bi nam govorila šta i kako da radimo. I sama se sjećam trenutaka u svom životu kada nisam mogla nešto započeti jer je jednostavno bilo teško razumjeti odakle da počnem. Možda ste jednom davno na internetu vidjeli riječi „Nauka o podacima“ i zaključili da ste daleko od ovoga, a ljudi koji to rade su negdje tamo, u drugom svijetu. Ne, tu su. I, možda, zahvaljujući ljudima iz ove oblasti, na vašem feedu se pojavio članak. Postoji mnogo kurseva koji će vam pomoći da se naviknete na ovaj zanat, ali ovdje ću vam pomoći da napravite prvi korak.

Pa, jeste li spremni? Odmah da vam kažem da ćete morati da poznajete Python 3, pošto ću to ovde koristiti. Takođe vam savetujem da ga unapred instalirate na Jupyter Notebook ili da vidite kako da koristite google colab.

Korak jedan

Vaš prvi korak u nauci o podacima. Titanic

Kaggle je vaš značajan pomoćnik u ovoj stvari. U principu, možete i bez toga, ali o tome ću govoriti u drugom članku. Ovo je platforma koja ugošćuje takmičenja u nauci o podacima. U svakom ovakvom takmičenju, u ranim fazama steći ćete nerealno iskustvo u rješavanju problema raznih vrsta, razvojno iskustvo i iskustvo rada u timu, što je važno u današnje vrijeme.

Odatle ćemo preuzeti naš zadatak. Zove se "Titanik". Uslov je sljedeći: predvidite da li će svaka pojedinačna osoba preživjeti. Uopšteno govoreći, zadatak osobe koja je uključena u DS je prikupljanje podataka, njihova obrada, obučavanje modela, predviđanje i tako dalje. U kaggleu nam je dozvoljeno da preskočimo fazu prikupljanja podataka - oni su predstavljeni na platformi. Moramo ih preuzeti i možemo početi!

To možete učiniti na sledeći način:

kartica Podaci sadrži datoteke koje sadrže podatke

Vaš prvi korak u nauci o podacima. Titanic

Vaš prvi korak u nauci o podacima. Titanic

Skinuli smo podatke, pripremili naše Jupyter sveske i...

Drugi korak

Kako sada učitati ove podatke?

Prvo, uvezimo potrebne biblioteke:

import pandas as pd
import numpy as np

Pandas će nam omogućiti preuzimanje .csv datoteka za dalju obradu.

Numpy je potreban da predstavi našu tablicu podataka kao matricu s brojevima.
Nastavi. Uzmimo datoteku train.csv i prenesite nam je:

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

Mi ćemo se pozvati na naš odabir podataka train.csv kroz varijablu skupa podataka. Da vidimo šta ima:

dataset.head()

Vaš prvi korak u nauci o podacima. Titanic

Funkcija head() omogućava nam da pogledamo prvih nekoliko redova okvira podataka.

Preživjeli stupci su upravo naši rezultati, koji su poznati u ovom okviru podataka. Za pitanje zadatka, moramo predvidjeti kolonu Preživjeli za test.csv podatke. Ovi podaci pohranjuju informacije o drugim putnicima Titanica, za koje mi, rješavajući problem, ne znamo ishod.

Dakle, podijelimo našu tablicu na zavisne i nezavisne podatke. Ovdje je sve jednostavno. Zavisni podaci su oni podaci koji zavise od nezavisnih podataka koji se nalaze u ishodima. Nezavisni podaci su oni podaci koji utiču na ishod.

Na primjer, imamo sljedeći skup podataka:

“Vova je predavao informatiku – ne.
Vova je dobio 2 iz informatike.”

Ocena iz informatike zavisi od odgovora na pitanje: da li je Vova studirao informatiku? Je li jasno? Idemo dalje, već smo bliže cilju!

Tradicionalna varijabla za nezavisne podatke je X. Za zavisne podatke, y.

Mi radimo sledeće:

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

Šta je to? Sa funkcijom iloc[:, 2: ] kažemo Pythonu: Želim da vidim u varijabli X podatke koji počinju od druge kolone (uključivo i pod uslovom da brojanje počinje od nule). U drugom redu kažemo da želimo vidjeti podatke u prvoj koloni.

[a:b, c:d] je konstrukcija onoga što koristimo u zagradama. Ako ne navedete nijednu varijablu, one će biti sačuvane kao zadane. To jest, možemo specificirati [:,: d] i tada ćemo dobiti sve kolone u okviru podataka, osim onih koji idu od broja d nadalje. Varijable a i b definiraju nizove, ali su nam sve potrebne, pa ovo ostavljamo kao zadano.

Da vidimo šta smo dobili:

X.head()

Vaš prvi korak u nauci o podacima. Titanic

y.head()

Vaš prvi korak u nauci o podacima. Titanic

Kako bismo pojednostavili ovu malu lekciju, uklonit ćemo stupce koji zahtijevaju posebnu njegu ili uopće ne utiču na preživljavanje. Sadrže podatke tipa str.

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

Super! Idemo na sljedeći korak.

Korak tri

Ovdje moramo kodirati naše podatke kako bi mašina bolje razumjela kako ti podaci utječu na rezultat. Ali nećemo kodirati sve, već samo str podatke koje smo ostavili. Kolona "Seks". Kako želimo kodirati? Podatke o polu osobe predstavimo kao vektor: 10 - muško, 01 - žensko.

Prvo, pretvorimo naše tablice u NumPy matricu:

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

A sada pogledajmo:

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

Sklearn biblioteka je tako kul biblioteka koja nam omogućava da obavimo kompletan posao u nauci o podacima. Sadrži veliki broj zanimljivih modela mašinskog učenja i takođe nam omogućava pripremu podataka.

OneHotEncoder će nam omogućiti da kodiramo spol osobe u toj reprezentaciji, kao što smo opisali. Stvoriće se 2 razreda: muško, žensko. Ako je osoba muškarac, tada će 1 biti upisano u kolonu „muško“, a 0 u kolonu „žensko“.

Nakon OneHotEncoder() postoji [1] - to znači da želimo da kodiramo kolonu broj 1 (računajući od nule).

Super. Idemo još dalje!

Po pravilu, to se dešava da neki podaci ostanu prazni (odnosno, NaN - ne broj). Na primjer, postoje informacije o osobi: njegovo ime, spol. Ali nema podataka o njegovim godinama. U ovom slučaju ćemo primijeniti sljedeću metodu: pronaći ćemo aritmetičku sredinu nad svim stupcima i, ako neki podaci nedostaju u koloni, onda ćemo prazninu popuniti aritmetičkom sredinom.

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

Sada uzmimo u obzir da se situacije dešavaju kada su podaci veoma veliki. Neki podaci su u intervalu [0:1], dok neki mogu prelaziti stotine i hiljade. Da bismo eliminisali takvo rasipanje i da bi računar bio precizniji u svojim proračunima, skeniraćemo podatke i skalirati ih. Neka svi brojevi ne prelaze tri. Da bismo to učinili, koristit ćemo funkciju StandardScaler.

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

Sada naši podaci izgledaju ovako:

Vaš prvi korak u nauci o podacima. Titanic

Klasa. Već smo blizu našeg cilja!

Četvrti korak

Trenirajmo naš prvi model! Iz sklearn biblioteke možemo pronaći ogroman broj zanimljivih stvari. Na ovaj problem sam primijenio model Gradient Boosting Classifier. Koristimo A klasifikator jer je naš zadatak zadatak klasifikacije. Prognozu treba dodijeliti 1 (preživio) ili 0 (nije preživio).

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

Funkcija uklapanja govori Pythonu: Neka model traži zavisnosti između X i y.

Manje od sekunde i model je spreman.

Vaš prvi korak u nauci o podacima. Titanic

Kako ga primijeniti? Sad ćemo vidjeti!

Korak peti. Zaključak

Sada treba da učitamo tabelu sa našim test podacima za koje treba da napravimo prognozu. Sa ovom tablicom ćemo uraditi sve iste radnje koje smo uradili 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:])

Primijenimo sada naš model!

gbc_predict = gbc.predict(X_test)

Sve. Napravili smo prognozu. Sada ga treba snimiti u csv i poslati na web stranicu.

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

Spreman. Dobili smo fajl koji sadrži predviđanja za svakog putnika. Ostaje samo da ova rješenja učitate na web stranicu i dobijete procjenu prognoze. Ovakvo primitivno rješenje daje ne samo 74% tačnih odgovora u javnosti, već i određeni zamah u Data Science. Najradoznaliji mogu mi u svakom trenutku pisati u privatne poruke i postaviti pitanje. Hvala svima!

izvor: www.habr.com

Dodajte komentar