Ang iyong unang hakbang sa Data Science. Titanic

Isang maikling pambungad na salita

Naniniwala ako na mas marami tayong magagawa kung bibigyan tayo ng sunud-sunod na mga tagubilin na magsasabi sa amin kung ano ang gagawin at kung paano ito gagawin. Naaalala ko mismo ang mga sandali sa aking buhay na hindi ko masimulan ang isang bagay dahil mahirap lang maunawaan kung saan magsisimula. Marahil, minsan sa Internet ay nakita mo ang mga salitang "Data Science" at nagpasya na malayo ka dito, at ang mga taong gumagawa nito ay nasa isang lugar sa labas, sa ibang mundo. Hindi, nandito lang sila. At, marahil, salamat sa mga tao mula sa field na ito, may lumabas na artikulo sa iyong feed. Maraming mga kurso na makakatulong sa iyo na masanay sa craft na ito, ngunit dito tutulungan kitang gawin ang unang hakbang.

Well, handa ka na ba? Hayaan akong sabihin sa iyo kaagad na kailangan mong malaman ang Python 3, dahil iyon ang gagamitin ko dito. Pinapayuhan ko rin kayong i-install ito sa Jupyter Notebook nang maaga o tingnan kung paano gamitin ang google colab.

hakbang One

Ang iyong unang hakbang sa Data Science. Titanic

Si Kaggle ang iyong mahalagang katulong sa bagay na ito. Sa prinsipyo, magagawa mo nang wala ito, ngunit pag-uusapan ko ito sa isa pang artikulo. Ito ay isang platform na nagho-host ng mga kumpetisyon sa Data Science. Sa bawat naturang kumpetisyon, sa mga unang yugto ay makakakuha ka ng hindi makatotohanang dami ng karanasan sa paglutas ng mga problema ng iba't ibang uri, karanasan sa pag-unlad at karanasan sa pagtatrabaho sa isang koponan, na mahalaga sa ating panahon.

Dadalhin namin ang aming gawain mula doon. Ito ay tinatawag na "Titanic". Ang kondisyon ay ito: hulaan kung ang bawat indibidwal na tao ay mabubuhay. Sa pangkalahatan, ang gawain ng isang taong kasangkot sa DS ay ang pagkolekta ng data, pagproseso nito, pagsasanay ng isang modelo, pagtataya, at iba pa. Sa kaggle, pinapayagan kaming laktawan ang yugto ng pagkolekta ng data - ipinakita ang mga ito sa platform. Kailangan nating i-download ang mga ito at makapagsimula na tayo!

Maaari mong gawin ito tulad ng sumusunod:

ang tab na Data ay naglalaman ng mga file na naglalaman ng data

Ang iyong unang hakbang sa Data Science. Titanic

Ang iyong unang hakbang sa Data Science. Titanic

Na-download namin ang data, inihanda ang aming mga Jupyter notebook at...

dalawang hakbang

Paano natin ngayon ilo-load ang data na ito?

Una, i-import natin ang mga kinakailangang aklatan:

import pandas as pd
import numpy as np

Papayagan kami ng mga Panda na mag-download ng mga .csv file para sa karagdagang pagproseso.

Kailangan ang Numpy upang kumatawan sa aming talahanayan ng data bilang isang matrix na may mga numero.
Sige lang. Kunin natin ang file na train.csv at i-upload ito sa amin:

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

Magre-refer kami sa aming pagpili ng data ng train.csv sa pamamagitan ng variable ng dataset. Tingnan natin kung ano ang mayroon:

dataset.head()

Ang iyong unang hakbang sa Data Science. Titanic

Ang head() function ay nagbibigay-daan sa amin na tingnan ang unang ilang row ng isang dataframe.

Ang mga Survived column ay tiyak ang aming mga resulta, na kilala sa dataframe na ito. Para sa tanong sa gawain, kailangan nating hulaan ang Survived column para sa test.csv data. Ang data na ito ay nag-iimbak ng impormasyon tungkol sa iba pang mga pasahero ng Titanic, kung saan namin, paglutas ng problema, ay hindi alam ang kinalabasan.

Kaya, hatiin natin ang aming talahanayan sa umaasa at malayang data. Simple lang ang lahat dito. Ang nakadependeng data ay ang mga datos na nakadepende sa independiyenteng data na nasa mga kinalabasan. Ang independiyenteng data ay ang mga datos na nakakaimpluwensya sa kinalabasan.

Halimbawa, mayroon kaming sumusunod na set ng data:

"Nagturo si Vova ng computer science - hindi.
Nakatanggap si Vova ng 2 sa computer science.

Ang grado sa computer science ay nakasalalay sa sagot sa tanong: nag-aral ba si Vova ng computer science? Malinaw ba? Let's move on, malapit na tayo sa goal!

Ang tradisyonal na variable para sa independent data ay X. Para sa dependent data, y.

Ginagawa namin ang sumusunod:

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

Ano ito? Gamit ang function na iloc[:, 2: ] sinasabi namin sa Python: Gusto kong makita sa variable X ang data na nagsisimula sa pangalawang column (kasama at sa kondisyon na ang pagbibilang ay nagsisimula sa zero). Sa pangalawang linya sinasabi namin na gusto naming makita ang data sa unang column.

Ang [ a:b, c:d ] ay ang pagbuo ng kung ano ang ginagamit natin sa mga panaklong. Kung hindi ka tumukoy ng anumang mga variable, mase-save ang mga ito bilang default. Iyon ay, maaari nating tukuyin ang [:,: d] at pagkatapos ay makukuha natin ang lahat ng mga column sa dataframe, maliban sa mga napupunta mula sa numero d pataas. Ang mga variable na a at b ay tumutukoy sa mga string, ngunit kailangan namin silang lahat, kaya iniwan namin ito bilang default.

Tingnan natin kung ano ang nakuha natin:

X.head()

Ang iyong unang hakbang sa Data Science. Titanic

y.head()

Ang iyong unang hakbang sa Data Science. Titanic

Upang pasimplehin ang munting aral na ito, aalisin namin ang mga column na nangangailangan ng espesyal na pangangalaga o hindi talaga makakaapekto sa survivability. Naglalaman ang mga ito ng data ng uri str.

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

Super! Lumipat tayo sa susunod na hakbang.

Hakbang Tatlong

Dito kailangan naming i-encode ang aming data upang mas maunawaan ng makina kung paano nakakaapekto ang data na ito sa resulta. Ngunit hindi namin i-encode ang lahat, ngunit ang str data lamang na iniwan namin. Column na "Sex". Paano natin gustong mag-code? Katawanin natin ang data tungkol sa kasarian ng isang tao bilang isang vector: 10 - lalaki, 01 - babae.

Una, i-convert natin ang ating mga talahanayan sa isang NumPy matrix:

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

At ngayon tingnan natin:

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

Ang sklearn library ay isang cool na library na nagbibigay-daan sa amin na gumawa ng kumpletong trabaho sa Data Science. Naglalaman ito ng malaking bilang ng mga kawili-wiling modelo ng machine learning at nagbibigay-daan din sa amin na maghanda ng data.

Papayagan kami ng OneHotEncoder na i-encode ang kasarian ng isang tao sa representasyong iyon, gaya ng inilarawan namin. 2 klase ang gagawin: lalaki, babae. Kung ang isang tao ay lalaki, 1 ang isusulat sa column na "lalaki", at 0 sa column na "babae", ayon sa pagkakabanggit.

Pagkatapos ng OneHotEncoder() mayroong [1] - nangangahulugan ito na gusto naming i-encode ang column number 1 (nagbibilang mula sa zero).

Super. Umusog pa tayo!

Bilang isang patakaran, nangyayari ito na ang ilang data ay naiwang blangko (iyon ay, NaN - hindi isang numero). Halimbawa, mayroong impormasyon tungkol sa isang tao: ang kanyang pangalan, kasarian. Ngunit walang impormasyon tungkol sa kanyang edad. Sa kasong ito, ilalapat namin ang sumusunod na pamamaraan: mahahanap namin ang ibig sabihin ng aritmetika sa lahat ng mga haligi at, kung may nawawalang data sa hanay, pupunuin namin ang walang bisa ng ibig sabihin ng arithmetic.

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

Ngayon ay isaalang-alang natin na ang mga sitwasyon ay nangyayari kapag ang data ay napakalaki. Ang ilang data ay nasa pagitan [0:1], habang ang ilan ay maaaring lumampas sa daan-daan at libu-libo. Upang maalis ang naturang scatter at gawing mas tumpak ang computer sa mga kalkulasyon nito, i-scan namin ang data at sukatin ito. Hayaan ang lahat ng mga numero na hindi lalampas sa tatlo. Upang gawin ito, gagamitin namin ang StandardScaler function.

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

Ngayon ang aming data ay ganito ang hitsura:

Ang iyong unang hakbang sa Data Science. Titanic

Klase. Malapit na kami sa aming layunin!

Ikaapat na hakbang

Sanayin natin ang ating unang modelo! Mula sa library ng sklearn mahahanap namin ang isang malaking bilang ng mga kagiliw-giliw na bagay. Inilapat ko ang modelong Gradient Boosting Classifier sa problemang ito. Gumagamit kami ng A classifier dahil ang aming gawain ay isang gawain sa pag-uuri. Ang pagbabala ay dapat italaga sa 1 (nakaligtas) o 0 (hindi nakaligtas).

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

Ang fit function ay nagsasabi sa Python: Hayaang maghanap ang modelo ng mga dependency sa pagitan ng X at y.

Wala pang isang segundo at handa na ang modelo.

Ang iyong unang hakbang sa Data Science. Titanic

Paano ito ilapat? Tingnan natin ngayon!

Ikalimang hakbang. Konklusyon

Ngayon ay kailangan naming mag-load ng talahanayan ng aming data ng pagsubok kung saan kailangan naming gumawa ng hula. Sa talahanayang ito gagawin namin ang lahat ng parehong aksyon na ginawa namin para sa 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:])

Ilapat natin ang ating modelo ngayon!

gbc_predict = gbc.predict(X_test)

Lahat. Gumawa kami ng forecast. Ngayon ay kailangan itong maitala sa csv at ipadala sa website.

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

handa na. Nakatanggap kami ng file na naglalaman ng mga hula para sa bawat pasahero. Ang natitira na lang ay i-upload ang mga solusyong ito sa website at makakuha ng pagtatasa ng hula. Ang nasabing primitive na solusyon ay hindi lamang nagbibigay ng 74% ng mga tamang sagot sa publiko, kundi pati na rin ng ilang impetus sa Data Science. Ang pinaka-curious ay maaaring sumulat sa akin sa mga pribadong mensahe anumang oras at magtanong. Salamat sa lahat!

Pinagmulan: www.habr.com

Magdagdag ng komento