Деректер ғылымындағы алғашқы қадамыңыз. Титаник

Қысқаша кіріспе сөз

Егер бізге не істеу керектігін және оны қалай жасау керектігін көрсететін қадамдық нұсқаулар берілсе, біз көп нәрсені жасай аламыз деп ойлаймын. Мен өз өмірімде бір нәрсені бастай алмаған сәттерді есіме түсіремін, өйткені неден бастау керектігін түсіну қиын болды. Мүмкін, бір кездері Интернетте сіз «Data Science» деген сөздерді көріп, сіз бұдан алыс екеніңізді және мұны жасайтын адамдар басқа жерде, басқа әлемде деп шешкен шығарсыз. Жоқ, олар дәл осында. Мүмкін, осы саладағы адамдардың арқасында сіздің арнаңызда мақала пайда болды. Бұл қолөнерге үйренуге көмектесетін көптеген курстар бар, бірақ мен сізге бірінші қадам жасауға көмектесемін.

Ал, дайынсың ба? Сізге Python 3-ті білу керек екенін бірден айтайын, өйткені мен бұл жерде қолданатын боламын. Сондай-ақ, мен оны Jupyter Notebook-ке алдын ала орнатуға кеңес беремін немесе google colab қалай пайдалану керектігін қараңыз.

Бірінші қадам

Деректер ғылымындағы алғашқы қадамыңыз. Титаник

Kaggle - бұл мәселедегі маңызды көмекшіңіз. Негізінде, сіз онсыз жасай аласыз, бірақ мен бұл туралы басқа мақалада айтатын боламын. Бұл Data Science жарыстарын өткізетін платформа. Әрбір осындай жарыста, бастапқы кезеңде сіз әртүрлі сипаттағы мәселелерді шешуде нақты емес тәжірибе, даму тәжірибесі мен командада жұмыс істеу тәжірибесін аласыз, бұл біздің заманымызда маңызды.

Тапсырмамызды сол жерден аламыз. Ол «Титаник» деп аталады. Шарт мынада: әрбір жеке адамның аман қалуын болжау. Жалпы айтқанда, DS-ке қатысатын адамның міндеті деректерді жинау, оны өңдеу, модельді үйрету, болжау және т.б. Kaggle-де бізге деректерді жинау кезеңін өткізіп жіберуге рұқсат етіледі - олар платформада ұсынылған. Біз оларды жүктеп алуымыз керек және біз бастай аламыз!

Мұны төмендегідей орындауға болады:

Деректер қойындысында деректері бар файлдар бар

Деректер ғылымындағы алғашқы қадамыңыз. Титаник

Деректер ғылымындағы алғашқы қадамыңыз. Титаник

Біз деректерді жүктеп, Jupyter жазу кітапшаларын дайындадық және...

Екінші қадам

Енді бұл деректерді қалай жүктейміз?

Алдымен, қажетті кітапханаларды импорттайық:

import pandas as pd
import numpy as np

Pandas бізге әрі қарай өңдеу үшін .csv файлдарын жүктеп алуға мүмкіндік береді.

Numpy біздің деректер кестесін сандары бар матрица ретінде көрсету үшін қажет.
Ілгері жүру. train.csv файлын алып, бізге жүктеп салайық:

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

Деректер жиынтығы айнымалысы арқылы train.csv деректер таңдауымызға сілтеме жасаймыз. Онда не бар екенін көрейік:

dataset.head()

Деректер ғылымындағы алғашқы қадамыңыз. Титаник

head() функциясы деректер фреймінің алғашқы бірнеше жолын қарауға мүмкіндік береді.

Аман қалған бағандар - бұл деректер қорында белгілі біздің нәтижелеріміз. Тапсырма сұрағы үшін test.csv деректері үшін аман қалған бағанын болжауымыз керек. Бұл деректер Титаниктің басқа жолаушылары туралы ақпаратты сақтайды, біз мәселені шешіп, нәтижесін білмейміз.

Сонымен, кестемізді тәуелді және тәуелсіз деректерге бөлейік. Мұнда бәрі қарапайым. Тәуелді деректер - нәтижелердегі тәуелсіз деректерге тәуелді деректер. Тәуелсіз деректер - нәтижеге әсер ететін деректер.

Мысалы, бізде келесі деректер жиынтығы бар:

«Вова информатикадан сабақ берді - жоқ.
Вова информатикадан 2 алды».

Информатикадан баға сұрақтың жауабына байланысты: Вова информатиканы оқыды ма? Түсінікті ме? Әрі қарай жүрейік, біз мақсатқа жақындадық!

Тәуелсіз деректер үшін дәстүрлі айнымалы X болып табылады. Тәуелді деректер үшін y.

Біз келесі әрекеттерді орындаймыз:

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

