Aidemy 2020/10/30
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 __
・ 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.
-__ 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
・ Résultat (graphique)
・ 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 __.
・ 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 ・ Graphique (mort) ・ Graphique (survivant)
・ 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é.
-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)
・ Graphique (uniquement lorsque Embarked = 'C', les deux autres sont des graphiques similaires)
・ À 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" __.
-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" __.
-De là, __feature conversion / création / achèvement __ est effectuée.
-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.
-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)
-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
-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
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)
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.
-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
-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
-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
・ 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