[PYTHON] Techniques de visualisation de base apprises à partir des données de Kaggle Titanic

introduction

[Mis à jour de temps en temps] Extraits d'ingénierie EDA / de quantité de fonctionnalités utilisés dans le concours de données de table Kaggle principalement en utilisant des extraits [données Kaggle Titanic] Utilisez (https://www.kaggle.com/c/titanic/data) pour visualiser les données de base.

supposition

import numpy as np 
import pandas as pd
import pandas_profiling as pdp
import matplotlib.pyplot as plt
import seaborn as sns
import warnings

warnings.filterwarnings('ignore')
cmap = plt.get_cmap("tab10")
plt.style.use('fivethirtyeight')
%matplotlib inline

pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option("display.max_colwidth", 10000)
target_col = "Survived"
data_dir = "/kaggle/input/titanic/"

Vérifiez le dossier

!ls -GFlash /kaggle/input/titanic/
total 100K
4.0K drwxr-xr-x 2 nobody 4.0K Jan  7  2020 ./
4.0K drwxr-xr-x 5 root   4.0K Jul 12 00:15 ../
4.0K -rw-r--r-- 1 nobody 3.2K Jan  7  2020 gender_submission.csv
 28K -rw-r--r-- 1 nobody  28K Jan  7  2020 test.csv
 60K -rw-r--r-- 1 nobody  60K Jan  7  2020 train.csv

Lire les données

train = pd.read_csv(data_dir + "train.csv")
test = pd.read_csv(data_dir + "test.csv")
submit = pd.read_csv(data_dir + "gender_submission.csv")

Vérifiez les données

train.head()
スクリーンショット 2020-07-12 9.17.32.png

Vérifiez le nombre d'enregistrements et de colonnes

print("{} rows and {} features in train set".format(train.shape[0], train.shape[1]))
print("{} rows and {} features in test set".format(test.shape[0], test.shape[1]))
print("{} rows and {} features in submit set".format(submit.shape[0], submit.shape[1]))
891 rows and 12 features in train set
418 rows and 11 features in test set
418 rows and 2 features in submit set

Vérifiez le nombre de défauts pour chaque colonne

Vérifiez le nombre de défauts dans chaque colonne.

train.isnull().sum()
PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64

Visualisation des valeurs manquantes

Vérifiez si le défaut a une régularité.

plt.figure(figsize=(18,9))
sns.heatmap(train.isnull(), cbar=False)
スクリーンショット 2020-07-12 10.52.09.png

Vérifiez les statistiques récapitulatives pour chaque colonne

Vérifiez les statistiques récapitulatives telles que la moyenne, l'écart type, la valeur maximale, la valeur minimale et la valeur la plus fréquente pour chaque colonne pour avoir une idée approximative des données.

train.describe()
スクリーンショット 2020-07-12 11.58.21.png

Agréger le nombre (fréquence) de données

Vérifiez le pourcentage cible

sns.countplot(x=target_col, data=train)
スクリーンショット 2020-07-12 11.44.12.png

Vérifiez le pourcentage de valeurs de catégorie

col = "Pclass"
sns.countplot(x=col, data=train)
スクリーンショット 2020-07-12 12.41.46.png

Vérifiez le pourcentage d'une colonne pour chaque valeur cible

col = "Pclass"
sns.countplot(x=col, hue=target_col, data=train)
スクリーンショット 2020-07-12 10.32.41.png
col = "Sex"
sns.countplot(x=col, hue=target_col, data=train)
スクリーンショット 2020-07-12 10.35.00.png

histogramme

L'axe vertical est la fréquence et l'axe horizontal est la classe, qui visualise la distribution des données. Essayez-en quelques-uns pour afficher différentes caractéristiques de données pour différentes tailles de bac.

col = "Age"
train[col].plot(kind="hist", bins=10, title='Distribution of {}'.format(col))
スクリーンショット 2020-07-12 10.15.22.png
col = "Fare"
train[col].plot(kind="hist", bins=50, title='Distribution of {}'.format(col))
スクリーンショット 2020-07-12 11.01.08.png

Histogramme par catégorie

f, ax = plt.subplots(1, 3, figsize=(15, 4))
sns.distplot(train[train['Pclass']==1]["Fare"], ax=ax[0])
ax[0].set_title('Fares in Pclass 1')
sns.distplot(train[train['Pclass']==2]["Fare"], ax=ax[1])
ax[1].set_title('Fares in Pclass 2')
sns.distplot(train[train['Pclass']==3]["Fare"], ax=ax[2])
ax[2].set_title('Fares in Pclass 3')
plt.show()
スクリーンショット 2020-07-12 11.15.58.png

