[PYTHON] Vous serez ingénieur dans 100 jours ――Jour 78 ――Programmation ――À propos de l'apprentissage automatique 3

Cliquez ici jusqu'à hier

Vous deviendrez ingénieur dans 100 jours - Jour 76 - Programmation - À propos de l'apprentissage automatique

Vous deviendrez ingénieur dans 100 jours-70-Programmation-À propos du scraping

Vous deviendrez ingénieur dans 100 jours - Jour 66 - Programmation - À propos du traitement du langage naturel

Vous deviendrez ingénieur dans 100 jours - Jour 63 - Programmation - À propos de la probabilité 1

Vous deviendrez ingénieur dans 100 jours - Jour 59 - Programmation - À propos des algorithmes

Vous deviendrez ingénieur dans 100 jours --- Jour 53 --Git --À propos de Git

Vous deviendrez ingénieur dans 100 jours - Jour 42 --Cloud --À propos des services cloud

Vous deviendrez ingénieur dans 100 jours - Jour 36 --Base de données --À propos de la base de données

Vous deviendrez ingénieur dans 100 jours-24 jours-Python-Bases du langage Python 1

Vous deviendrez ingénieur dans 100 jours --Jour 18 --Javascript --Les bases de JavaScript 1

Vous deviendrez ingénieur dans 100 jours - Jour 14 --CSS --CSS Basics 1

Vous deviendrez ingénieur dans 100 jours - Jour 6 --HTML - Bases du HTML 1

Cette fois, c'est la suite de l'histoire de l'apprentissage automatique.

À propos du flux de traitement des données de l'apprentissage automatique

Le flux de travail lors de l'intégration de l'apprentissage automatique est le suivant.

  1. Décidez de l'objectif
  2. Acquisition de données
  3. Compréhension / sélection / traitement des données
  4. Création d'un magasin de données (ensemble de données)
  5. Création de modèles
  6. Vérification de l'exactitude
  7. Mise en œuvre du système

Parmi ceux-ci, 2-3 parties sont appelées prétraitement des données.

Cette fois, je voudrais parler de la compréhension des données dans ce prétraitement.

À propos de la compréhension des données

Expliquons grossièrement à quoi ressemble le travail de prétraitement des données dans l'apprentissage automatique, mais faisons-le avec du code.

Le langage est Python Les bibliothèques pour l'apprentissage automatique sont «Pandas» et «Numpy» La bibliothèque de visualisation utilise «seaborn», «matplotlib».

** Chargement de la bibliothèque **

#Charger la bibliothèque
import pandas as pd 
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

%matplotlib inline

** Détails des données **

Les données utilisées cette fois sont la «liste des passagers du Titanic».

PassengerID:ID du passager
Survived:Résultat de survie(0=mort, 1=Survie)
Pclass:Classe de passagers(1 semble être le meilleur)
Name:Nom du passager
Sex:sexe
Age:âge
SibSp Nombre de frères et de conjoints
Parch Nombre de parents et d'enfants
Numéro de billet
Frais d'embarquement
Numéro de chambre cabine
Port embarqué à bord

Supposons que vous ayez un fichier appelé titanic_train.csv.

** Lire le fichier **

Dans la bibliothèque pandas, il existe de nombreuses méthodes de lecture pour le format de fichier appelé read_xxx, alors utilisez-les pour lire le fichier. Cette fois, c'est un fichier CSV, donc c'est read_csv.

La bibliothèque pandas est une bibliothèque qui gère les formats de données appelés cadres de données tabulaires. Chargez le fichier dans le bloc de données.

#Lire les données du fichier
file_path = 'data/titanic_train.csv'
train_df = pd.read_csv(file_path,encoding='utf-8')
train_df.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.25 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.925 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.1 C123 S
4 5 0 3 Allen, Mr. William Henry male 35 0 0 373450 8.05 NaN S

Les données ressemblent à ceci. Les blocs de données vous permettent de travailler avec des données en lignes et en colonnes.

** Vérifier les données **

Tout d'abord, vérifiez la trame de données. Voyons quel genre de colonnes il y a.


print(train_df.columns)
print(len(train_df.columns))

Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'], dtype='object') 12

Vient ensuite la confirmation du type de données. Dans la bibliothèque pandas, le type de données est fixe pour chaque colonne. Il faut opérer selon le type.

