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

Uma breve palavra introdutória

Acredito que poderíamos realizar muito mais se tivéssemos instruções passo a passo que nos dissessem o que fazer e como. Lembro-me de momentos na minha vida em que não conseguia começar algo simplesmente porque era difícil entender por onde começar. Talvez, há muito tempo, você tenha visto as palavras "Ciência de Dados" online e pensado que estava muito longe disso, e que as pessoas que trabalham com isso estavam em outro lugar, em outro mundo. Mas não, elas estão bem aqui. E talvez graças a pessoas dessa área, este artigo tenha aparecido no seu feed. Existem muitos cursos que podem te ajudar a dominar essa arte, mas aqui eu vou te ajudar a dar o primeiro passo.

Então, está preparado? Já aviso que você precisa saber Python 3, pois é essa linguagem que usarei aqui. Também recomendo instalar o Jupyter Notebook com antecedência ou dar uma olhada em como usar o Google Colab.

Шаг первый

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

O Kaggle é uma grande ajuda nesse sentido. Em princípio, você pode se virar sem ele, mas abordarei isso em outro artigo. É uma plataforma que hospeda competições de ciência de dados. Em cada uma dessas competições, nos estágios iniciais, você ganhará uma quantidade incrível de experiência resolvendo vários tipos de problemas, experiência em desenvolvimento e experiência em trabalho em equipe, o que é crucial nos dias de hoje.

Vamos começar nosso problema a partir daí. Chama-se "Titanic". O objetivo é prever se cada indivíduo sobreviverá. De modo geral, o trabalho de um cientista de dados é coletar dados, processá-los, treinar um modelo, fazer uma previsão e assim por diante. O Kaggle, por outro lado, nos permite pular a etapa de coleta de dados — tudo está disponível na plataforma. Basta fazer o upload e podemos começar!

Isso pode ser feito da seguinte forma:

A aba Dados contém arquivos que contêm dados.

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

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

Carregamos os dados, preparamos nossos notebooks Jupyter e…

Шаг второй

Como podemos baixar esses dados agora?

Primeiro, vamos importar as bibliotecas necessárias:

import pandas as pd
import numpy as np

O Pandas nos permitirá carregar arquivos .csv para processamento posterior.

O Numpy é necessário para representar nossa tabela de dados como uma matriz de números.
Vamos em frente. Vamos pegar o arquivo train.csv e carregá-lo:

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

Vamos referenciar nosso conjunto de dados train.csv usando a variável dataset. Vejamos o que ele contém:

dataset.head()

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

A função head() permite visualizar as primeiras linhas de um dataframe.

As colunas "Sobreviventes" representam nossos resultados, que são conhecidos neste conjunto de dados. Para a questão do problema, precisamos prever a coluna "Sobreviventes" para os dados do arquivo test.csv. Esses dados contêm informações sobre outros passageiros do Titanic, cujos resultados nós, os solucionadores do problema, desconhecemos.

Então, vamos dividir nossa tabela em dados dependentes e independentes. É simples. Dados dependentes são aqueles que dependem dos dados independentes para determinar os resultados. Dados independentes são aqueles que influenciam o resultado.

Por exemplo, temos o seguinte conjunto de dados:

“Vova estudou ciência da computação - não.
Vova tirou nota 2 em ciência da computação.

A nota em ciência da computação depende da resposta à pergunta: Vova estudou ciência da computação? Entendeu? Vamos em frente, estamos mais perto do objetivo!

A variável tradicional para dados independentes é X. Para dados dependentes, é 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: quero ver na variável `X` os dados a partir da segunda coluna (inclusive e desde que a contagem comece em zero). Na segunda linha, dizemos que queremos ver em `y` os dados a partir da primeira coluna.

