[PYTHON] Analyse des données Titanic 2

Aidemy 2020/10/30

introduction

Bonjour, c'est Yope! Je suis une école littéraire croustillante, mais j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Merci! Ceci est le deuxième article de "Data Analysis Titanic". Ravi de vous rencontrer.

Quoi apprendre cette fois ・ ④ Analyse de motifs, analyse de données (suite de la fois précédente) ・ ③ Mise en forme, création, nettoyage des données (retour) → __ Création de nouvelles fonctionnalités __

④ Analyse de modèles, analyse de données

Analyse du tableau croisé dynamique précédent (corrélation)

・ Lorsque Pclass = 1, la moyenne de Survived est de 0,62, et on peut dire qu'il existe une corrélation significative (positive) qui dépasse 0,5, donc Pclass doit être utilisé comme une caractéristique du modèle. Et. -De même, lorsque Sex = Female, la moyenne de Survived est de 0.74, donc ceci est également utilisé comme une caractéristique du modèle.

Visualisez les données

Créez un histogramme en spécifiant la tranche d'âge

-__ Pour confirmer l'hypothèse selon laquelle «les enfants ont un taux de survie élevé» __, spécifiez la plage de données __Age et divisez-la __. Utilisez ceci pour créer une distribution de données avec __dialog __. -Pour cet histogramme, l'axe horizontal est l'âge, mais l'axe vertical est le nombre de données, c'est-à-dire le nombre de passagers, alors soyez prudent.

-L'histogramme peut être créé avec __ "df.hist ()" __. Combien de classes à créer (combien de données diviser) peuvent être spécifiées par __ "bins =" __ dans l'argument, et quand Survive veut voir le nombre de données de 0 et 1, respectivement __ Vous pouvez spécifier le paramètre avec "by =" __. -Également, comme vu dans le chapitre 1, __Age contient des valeurs manquantes __, supprimez donc d'abord les valeurs manquantes avec dropna.

·code スクリーンショット 2020-10-22 15.12.23.png

・ Résultat (graphique) スクリーンショット 2020-10-22 15.13.00.png

・ En regardant les résultats, nous pouvons voir que __ "0-5 ans" a un taux de survie élevé __. ・ Aussi, en regardant le nombre total de données, nous pouvons voir que le nombre de __ "15-35 ans" est grand __.

Corrélation des caractéristiques avec "valeur de catégorie et valeur numérique"

・ Ensuite, l'histogramme pour chaque âge créé dans la section précédente sera davantage visualisé pour chaque classe __P. -Le code crée un histogramme pour __Survived et Age, et l'écrit de manière à ce qu'il soit divisé par __ "by = train_df ['Pclass']" __.

·code スクリーンショット 2020-10-22 15.29.52.png ・ Graphique (mort) スクリーンショット 2020-10-22 15.30.21.png ・ Graphique (survivant) スクリーンショット 2020-10-22 15.30.36.png

・ D'après ce graphique, __ "Il y a une très grande majorité de décès avec la classe P = 3" "De nombreux survivants avec la classe P = 1" "De nombreux survivants avec l'âge de la classe P = 2 et 3 sont âgés de 0 à 5 ans" __ Tu peux voir ça. On peut dire que les deux sont comme supposé.

Corrélation des fonctionnalités avec la "valeur de la catégorie"

-Créer la relation entre «Survived» et «P class / Sex» lorsque __ «Embarked» __ est __ ['C', 'Q', 'S'] __ dans le tableau croisé dynamique, et __ "plt. Il est illustré par plot () "__.

-Créez le tableau croisé dynamique de la même manière que dans le chapitre 1. N'oubliez pas de spécifier le contenu de __Embarqué cette fois avec une expression conditionnelle __. De plus, comme il existe deux groupes (agrégés), Pclass et Sex, passez-les sous forme de liste. -Sex divise le tableau croisé dynamique créé par male et female et les trie dans l'ordre Pclass. -Ceci est illustré par __ "plt.plot ()" __. L'axe des x est __ ['1', '2', '3'] __, et l'axe des y est le nombre de __ données survivantes __.

-Code (lorsque __Embarked = 'C' __. Les deux autres sont créés de la même manière) (La partie coupée est la même que la fois précédente) スクリーンショット 2020-10-22 16.21.55.png

・ Graphique (uniquement lorsque Embarked = 'C', les deux autres sont des graphiques similaires) スクリーンショット 2020-10-22 16.22.44.png