train_df.dtypes

PassengerId int64 Survived int64 Pclass int64 Name object Sex object Age float64 SibSp int64 Parch int64 Ticket object Fare float64 Cabin object Embarked object dtype: object

ʻObject` est un type de données tel qu'une chaîne de caractères, et les autres sont des types de données numériques.

** Référence de colonne ** Vous pouvez également faire référence aux données colonne par colonne dans le bloc de données. Si vous spécifiez une chaîne de caractères pour une colonne ou un nom de colonne de type liste pour plusieurs colonnes, vous ne pouvez faire référence qu'à ces données.

Trame de données [nom de la colonne] Cadre de données [[nom de la colonne, nom de la colonne]]

** Agrégation de base des trames de données **

La première chose à faire lorsque vous obtenez les données est la tabulation de base. pandas vous permet de calculer des statistiques de base pour les trames de données.

#Statistiques de base des données numériques
train_df.describe()
PassengerId Survived Pclass Age SibSp Parch Fare
count 891 891 891 714 891 891 891
mean 446 0.383838 2.308642 29.699118 0.523008 0.381594 32.204208
std 257.353842 0.486592 0.836071 14.526497 1.102743 0.806057 49.693429
min 1 0 1 0.42 0 0 0
25% 223.5 0 2 20.125 0 0 7.9104
50% 446 0 3 28 0 0 14.4542
75% 668.5 1 3 38 1 0 31
max 891 1 3 80 8 6 512.3292

Obtenez les statistiques de base pour les colonnes numériques. Vous pouvez voir la quantité de données disponibles et à quoi elles ressemblent.

** Confirmer le type de données ** Étant donné que les données de type chaîne de caractères ne peuvent pas être agrégées de base, quelle catégorie de données et combien y en a-t-il? Il peut être calculé par une méthode appelée «value_counts».

Trame de données ['nom de la colonne']. Value_counts ()

train_df['Pclass'].value_counts()

3 491 1 216 2 184 Name: Pclass, dtype: int64

** Agrégation Group-by **

Utilisez group by pour effectuer une agrégation en utilisant plusieurs colonnes.

Trame de données [['nom de colonne', 'nom de colonne', 'nom de colonne']]. Groupby (['nom de colonne', 'nom de colonne']). Fonction d'agrégation ()

#Confirmation du nombre de survivants par sexe(0:mort, 1:Survie)
train_df[['Sex','Survived','PassengerId']].groupby(['Sex','Survived']).count()
PassengerId
Sex Survived
female 0 81
1 233
male 0 468
1 109

L'agrégation Group-by vous permet d'effectuer diverses agrégations. (Moyenne, minimum, maximum, etc.)

En regardant cela, il semble qu'il y ait une différence considérable entre le taux de survie des femmes et le taux de survie des hommes. Beaucoup d'hommes sont «Survived = 0» et peuvent être vus mourant dans des bateaux écrasants.

** Tableau croisé **

Vous pouvez effectuer une tabulation croisée (en comptant le nombre de pièces) en regroupant plusieurs colonnes ensemble.

pd.crosstab (bloc de données [nom de colonne], bloc de données [nom de colonne])

pd.crosstab ([bloc de données [nom de colonne], bloc de données [nom de colonne]], [bloc de données [nom de colonne], bloc de données [nom de colonne]])

pd.crosstab([train_df['Sex'], train_df['Survived']], train_df['Pclass'])
Pclass 1 2 3
Sex Survived
female 0 3 6 72
1 91 70 72
male 0 77 91 300
1 45 17 47
pd.crosstab([train_df['Sex'], train_df['Survived']], [train_df['Pclass'], train_df['Embarked']],margins=True)
Pclass 1 2 3
Embarked C Q S C Q S C Q S
Sex Survived
female 0 1 0 2 0 0 6 8 9 55
1 42 1 46 7 2 61 15 24 33
male 0 25 1 51 8 1 82 33 36 231
1 17 0 28 2 0 15 10 3 34
All 85 2 127 17 3 164 66 72 353

Nous examinerons de quel type de données il s'agit en effectuant une telle agrégation pour chaque colonne.

** Visualisation de données **

Vous pouvez visualiser les données en utilisant matplotlib.

Les graphiques peuvent être créés à partir de données telles que des histogrammes, des graphiques à barres et des graphiques en nuage de points. Dessinons un histogramme.

L'histogramme est un graphique lorsque l'axe horizontal est la valeur et l'axe vertical est le nombre. Le bac est le nombre d'étapes lors de la division des données en étapes.

** Afficher l'histogramme **

Cadre de données ['nom de la colonne']. Plot (kind = 'hist', bin = nombre de cases)

`Cadre de données ['nom de la colonne']. Hist (bin = nombre de cases)

