Твой першы крок у Data Science. Тытанік

Невялікае ўступнае слова

Я лічу, што большую колькасць спраў мы б маглі здзяйсняць, калі б нам давалі пакрокавыя інструкцыі, якія скажуць што і як рабіць. Сам жа прыгадваю ў сваім жыцці такія моманты, калі не мог пачацца нейкую справу з-за таго, што было проста складана зразумець, з чаго трэба пачынаць. Быць можа, калісьці даўно ў інтэрнэце ты ўбачыў словы "Data Science" і вырашыў, што табе да гэтага далёка, а людзі, якія гэтым займаюцца недзе там, у іншым свеце. Дык не ж, яны прама тут. І, магчыма, дзякуючы людзям з гэтай сферы табе ў стужку патрапіў артыкул. Існуе поўна курсаў, якія дапамогуць табе асвоіцца з гэтым рамяством, тутака ж я дапамагу табе зрабіць першы крок.

Ну што, ты готаў? Адразу скажу, што табе давядзецца ведаць Python 3, паколькі яго я буду выкарыстоўваць тут. А таксама раю загадзя ўсталяваць на Jupyter Notebook ці паглядзець, як выкарыстоўваць google colab.

крок першы

Твой першы крок у Data Science. Тытанік

Kaggle - твой значны памагаты ў гэтай справе. У прынцыпе, можна і абысціся без яго, але пра гэта я раскажу ў іншым артыкуле. Гэта такая платформа, у якой размяшчаюцца спаборніцтвы па Data Science. У кожным такім спаборніцтве на ранніх этапах ты будзеш атрымліваць нерэальную колькасць досведу рашэння задач рознага роду, досведу распрацоўкі і досведу працы ў камандзе, што важна ў наш час.

Нашу задачу мы возьмем адтуль. Завецца яна так: "Тытанік". Умова такая: спрагназаваць, выжыве кожны асобна ўзяты чалавек. У цэлым кажучы, задача чалавека, які займаецца DS, гэта збор дадзеных, іх апрацоўка, навучанне мадэлі, прагноз і гэтак далей. У kaggle жа нам дазваляюць прапусціць этап збору дадзеных - яны прадстаўлены на платформе. Нам трэба іх загрузіць і можна пачаць працу!

Зрабіць гэта можна наступным чынам:

ва ўкладцы Data размешчаны файлы, у якіх змяшчаюцца дадзеныя

Твой першы крок у Data Science. Тытанік

Твой першы крок у Data Science. Тытанік

Загрузілі дадзеныя, падрыхтавалі нашы Jupyter сшыткі і…

крок другі

Як нам зараз загрузіць гэтыя дадзеныя?

Па-першае, імпартуем неабходныя бібліятэкі:

import pandas as pd
import numpy as np

Pandas дазволіць нам загрузіць .csv файлы для далейшай апрацоўкі.

Numpy патрэбен для таго, каб прадставіць нашу табліцу дадзеных у выглядзе матрыцы з лікамі.
Ідзем далей. Возьмем файл train.csv і загрузім яго да нас:

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

Мы будзем спасылацца да нашай выбарцы train.csv дадзеных праз зменную dataset. Давайце зірнем, што там знаходзіцца:

dataset.head()

Твой першы крок у Data Science. Тытанік

Функцыя head() дазваляе нам прагледзець першыя некалькі радкоў датафрэйма.

Слупкі Survived - гэта, як раз, нашы вынікі, якія ў гэтым датафрэйме вядомыя. Па пытанні задачы нам трэба прадказаць слупок Survived для дадзеных test.csv. У гэтых дадзеных захоўваецца інфармацыя аб іншых пасажырах Тытаніка, для якіх нам, вырашальным задачу, невядомыя зыходы.

Такім чынам, падзелім нашу табліцу на залежныя і незалежныя даныя. Тут усё проста. Залежныя дадзеныя - гэта тыя дадзеныя, якія залежаць ад незалежных тое, што знаходзіцца ў зыходах. Незалежныя дадзеныя - гэта тыя дадзеныя, якія ўплываюць на зыход.

Напрыклад, у нас ёсць такі набор дадзеных:

«Вова вучыў інфарматыку - не.
Вова атрымаў па інфарматыцы 2.»

Ацэнка па інфарматыцы залежыць ад адказу на пытанне: ці вучыў Вова інфарматыку? Ясненька? Рухаемся далей, мы ўжо бліжэй да мэты!

Традыцыйная зменная для незалежных дадзеных - Х. Для залежных - у.

Які робіцца наступнае:

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

Што гэта такое? Функцыяй iloc[:, 2: ] мы кажам пітону: жадаю бачыць у зменнай Х дадзеныя, якія пачынаюцца з другой слупка (уключна і пры ўмове, што рахунак пачынаецца з нуля). У другім радку які гаворыцца, што жадаем бачыць у ў дадзеныя першага слупка.

