J'écrirai après celui-là.
Nous avons comparé les valeurs moyennes du tableau croisé dynamique précédent. En conséquence, nous avons trouvé ce qui suit.
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()
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.
#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()
résultat
Décision Considérez Pclass comme une caractéristique du modèle.
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.
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)
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'])
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()
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()
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)
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()
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()
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é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)
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)
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)
# 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()
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()
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)
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