Krótka wstępna uwaga
Uważam, że moglibyśmy wykonać znacznie więcej działań, gdyby oferowano nam szczegółowe instrukcje, które wskażą co i jak robić. Sam przypominam sobie w swoim życiu chwile, gdy nie mogłem rozpocząć jakiegoś przedsięwzięcia, ponieważ po prostu trudno było zrozumieć, od czego zacząć. Może kiedyś, dawno temu, w internecie zobaczyłeś słowa „Data Science” i pomyślałeś, że jesteś zbyt daleko od tego, a ludzie zajmujący się tym są gdzie indziej, w innym świecie. Ale nie, oni są tuż obok. I być może dzięki ludziom z tej branży trafiła do ciebie artykuł. Istnieje wiele kursów, które pomogą ci opanować to rzemiosło, a ja tutaj pomogę ci zrobić pierwszy krok.
No to co, jesteś gotowy? Od razu powiem, że musisz znać Pythona 3, ponieważ to go będę tutaj używać. Również zalecam zainstalowanie Jupyter Notebook lub zapoznanie się z używaniem Google Colab wcześniej.
Krok pierwszy

Kaggle to twój znaczący pomocnik w tej sprawie. W zasadzie można by się bez niego obejść, ale o tym opowiem w innym artykule. To platforma, na której odbywają się zawody w Data Science. W każdym z takich zawodów na wczesnych etapach zdobędziesz ogromną ilość doświadczenia w rozwiązywaniu różnych problemów, doświadczenia w rozwoju oraz doświadczenia w pracy zespołowej, co jest ważne w naszych czasach.
Nasze zadanie weźmiemy stamtąd. Nazywa się ono: „Titanic”. Warunek jest taki: przewidzieć, czy każda osoba przeżyje. Ogólnie mówiąc, zadanie dla osoby zajmującej się DS polega na zbieraniu danych, ich przetwarzaniu, uczeniu modelu, prognozowaniu i tak dalej. Na Kaggle pozwalają nam pominąć etap zbierania danych — są one dostępne na platformie. Musimy je załadować i możemy zacząć pracę!
Można to zrobić w następujący sposób:
na zakładce Dane znajdują się pliki, w których zawarte są dane


Załadowaliśmy dane, przygotowaliśmy nasze notatniki Jupyter i…
Krok drugi
Jak teraz załadować te dane?
Po pierwsze, importujemy niezbędne biblioteki:
import pandas as pd
import numpy as np
Pandas pozwoli nam załadować pliki .csv do dalszego przetwarzania.
Numpy potrzebny jest do przedstawienia naszej tabeli danych w formie macierzy liczb.
Idźmy dalej. Weźmiemy plik train.csv i załadujemy go:
dataset = pd.read_csv('train.csv')
Będziemy się odwoływać do naszej próby danych train.csv za pomocą zmiennej dataset. Zobaczmy, co tam jest:
dataset.head()

