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 une continuation de l'histoire de l'apprentissage automatique.
Le flux de travail lors de l'intégration de l'apprentissage automatique est le suivant.
Parmi celles-ci, 2-3 parties sont appelées prétraitement des données.
Cette fois, je voudrais créer un data mart à partir de ce prétraitement.
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 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.
La dernière fois, j'ai examiné le contenu de diverses données et demandé quel type de données pouvait être utilisé. Cette fois, nous allons continuer avec cela, en utilisant des données qui semblent utilisables, et les incorporer dans des données pour l'apprentissage automatique.
** Vérifiez les valeurs manquantes **
Lorsque les données sont lues, s'il n'y a pas de données, elles seront traitées comme une valeur manquante sur la trame de données.
Combien de valeurs manquantes sont
Trame de données .isnull (). Sum ()
Vous pouvez vérifier le nombre de valeurs manquantes dans chaque colonne avec.
train_df.isnull().sum()
PassengerId 0 Survived 0 Pclass 0 Name 0 Sex 0 Age 177 SibSp 0 Parch 0 Ticket 0 Fare 0 Cabin 687 Embarked 2 dtype: int64
En regardant cela, il semble que seules certaines colonnes ont des valeurs manquantes. Il semble y avoir un défaut dans «Age», «Cabin» et «Embarked».
N'afficherons que la partie avec des valeurs manquantes.
** Extraire les lignes qui correspondent aux conditions **
Trame de données [expression conditionnelle]
** Extraire les lignes avec des valeurs manquantes **
Trame de données [Trame de données ['nom de la colonne']. Isnull ()]
train_df[train_df['Embarked'].isnull()]
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
61 | 62 | 1 | 1 | Icard, Miss. Amelie | female | 38 | 0 | 0 | 113572 | 80 | B28 | NaN |
829 | 830 | 1 | 1 | Stone, Mrs. George Nelson (Martha Evelyn) | female | 62 | 0 | 0 | 113572 | 80 | B28 | NaN |
En regardant la valeur dans la colonne ʻEmbarked, c'est
NaN`.
Les valeurs manquantes sur le bloc de données sont affichées sous la forme «NaN».
En cas de numéros manquants ·Valeur moyenne ·Médian ・ Valeur arbitraire Dans de nombreux cas, les valeurs manquantes sont complétées par.
Les valeurs de catégorie telles que «Marqué» ne sont pas des nombres et ne peuvent pas être remplacées par des nombres.
Si vous voulez remplir les valeurs manquantes, vous pouvez les remplir avec fillna
.
** Compléter les valeurs manquantes avec des valeurs arbitraires **
Trame de données .fillna (valeur de remplissage)
Si vous souhaitez compléter avec la valeur moyenne de cette colonne, recherchez d'abord la valeur moyenne.
** Calculer la moyenne de la colonne **
Trame de données ['nom de la colonne']. Mean ()
** Trouvez la valeur médiane de la colonne **
Trame de données ['nom de la colonne']. Median ()
print(train_df['Fare'].mean())
print(train_df['Fare'].median())
32.2042079685746 14.4542
#Compléter l'âge avec la valeur moyenne
train_df['Age'] = train_df['Age'].fillna(train_df['Age'].mean())
** Vectorisation des valeurs de catégorie **
Dans l'apprentissage automatique, toutes les valeurs utilisées pour le calcul doivent être des valeurs numériques. Dans le cas d'une valeur de catégorie composée de chaînes de caractères, dans de nombreux cas, à l'exception de certains modèles, elle ne peut pas être utilisée telle quelle en tant que données d'apprentissage automatique.
Par conséquent, il convertit la valeur de la catégorie en une valeur numérique en tant que «vecteur unique».
** Faire de la valeur de catégorie un vecteur one-hot **
«Un vecteur chaud» est les données qui créent une colonne de valeurs de catégorie et définit la valeur à 1 si le nom de la colonne est différent et à 0 si la valeur est différente.
pd.get_dummies (bloc de données [['nom de la colonne']])
#Classification des lieux d'embarquement
train_df["Embarked"] = train_df["Embarked"].fillna('N')
one_hot_df = pd.get_dummies(train_df["Embarked"],prefix='Em')
one_hot_df.head()
Em_C | Em_N | Em_Q | Em_S | |
---|---|---|---|---|
0 | 0 | 0 | 0 | 1 |
1 | 1 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 1 |
3 | 0 | 0 | 0 | 1 |
4 | 0 | 0 | 0 | 1 |
Puisque la colonne ʻEmbarkeda un défaut, elle est transformée en valeur de catégorie après avoir remplacé le défaut par
N`.
Génère une nouvelle trame de données qui est remplacée par 1 là où il y a une valeur de catégorie et 0 là où elle ne l'est pas.
Vous allez créer des colonnes pour chaque type de données. S'il y a trop de types de données, les données seront brutes (presque 0). C'est une bonne idée de créer des variables catégorielles uniquement pour celles qui sont limitées dans une certaine mesure.
** Conversion de nombres et de chaînes ** Nous changerons les données d'une chaîne de caractères en une valeur numérique, ou changerons la valeur numérique en une chaîne de caractères pour en faire des données pouvant être utilisées pour l'apprentissage automatique.
Étant donné que Gender (Sex)
est une chaîne de caractères, il ne peut pas être utilisé pour l'apprentissage automatique tel quel.
Nous convertirons une chaîne de caractères en une valeur numérique.
Cadre de données ['nom de la colonne'] .replace ({valeur: valeur, valeur: valeur ...})
#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 |
Création d'une nouvelle colonne de genre.
Vous pouvez également utiliser replace lors de la conversion d'un nombre en chaîne. Lors du changement de tout le type de données d'une colonne
Trame de données ['nom de la colonne']. Astype (np. Type de données)
** Numérisation **
Calculons l'âge en utilisant l'âge. Si vous arrondissez l'âge par 10 et le divisez, vous obtenez l'âge. Vous pouvez également créer une colonne pour les éléments manquants sans âge.
#Catégorisation par âge
train_df['period'] = train_df['Age']//10
train_df['period'] = train_df['period'].fillna('NaN')
train_df['period'] = train_df['period'].astype(np.str)
period_df = pd.get_dummies(train_df["period"],prefix='Pe')
period_df.head()
Pe_0.0 | Pe_1.0 | Pe_2.0 | Pe_3.0 | Pe_4.0 | Pe_5.0 | Pe_6.0 | Pe_7.0 | Pe_8.0 | |
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
3 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
4 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
** Combiner des trames de données **
Nous combinerons les trames de données nouvellement créées en une seule. Utilisez pd.concat
pour l'assembler.
pd.concat ([bloc de données, bloc de données], axe = 1)
con_df = pd.concat([train_df,period_df],axis=1)
con_df = pd.concat([con_df,one_hot_df],axis=1)
con_df.head(1)
PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | ... | Pe_3.0 | Pe_4.0 | Pe_5.0 | Pe_6.0 | Pe_7.0 | Pe_8.0 | Em_C | Em_N | Em_Q | Em_S | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22 | 1 | 0 | A/5 21171 | 7.25 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Vous avez maintenant concaténé les blocs de données horizontalement.
** Supprimer les données inutiles **
Lors de la combinaison de blocs de données, la colonne d'origine est supprimée car les données avant la conversion ne sont pas nécessaires.
Data frame.drop (['nom de la colonne'], axe = 1)
data_df = con_df.drop(['PassengerId','Pclass','Name','Age','Ticket','Cabin','Embarked','period','Sex'], axis=1)
data_df.head()
Survived | SibSp | Parch | Fare | Sex2 | Pe_0.0 | Pe_1.0 | Pe_2.0 | Pe_3.0 | Pe_4.0 | Pe_5.0 | Pe_6.0 | Pe_7.0 | Pe_8.0 | Em_C | Em_N | Em_Q | Em_S | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 0 | 7.25 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
1 | 1 | 1 | 0 | 71.2833 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
2 | 1 | 0 | 0 | 7.925 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
3 | 1 | 1 | 0 | 53.1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
4 | 0 | 0 | 0 | 8.05 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Toutes les données sont des valeurs numériques. De cette manière, elles peuvent être utilisées comme données finales pour l'apprentissage automatique.
Aujourd'hui, j'ai traité les données et créé un data mart pour l'apprentissage automatique. Nous n'avons introduit que quelques méthodes de traitement aujourd'hui.
Tout d'abord, apprenons le déroulement approximatif. Et une fois que vous l'avez compris dans une certaine mesure, je pense que c'est une bonne idée de trouver des moyens d'améliorer la précision ou d'essayer de nouvelles méthodes.
21 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