Seu primeiro passo na ciência de dados. Titânico

Uma pequena introdução


Acredito que poderíamos fazer mais coisas se tivéssemos instruções passo a passo que mostrassem o que e como fazer. Eu me lembro na minha vida daqueles momentos em que um negócio não podia começar devido ao fato de que era simplesmente difícil entender por onde começar. Talvez, uma vez na Internet, você tenha visto as palavras “Data Science” e decidido que está longe disso, e as pessoas que estão fazendo isso em algum lugar lá fora, em outro mundo. Então não, eles estão aqui. E, talvez, graças a pessoas desta esfera, um artigo tenha aparecido em seu feed. Existem muitos cursos que ajudarão você a se sentir confortável com este ofício, aqui eu o ajudarei a dar o primeiro passo.

Bem, você está pronta? Devo dizer imediatamente que você precisará conhecer o Python 3, pois vou usá-lo aqui. E também aconselho que você pré-instale no Notebook Jupyter ou veja como usar o google colab.

Passo um


imagem

Kaggle é seu assistente significativo nesse assunto. Em princípio, você pode ficar sem ele, mas vou falar sobre isso em outro artigo. Esta é a plataforma que hospeda a competição de Ciência de Dados. Em cada uma dessas competições, nos estágios iniciais, você receberá uma quantidade irreal de experiência na solução de vários problemas, experiência de desenvolvimento e experiência de trabalho em equipe, o que é importante em nosso tempo.

Nós assumiremos nossa tarefa a partir daí. É assim chamado: "Titanic". A condição é a seguinte: prever cada pessoa sobreviverá. De um modo geral, a tarefa da pessoa envolvida no DS é a coleta de dados, seu processamento, treinamento do modelo, previsão e assim por diante. No kaggle, podemos pular o estágio de coleta de dados - eles são apresentados na plataforma. Precisamos baixá-los e você pode começar!

Você pode fazer isso da seguinte maneira:

na guia Dados estão os arquivos que contêm os dados Dados

imagem

imagem

baixados, preparamos nossos cadernos Jupyter e ...

Segundo passo


Como baixamos esses dados agora?

Primeiro, importamos as bibliotecas necessárias:

import pandas as pd
import numpy as np

O Pandas nos permitirá baixar arquivos .csv para processamento adicional.

Numpy é necessário para apresentar nossa tabela de dados como uma matriz com números.
Ir em frente. Pegue o arquivo train.csv e faça o upload para nós:

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

Vamos nos referir aos nossos dados de exemplo train.csv através da variável do conjunto de dados. Vamos dar uma olhada no que está localizado lá:

dataset.head()

imagem

A função head () permite visualizar as primeiras linhas do quadro de dados.

As colunas sobreviventes são apenas nossos resultados, conhecidos neste quadro de dados. Na questão do problema, precisamos prever a coluna Sobrevivida para dados test.csv. Esses dados armazenam informações sobre outros passageiros do Titanic, para os quais nós, tomadores de decisão, não estamos cientes dos resultados.

Portanto, dividiremos nossa tabela em dados dependentes e independentes. Tudo é simples aqui. Dados dependentes são aqueles que são independentes do que está nos resultados. Dados independentes são dados que influenciam o resultado.

Por exemplo, temos um conjunto de dados:

“Vova ensinou ciência da computação - não.
Vova recebeu em ciência da computação 2. "

A avaliação em ciência da computação depende da resposta à pergunta: Vova ensinou ciência da computação? Está claro? Seguindo em frente, estamos mais perto do objetivo!

A variável tradicional para dados independentes é X. Para dependente, y.

Fazemos o seguinte:

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

O que é isso? Com a função iloc [:, 2:], dizemos ao python: Eu quero ver na variável X os dados começando na segunda coluna (inclusive, e desde que a contagem comece do zero). Na segunda linha, dizemos que queremos ver os dados da primeira coluna.