[a:b, c:d] é a construção que usamos entre parênteses. Se você não especificar nenhuma variável, elas serão armazenadas com os valores padrão. Ou seja, podemos especificar [:,:d] e obteremos todas as colunas do dataframe, exceto aquelas que começam com o número d e seguintes. As variáveis ​​a e b definem as linhas, mas precisamos de todas elas, então as deixaremos com os valores padrão.

Vejamos o que temos:

X.head()

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

y.head()

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

Para simplificar esta breve lição, removeremos as colunas que exigem cuidados especiais ou que não afetam a sobrevivência. Essas colunas contêm dados do tipo string.

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

Ótimo! Vamos passar para a próxima etapa.

Terceiro Passo

Aqui precisamos codificar nossos dados para que a máquina possa entender melhor como eles influenciam o resultado. Mas não vamos codificar tudo, apenas os dados do tipo string que mantivemos. A coluna "Sexo". Como a codificamos? Vamos representar o gênero da pessoa como um vetor: 10 para masculino, 01 para feminino.

Primeiro, vamos converter nossas tabelas em uma matriz NumPy:

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

E agora vejamos:

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 ferramenta poderosa que nos permite implementar plenamente a ciência de dados. Ela contém um grande número de modelos interessantes de aprendizado de máquina e também nos permite realizar a preparação de dados.

O OneHotEncoder nos permitirá codificar o gênero de uma pessoa na representação que descrevemos. Ele criará duas classes: masculino e feminino. Se a pessoa for do sexo masculino, a coluna "masculino" receberá o valor 1 e a coluna "feminino", respectivamente, o valor 0.

Após OneHotEncoder() há [1] - isso significa que queremos codificar a coluna número 1 (contando a partir de zero).

Ótimo. Vamos em frente!

Normalmente, acontece de alguns dados permanecerem em branco (ou seja, NaN — não é um número). Por exemplo, há informações sobre uma pessoa: seu nome e sexo. Mas não há informações sobre sua idade. Nesse caso, aplicamos o seguinte método: calculamos a média aritmética de todas as colunas e, se algum dado em uma coluna estiver faltando, preenchemos o espaç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 considerar situações em que os dados são muito extensos. Alguns dados estão no intervalo [0:1], enquanto outros podem chegar às centenas e milhares. Para eliminar essa dispersão e tornar os cálculos do computador mais precisos, vamos dimensionar os dados. Manteremos todos os números abaixo de três. Para isso, usaremos a função StandardScaler.

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

Agora nossos dados estão assim:

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

Legal! Já estamos perto do nosso objetivo!

Passo quatro

Vamos treinar nosso primeiro modelo! Podemos encontrar muitas coisas interessantes na biblioteca sklearn. Apliquei o classificador Gradient Boosting a este problema. Usamos um classificador porque nossa tarefa é um problema de classificação. Precisamos atribuir uma previsão de 1 (sobreviveu) ou 0 (falhou).

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

A função `fit` diz ao Python: Deixe o modelo procurar relações entre X e y.

Menos de um segundo e o modelo está pronto.

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

Como usar? Vamos ver!

Etapa Cinco: Conclusão

Agora precisamos carregar a tabela com nossos dados de teste para os quais precisamos fazer uma previsão. Faremos o mesmo com esta tabela que fizemos com a tabela 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 agora mesmo!

gbc_predict = gbc.predict(X_test)

Pronto! Criamos uma previsão. Agora precisamos salvá-la como um arquivo CSV e enviá-la para o site.

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

Pronto! Recebemos um arquivo com as previsões para cada passageiro. Agora, basta enviar essas soluções para o site e obter uma avaliação das previsões. Essa solução simples não só garante 74% de acertos na página pública, como também aprimora nossas habilidades em ciência de dados. Os mais curiosos podem me contatar em particular a qualquer momento para tirar dúvidas. Obrigado a todos!

Fonte: habr.com

Compre hospedagem confiável para sites com proteção DDoS, servidores VPS VDS 🔥 Compre hospedagem de sites confiável com proteção contra DDoS, servidores VPS/VDS | ProHoster