[ a:b, c:d ] - гэта канструкцыя таго, што мы выкарыстоўваем у дужках. Калі не ўказваць нейкія зменныя, то яны будуць захоўвацца дэфолтнымі. Гэта значыць, мы можам паказаць [:,:d] і тады мы атрымаем у датафрэйме ўсе слупкі, акрамя тых, якія ідуць, пачынальна з нумара d і далей. Пераменныя a і b вызначаюць радкі, але яны нам усё патрэбныя, таму гэта пакідаем дэфолтным.

Паглядзім, што ў нас выйшла:

X.head()

Твой першы крок у Data Science. Тытанік

y.head()

Твой першы крок у Data Science. Тытанік

Для таго, каб спрасціць гэты невялікі ўрок, мы выдалім слупкі, якія патрабуюць асаблівага "догляду", або наогул не ўплываюць на выжывальнасць. У іх змяшчаюцца дадзеныя тыпу str.

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

Супер! Ідзем да наступнага кроку.

крок трэці

Тут нам запатрабуецца закадзіраваць нашы дадзеныя, каб машына лепш разумела, як гэтыя дадзеныя ўплываюць на вынік. Але кадзіраваць будзем не ўсё, а толькі дадзеныя тыпу str, якія мы пакінулі. Стоўбец "Sex". Як мы хочам закадзіраваць? Прадстаўляльны дадзеныя аб полі чалавека вектарам: 10 - мужчынскі пол, 01 - жаночы пол.

Для пачатку нашы табліцы перавядзем у матрыцу NumPy:

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

А зараз глядзім:

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 - гэта такая крутая бібліятэка, якая дазваляе нам праводзіць поўную працу ў Data Science. Яна змяшчае вялікую колькасць цікавых мадэляў машыннага навучання, а таксама дазваляе нам заняцца падрыхтоўкай даных.

OneHotEncoder дазволіць нам закадаваць падлогу чалавека ў тым уяўленні, як мы і апісалі. Будзе створана 2 класы: мужчынскі, жаночы. Калі чалавек - мужчына, то ў слупок "мужчынскі" будзе запісана 1, а ў "жаночы", адпаведна, 0.

Пасля OneHotEncoder() варта [1] — гэта значыць, што жадаем закадаваць слупок нумар 1 (рахунак з нуля).

Супер. Рухаемся яшчэ далей!

Як правіла, такое здараецца, што некаторыя дадзеныя застаюцца незапоўненымі (гэта значыць NaN – not a number). Напрыклад, ёсць інфармацыя аб чалавеку: яго імя, пол. А вось звестак аб яго ўзросце няма. У такім выпадку мы прымянім такі метад: знойдзем сярэдняе арыфметычнае па ўсіх слупках і, калі дадзеныя нейкія ў слупку прапушчаны, то запоўнім пустэчу сярэднім арыфметычным.

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

А зараз возьмем у рахунак, што здараюцца такія сітуацыі, калі дадзеныя вельмі моцна разросаныя. Нейкія дадзеныя знаходзяцца ў адрэзку [0:1], а нейкія могуць заходзіць за сотні і тысячы. Каб выключыць такі роскід і кампутар быў дакладней у разліках, мы праскалюем дадзеныя, адмаштабуем. Няхай усе лікі не будуць перавышаць трох. Для гэтага скарыстаемся функцыяй StandartScaler.

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

Цяпер нашы дадзеныя выглядаюць так:

Твой першы крок у Data Science. Тытанік

Клас. Мы ўжо блізка да нашай мэты!

Крок чацвёрты

Навучым нашу першую мадэль! З бібліятэкі sklearn мы можам знайсці вялікую колькасць цікавасцяў. Я прымяніў да дадзенай задачы мадэль Gradient Boosting Classifier. A classifier выкарыстоўваем, паколькі наша задача - гэта задача класіфікацыі. Трэба прагноз аднесці да 1 (выжыў) ці 0 (не выжыў).

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

Функцыя fit кажа пітону: Няхай мадэль шукае залежнасці паміж X і у.

Менш секунды і мадэль гатова.

Твой першы крок у Data Science. Тытанік

Як яе прымяніць? Цяпер убачым!

Крок пяты. Заключэнне

Цяпер нам трэба загрузіць табліцу з нашымі тэставымі дадзенымі, для якіх трэба скласці прагноз. З гэтай табліцай праробім усё тыя ж самыя дзеянні, якія мы рабілі для 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:])

Ужыем жа ўжо нашу мадэль!

gbc_predict = gbc.predict(X_test)

Усё. Мы склалі прагноз. Цяпер яго трэба запісаць у csv і адправіць на сайт.

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

Гатова. Атрымалі файл, які змяшчае прадказанні для кожнага пасажыра. Засталося заліць гэтыя рашэнні на сайт і атрымаць адзнаку прагнозу. Такое прымітыўнае рашэнне дае не толькі 74% правільных адказаў на пабліку, але таксама і некаторы штуршок у Data Science. Самыя цікаўныя могуць у любы час напісаць мне ў асабістыя паведамленні і задаць пытанне. Усім дзякуй!

Крыніца: habr.com

Дадаць каментар