train_df['Fare'].plot(figsize=(16, 5),kind='hist',bins=20)
plt.show()

image.png

train_df['Age'].plot(figsize=(16, 5),kind='hist',bins=20)
plt.show()

image.png

** Spécification de l'état **

En ajoutant des conditions d'extraction au bloc de données, vous pouvez diviser ce que vous souhaitez visualiser en couches.

Trame de données [expression conditionnelle] ['nom de la colonne']

conditions symbole
et condition &
ou condition |
En cas de non condition ~
#Extraire des trames de données en spécifiant des conditions
train_df[train_df['Survived']==0]['Age'].head()

0 22.0 4 35.0 5 NaN 6 54.0 7 2.0 Name: Age, dtype: float64

#Dessinez un histogramme séparément pour les survivants et les morts par âge
train_df[train_df['Survived']==0]['Age'].hist(figsize=(16,5),bins=16,color="#F8766D", alpha=0.3)
train_df[train_df['Survived']==1]['Age'].hist(figsize=(16,5),bins=16,color="#5F9BFF", alpha=0.3)
plt.show()

image.png

#Pour les hommes uniquement, dessinez un histogramme séparément pour les survivants et les morts par âge
train_df[(train_df['Survived']==0)&(train_df['Sex']=='male')]['Age'].hist(figsize=(16,5),bins=10,color="#F8766D", alpha=0.3)
train_df[(train_df['Survived']==1)&(train_df['Sex']=='male')]['Age'].hist(figsize=(16,5),bins=10,color="#5F9BFF", alpha=0.3)
plt.show()

image.png

#Seules les femmes dessinent un histogramme par âge, séparant les survivants et les morts
train_df[(train_df['Survived']==0)&(train_df['Sex']=='female')]['Age'].hist(figsize=(16,5),bins=10,color="#F8766D", alpha=0.3)
train_df[(train_df['Survived']==1)&(train_df['Sex']=='female')]['Age'].hist(figsize=(16,5),bins=10,color="#5F9BFF", alpha=0.3)
plt.show()

image.png

La visualisation des résultats de diverses tabulations permet de voir plus facilement les différences et de trouver plus facilement des éléments susceptibles d'être efficaces pour la prédiction à partir des données.

On constate qu'il existe une différence considérable en termes de vie et de mort entre la répartition des hommes et celle des femmes.

Ensuite, affichons le diagramme de dispersion.

** Afficher le diagramme de dispersion **

Le diagramme de dispersion est «scatter». Puisqu'il s'agit d'une visualisation utilisant deux valeurs numériques, spécifiez deux colonnes de certaines valeurs numériques.

Bloc de données [['nom de la colonne', 'nom de la colonne']]. Plot (x = 'nom de la colonne horizontale', y = 'nom de la colonne verticale', kind = 'scatter')

train_df[['Fare','Age']].plot(x='Fare', y='Age', figsize=(16, 9),kind='scatter')
plt.show()

image.png

Je veux colorier par «sexe», mais comme les données sont une chaîne de caractères, je dois la numéroter. Ajoutez une colonne et remplacez la valeur par le type converti en valeur numérique.

** Ajouter une colonne pour le bloc de données **

Trame de données ['nom de la colonne'] = valeur

** Remplacement des caractères dans la trame de données **

Dataframe.replace ({'chaîne de caractères avant remplacement': valeur après remplacement})

#Quantification du genre(0 hommes,1 femme)
train_df['Sex2'] = train_df['Sex'].replace({'male':0,'female':1})
train_df.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked Sex2
0 1 0 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.25 NaN S 0
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38 1 0 PC 17599 71.2833 C85 C 1
2 3 1 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.925 NaN S 1
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.1 C123 S 1
4 5 0 3 Allen, Mr. William Henry male 35 0 0 373450 8.05 NaN S 0

À la toute fin, vous aurez une colonne avec le sexe 0,1.

