Python: prévision de survie de navire, partie 2

J'écrirai après celui-là.

Analyse et prochaine action

Nous avons comparé les valeurs moyennes du tableau croisé dynamique précédent. En conséquence, nous avons trouvé ce qui suit.

Visualisez et comprenez les données

Maintenant, visualisons les données et voyons quelques hypothèses.

Corrélation des données numériques Commencez par comprendre la corrélation entre les données numériques et les objectifs (résultats). L'histogramme vous permet de créer une distribution de vos données en utilisant une plage spécifiée régulièrement espacée. Cela permet de répondre aux questions liées à une gamme particulière (Par exemple, en divisant l'âge par tranche, vous pouvez répondre à la question "Le taux de survie des nourrissons est-il meilleur?") Notez que l'axe vertical de l'histogramme représente le nombre de données (passagers).

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

train_df = pd.read_csv('./8010_titanic_data/train.csv')
test_df = pd.read_csv('./8010_titanic_data/test.csv')
combine = [train_df, test_df]


#1.Supprimer les valeurs manquantes pour l'âge
Age_se = train_df["Age"].dropna()

#2.Visualisez l'âge à l'aide d'un histogramme.
train_df["Age"].hist(bins=20) #La finesse de la gamme (classe) est de 20
plt.show()

#3.Âge survécu=0 et a survécu=Visualisation en cas de 1.
#Supplément Vous pouvez facilement comparer en spécifiant par dans le paramètre de la méthode hist.
train_df["Age"].hist(by=train_df["Survived"])
plt.show()

image.png

Par conséquent

Prochaine action

1, vous devez tenir compte de l'âge contenu dans l'ensemble de données. Complète les valeurs d'âge manquantes pour plusieurs raisons 3, créez une quantité de caractéristiques qui divise l'âge par plage.

Corrélation entre la valeur de la catégorie et la quantité d'objets avec une valeur numérique

#1.le défunt(Survived=0)Dans le cas de, créez un histogramme de l'âge pour chaque classe P.
train_df[train_df["Survived"]==0]["Age"].hist(by=train_df["Pclass"])
plt.show()

#2.Survivant(Suvived=1)Dans le cas de, créez un histogramme de l'âge pour chaque classe P.
train_df[train_df["Survived"]==1]["Age"].hist(by=train_df["Pclass"])
plt.show()

image.png

résultat

Décision Considérez Pclass comme une caractéristique du modèle.

Corrélation de la quantité d'entités (valeur de catégorie)

Vérifiez la corrélation entre les entités avec les valeurs de catégorie. Ici, nous confirmerons la relation entre Survived et Pclass / Sex, en nous concentrant sur Embarked.

# 1.Le port de départ est Cherbourg (Embarqué)='C'), Créez un tableau croisé dynamique pour Survived et Pclass / Sex.
cor_category = train_df[train_df["Embarked"]=='C'][["Pclass", "Survived", "Sex"]].groupby(["Pclass", "Sex"], as_index=False).mean().sort_values(by="Survived", ascending=False)

#Le sexe divise les données en hommes et femmes,
cor_category_male = cor_category[cor_category["Sex"]=='male'].sort_values('Pclass')
cor_category_female = cor_category[cor_category["Sex"]=='female'].sort_values('Pclass')

#Ajoutez des graphiques à l'aide de la bibliothèque Matplotlib.
plt.plot(['1', '2', '3'], cor_category_male["Survived"], label="male")
plt.plot(['1', '2', '3'], cor_category_female["Survived"], label="female")

plt.legend()
plt.xlabel("Pclass")
plt.ylabel("Survived")
plt.show()


# 2.Le port de départ est Queenstown (Embarqué)='Q'), Créez un tableau croisé dynamique pour Survived et Pclass / Sex.
cor_category = train_df[train_df["Embarked"]=='Q'][["Pclass", "Survived", "Sex"]].groupby(["Pclass", "Sex"], as_index=False).mean().sort_values(by="Survived", ascending=False)

#Le sexe divise les données en hommes et femmes,
cor_category_male = cor_category[cor_category["Sex"]=='male'].sort_values('Pclass')
cor_category_female = cor_category[cor_category["Sex"]=='female'].sort_values('Pclass')

#Ajoutez des graphiques à l'aide de la bibliothèque Matplotlib.
plt.plot(['1', '2', '3'], cor_category_male["Survived"], label="male")
plt.plot(['1', '2', '3'], cor_category_female["Survived"], label="female")

