Tavs pirmais solis Data Science. Titāniks

Neliels ievada vārds

Es uzskatu, ka mēs varētu paveikt daudz vairāk, ja mums tiktu sniegtas soli pa solim instrukcijas, kas pateiks, kas un kā jādara. Es pats atceros savas dzÄ«ves brīžus, kad nevarēju sākt kādu projektu, jo bija vienkārÅ”i grÅ«ti saprast, no kā sākt. VarbÅ«t kādreiz senos laikos tu internetā redzēji vārdus "Data Science" un domāji, ka tas ir tālu no tevis, bet cilvēki, kas ar to nodarbojas, ir tepat, blakus. Un, iespējams, pateicoties cilvēkiem Å”ajā nozarē, tev pēdējā laikā tika ieteikta Ŕī raksts. Ir daudz kursu, kas palÄ«dzēs tev apgÅ«t Å”o amatu, un Å”eit es palÄ«dzēŔu tev spert pirmo soli.

Nu, vai tu esi gatavs? Uzreiz saku, ka tev bÅ«s jāzina Python 3, jo to es Å”eit lietoÅ”u. Iesaku iepriekÅ” instalēt Jupyter Notebook vai noskatÄ«ties, kā izmantot Google Colab.

Pirmais solis

Tavs pirmais solis Data Science. Titāniks

Kaggle ir tavs nozÄ«mÄ«gs palÄ«gs Å”ajā lietā. Principā var iztikt arÄ« bez tā, bet par to es runāŔu citā rakstā. Tas ir tāda platforma, kur norisinās Data Science sacensÄ«bas. Katram Ŕādam konkursam agrÄ«najos posmos tu iegÅ«si neticamu pieredzi dažādu uzdevumu risināŔanā, izstrādē un komandā strādāŔanā, kas mÅ«sdienās ir svarÄ«gi.

MÅ«su uzdevums tiks ņemts no turienes. Tas tā saucas: "Titāniks". NosacÄ«jums ir Ŕāds: jāprognozē, vai izdzÄ«vos katrs atseviŔķs cilvēks. VispārÄ«gi runājot, cilvēka, kas nodarbojas ar DS, uzdevums ir datu vākÅ”ana, to apstrāde, modeļa apmācÄ«ba, prognozēŔana un tā tālāk. Kaggle mums ļauj izlaist datu vākÅ”anas posmu — tie ir pieejami platformā. Mums ir jāielādē tie un varam sākt darbu!

To var izdarīt Ŕādā veidā:

datņu cilnē Data ir faili, kuros ir dati

Tavs pirmais solis Data Science. Titāniks

Tavs pirmais solis Data Science. Titāniks

Ielādējām datus, sagatavojām mÅ«su Jupyter piezÄ«mju grāmatiņas un…

Otrais solis

Kā mums tagad ielādēt Å”os datus?

Vispirms importējam nepiecieÅ”amās bibliotēkas:

import pandas as pd
import numpy as np

Pandas ļaus mums ielādēt .csv failus turpmākai apstrādei.

Numpy nepiecieÅ”ams, lai attēlotu mÅ«su datu tabulu kā skaitļu matricu.
Turpinām. Paņemsim failu train.csv un ielādēsim to pie mums:

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

Mēs atsauksimies uz mūsu datu kopu train.csv caur mainīgo dataset. Apskatīsim, kas tur atrodas:

dataset.head()

Tavs pirmais solis Data Science. Titāniks

Funkcija head() ļauj mums apskatīt pirmās dažas rindas datu ietvarā.

Kolonna Survived ir tieŔi mūsu rezultāti, kas Ŕajā datu ietvarā ir zināmi. Mūsu uzdevumā ir jāpārprot kolonna Survived datiem test.csv. Šajos datos ir informācija par citiem Titānika pasažieriem, kuru iznākumi mums, uzdevuma risinātājiem, nav zināmi.

Tātad, sadalÄ«sim mÅ«su tabulu atkarÄ«gajās un neatkarÄ«gajās datu grupās. Å eit viss ir vienkārÅ”i. AtkarÄ«gie dati ir tie, kas ir atkarÄ«gi no neatkarÄ«giem, proti, tie, kas atrodas iznākumos. NeatkarÄ«gie dati ir tie, kas ietekmē iznākumu.

Piemēram, mums ir Ŕāds datu kopums:

Ā«Vova mācÄ«jās informātiku — nē.
Vova saņēma 2 par informātiku.Ā»

Vērtējums par informātiku ir atkarīgs no atbildes uz jautājumu: vai Vova mācījās informātiku? Skaidrs? Virzāmies tālāk, mēs jau tuvu mērķim!

Tradicionālais mainÄ«gais neatkarÄ«gajiem datiem ir X. AtkarÄ«gajiem — y.

Veicam sekojoŔo:

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

Kas tas ir? Ar funkciju iloc[:, 2: ] mēs sakām Pythonam: vēlos redzēt mainīgajā X datus, sākot no otrā kolonnas (ieskaitot, ja saskaitām no nulles). Otrajā rindā sakām, ka vēlamies redzēt y datus pirmajā kolonnā.

[ a:b, c:d ] — Ŕī ir konstrukcija, kuru mēs izmantojam iekavās. Ja neliekam kādas mainÄ«gās, tās tiks saglabātas noklusējuma. Tātad mēs varam norādÄ«t [:,: d] un tad mēs iegÅ«sim datu ietvarā visus kolonnas, izņemot tās, kas sākas no d numura un tālāk. MainÄ«gie a un b nosaka rindas, bet tās mums visas ir nepiecieÅ”amas, tādēļ atstāsim to noklusēto.