Vous avez maintenant ajouté une colonne de valeurs avec «gender» comme nombre.

Je vais le colorier et dessiner un diagramme de dispersion.

#Coloration de la carte de dispersion(0 hommes,1 femme)
train_df[['Fare','Age']].plot(x='Fare', y='Age', figsize=(16, 5),kind='scatter',c=train_df['Sex2'],cmap='winter')
plt.show()

image.png

Codons en couleur les survivants et les morts.

#Coloration de la carte de dispersion(0:mort, 1:Survie)
train_df[['Fare','Age']].plot(x='Fare', y='Age', figsize=(16, 5),kind='scatter',c=train_df['Survived'],cmap='winter')
plt.show()

image.png

Je pense que c'est assez similaire lorsque le code couleur est défini par sexe et vie ou mort.

** Visualisation avec seaborn **

Il existe une bibliothèque appelée seaborn pour afficher matplotlib un peu plus magnifiquement. Il existe également une méthode de visualisation qui ne peut pas être exprimée par «matplotlib» dans «seaborn La» Ibrari.

Un diagramme de dispersion des données numériques est affiché ensemble.

sns.pairplot (bloc de données, teinte" colonne de type de type chaîne ")

#S'il y a des valeurs manquantes, certaines ne peuvent pas être affichées, alors remplissez les valeurs manquantes avec la valeur moyenne.
for name in ['Age']:
    train_df[name] = train_df[name].fillna(train_df[name].mean())

train_df['Survived2'] = train_df['Survived'].replace({0:'death',1:'survived'})
train_df['Sex2'] = train_df['Sex'].replace({'male':0,'female':1})

# pairplot
#Vérifier la corrélation entre les séries de données
#Un graphique à barres est affiché pour les mêmes données et un diagramme de dispersion est affiché pour différentes données.
sns.pairplot(train_df[['Pclass','Age','Fare','Sex2','Survived2']], hue="Survived2")
plt.show()

image.png

factorplot

factor plot peut trier les graphiques par facteur.

factorplot (x = 'nom de la colonne horizontale', y = 'nom de la colonne verticale', hue = 'type nom de la colonne', col = 'nom de la colonne', data = bloc de données)

# factorplot (Diagramme de comparaison de types)
sns.factorplot(x='Pclass', y='Age', hue='Survived', col='Sex2', data=train_df)
plt.show()

image.png

Vous pouvez le changer en moustaches de boîte en ajoutant kind = 'box'.

sns.factorplot(x='Pclass', y='Age', hue='Survived', col='Sex2',kind='box', data=train_df)
plt.show()

image.png

lmplot

C'est un graphique qui visualise le diagramme de dispersion et la ligne de régression linéaire entre deux variables.

sns.lmplot (x = colonne de l'axe horizontal, y = colonne de l'axe vertical, teinte = 'chose à colorier', data = bloc de données, x_bins = valeur de la case)

#Précisez la tranche d'âge
generations = [10,20,30,40,50,60,70,80]
#Dessinez les données démographiques des clients, le taux de survie par âge et la droite de régression
sns.lmplot('Age', 'Survived', hue='Pclass', data=train_df,hue_order=[1,2,3], x_bins=generations)
plt.show()

image.png

Résumé

Pour comprendre les données, agréger le tout pour comprendre quel type de données est disponible et essayer diverses visualisations par stratification. Voyons quel type de distribution de données il a.

Après avoir examiné les données, organisez le type de données pouvant être utilisé pour la prédiction. À partir de là, nous corrigerons les données pouvant être utilisées pour l'apprentissage automatique.

Tout d'abord, apprenons le déroulement approximatif.

22 jours avant de devenir ingénieur

Informations sur l'auteur

HP d'Otsu py: http://www.otupy.net/

Youtube: https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter: https://twitter.com/otupython

Recommended Posts