Funkcja head() pozwala nam zobaczyć kilka pierwszych wierszy ramki danych.
Kolumna Survived to nasze wyniki, które są znane w tej ramce danych. W przypadku naszego zadania musimy przewidzieć kolumnę Survived dla danych test.csv. W tych danych znajduje się informacja o innych pasażerach Titanica, dla których nie znamy wyników.
Zatem podzielimy naszą tabelę na dane zależne i niezależne. To proste. Dane zależne to te, które zależą od niezależnych, czyli te, które znajdują się w wynikach. Dane niezależne to te, które wpływają na wynik.
Na przykład, mamy taki zestaw danych:
„Wowa uczył informatyki — nie.
Wowa dostał 2 z informatyki.”
Ocena z informatyki zależy od odpowiedzi na pytanie: czy Wowa uczył się informatyki? Rozumiesz? Przechodzimy dalej, jesteśmy już bliżej celu!
Standardowa zmienna dla danych niezależnych to X. Dla zależnych — y.
Robimy następująco:
X = dataset.iloc[ : , 2 : ]
y = dataset.iloc[ : , 1 : 2 ]
Co to jest? Funkcją iloc[:, 2: ] mówimy Pythonowi: chcę widzieć w zmiennej X dane zaczynające się od drugiej kolumny (włącznie, przy założeniu, że liczenie zaczyna się od zera). W drugiej linii mówimy, że chcemy widzieć w y dane pierwszej kolumny.
[ a:b, c:d ] — to konstrukcja, którą używamy w nawiasach. Jeśli nie wskażemy jakichś zmiennych, będą one domyślne. Możemy więc wskazać [:,: d] i otrzymamy w ramce danych wszystkie kolumny, oprócz tych, które zaczynają się od numeru d i dalej. Zmienne a i b określają wiersze, ale wszystkie ich potrzebujemy, więc pozostawiamy domyślne.
Zobaczmy, co nam wyszło:
X.head() 
y.head() 
Aby uprościć tę krótką lekcję, usuniemy kolumny, które wymagają szczególnego „wychowania”, albo w ogóle nie wpływają na przeżywalność. Zawierają one dane typu str.
count = ['Name', 'Ticket', 'Cabin', 'Embarked']
X.drop(count, inplace=True, axis=1)
Super! Przechodzimy do następnego kroku.
Krok trzeci
Tutaj będziemy musieli zakodować nasze dane, aby maszyna lepiej rozumiała, w jaki sposób te dane wpływają na wynik. Ale kodować będziemy tylko te dane typu str, które zostawiliśmy. Kolumna "Płeć". Jak chcemy to zakodować? Przedstawimy dane o płci osoby jako wektor: 10 – męska, 01 – żeńska.
Na początek przekształcimy nasze tabele w macierz NumPy:
X = np.array(X)
y = np.array(y)
A teraz sprawdźmy:
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))
Biblioteka sklearn to niesamowita biblioteka, która pozwala nam na pełne działanie w Data Science. Zawiera wiele interesujących modeli uczenia maszynowego, a także umożliwia nam przygotowanie danych.
OneHotEncoder pozwoli nam zakodować płeć osoby w taki sposób, jak opisaliśmy. Zostaną stworzone 2 klasy: męska, żeńska. Jeśli osoba to mężczyzna, w kolumnie „męska” zostanie zapisana 1, a w „żeńskiej” 0.
Po OneHotEncoder() stoi [1] – to oznacza, że chcemy zakodować kolumnę numer 1 (liczenie od zera).
Super. Idźmy dalej!
Zazwyczaj zdarza się, że niektóre dane są puste (czyli NaN – not a number). Na przykład mamy informacje o osobie: jej imię, płeć. A danych o jej wieku brakuje. W takim przypadku zastosujemy metodę: znajdziemy średnią arytmetyczną dla wszystkich kolumn i, jeśli jakieś dane w kolumnie są pominięte, wypełnimy pustkę średnią arytmetyczną.
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X)
X = imputer.transform(X)
A teraz weźmy pod uwagę, że mogą zdarzać się sytuacje, kiedy dane mają bardzo dużą rozpiętość. Niektóre dane mieszczą się w przedziale [0:1], a inne mogą osiągać setki i tysiące. Aby wyeliminować takie rozrzuty i komputer był dokładniejszy w obliczeniach, zeskalujemy dane. Niech wszystkie liczby nie przekraczają trzech. W tym celu skorzystamy z funkcji StandartScaler.
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X[:, 2:] = sc.fit_transform(X[:, 2:])
Teraz nasze dane wyglądają tak:

Klasa. Już jesteśmy blisko naszego celu!
Krok czwarty
Nauczymy się budować nasz pierwszy model! W bibliotece sklearn możemy znaleźć ogromną ilość ciekawostek. Zastosowałem w tym zadaniu model Gradient Boosting Classifier. Używamy klasyfikatora, ponieważ naszym zadaniem jest klasyfikacja. Potrzebujemy prognozy, aby przypisać wynik do 1 (przeżył) lub 0 (nie przeżył).
from sklearn.ensemble import GradientBoostingClassifier
gbc = GradientBoostingClassifier(learning_rate=0.5, max_depth=5, n_estimators=150)
gbc.fit(X, y)
Funkcja fit mówi Pythonowi: niech model szuka zależności między X a y.
Mniej niż sekunda i model jest gotowy.

Jak go zastosować? Zaraz zobaczymy!
Krok piąty. Podsumowanie
Teraz musimy załadować tabelę z naszymi danymi testowymi, dla których należy sporządzić prognozę. Wykonamy wszystkie te same kroki, jakie zrobiliśmy dla 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:])
Zastosujmy nasz model!
gbc_predict = gbc.predict(X_test)
To wszystko. Sporządziliśmy prognozę. Teraz należy ją zapisać w pliku CSV i wysłać na stronę.
np.savetxt('my_gbc_predict.csv', gbc_predict, delimiter=",", header = 'Survived')
Gotowe. Otrzymaliśmy plik zawierający prognozy dla każdego pasażera. Pozostaje tylko przesłać te wyniki na stronę i uzyskać ocenę prognozy. Takie prymitywne rozwiązanie daje nie tylko 74% poprawnych odpowiedzi w publicznej bazie, ale także pewien impuls w danych naukowych. Najbardziej zainteresowani mogą zawsze napisać do mnie w wiadomościach prywatnych i zadać pytanie. Dziękuję wszystkim!
Źródło: habr.com