・ À partir de ce graphique, on peut dire que __ "Le taux de survie des femmes est extrêmement élevé" __. C'est aussi l'hypothèse. Il a également été constaté que, bien que non montré ici, __ "les hommes avec Embarqué = 'Q' ont un taux de survie très faible" __.

Corrélation entre les quantités d'entités avec "valeur de catégorie" et les quantités d'entités avec "valeur numérique"

-Cette fois, remplacez la partie __ "classe P" de la section précédente par "Survived" et la partie "Survived" par "Fare", et montrez-les exactement de la même manière. -Une fois que la relation entre «Fare» et «Survived / Sex» est créée dans le tableau croisé dynamique, l'étape suivante consiste à la diviser selon que Survived est 0 ou 1. Cette fois, il est représenté par __subplot __. __ Vous pouvez le faire avec "plt.subplot ()" . L'axe horizontal correspond à __ "Sexe" __ L'axe vertical correspond à __ "Fare" __ Un graphique à barres ( plt.bar () __) est défini, la gauche est __ "Survived == 0" __ et la droite est __ Réglez de sorte que "Survived == 1" __.

③ Mise en forme, création, nettoyage des données

-De là, __feature conversion / création / achèvement __ est effectuée.

Suprimmer les données

-D'abord, comme décidé au chapitre 1, supprimer __ "Ticket" et "Cabin" avec de nombreux défauts et doublons __. -Utiliser __ "drop (axis = 1)" __ car la colonne est supprimée.

Créer de nouvelles fonctionnalités

-De même, __ "Nom" et "Identifiant du passager" qui sont clairement non corrélés avec Survived sont également supprimés __, mais les __ titres (Mr, Mrs, Dr, etc.) inclus dans "Name" et Survived Il peut y avoir une corrélation __, alors vérifiez-la. -Pour extraire le titre de Name, utilisez __ expression régulière __. Pour extraire la partie qui correspond à l'expression régulière des données de type str, utilisez __ "str.extract ('regular expression')" . L'expression régulière cette fois est __ '([A-Za-z] +) \ .'. Ceci est exprimé comme ceci parce qu'il y a plusieurs majuscules et minuscules avant le "." Dans le titre comme "Dr.". De plus, __ "expand = False" __ est spécifié dans ce deuxième argument, qui indique que les données extraites sont renvoyées dans DataFrame. -Ce produit extrait est stocké dans une nouvelle colonne (montant de la fonctionnalité) appelée __ 'Titre' __. -La relation entre __ 'Title' et 'Sex' __ est __ "tabulation croisée" __. Dans cet exemple, il s'agit d'une agrégation de combien d'éléments Sex sont apparus pour chaque catégorie de titre, comme Dr. et Mme . -Utilisez la fonction __ "pd.crosstab ()" __ pour effectuer une tabulation croisée. Passez les données correspondant à la ligne de résultat ( 'Titre' __ dans ce cas) au premier argument, et les données correspondant à la colonne de résultat ( 'Sex' __) au deuxième argument.

