[PYTHON] [Kaggle] Récapitulatif du prétraitement (statistiques, traitement des valeurs manquantes, etc.)

1. Objet

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.

2. Importez les données à utiliser et ce dont vous avez besoin

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

3. Apparence des données (statistiques)

(1) Confirmation du nombre de données [.shape]

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

(2) Jetez un œil aux données [.head ()]

É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. キャプチャ1.PNG

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.

(3) Regardez le type de données [.info ()]

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.

キャプチャ3.PNG

(4) Regardez les informations des données numériques et des données de catégorie [.describe ()]

◆ Données numériques

df_train.describe()
キャプチャ4.PNG

Les informations de données numériques s'affichent.

◆ Données de catégorie

df_train.describe(include=['O'])
キャプチャ2.PNG

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.

4. Intégrer les données de formation et les données de test

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.

キャプチャ5.PNG

5. Traitement des valeurs manquantes

(1) Vérifiez le nombre de valeurs manquantes

Cela les triera par ordre décroissant.

df_all.isnull().sum().sort_values(ascending=False)
キャプチャ6.PNG

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)
キャプチャ7.PNG

Ensuite, seules les variables avec des valeurs manquantes ont été triées par ordre décroissant!

(2) Effectuer le traitement des valeurs manquantes

◆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.

キャプチャ8.PNG
df_all["Embarked"] = df_all["Embarked"].fillna("S")

(3) Enfin, vérifiez s'il n'y a pas de valeurs manquantes

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é.

6. Supprimer les lignes inutiles

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)

7. Conversion des variables catégorielles

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. キャプチャ9.PNG

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.

8. Conclusion

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

[Kaggle] Récapitulatif du prétraitement (statistiques, traitement des valeurs manquantes, etc.)
Résumé des articles publiés jusqu'à présent (statistiques / apprentissage automatique / mathématiques, etc.)
Résumé du traitement multi-processus du langage de script
[Python] Résumé du traitement de conversion mathématique (coordonnées orthogonales, conversion de coordonnées polaires, etc.) [math, numpy, etc.]
pandas Nombre total d'employés Achèvement de la valeur manquante
Résumé du traitement pickle et unpickle des classes définies par l'utilisateur