Vous serez ingénieur dans 100 jours ――Jour 81 ――Programmation ――À propos de l'apprentissage automatique 6
Vous serez ingénieur dans 100 jours ――Jour 82 ――Programmation ――À propos de l'apprentissage automatique 7
Vous serez ingénieur dans 100 jours ――Jour 79 ――Programmation ――À propos de l'apprentissage automatique 4
Vous serez ingénieur dans 100 jours ――Jour 76 ――Programmation ――À propos de l'apprentissage automatique
Vous serez ingénieur dans 100 jours ―― Jour 80 ―― Programmation ―― À propos de l'apprentissage automatique 5
Vous serez ingénieur dans 100 jours ――Jour 78 ――Programmation ――À propos de l'apprentissage automatique 3
Vous serez ingénieur dans 100 jours ――Jour 84 ――Programmation ――À propos de l'apprentissage automatique 9
Vous serez ingénieur dans 100 jours ――Jour 83 ――Programmation ――À propos de l'apprentissage automatique 8
Vous serez ingénieur dans 100 jours ――Jour 77 ――Programmation ――À propos de l'apprentissage automatique 2
Vous serez ingénieur dans 100 jours ――Jour 85 ――Programmation ――À propos de l'apprentissage automatique 10
Vous serez ingénieur dans 100 jours ――Jour 71 ――Programmation ――À propos du scraping 2
Vous serez ingénieur dans 100 jours ――Jour 74 ――Programmation ――À propos du scraping 5
Vous serez ingénieur dans 100 jours ――Jour 73 ――Programmation ――À propos du scraping 4
Vous serez ingénieur dans 100 jours ――Jour 75 ――Programmation ――À propos du scraping 6
Vous deviendrez ingénieur dans 100 jours --Jour 68 --Programmation --A propos de TF-IDF
Vous serez ingénieur dans 100 jours ――Jour 70 ――Programmation ――À propos du grattage
Vous serez ingénieur dans 100 jours ――Jour 63 ――Programmation ――À propos de la probabilité 1
Vous serez ingénieur dans 100 jours ――Jour 65 ――Programmation ――A propos de la probabilité 3
Vous serez ingénieur dans 100 jours ――Jour 64 ――Programmation ――À propos de la probabilité 2
Vous serez ingénieur dans 100 jours --Jour 86 --Base de données -
Vous serez ingénieur dans 100 jours ―― Jour 60 ―― Programmation ―― À propos de la structure des données et de l'algorithme de tri
Vous serez ingénieur dans 100 jours - Jour 27 - Python - Exercice Python 1
Vous serez ingénieur dans 100 jours - Jour 34 - Python - Exercice Python 3
Vous devenez ingénieur en 100 jours ――Jour 67 ――Programmation ――A propos de l'analyse morphologique
Vous serez ingénieur dans 100 jours ――Jour 24 ―― Python ―― Bases du langage Python 1
Vous serez ingénieur dans 100 jours ――Jour 30 ―― Python ―― Bases du langage Python 6
Vous serez ingénieur dans 100 jours ――Jour 25 ―― Python ―― Bases du langage Python 2
Vous serez ingénieur dans 100 jours - Jour 29 - Python - Bases du langage Python 5
Vous serez ingénieur dans 100 jours - Jour 33 - Python - Bases du langage Python 8
Vous serez ingénieur dans 100 jours --Jour 26 --Python --Basiques du langage Python 3
Vous devenez ingénieur en 100 jours - Jour 35 - Python - Ce que vous pouvez faire avec Python
Vous serez ingénieur dans 100 jours --Jour 32 --Python --Basiques du langage Python 7
Vous serez ingénieur dans 100 jours --Jour 28 --Python --Les bases du langage Python 4
Devenez bientôt un ingénieur IA! Apprenez complètement Python / AI / Machine learning / Deep learning / Analyse statistique en quelques jours!
Vous devez faire attention aux commandes que vous utilisez quotidiennement dans l'environnement de production.
Créez un environnement interactif pour l'apprentissage automatique avec Python
À propos des tests dans la mise en œuvre de modèles d'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Enregistrement d'apprentissage de la programmation 2ème jour
Jusqu'à ce qu'un ingénieur qui était autrefois frustré par l'apprentissage automatique parvienne à utiliser l'apprentissage automatique au travail
[Apprentissage automatique] Résumons la forêt aléatoire de manière simple à comprendre
Apprentissage automatique dans Delemas (s'entraîner)
À propos de la matrice mixte d'apprentissage automatique
Programmation Python Machine Learning> Mots-clés
Utilisé en EDA pour l'apprentissage automatique
Que diriez-vous d'Anaconda pour créer un environnement d'apprentissage automatique avec Python?
Apprenez le machine learning à tout moment et en tout lieu dans l'environnement Jupyter Notebook à la demande