Ett kort introduktionsord
Jag anser att vi skulle kunna genomföra fler uppgifter om vi fick steg-för-steg-instruktioner som skapar en klar vÀg för vad och hur man ska göra. Jag sjÀlv minns situationer i mitt liv dÀr jag inte kunde komma igÄng med ett projekt eftersom det var svÄrt att förstÄ var jag skulle börja. Kanske sÄg du för lÀnge sedan ordet "Data Science" pÄ internet och tÀnkte att det lÄg lÄngt borta för dig, och att de som arbetar med det Àr nÄgonstans i en annan vÀrld. Men de Àr faktiskt hÀr. Och kanske har en artikel frÄn detta omrÄde dykt upp i ditt flöde tack vare dessa personer. Det finns gott om kurser som kan hjÀlpa dig att lÀra dig detta hantverk. HÀr kommer jag att hjÀlpa dig att ta ditt första steg.
Ăr du redo? Jag sĂ€ger direkt att du behöver kunna Python 3, eftersom jag kommer att anvĂ€nda det hĂ€r. Jag rekommenderar ocksĂ„ att du installerar Jupyter Notebook i förvĂ€g, eller kollar hur man anvĂ€nder Google Colab.
Steg ett

Kaggle Àr din stora hjÀlp i detta avseende. I princip kan man klara sig utan det, men jag kommer att berÀtta mer om det i en annan artikel. Det Àr en plattform dÀr tÀvlingar i Data Science hÄlls. I varje tÀvling kommer du i början att fÄ en enorm mÀngd erfarenhet av att lösa olika typer av problem, utveckla appar och arbeta i team, vilket Àr viktigt idag.
Vi tar vĂ„r uppgift dĂ€rifrĂ„n. Den heter: "Titanic". Villkoret Ă€r följande: förutsĂ€ga om varje individ överlever. Generellt sett handlar arbetet för nĂ„gon som sysslar med DS, om att samla in data, bearbeta data, trĂ€na en modell, göra prognoser och sĂ„ vidare. PĂ„ Kaggle fĂ„r vi möjlighet att hoppa över datainsamlingssteget â de finns redan pĂ„ plattformen. Vi behöver bara ladda ner dem och sedan kan vi börja arbeta!
Det kan göras pÄ följande sÀtt:
i fliken Data finns filerna som innehÄller data


Vi har laddat ner data, förberett vÄra Jupyter-notebookar och...
Steg tvÄ
Hur laddar vi nu ner dessa data?
För det första importerar vi de nödvÀndiga biblioteken:
import pandas as pd
import numpy as np
Pandas lÄter oss ladda ner .csv-filer för vidare bearbetning.
Numpy behövs för att representera vÄr datatabell som en matris med siffror.
LÄt oss gÄ vidare. Vi tar filen train.csv och laddar den till oss:
dataset = pd.read_csv('train.csv')
Vi kommer att referera till vÄrt dataset train.csv genom variabeln dataset. LÄt oss se vad som finns dÀr:
dataset.head()