Бұл не? iloc[:, 2: ] функциясы арқылы біз Python-ға айтамыз: Мен X айнымалысында екінші бағаннан басталатын деректерді көргім келеді (санау нөлден басталатын болса). Екінші жолда біз бірінші бағандағы деректерді көргіміз келетінін айтамыз.

[ a:b, c:d ] - жақшада қолданатын нәрсенің құрылысы. Ешбір айнымалы мәндерді көрсетпесеңіз, олар әдепкі ретінде сақталады. Яғни, біз [:,: d] белгілей аламыз, содан кейін біз d санынан басталатындардан басқа, dataframe ішіндегі барлық бағандарды аламыз. a және b айнымалылары жолдарды анықтайды, бірақ бізге олардың барлығы қажет, сондықтан біз мұны әдепкі ретінде қалдырамыз.

Бізде не бар екенін көрейік:

X.head()

Деректер ғылымындағы алғашқы қадамыңыз. Титаник

y.head()

Деректер ғылымындағы алғашқы қадамыңыз. Титаник

Осы шағын сабақты жеңілдету үшін біз ерекше күтімді қажет ететін немесе өмір сүруге мүлде әсер етпейтін бағандарды алып тастаймыз. Олар str типті деректерден тұрады.

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

Тамаша! Келесі қадамға көшейік.

Үшінші қадам

Бұл жерде құрылғы бұл деректердің нәтижеге қалай әсер ететінін жақсы түсінуі үшін деректерімізді кодтауымыз керек. Бірақ біз бәрін кодтамаймыз, тек біз қалдырған str деректерін ғана кодтаймыз. «Секс» бағанасы. Біз қалай кодтағымыз келеді? Адамның жынысы туралы деректерді вектор ретінде көрсетейік: 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 кітапханасы - бұл деректер ғылымында толық жұмыс істеуге мүмкіндік беретін керемет кітапхана. Ол көптеген қызықты машиналық оқыту үлгілерін қамтиды және бізге деректерді дайындауға мүмкіндік береді.

OneHotEncoder біз сипаттағандай, сол өкілдіктегі адамның жынысын кодтауға мүмкіндік береді. 2 сынып құрылады: ер, әйел. Егер адам ер болса, «ер» бағанында 1, «әйел» бағанында тиісінше 0 жазылады.

OneHotEncoder() параметрінен кейін [1] бар - бұл 1-бағанды ​​кодтауды қалайтынымызды білдіреді (нөлден бастап санау).

Тамаша. Одан да алға жылжайық!

Әдетте, бұл кейбір деректер бос қалдырылады (яғни, NaN - сан емес). Мысалы, адам туралы ақпарат бар: оның аты, жынысы. Бірақ оның жасы туралы мәлімет жоқ. Бұл жағдайда біз келесі әдісті қолданамыз: біз барлық бағандар бойынша орташа арифметикалық мәнді табамыз және егер бағанда кейбір деректер жоқ болса, онда бос орынды орташа арифметикалық мәнмен толтырамыз.

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

Енді деректер өте үлкен болған кезде болатын жағдайларды ескерейік. Кейбір деректер [0:1] аралықта, ал кейбіреулері жүздеген және мыңнан асып кетуі мүмкін. Мұндай шашырауды жою және компьютерді есептеулерінде дәлірек ету үшін біз деректерді сканерлеп, оны масштабтаймыз. Барлық сандар үштен аспасын. Ол үшін StandardScaler функциясын қолданамыз.

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

Енді біздің деректеріміз келесідей:

Деректер ғылымындағы алғашқы қадамыңыз. Титаник

Сынып. Біз мақсатымызға жақындап қалдық!

Төртінші қадам

Бірінші үлгімізді жаттықтырайық! Sklearn кітапханасынан біз көптеген қызықты нәрселерді таба аламыз. Мен бұл мәселеге Gradient Boosting классификатор үлгісін қолдандым. Біз A жіктеуішін пайдаланамыз, себебі біздің тапсырма классификациялық тапсырма болып табылады. Болжам 1 (тірі қалды) немесе 0 (тірі қалмады) деп белгіленуі керек.

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

Fit функциясы Python-ға айтады: Үлгіге X және y арасындағы тәуелділіктерді іздеуге мүмкіндік беріңіз.

Бір секундтан аз уақыт және модель дайын.

Деректер ғылымындағы алғашқы қадамыңыз. Титаник

Оны қалай қолдануға болады? Қазір көреміз!

Бесінші қадам. Қорытынды

Енді біз болжам жасауымыз керек сынақ деректері бар кестені жүктеуіміз керек. Бұл кесте арқылы біз 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 саласында біраз серпін береді. Ең қызық кез келген уақытта маған жеке хабарлама арқылы жазып, сұрақ қоя алады. Барлығыңа Рақмет!

Ақпарат көзі: www.habr.com

пікір қалдыру