J'ai commencé à étudier la programmation (python) vers décembre 2018 et j'ai commencé à travailler sur kaggle ces derniers mois.
Parmi eux, il y avait beaucoup de choses sur lesquelles je me demandais «comment faire cela?», Et j'ai procédé en enquêtant sur diverses choses, donc cette fois je vais me concentrer sur ce «prétraitement» et le résumer. pense.
C'est un Titanic familier en kaggle. https://www.kaggle.com/c/titanic
import matplotlib
import matplotlib.pyplot as plt
matplotlib.style.use('ggplot')
import seaborn as sns
import numpy as np
import pandas as pd
Je vais lire les données.
df_train = pd.read_csv(r"C:///train.csv")
df_test = pd.read_csv(r"C:///test.csv")
df_train.shape
df_test.shape
Vous pouvez maintenant voir les données d'entraînement comme (891, 12) et les données de test comme (418, 11).
Établissons les 5 premières lignes pour voir quel type de données contient.
df_train.head()
df_test.head()
Il semble que les données ressemblent à ceci.
Comme vous pouvez le voir par df_test.head (), la colonne montre la colonne dans laquelle la variable objectif "Survived" a disparu de la colonne des données d'entraînement.
Combinons les données d'entraînement et les informations de données de test en un seul.
df_train.info()
print("-"*48)
df_test.info()
Vous pouvez vérifier approximativement le nombre de données et le type de données dans chaque colonne.
df_train.describe()
Les informations de données numériques s'affichent.
df_train.describe(include=['O'])
Les variables catégorielles Nom, Sexe, Ticket, Cabine et Embarqué sont affichées pour chaque numéro / valeur unique, catégorie de fréquence la plus élevée et le nombre d'occurrences.
C'est important pour moi car cela a tellement trébuché dans les premiers jours.
En fin de compte, nous apprendrons séparément pour les données d'entraînement et les données de test, mais comme il est compliqué d'effectuer un prétraitement tel que le traitement des valeurs manquantes et le traitement des variables catégorielles pour chaque données d'entraînement et données de test, nous les résumerons d'abord, puis plus tard. Je vais le diviser à nouveau.
#Créez une nouvelle colonne appelée TrainFlag et définissez-la sur True pour les données d'entraînement et False pour les données de test.
df_train["TrainFlag"] = True
df_test["TrainFlag"] = False
#Combinez les données d'entraînement et de test
df_all = df_train.append(df_test)
#PassengerId n'est probablement pas utilisé pour les quantités de caractéristiques, je souhaite donc le supprimer.
#Cependant, comme cela est nécessaire lors de la soumission ultérieure des données de test, elles ne seront pas complètement supprimées.
#Conserver comme index
df_all.index = df_all["PassengerId"]
df_all.drop("PassengerId", axis = 1, inplace = True)
Maintenant, si vous regardez df_all, cela ressemble à ceci. L'index sera PassengerId, et à l'extrême droite se trouve la colonne TrainFlag que vous venez d'ajouter. True correspond aux données d'entraînement et False (non illustré ici) aux données de test.
Cela les triera par ordre décroissant.
df_all.isnull().sum().sort_values(ascending=False)
Ce serait bien si le nombre de variables était à peu près à cette époque, mais il serait très difficile de voir si les valeurs manquantes de toutes les variables explicatives étaient données lorsque le nombre de variables augmentait.
Par conséquent, restreignons les variables qui ont des «valeurs manquantes» et trions-les par ordre décroissant.
df_all.isnull().sum()[df_train.isnull().sum()>0].sort_values(ascending = False)
Ensuite, seules les variables avec des valeurs manquantes ont été triées par ordre décroissant!
◆Cabin Si vous faites df_all.shape, le nombre de données sera de 1 309 lorsque vous combinerez les données d'entraînement et les données de test. Parmi ceux-ci, il y a 1014 cabines manquantes, donc cette fois j'exclure chaque colonne de la cible d'analyse, donc je n'effectuerai pas le traitement des valeurs manquantes ici.
◆Age L'âge a également des valeurs manquantes, mais il n'y en a pas tellement, et bien que je ne revienne pas sur cette fois, l'âge semble affecter le modèle, nous allons donc traiter les valeurs manquantes.
Il y a plusieurs façons de faire cela, mais cette fois je vais remplir l'orthodoxe avec des valeurs moyennes.
df_all["Age"] = df_all["Age"].fillna(df_all["Age"].mean())
◆Embarked Si vous faites df_all.describe (include = ['O']), vous pouvez voir qu'Embarked n'a que 3 valeurs uniques, et la plupart d'entre elles sont "S", donc cette fois nous remplirons les valeurs manquantes avec S.
df_all["Embarked"] = df_all["Embarked"].fillna("S")
df_all.isnull().sum()[df_train.isnull().sum()>0].sort_values(ascending = False)
Ensuite, vous pouvez voir que seul Cabin a une valeur manquante, de sorte que le traitement de la valeur manquante est maintenant terminé.
Je vais omettre un examen détaillé cette fois, mais à la suite de l'analyse des données, il est supposé que Cabin, Name, PassengerId, Ticket ne sont pas nécessaires pour cette construction de modèle.
Effaçons ces colonnes.
df_all = df_train.drop(["Cabin", 'Name','PassengerId','Ticket'], axis = 1)
df_all = pd.get_dummies(df_all, drop_first=True)
Si vous vérifiez avec df_all.head (), vous pouvez voir que la variable catégorielle pourrait être traitée comme ceci.
Avec ce qui précède, le prétraitement incroyablement orthodoxe est terminé, et après cela, nous procéderons à la construction du modèle à grande échelle.
C'est un contenu très rudimentaire pour les intermédiaires et au-dessus, mais au début c'était très difficile de procéder en les examinant, et à chaque fois j'étais stressé.
Nous espérons que cela aidera ces personnes à approfondir leur compréhension.
Recommended Posts