・ Code![Capture d'écran 2020-10-23 15.28.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/3a3d54fa-669e-ec58- d0cd-c0463cabf909.png)

・ Résultat (seulement une partie)![Capture d'écran 2020-10-23 15.29.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/b946ce52 -b42c-6610-b702-733193b204d0.png)

・ Parmi les titres qui apparaissent ici, ceux qui sont moins fréquents sont résumés dans l'autre cadre appelé __ "'Rare'" __. Remplacez également "Mile" par "Manque" et "Mme" par "Madame", qui ont la même signification. Ces remplacements peuvent être effectués avec __ "replace ()" __. ・ Une fois que vous avez atteint ce point, créez un tableau croisé dynamique et vérifiez la corrélation.

・ Code![Capture d'écran 2020-10-23 15.53.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/f5fbcf9e-4689-7002- c398-1e91950f9a23.png)

-Pour ce titre, je veux traiter chaque élément comme une valeur numérique, alors convertissez-le en __ {"Mr": 1, "Miss": 2, "Mrs": 3, "Master": 4, "Rare": 5} __ Faire. -La méthode peut être convertie en préparant la table de correspondance ci-dessus (dictionnaire) et en appliquant la fonction __ "map ()" __ à l'ensemble de données ['Title']. -Lorsque l'exécution suivante est terminée, supprimez __ "Nom" et "ID du passager" comme prévu à l'origine __.

・ Code![Capture d'écran 2020-10-23 16.06.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/5943862b-98ea-c3c3- 5043-4354df7e6780.png)

・ Résultat![Capture d'écran 2020-10-23 16.06.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/5943862b-98ea-c3c3- 5043-4354df7e6780.png)

Convertir des données à valeurs multiples en données binaires

-En utilisant la fonction __map () __ utilisée dans la section précédente, l'étape suivante consiste à convertir __ données à valeurs multiples en données binaires __. -Ici, convertissez __ 'Sex' __ en mâle: 0, femelle: 1. -Si __ type de données __ est spécifié dans l'argument de la méthode __astype () __, un nouveau DataFrame avec tous les types de données spécifiés de toutes les colonnes modifiées est renvoyé. Puisque nous voulons créer tous les types int cette fois, spécifiez int dans l'argument.

·code スクリーンショット 2020-10-24 10.52.27.png

Compléter le montant de la fonction Âge

-Après avoir supprimé, converti et créé des données, effectuez __complement __. L'achèvement consiste à __ deviner et affecter __ valeur à Null ou NaN. -Tout d'abord, complétez les données numériques continues __ "Âge" __. Il existe les trois méthodes de complémentation suivantes. 1: Générer __ nombre aléatoire en se référant à la moyenne __ 2: Corrélé __ Se référer à d'autres quantités de fonctionnalités __ 3: Combinez 1 et 2 __, plus précisément, générez un nombre aléatoire en référence à la moyenne et à l'écart type

・ Cette fois, la méthode __ "2" __ est utilisée. Plus précisément, il existe deux grandeurs de caractéristiques qui sont en corrélation avec «Âge»: __ «Sexe» et «Classe P» . En référence à ces deux grandeurs caractéristiques, la valeur estimée de l'âge ( âge intermédiaire__) est obtenue. -Tout d'abord, préparez un tableau vide de __2 lignes et 3 colonnes pour stocker la valeur de Age __. Lors de la création d'un tableau parce que la taille spécifique de la matrice est connue de cette manière, il est préférable d'utiliser __ "np.zeros ()" . En spécifiant la forme de la matrice dans l'argument, il est possible de créer un tableau ( pratiquement vide __) avec toutes les valeurs 0.

・ Ensuite, calculez la valeur estimée de Age (intermediate age). Tout d'abord, extrayez la valeur de «Age» pour toutes les combinaisons de «Ex» et «Pclass» (à l'exclusion de NaN). Puisqu'il existe des combinaisons __ "2 * 3 façons" __, la taille de la matrice est spécifiée comme __ (2,3) __. D'un autre côté, si vous utilisez __ "median ()" __ pour obtenir la __ médiane __, ce sera l'âge moyen. -Stockez la valeur médiane dans chaque cas dans le tableau de (2,3) et terminez.

・ Code![Capture d'écran 2020-10-24 11.45.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/8635098f-1cc3-b47d- 3fde-5d38456d4077.png)

·résultat スクリーンショット 2020-10-24 11.46.09.png

Convertir les valeurs continues en valeurs discrètes

AgeBand -Après avoir terminé Age, convertissez la valeur continue Age entière en __ valeur discrète __. Ceci est fait pour faciliter la prédiction en spécifiant __ range et en divisant __ (= conversion en données discrètes) comme indiqué dans la section de la directive "Création" au chapitre 1. -La conversion en valeurs discrètes est appelée __ "traitement de binning" __ ou __ "division de bin" __. Pour ce faire, utilisez __ "pd.cut ()" __. Les données sont transmises au premier argument et __ combien de divisions de données sont spécifiées dans le deuxième argument. Cette fois, il sera divisé en 5 parties et stocké sous forme de données discrètes dans une nouvelle quantité de fonctionnalités appelée __ "AgeBand" __.

-Aussi, je veux vérifier la corrélation entre AgeBand et Survived, donc je crée également un __pivot table __.

・ Code![Capture d'écran 2020-10-24 15.05.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/7e4a2eb9-9049-f7bf- 089f-9bc99492ab70.png)

-Ensuite, l'âge converti en valeurs discrètes est converti en données __order . Plus précisément, en se référant à AgeBand, si Age est __ "0 ~ 16", il est converti en 0, s'il est "16 ~ 32", il est converti en 1, s'il est "32 ~ 48", il est converti en 2, et s'il est "48 ~ 64", il est converti en 3. .. -La méthode de conversion consiste à extraire la plage de'Age'avec __loc [expression conditionnelle, colonne à convertir] __ et à la remplacer par la valeur numérique ci-dessus. ・ Lorsque vous avez terminé jusqu'à présent, supprimez AgeBand avec __drop () __.

・ Code![Capture d'écran 2020-10-24 15.06.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/91f81220-3eec-8b5e- a75e-54730478ecb5.png)

Créer de nouvelles fonctionnalités

FamilySize -Comme indiqué dans "Création" de la politique, créez un nouveau montant de caractéristiques appelé __ "Taille de la famille" __ en combinant les montants de caractéristiques __ "Parch" et "Sibsp" __ du même système. Cette quantité de caractéristiques représente __ "nombre de familles" __. -La méthode consiste généralement à __ simplement extraire les deux colonnes et à les ajouter ensemble __. Cependant, comme je suis également inclus dans le «nombre de familles», n'oubliez pas le __ «+1» __ pour ce montant. -Lors de la création d'une nouvelle quantité de fonctionnalités, prenez la moyenne avec Survived comme avant et vérifiez la __corrélation __.

・ Code![Capture d'écran 2020-10-24 15.07.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/20905888-8aa5-75a6- c0de-58a3afe6aa48.png)

IsAlone -Le FamilySize ci-dessus est classé comme __ "simple ou familial" __ pour le rendre plus abstrait. Autrement dit, si FamilySize est 1, il est converti en "IsAlone = 1", sinon il est converti en "IsAlone = 0". -Comme méthode de création, __ Tout d'abord, créez une quantité de caractéristiques appelée __IsAlone avec toutes les valeurs définies sur "0", et convertissez-la en "1" uniquement lorsque FamilySize = 1 (utilisez __loc () __). ・ Lorsque vous atteignez ce point, supprimez __Parch, SibSp et FamilySize __.

・ Code![Capture d'écran 2020-10-24 15.07.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/0bac092b-b650-d823- 22d6-f72c14bf151b.png)

Age*Class -Ici, nous créons une fonction artificielle appelée __ "Âge * Classe" __ qui est pondérée en multipliant "l'âge" par le "grade de la cabine". Pour le faire, il suffit d'extraire Age et Pclass tels quels.

Compléter avec la valeur la plus fréquente Embarqué

-Comme vu dans le chapitre 1, il y a deux valeurs manquantes dans __Embarqué des données d'entraînement __. Pour cette valeur manquante, commencez par __delete __ et remplacez cette partie par __ valeur la plus fréquente __. À propos, la valeur la plus fréquente est __ "S" __. -La valeur la plus fréquente peut être obtenue avec __ "mode ()" __. De plus, puisque nous ne voulons obtenir que la valeur la plus fréquente (l'index n'est pas nécessaire), nous obtenons uniquement la colonne avec [0]. -La valeur la plus fréquente acquise est stockée dans la variable freq_port et complétée par __ "fillna (freq_port)" __.

·code スクリーンショット 2020-10-24 15.41.33.png

-Aussi, comme Sex etc., Embarked est une valeur de catégorie, donc elle est convertie en __ valeur numérique comme __ {'S': 0, 'C': 1, 'Q': 2} __. .. Utilisez la fonction __map () __. Utilisez également __astype (int) __.

·code スクリーンショット 2020-10-24 15.54.28.png

Compléter les données numériques Tarif

-Il n'y a qu'une seule valeur manquante dans __Fare des données de test __. La valeur médiane (median) remplace cette valeur manquante. -De plus, comme Age, __Fare, qui est une valeur continue, est converti en une valeur discrète __. Stockez la version convertie dans une nouvelle quantité de fonctionnalités appelée FareBand. Les valeurs discrètes sont calculées en divisant le tarif en quatre parties. -Dans le cas de Age, la plage a été divisée par __ "cut ()" __, mais ceci est utilisé lorsque __ "divise de sorte que la plage soit égale" __. Par contre, dans ce tarif, «__qcut () __» utilisé lors de la «division de sorte que le nombre de __éléments inclus dans la plage __ soit pair» est utilisé.

・ Code![Capture d'écran 2020-10-24 17.00.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/2e191c9f-1baf-a732- b0c1-cebc72c7d1e8.png)

-Reportez-vous à cette FareBand et remplacez Fare par une valeur discrète. Cette fois, __ "~ 7,91" vaut 0, "7,91 ~ 14,454" vaut 1, "14,454 ~ 31" vaut 2, "31 ~" vaut 3__, etc. -La méthode de conversion est la même que pour Age __ "loc [expression conditionnelle, colonne à convertir]" __.

·code スクリーンショット 2020-10-24 16.59.52.png

Sommaire

・ La corrélation avec la variable cible __ "Survived" a été étudiée __, et ceux avec une corrélation significative ont été utilisés tels quels, et ceux sans corrélation significative ont été extraits du titre Tirle. Par exemple, vous pouvez retirer la partie __ de la variable et créer une nouvelle quantité de caractéristiques __, ou vous pouvez créer une nouvelle quantité de caractéristiques en combinant Parch et SibSp __ pour créer FamilySize. -En outre, les __ valeurs continues telles que l'âge et le tarif sont converties en valeurs discrètes pour convertir les quantités d'entités. __ S'il contient des valeurs manquantes, utilisez la médiane ou les valeurs les plus fréquentes pour compléter les valeurs __. -Depuis que le sexe et embarqué sont des données telles que [homme, femme] [S, C, Q], remplacez-les par des données numériques telles que __ [0,1] [0,1,2] __.

Cette fois, c'est fini. Merci d'avoir lu jusqu'à la fin.

Recommended Posts

Analyse des données Titanic 2
Analyse des données Titanic 1
Analyse des données Titanic 3
Analyse de données python
J'ai essayé l'analyse factorielle avec des données Titanic!
Analyse des données avant la génération de fonctionnalités titanesques de Kaggle
Analyse de données avec python 2
Analyse des données à l'aide de xarray
Présentation de l'analyse de données python
Modèle d'analyse de données Python
Analyse de données avec Python
J'ai essayé d'analyser les principaux composants avec les données du Titanic!
Mon conteneur d'analyse de données python
Xarray de bibliothèque d'analyse de données multidimensionnelle
Python pour l'analyse des données Chapitre 4
[Python] Notes sur l'analyse des données
Notes d'apprentissage sur l'analyse des données Python
Python pour l'analyse des données Chapitre 2
Wrap Analysis part1 (préparation des données)
Analyse de données à l'aide de pandas python
Conseils et précautions lors de l'analyse des données
Python pour l'analyse des données Chapitre 3
Analyse des données Twitter | Analyse des tendances
Faisons l'analyse des données de naufrage du Titanic comme ça
Première analyse de données satellitaires par Tellus
Concours de prédiction de données en 3 étapes (titanesque)
Modèle de prétraitement pour l'analyse des données (Python)
Expérience de réussite du test d'analyse des données de la version de novembre 2020
Analyse de données pour améliorer POG 3 ~ Analyse de régression ~
Recommandation d'analyse des données à l'aide de MessagePack
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Analyse de données à partir de python (visualisation de données 1)
Analyse de données à partir de python (visualisation de données 2)
Traitement des données 2 Analyse de divers formats de données
Bibliothèque d'analyse de données multidimensionnelle xarray Partie 2
Visualisation et analyse des informations de localisation des données Twitter Stava
Outil de visualisation Python pour le travail d'analyse de données
Vérifiez les données brutes avec Kaggle's Titanic (Kaggle ⑥)
Analyse des données, que faites-vous après tout?
Le traitement des données
[Python] Première analyse de données / apprentissage automatique (Kaggle)
Création d'une application d'analyse de données à l'aide de Streamlit
Analyse parabolique
Analyse de données à partir de python (pré-traitement des données-apprentissage automatique)
[Analyse des données] Analysons les actions automobiles américaines
J'ai suivi une formation à l'analyse de données Python à distance
Environnement d'analyse de données centré sur Datalab (+ GCP)
Préparation à l'examen d'analyse de données certifié Python 3 Engineer
Prétraitement dans l'apprentissage automatique 1 Processus d'analyse des données
JupyterLab Basic Setting 2 pour l'analyse des données (pip)
Configuration de base de JupyterLab pour l'analyse des données (pip)
Analyse des données pour améliorer POG 2 ~ Analyse avec le notebook jupyter ~
Préparer un environnement de langage de programmation pour l'analyse des données
[CovsirPhy] Package Python COVID-19 pour l'analyse des données: chargement des données
Test d'analyse des données de certification d'ingénieur Python3