Apskatīsim, ko mēs ieguvām:

X.head()

Tavs pirmais solis Data Science. Titāniks

y.head()

Tavs pirmais solis Data Science. Titāniks

Lai atvieglotu Å”o nelielo mācÄ«bu, mēs izdzēsÄ«sim kolonnas, kurām nepiecieÅ”ama Ä«paÅ”a Ā«apkopeĀ», vai tās vispār neietekmē izdzÄ«voÅ”anu. Tajās ir dati, kas ir tipa str.

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

Super! Dodamies uz nākamo soli.

TreŔais solis

Å eit mums bÅ«s jākodē mÅ«su dati, lai maŔīna labāk izprastu, kā Å”ie dati ietekmē rezultātu. Bet kodēsim ne visus, bet tikai datus, kas ir tipa str, kurus atstājām. Kolonna "Sex". Kā mēs vēlamies kodēt? Iedomāsimies, ka personas dzimuma dati ir attēloti vektorā: 10 — vÄ«riŔķais dzimums, 01 — sieviŔķais dzimums.

Vispirms mūsu tabulas pārvērtīsim par NumPy matricu:

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

Un tagad paskatīsimies:

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

Bibliotēka sklearn ir tieŔām lieliska bibliotēka, kas ļauj mums veikt visu darbu Data Science. Tajā ir liels skaits interesantu maŔīnmācīŔanās modeļu, kā arÄ« tā ļauj mums nodarboties ar datu sagatavoÅ”anu.

OneHotEncoder ļaus mums kodēt personas dzimumu tādā attēlojumā, kā mēs to aprakstÄ«jām. Tiks radÄ«ti 2 klasifikatori: vÄ«riŔķais, sieviŔķais. Ja persona ir vÄ«rietis, tad kolonnā "vÄ«riŔķais" tiks ierakstÄ«ta 1, bet "sieviŔķais" attiecÄ«gi - 0.

Pēc OneHotEncoder() ir [1] — tas nozÄ«mē, ka vēlamies kodēt kolonnas numuru 1 (skaitīŔana sākas no nulles).

Super. Turpinām vēl tālāk!

Parasti gadās, ka daži dati paliek neizpildÄ«ti (t.i., NaN — not a number). Piemēram, ir informācija par personu: viņa vārds, dzimums. Bet nav datu par viņa vecumu. Šādā gadÄ«jumā pielietosim Ŕādu metodi: atradÄ«sim aritmētisko vidējo visās kolonnās un, ja kādi dati kādā kolonnā ir iztrÅ«kuÅ”i, tad aizpildÄ«sim tukÅ”umu ar aritmētisko vidējo.

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

Un tagad ņemsim vērā, ka var bÅ«t situācijas, kad dati ir ļoti plaÅ”i izkliedēti. Daži dati atrodas intervālā [0:1], bet citi var pārsniegt simtus un tÅ«kstoÅ”us. Lai izslēgtu Ŕādu izkliedi un dators bÅ«tu precÄ«zāks aprēķinos, mēs skalēsim datus, normalizēsim. RādÄ«sim, lai visi skaitļi nepārsniedz trÄ«s. Tam izmantosim funkciju StandartScaler.

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

Tagad mūsu dati izskatās tā:

Tavs pirmais solis Data Science. Titāniks

Klase. Mēs jau esam tuvu mūsu mērķim!

Ceturtā darbība

ApmācÄ«sim mÅ«su pirmo modeli! No sklearn bibliotēkas mēs varam atrast daudzas interesantas lietas. Es piemēroju Å”ai uzdevumam Gradient Boosting Classifier modeli. Mēs izmantojam klasifikatoru, jo mÅ«su uzdevums ir klasifikācijas uzdevums. Mums jāprognozē, vai jāpieŔķir 1 (izdzÄ«vojis) vai 0 (neizdzÄ«vojis).

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

Fit funkcija saka pythonam: ļauj modelim meklēt sakarības starp X un y.

Mazāk nekā sekundes laikā modelis ir gatavs.

Tavs pirmais solis Data Science. Titāniks

Kā to izmantot? Tagad redzēsim!

Piektais solis. Secinājumi

Tagad mums jāielādē tabula ar mÅ«su testdatiem, kuriem jāveic prognoze. Ar Å”o tabulu mēs veiksim visus tos paÅ”us soļus, ko veicām ar X.

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

skaitīt = ['Name', 'Ticket', 'Cabin', 'Embarked']
X_test.drop(skaitīt, 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:])

Piemērosim jau mūsu modeli!

gbc_predict = gbc.predict(X_test)

Viss. Mēs esam izveidojuÅ”i prognozi. Tagad tā jāieraksta csv un jānosÅ«ta uz vietni.

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

Gatavs. IegÅ«ts fails, kas satur prognozes katram pasažierim. Atliek tikai augÅ”upielādēt Ŕīs atbildes vietnē un saņemt prognozes novērtējumu. Šāds primitÄ«vs risinājums sniedz ne tikai 74% pareizu atbilžu publiskajā telpā, bet arÄ« noteiktu grÅ«dienu Data Science jomā. Visinteresantākie var jebkurā laikā uzrakstÄ«t man privātās ziņās un uzdot jautājumu. Paldies visiem!

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster