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

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


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

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() 
y.head() 
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Ä:

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.

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