plt.legend()
plt.xlabel("Pclass")
plt.ylabel("Survived")
plt.show()

# 3.Le port de départ est Southampton (Embarqué)='S'), Créez un tableau croisé dynamique pour Survived et Pclass / Sex.
cor_category = train_df[train_df["Embarked"]=='S'][["Pclass", "Survived", "Sex"]].groupby(["Pclass", "Sex"], as_index=False).mean().sort_values(by="Survived", ascending=False)

#Le sexe divise les données en hommes et femmes,
cor_category_male = cor_category[cor_category["Sex"]=='male'].sort_values('Pclass')
cor_category_female = cor_category[cor_category["Sex"]=='female'].sort_values('Pclass')

#Ajoutez des graphiques à l'aide de la bibliothèque Matplotlib.
plt.plot(['1', '2', '3'], cor_category_male["Survived"], label="male")
plt.plot(['1', '2', '3'], cor_category_female["Survived"], label="female")

plt.legend()
plt.xlabel("Pclass")
plt.ylabel("Survived")
plt.show()

résultat 1, les passagers féminins ont montré une bien meilleure survie que les hommes. Le taux de survie des hommes à 2, Embarqué = C était plus élevé que celui des autres valeurs Embarqué. 3, Il s'agit de la corrélation entre Pclass et Embarked, et la corrélation entre Pclass et Survived, pas nécessairement la corrélation directe entre Embarked et 4, Survived. 5, le taux de survie des hommes était plus élevé dans Embarqué = C et S par rapport à Embarqué = Q.

Décision 1, ajouter du sexe à la création du modèle. 2, ajoutez embarqué à la création de modèle.

Mise en forme des données

Nous procéderons à la conversion, à la création et à la complémentation des quantités de caractéristiques.

#1. train_Suppression des fonctionnalités de ticket et de cabine de df
train_df = train_df.drop(["Ticket", "Cabin"], axis=1)

#2. test_Suppression des fonctionnalités de ticket et de cabine de df
test_df = test_df.drop(["Ticket", "Cabin"], axis=1)

print ("-"*25+ "After"+ "-"*25)

#3.Train actuel_Vérifiez le nombre de lignes et de colonnes de df
print(train_df.shape)

# 4.Test actuel_Vérifiez le nombre de lignes et de colonnes de df
print(test_df.shape)

Créer une nouvelle fonctionnalité à partir d'une fonctionnalité existante

combine = [train_df, test_df]
# 1. train_df et test_Pour chaque df, points dans une nouvelle fonctionnalité appelée Titre(.)Stocke les titres précédents.
for dataset in combine:
    dataset['Title'] = dataset.Name.str.extract(' ([A-Za-z]+)\.', expand=False)

#2.Tableau croisé avec le sexe et le titre. Le tableau croisé est utilisé pour la tabulation croisée.

pd.crosstab(train_df['Title'], train_df['Sex'])

image.png

Il s'avère qu'il existe des titres tels que Master, Mr, Miss, Mrs. Remplacez maintenant les valeurs non fréquentes par une valeur appelée Rare.

for dataset in combine:
    # 1. train_df, test_Dans le titre de df,'Lady', 'Countess','Capt', 'Col', 'Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'Pour les articles autres que'Rare'Réécrit en.
    dataset['Title'] = dataset['Title'].replace(['Lady', 'Countess','Capt', 'Col', 'Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona'], 'Rare')

    # 2.De même, Mile est réécrit en Miss.
    dataset['Title'] = dataset['Title'].replace('Mlle', 'Miss')
    dataset['Title'] = dataset['Title'].replace('Ms', 'Miss')
    # 3.Réécrivez Mme à Mrs.
    dataset['Title'] = dataset['Title'].replace('Mme', 'Mrs')

# 4.Pour le titre et survécu, calculez la valeur moyenne de survécu en totalisant par titre.
train_df[['Title', 'Survived']].groupby(['Title'], as_index=False).mean()

image.png

Convertissez ces titres en données ordinales pour faciliter la création d'un modèle prédictif.