Funktionen head() lÄter oss se de första raderna av dataramen.
Kolumnen Survived Àr vÄra resultat som Àr kÀnda i denna dataram. I uppgiften behöver vi förutsÀga kolumnen Survived för data test.csv. Dessa data innehÄller information om andra passagerare pÄ Titanic, vars utfall Àr okÀnda för oss som löser uppgiften.
SÄ, vi delar upp vÄr tabell i beroende och oberoende data. HÀr Àr det enkelt. Beroende data Àr de data som beror pÄ oberoende, det som finns i resultaten. Oberoende data Àr de data som pÄverkar utfallet.
Till exempel har vi följande dataset:
«Vova studerade datavetenskap â nej.
Vova fick 2 i datavetenskap.»
Betyget i datavetenskap beror pÄ svaret pÄ frÄgan: studerade Vova datavetenskap? Klart? LÄt oss gÄ vidare, vi Àr nu nÀrmare mÄlet!
Den traditionella variabeln för oberoende data Àr X. För beroende data Àr det y.
Vi gör följande:
X = dataset.iloc[ : , 2 : ]
y = dataset.iloc[ : , 1 : 2 ]
Vad Àr detta? Med funktionen iloc[:, 2: ] sÀger vi till Python: jag vill se i variabeln X de data som börjar frÄn den andra kolumnen (inklusive och under förutsÀttning att rÀkningen börjar frÄn noll). I den andra raden sÀger vi att vi vill se i y de data frÄn den första kolumnen.
[ a:b, c:d ] â detta Ă€r konstruktionen som vi anvĂ€nder inom parenteserna. Om ingen variabel anges kommer de att behĂ„llas som standard. Det vill sĂ€ga att vi kan ange [:,: d] sĂ„ fĂ„r vi alla kolumner i dataramen, förutom de som börjar med nummer d och framĂ„t. Variablerna a och b definierar raderna, men vi behöver alla, sĂ„ vi lĂ€mnar det som standard.
LÄt oss se vad vi har fÄtt:
X.head() 
y.head() 
För att förenkla denna lilla lektion kommer vi att ta bort kolumner som krÀver sÀrskild "vÄrd", eller som helt enkelt inte pÄverkar överlevnaden. De innehÄller data av typen str.
count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X.drop(count, inplace=True, axis=1)
Super! Vi gÄr vidare till nÀsta steg.
Steg tre
HĂ€r kommer vi att behöva koda vĂ„ra data sĂ„ att maskinen bĂ€ttre förstĂ„r hur dessa data pĂ„verkar resultatet. Men vi ska bara koda vissa data, nĂ€mligen typ str som vi har lĂ€mnat. Kolumnen "Sex". Hur vill vi koda? Vi förestĂ€ller oss uppgifterna om en persons kön som en vektor: 10 â manligt, 01 â kvinnligt.
För att börja kommer vi att översÀtta vÄra tabeller till en NumPy-matris:
X = np.array(X)
y = np.array(y)
Och nu kollar vi:
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))
Biblioteket sklearn Àr ett riktigt hÀftigt bibliotek som lÄter oss genomföra hela arbetet inom Data Science. Det innehÄller ett stort antal intressanta modeller för maskininlÀrning och lÄter oss dessutom förbereda data.
OneHotEncoder kommer att lĂ„ta oss koda könet pĂ„ personen i den representation vi har beskrivit. TvĂ„ klasser kommer att skapas: manlig och kvinnlig. Om personen Ă€r en man, kommer 1 att skrivas i kolumnen âmanligâ och 0 i âkvinnligâ.
Efter OneHotEncoder() stĂ„r [1] â det betyder att vi vill koda kolumn nummer 1 (rĂ€knat frĂ„n noll).
Bra. LÄt oss gÄ vidare!
Som regel hĂ€nder det att vissa data förblir ofyllda (dvs NaN â not a number). Till exempel finns det information om en person: hans namn, kön. Men vi har ingen information om hans Ă„lder. I sĂ„dana fall kommer vi att anvĂ€nda följande metod: vi hittar medelvĂ€rdet för alla kolumner och om nĂ„gra data saknas i en kolumn, sĂ„ fyller vi tomrummet med medelvĂ€rdet.
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X)
X = imputer.transform(X)
Och nu tar vi hÀnsyn till att det finns situationer dÀr data Àr mycket spridda. Vissa data ligger inom intervallet [0:1], medan andra kan gÄ över hundratals och tusentals. För att utesluta sÄdana spridningar och för att datorn ska vara mer exakt i berÀkningarna, kommer vi att skala datan, normalisera den. LÄt alla tal inte överstiga tre. För detta anvÀnder vi funktionen StandardScaler.
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X[:, 2:] = sc.fit_transform(X[:, 2:])
Nu ser vÄra data ut sÄ hÀr:

Bra! Vi Àr redan nÀra vÄrt mÄl!
Tredje steget
LÄt oss trÀna vÄr första modell! I sklearn-biblioteket kan vi hitta en mÀngd intressanta saker. Jag tillÀmpade Gradient Boosting Classifier-modellen för denna uppgift. Vi anvÀnder en klassificerare eftersom vÄr uppgift Àr klassificering. Vi mÄste förutsÀga om det tillhör 1 (överlevde) eller 0 (överkörd).
from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(learning_rate=0.5, max_depth=5, n_estimators=150)
gbc.fit(X, y)
Fit-funktionen talar om för Python: LÄt modellen leta efter samband mellan X och y.
Mindre Àn en sekund och modellen Àr klar.

Hur tillÀmpar vi den? Nu fÄr vi se!
Steg fem. Slutsats
Nu behöver vi ladda upp tabellen med vÄra testdata, för vilka vi mÄste göra en förutsÀgelse. För denna tabell kommer vi att göra samma saker som vi gjorde för 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:])
LÄt oss tillÀmpa vÄr modell!
gbc_predict = gbc.predict(X_test)
Klart. Vi har gjort en förutsÀgelse. Nu mÄste vi skriva den till csv och ladda upp den pÄ webben.
np.savetxt('my_gbc_predict.csv', gbc_predict, delimiter=",", header = 'Survived')
FÀrdigt. Vi har fÄtt en fil som innehÄller förutsÀgelser för varje passagerare. Nu Àr det bara att ladda upp dessa lösningar pÄ webben och fÄ en bedömning av förutsÀgelsen. Denna enkla lösning ger inte bara 74 % korrekta svar pÄ publikens tester, utan ocksÄ en viss kickstart inom Data Science. De mest nyfikna kan nÀr som helst skriva till mig och stÀlla frÄgor. Tack till alla!
KĂ€lla: habr.com