[a: b, c: d] é uma construção do que usamos entre parênteses. Se você não especificar nenhuma variável, elas permanecerão no padrão. Ou seja, podemos especificar [:,: d] e, em seguida, obteremos no quadro de dados todas as colunas, exceto aquelas que vão, a partir do número d e além. As variáveis ​​aeb definem strings, mas todos precisamos delas, portanto deixamos esse padrão.

Vamos ver o que aconteceu:

X.head()

imagem

y.head()

imagem

Para simplificar esta pequena lição, removeremos as colunas que requerem “cuidados” especiais ou que não afetam a sobrevivência. Eles contêm dados do tipo str.

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

Super! Vamos para o próximo passo.

Passo três


Aqui, precisamos codificar nossos dados para que a máquina entenda melhor como esses dados afetam o resultado. Mas não codificaremos tudo, mas apenas os dados do tipo str que deixamos. Coluna "Sexo". Como queremos codificar? Imagine os dados sobre o gênero humano pelo vetor: 10 - masculino, 01 - feminino.

Para começar, traduziremos nossas tabelas na matriz NumPy:

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

E agora olhamos:

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

A biblioteca sklearn é uma biblioteca interessante que nos permite fazer o trabalho completo na Data Science. Ele contém um grande número de modelos interessantes de aprendizado de máquina e também nos permite fazer a preparação de dados.

O OneHotEncoder nos permitirá codificar o sexo da pessoa nessa representação, conforme descrito. Serão criadas 2 turmas: masculino, feminino. Se a pessoa for um homem, 1 será gravado na coluna “masculino” e 0. respectivamente

Após o OneHotEncoder (), custa [1] - isso significa que queremos codificar a coluna número 1 (contando do zero).

Super. Nós nos movemos ainda mais!

Como regra, isso acontece que alguns dados permanecem vazios (ou seja, NaN - não um número). Por exemplo, há informações sobre uma pessoa: seu nome, sexo. Mas não há dados sobre a idade dele. Nesse caso, usaremos este método: encontramos a média aritmética de todas as colunas e, se algum dado estiver faltando na coluna, preencha o vazio com a média aritmética.

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

Agora, vamos levar em consideração que tais situações acontecem quando os dados estão muito dispersos. Alguns dados estão no intervalo [0: 1] e outros podem ir para centenas e milhares. Para excluir essa propagação e o computador foi mais preciso nos cálculos, escalaremos os dados, escalaremos. Que todos os números não excedam três. Para fazer isso, use a função StandartScaler.

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

Agora, nossos dados são assim:

imagem

Class. Estamos perto do nosso objetivo!

Quarto passo


Treine nosso primeiro modelo! Na biblioteca do sklearn, podemos encontrar uma quantidade enorme de coisas interessantes. Apliquei o modelo do Gradient Boosting Classifier a esta tarefa. Usamos um classificador, pois nossa tarefa é uma tarefa de classificação. É necessário atribuir a previsão a 1 (sobrevivido) ou 0 (não sobreviveu).

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

A função de ajuste diz ao python: Deixe o modelo procurar dependências entre X e y.

Menos de um segundo e o modelo está pronto.

imagem

Como aplicar? Vamos ver agora!

Quinto passo Conclusão


Agora precisamos carregar a tabela com nossos dados de teste, para os quais precisamos fazer uma previsão. Com esta tabela, faremos as mesmas ações que fizemos para o 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:])

Vamos aplicar nosso modelo já!

gbc_predict = gbc.predict(X_test)

Todos. Fizemos uma previsão. Agora, ele precisa ser gravado em csv e enviado ao site.

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

Feito. Obtive um arquivo contendo previsões para cada passageiro. Resta fazer o upload dessas decisões no site e obter uma estimativa da previsão. Essa solução primitiva dá não apenas 74% das respostas corretas ao público, mas também algum impulso à Ciência de Dados. Os mais curiosos podem, a qualquer momento, escrever-me em mensagens privadas e fazer uma pergunta. Obrigado a todos!

All Articles