# 1. train_df et test_Avec df{"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5}Conversion en.
title_mapping = {"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5}

for dataset in combine:
    dataset["Title"] = dataset["Title"] .map({"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5})
    dataset['Title'] = dataset['Title'].fillna(0)

# 2. train_Sortez la première première ligne avec df.
train_df.head()

image.png

Enfin, supprimez le nom et le PassengerId

# 1.Nom du train et identifiant du passager_Supprimé de df.
train_df = train_df.drop(['Name', 'PassengerId'], axis=1)

# 2.Nom du test_Supprimé de df.
test_df = test_df.drop(['Name'], axis=1)

combine = [train_df, test_df]
# train_df et test_Vérifiez le nombre de lignes et de colonnes de df.
print(train_df.shape, test_df.shape)

Conversion de données à valeurs multiples

Convertit les données à valeurs multiples en données binaires.


# 1.Sexe à femme=1, male=-Convertir en 0.
for dataset in combine:
    dataset['Sex'] = dataset['Sex'].map( {'female': 1, 'male': 0} ).astype(int)

#Extraire la première ligne
train_df.head()

Compléter les données numériques continues

Nous devons maintenant estimer et compléter les fonctionnalités avec des valeurs manquantes ou nulles. Tout d'abord, jetons un coup d'œil à Age.

Il existe trois façons de compléter les données numériques continues.

1, comment générer un nombre aléatoire entre la moyenne

2, un moyen plus précis de déduire les valeurs manquantes consiste à utiliser d'autres caractéristiques corrélées. Jusqu'à présent, nous savons qu'il existe une corrélation entre l'âge, le sexe et la classe P. En d'autres termes, déduire la valeur Age à partir de la combinaison de Pclasse et de Sexe. Par exemple, utilisez des âges intermédiaires tels que Pclass = 1, Gender = 0, Pclass = 1, Gender = 1.

C'est une méthode de combinaison de 3, 1 et 2. Par conséquent, au lieu de deviner l'âge en fonction de la médiane, utilisez un nombre aléatoire entre la moyenne et l'écart type en fonction de la combinaison de la classe P et du sexe.

# 1. Pclass=Lorsque 1, créez un histogramme d'âge pour le sexe.
train_df[train_df["Pclass"]==1]["Age"].hist(by=train_df["Sex"], bins=20)
plt.show()

# 2. Pclass=À 2 ans, créez un histogramme d'âge pour le sexe.
train_df[train_df["Pclass"]==2]["Age"].hist(by=train_df["Sex"], bins=20)
plt.show()

# 3. Pclass=À 3 ans, créez un histogramme d'âge pour le sexe.
train_df[train_df["Pclass"]==3]["Age"].hist(by=train_df["Sex"], bins=20)
plt.show()

image.png

image.png

Préparez une matrice de stockage vide contenant des estimations d'âge inférées basées sur une combinaison de Pclassx et de sexe

# 1.Créez un tableau pour stocker la valeur Age.
guess_ages = np.zeros((2,3))
#Affichez le contenu du tableau.
print(guess_ages)

# 2.Devinez l'âge dans le tableau(Moyen-Âge)Boutique.
for dataset in combine:
    for i in range(0, 2):
        for j in range(0, 3):
            guess_df = dataset[(dataset['Sex'] == i) & (dataset['Pclass'] == j+1)]['Age'].dropna()

            #Dans le cas de la méthode 3
            #import random
            #age_mean = guess_df.mean()
            #age_std = guess_df.std()
            #age_guess = random.uniform(age_mean - age_std, age_mean + age_std)
            
            age_guess = guess_df.median()
 
            # 0.Ronde en 5 unités
            guess_ages[i,j] = int( age_guess/0.5 + 0.5 ) * 0.5
            
    for i in range(0, 2):
        for j in range(0, 3):
            dataset.loc[ (dataset.Age.isnull()) & (dataset.Sex == i) & (dataset.Pclass == j+1),\
                    'Age'] = guess_ages[i,j]

    dataset['Age'] = dataset['Age'].astype(int)

#Affichez les 5 premières lignes.
print(guess_ages)
train_df.head()

Ensuite, créez une fonctionnalité appelée AgeBand qui divise Age en 5 couches.

# 1.L'âge, qui est une valeur continue, est divisé en nombres arbitraires et converti en valeurs discrètes.
train_df['AgeBand'] = pd.cut(train_df['Age'], 5)

# 2.Création de tableaux croisés dynamiques AgeBand et Survived.
train_df[['AgeBand', 'Survived']].groupby(['AgeBand'], as_index=False).mean().sort_values(by='AgeBand', ascending=True)

Remplacez Age par une valeur discrète (données de commande).

# 1.Convertit à 0 si la valeur Age est 16 ou moins, 1 si elle est 16 ou plus et 32 ou moins, 2 si elle est 32 ou plus et 48 ou moins et 3 si elle est 48 ou plus et 64 ou moins.
for dataset in combine:    
    dataset.loc[ dataset['Age'] <= 16, 'Age'] = 0
    dataset.loc[(dataset['Age'] > 16) & (dataset['Age'] <= 32), 'Age'] = 1
    dataset.loc[(dataset['Age'] > 32) & (dataset['Age'] <= 48), 'Age'] = 2
    dataset.loc[(dataset['Age'] > 48) & (dataset['Age'] <= 64), 'Age'] = 3
    dataset.loc[ dataset['Age'] > 64, 'Age']
    
#Afficher 5 lignes depuis le début
train_df.head()
# 1. train_Supprimé car AgeBand n'est pas utilisé depuis df.
train_df = train_df.drop(['AgeBand'], axis=1)

#Afficher 5 lignes depuis le début
train_df.head()

Créer une nouvelle fonctionnalité en combinant des fonctionnalités existantes

Créez en tant que nouvelle fonctionnalité de Family Size qui combine Parch et SibSp.

combine = [train_df, test_df]
# 1.Création d'une nouvelle fonctionnalité appelée Family Size en ajoutant Parch et SibSp.
for dataset in combine:
    dataset['FamilySize'] = dataset['SibSp'] + dataset['Parch'] + 1
    
# 2.Regroupez les valeurs moyennes de la taille de la famille et des survivants en groupes.
train_df[['FamilySize', 'Survived']].groupby(['FamilySize'], as_index=False).mean().sort_values(by='Survived', ascending=False)

image.png

Ensuite, créez une nouvelle fonctionnalité appelée isAlone. Cette quantité de fonction stocke 1 pour les célibataires et 0 pour les membres de la famille.

for dataset in combine:
    # 1.Créé avec toutes les fonctionnalités appelées IsAlone définies sur 0.
    dataset['IsAlone'] = 0
    # 2.Lorsque FamilySize vaut 1, isAlone vaut 1.
    dataset.loc[dataset['FamilySize'] == 1, 'IsAlone'] = 1
    
# 3.IsAlone et Survived sont regroupés et la valeur moyenne de Survived est sortie.
train_df[['IsAlone', 'Survived']].groupby(['IsAlone'], as_index=False).mean()
# train_df et test_Supprimez Parch, SibSp et FamilySize de df.
train_df = train_df.drop(['Parch', 'SibSp', 'FamilySize'], axis=1)
test_df = test_df.drop(['Parch', 'SibSp', 'FamilySize'], axis=1)

combine = [train_df, test_df]

train_df.head()

Vous pouvez également créer des fonctionnalités artificielles qui combinent Pclass et Age. Créez une variable appelée Age * Class. Cette quantité de fonction stocke la valeur obtenue en pondérant le grade de la cabine en fonction de l'âge.

# 1. Age*Créez une nouvelle fonctionnalité appelée Classe et stockez la valeur obtenue en multipliant Age et Pclass.
for dataset in combine:
    dataset['Age*Class'] = dataset.Age * dataset.Pclass

train_df.loc[:, ['Age*Class', 'Age', 'Pclass']].head(10)

image.png

Complète les quantités d'objets par des valeurs

Embarqué prend les valeurs S, Q, C en fonction du port d'embarquement. Il y a deux valeurs manquantes dans l'ensemble de données d'entraînement. Remplacez ces valeurs manquantes par les valeurs les plus fréquentes.

# 1.Supprimez na avec Embarqué et remplacez la valeur la plus fréquente par la nouvelle fréquence de quantité de fonctionnalités_Stocké dans le port.
freq_port = train_df.Embarked.dropna().mode()[0]
print(freq_port)
# 1. train_df et test_Valeur manquante de df, freq_Remplacé par la valeur de port.
for dataset in combine:
    dataset['Embarked'] = dataset['Embarked'].fillna(freq_port)

# 2.Embarqué et survécu sont regroupés et la valeur moyenne de survécu est sortie.
train_df[['Embarked', 'Survived']].groupby(['Embarked'], as_index=False).mean().sort_values(by='Survived', ascending=False)

image.png

# 1.Embarqué{'S': 0, 'C': 1, 'Q': 2}Remplacé par.
for dataset in combine:
    dataset['Embarked'] = dataset['Embarked'].map( {'S': 0, 'C': 1, 'Q': 2} ).astype(int)

train_df.head()

image.png

Complément de données numériques

Il n'y a qu'une seule valeur manquante dans le tarif dans test_df. Remplacez la médiane par cette valeur manquante.

# 1. test_Remplissez la valeur manquante du tarif en df avec la valeur médiane du tarif.
test_df['Fare'].fillna(test_df['Fare'].dropna().median(), inplace=True)

test_df.head()

image.png

Ensuite, créez une fonctionnalité appelée FareBand qui divise Fare en quatre couches.

# 1.Divisez le tarif, qui est une valeur continue, en quatre et convertissez-le en une valeur discrète.
train_df['FareBand'] = pd.qcut(train_df['Fare'], 4)

# 2.Créez un tableau croisé dynamique FareBand et Survived.
train_df[['FareBand', 'Survived']].groupby(['FareBand'], as_index=False).mean().sort_values(by='FareBand', ascending=True)

image.png

Remplacez le tarif par des valeurs discrètes (données de commande).

# 1.La valeur du tarif est de 7.0, 7 si 91 ou moins.Plus de 91 14.1, 14 pour 454 ou moins.S'il dépasse 454 et 31 ou moins, il est converti en 2 et s'il dépasse 31 et 3
for dataset in combine:
    dataset.loc[ dataset['Fare'] <= 7.91, 'Fare'] = 0
    dataset.loc[(dataset['Fare'] > 7.91) & (dataset['Fare'] <= 14.454), 'Fare'] = 1
    dataset.loc[(dataset['Fare'] > 14.454) & (dataset['Fare'] <= 31), 'Fare']   = 2
    dataset.loc[ dataset['Fare'] > 31, 'Fare'] = 3
    dataset['Fare'] = dataset['Fare'].astype(int)

train_df = train_df.drop(['FareBand'], axis=1)
combine = [train_df, test_df]
    
train_df.head(10)

Recommended Posts

Python: prévision de survie de navire, partie 2
Python: prévision de survie des navires, partie 1
Python: prévision de survie des navires, partie 3
QGIS + Python Partie 2
QGIS + Python Partie 1
Python: grattage partie 1
Python3 commence la partie 1
Python: grattage, partie 2
Statistiques de prédiction de fonctionnalités python
Mémorandum de base Python partie 2
Mémo de base Python - Partie 2
Mémo de base Python - Partie 1
Traitement d'image avec Python (partie 2)
Etudier Python avec freeCodeCamp part1
Images en bordure avec python Partie 1
Application Python: Pandas Partie 1: Basique
Application Python: Pandas Partie 2: Série
Grattage avec Selenium + Python Partie 1
Python: Apprentissage supervisé: Hyper Paramètres Partie 1
Mémo de grammaire de base Python (1)
Etudier Python avec freeCodeCamp part2
Traitement d'image avec Python (partie 1)
Résolution de Nampre avec Python (partie 2)
Traitement d'image avec Python (3)
Python: prévision du cours de l'action, partie 2
UI Automation Partie 2 en Python
Python: apprentissage supervisé: Hyper Paramètre partie 2
Grattage avec Selenium + Python Partie 2
Principes de base de Python x SIG (1)
Python: prévision du cours de l'action partie 1
Translocation de fichiers CSV avec Python Partie 1
Principes de base de Python x SIG (3)
Jouez des nombres manuscrits avec Python Partie 1
objet perl et classe python partie 2.
Application de Python: Nettoyage des données Partie 1: Notation Python
[Automatisé avec python! ] Partie 1: fichier de configuration
Application Python: Traitement des données # 3: Format des données
Introduction à Python Hands On Partie 1
Etudier Python Part.1 Créer un environnement
Application Python: Numpy Partie 3: Double tableau
Principes de base de Python x SIG (partie 2)
objet perl et classe python partie 1.
Automatisez des tâches simples avec Python Part0
Application Python: visualisation de données partie 1: basique
[Automatisé avec python! ] Partie 2: Fonctionnement des fichiers
Créez un modèle de prédiction de survie pour les passagers du Kaggle Titanic sans utiliser Python