Histogramme de colonne pour chaque catégorie cible

col = "Age"
fig, ax = plt.subplots(1, 2, figsize=(15, 6))
train[train[target_col]==1][col].plot(kind="hist", bins=50, title='{} - {} 1'.format(col, target_col), color=cmap(0), ax=ax[0])
train[train[target_col]==0][col].plot(kind="hist", bins=50, title='{} - {} 0'.format(col, target_col), color=cmap(1), ax=ax[1])
plt.show()
スクリーンショット 2020-07-12 9.51.20.png

Un histogramme d'une colonne pour chaque valeur cible (en cas de chevauchement)

col = "Age"
train[train[target_col]==1][col].plot(kind="hist", bins=50, alpha=0.3, color=cmap(0))
train[train[target_col]==0][col].plot(kind="hist", bins=50, alpha=0.3, color=cmap(1))
plt.title("histgram for {}".format(col))
plt.xlabel(col)
plt.show()
スクリーンショット 2020-07-12 12.19.53.png

Estimation de la densité du noyau

En gros, il s'agit d'une version courbe de l'histogramme. Vous pouvez obtenir Y pour X.

sns.kdeplot(label="Age", data=train["Age"], shade=True)
スクリーンショット 2020-07-12 13.06.27.png

Tableau croisé

Calculez le nombre d'occurrences de chaque catégorie de données de catégorie.

pd.crosstab(train["Sex"], train["Pclass"])
スクリーンショット 2020-07-12 12.06.55.png
pd.crosstab([train["Sex"], train["Survived"]], train["Pclass"])
スクリーンショット 2020-07-12 12.10.17.png

Tableau croisé dynamique

Moyenne des données quantitatives par catégorie

pd.pivot_table(index="Pclass", columns="Sex", data=train[["Age", "Fare", "Survived", "Pclass", "Sex"]])
スクリーンショット 2020-07-12 15.37.00.png

Valeur minimale des données quantitatives pour chaque catégorie

pd.pivot_table(index="Pclass", columns="Sex", data=train[["Age", "Fare", "Pclass", "Sex"]], aggfunc=np.min)
スクリーンショット 2020-07-12 15.41.22.png

Nuage de points

Vérifiez la relation entre les deux colonnes.

Nuage de points

sns.scatterplot(x="Age", y="Fare", data=train)
スクリーンショット 2020-07-12 12.29.39.png

Diagramme de dispersion (code couleur par catégorie)

sns.scatterplot(x="Age", y="Fare", hue=target_col, data=train)
スクリーンショット 2020-07-12 12.30.53.png

Matrice de diagramme de dispersion

sns.pairplot(data=train[["Fare", "Survived", "Age", "Pclass"]], hue="Survived", dropna=True)
スクリーンショット 2020-07-12 16.11.47.png

Boîte à moustaches

Visualisez la variabilité des données.

Boîte à moustaches par catégorie

Vérifiez la variation des données pour chaque catégorie.

sns.boxplot(x='Pclass', y='Age', data=train)
スクリーンショット 2020-07-12 12.57.48.png

Bande dessinée

La figure qui représentait les données par un point. Il est utilisé lorsque l'une des deux données est catégorique.

sns.stripplot(x="Survived", y="Fare", data=train)
スクリーンショット 2020-07-12 10.58.21.png
sns.stripplot(x='Pclass', y='Age', data=train)
スクリーンショット 2020-07-12 13.15.33.png

Carte de chaleur

Carte thermique du coefficient de corrélation pour chaque colonne

sns.heatmap(train.corr(), annot=True)
スクリーンショット 2020-07-12 11.09.56.png

référence

Recommended Posts

Techniques de visualisation de base apprises à partir des données de Kaggle Titanic
Application Python: visualisation de données partie 1: basique
Vérifiez les données brutes avec Kaggle's Titanic (Kaggle ⑥)
[Kaggle] De la lecture des données au prétraitement et au codage
Apprentissage automatique à partir de zéro (apprentissage automatique appris avec Kaggle)
Vue d'ensemble des techniques d'apprentissage automatique apprises grâce à scikit-learn
Défiez Kaggle Titanic
Analyse des données Titanic 1