Cliquez ici jusqu'à hier
Vous deviendrez ingénieur dans 100 jours-70-Programmation-À propos du scraping
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-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.
Le flux de travail lors de l'intégration de l'apprentissage automatique est le suivant.
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.
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()
train_df['Age'].plot(figsize=(16, 5),kind='hist',bins=20)
plt.show()
** 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()
#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()
#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()
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()
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()
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()
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()
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()
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()
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()
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
HP d'Otsu py: http://www.otupy.net/
Youtube: https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw
Twitter: https://twitter.com/otupython
Recommended Posts