[PYTHON] Comment lire des données originales ou des données externes sur Internet avec scikit-learn au lieu d'un ensemble de données attaché tel que l'iris

De nombreux livres et matériels pédagogiques scikit-learn en ligne utilisent des ensembles de données attachés tels que l'iris et le cancer. Bien sûr, il y a un sentiment de sécurité que les mêmes résultats peuvent être obtenus facilement, mais je pense que beaucoup de gens ont du mal à obtenir un apprentissage en profondeur qui soit en harmonie avec le calendrier. Dans cet article, je vais vous montrer comment lire vos propres données ou données externes sur le net et les analyser avec scicit-learn. (Environnement de vérification: Windows10, Anaconda3, Python3.7.6, Jupyter Notebook 6.0.3) Première version publiée le 23/03/2020

Préparation du fichier CSV

Dans cet article, à titre d'exemple, les données publiées par la communauté d'apprentissage automatique / science des données Kaggle [World Happiness Report ← link](https: //www.kaggle) .com / unsdsn / world-bonheur) est utilisé. J'ai choisi Kaggle parce que j'ai un ensemble de données facile à utiliser pour l'apprentissage automatique, je dois donc m'inscrire en tant qu'utilisateur. Veuillez télécharger à partir du bouton «Télécharger (79 Ko)». Si vous décompressez le fichier zip, vous trouverez 5 fichiers CSV, mais ici nous utiliserons 2019.csv.

Lors de l'utilisation d'autres fichiers

--2019.csv est organisé comme "nom de fonctionnalité sur la première ligne, données sur la deuxième ligne et les suivantes" afin qu'il puisse être facilement lu par la bibliothèque d'analyse de données Python ** pandas **. Pour d'autres données, veuillez mouler en supprimant la ligne d'Excel.

--Si le format est différent, comme un fichier Excel (.xls), chargez-le avec Excel, etc., puis exécutez "Fichier-Enregistrer sous" et sélectionnez le format de fichier CSV. Si le délimiteur peut être sélectionné, laissez-le comme, (virgule).

――Il est plus facile de l'enregistrer dans le dossier où se trouvent les fichiers exécutables Python (fichiers py et ipynb).

Lire le fichier CSV

Vous pouvez le charger directement sans utiliser la bibliothèque, mais pour faciliter le reste du processus, cet article vous montrera comment utiliser les pandas. (Si pandas n'est pas déjà installé, [cet article] Veuillez vous référer à (https://www.sejuku.net/blog/75508) etc. )

import pandas as pd
df = pd.read_csv('2019.csv')

Si le délimiteur est une tabulation, ajoutez l'argument sep = '\ t', et s'il contient du japonais, ajoutez l'argument encoding = 'shift_jis'. df = pd.read_csv ('filename.csv', sep = '\ t', encoding = 'shift_jis')

Si vous souhaitez placer le fichier de données dans un emplacement différent du fichier exécutable, ajoutez df = pd.read_csv ('data / 2019.csv') et un chemin relatif. Référence → Conversion / jugement mutuel du chemin absolu et du chemin relatif avec Python, pathlib

Confirmation du nom de la quantité d'éléments et du nombre de données

print("Confirmation de la clé de jeu de données (nom du montant de la fonction)==>:\n", df.keys())
print('Vérifiez le nombre de lignes et de colonnes dans le dataframe==>\n', df.shape)

Lorsque vous exécutez la commande ci-dessus,

Confirmation de la clé de jeu de données (nom du montant de la fonction)==>:
 Index(['Overall rank', 'Country or region', 'Score', 'GDP per capita',
       'Social support', 'Healthy life expectancy',
       'Freedom to make life choices', 'Generosity',
       'Perceptions of corruption'],
      dtype='object')
Vérifiez le nombre de lignes et de colonnes dans le dataframe==>
 (156, 9)

Il peut être confirmé que les données de 156 échantillons avec 9 caractéristiques peuvent être lues.

Traiter les valeurs manquantes, etc. (ingénierie de la quantité de caractéristiques)

Vérifiez s'il y a des valeurs manquantes (Null) dans les données et vérifiez le type de données pour voir s'il s'agit d'une valeur entière uniquement (int) / d'une valeur numérique comprenant une fraction (float) / une chaîne de caractères ou un mélange de chaînes de caractères et de valeurs numériques (objet). Je vais.

#dataframe Vérifiez le nombre de données non manquantes et le type de données dans chaque colonne
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 156 entries, 0 to 155
Data columns (total 9 columns):
 #   Column                        Non-Null Count  Dtype  
---  ------                        --------------  -----  
 0   Overall rank                  156 non-null    int64  
 1   Country or region             156 non-null    object 
 2   Score                         156 non-null    float64
 3   GDP per capita                156 non-null    float64
 4   Social support                156 non-null    float64
 5   Healthy life expectancy       156 non-null    float64
 6   Freedom to make life choices  156 non-null    float64
 7   Generosity                    156 non-null    float64
 8   Perceptions of corruption     156 non-null    float64
dtypes: float64(7), int64(1), object(1)
memory usage: 11.1+ KB

Vous pouvez confirmer qu'il existe 156 données non nulles ⇒ ** aucune valeur manquante **. Le classement global est un entier, le pays ou la région est une chaîne de caractères, et à part cela, il s'agit d'une valeur numérique comprenant une fraction et le type de données est comme prévu. Si la colonne qui doit contenir les nombres est devenue un objet,

#Extraction d'éléments de type non numérique
objectlist = df[['Entrez le nom de la quantité de fonction']][df['Entrez le nom de la quantité de fonction'].apply(lambda s:pd.to_numeric(s, errors='coerce')).isnull()]
objectlist

En exécutant ↑, vous pouvez extraire les données qui sont traitées comme une chaîne de caractères.

Il n'y avait pas de mélange de chaînes de caractères et de valeurs numériques ou de valeurs manquantes dans ces données, mais pour diverses raisons, "blancs", "caractères / symboles autres que" 0 "signifiant zéro" et "nombres avec unités" Dans de nombreux cas, certaines valeurs ne conviennent pas à l'analyse telles quelles.

Veuillez vous référer à cet article etc. et effectuer le traitement approprié (ingénierie de la quantité de fonctionnalités).

Créer un objet (ensemble de données vide) avec une classe de données pour Scikit-learn

import sklearn
worldhappiness = sklearn.utils.Bunch()

Veuillez changer la partie de «bonheur du monde» pour indiquer le nom du jeu de données.

Mettre les données dans l'ensemble de données

# 'Score'(Score de bonheur)La variable objective'target'À
worldhappiness['target'] = df['Score']
#Variables explicatives'data'Mettre en
worldhappiness['data'] = df.loc[:, ['GDP per capita',
       'Social support', 'Healthy life expectancy',
       'Freedom to make life choices', 'Generosity',
       'Perceptions of corruption']]

↑ Spécifiez 6 colonnes autres que les 3 premières colonnes (fonctionnalités non utilisées pour l'analyse des variables objectives et des ID). Il est facile de copier et coller la sortie des données dans "Confirmation du nom de la quantité de caractéristiques".

#Si vous incluez le nom du montant de la caractéristique, vous pouvez l'utiliser pour la légende du graphique, etc. (ce n'est pas nécessaire)
worldhappiness['feature_names'] = ['GDP per capita',
       'Social support', 'Healthy life expectancy',
       'Freedom to make life choices', 'Generosity',
       'Perceptions of corruption']

Divisé en ensemble d'entraînement et ensemble de test

#Divisé en ensemble d'entraînement et ensemble de test
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
    worldhappiness['data'], worldhappiness['target'], random_state=0)
print("X_train shape:", X_train.shape)
print("X_test shape:", X_test.shape)
X_train shape: (117, 6)
X_test shape: (39, 6)

Il a été divisé en 117 données d'entraînement et 39 données de test. (6 est le nombre d'items variables explicatifs)

Conclusion

Je pense que cela passera à l'analyse automatique. Si vous avez des erreurs ou des questions, n'hésitez pas à commenter.

Recommended Posts

Comment lire des données originales ou des données externes sur Internet avec scikit-learn au lieu d'un ensemble de données attaché tel que l'iris
Lire et écrire en compressant des variables telles que DataFrame avec joblib au lieu de pickle
Définir des informations telles que la longueur sur le bord de NetworkX
[Reconnaissance d'image] Comment lire le résultat de l'annotation automatique avec VoTT
Comment lire les données de problème avec Paiza
Résumé de la lecture des données numériques avec python [CSV, NetCDF, Fortran binary]
[Linux] Comment lire .bashrc de l'utilisateur général avec WSL2 Ubuntu20.04 même en tant qu'utilisateur root
Liste de contrôle pour éviter de transformer les éléments de array of numpy avec for
Extension Python C / C ++: transmettre une partie des données à Python en tant que np.array (set stride)
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Comment définir un dossier partagé avec le système d'exploitation hôte dans CentOS7 sur Virtual BOX
[Python] Méthode de calcul de la formule d'approximation de la même section 0 qu'Excel [scikit-learn] Mémo
Un mémo sur la façon de surmonter le problème difficile de la capture d'effets avec l'IA
Comment utiliser xgboost: classification multi-classes avec des données d'iris
La décision de scikit-learn Comment visualiser un modèle en bois
[Blender] Comment définir dynamiquement les sélections EnumProperty
Comment installer git sur Linux tel que EC2
Comment gérer le problème de l'échec de la construction de pandas 1.1.0 ou version ultérieure sur Alpine Linux
Comment enregistrer les mêmes données plusieurs fois avec une seule entrée sur l'écran de gestion de Django
Comment calculer la somme ou la moyenne des données csv de séries chronologiques en un instant
Comment connaître le nombre de GPU de python ~ Remarques sur l'utilisation du multitraitement avec pytorch ~
lire le tag qui vous est attribué dans ec2 avec boto3
Comment activer la lecture / écriture de net.Conn avec Golang pour annuler avec le contexte
Comment enregistrer un package dans PyPI (à partir de septembre 2017)
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Essayez d'extraire les caractéristiques des données de capteur avec CNN
Pour ceux d'entre vous qui ne savent pas comment définir un mot de passe avec Jupyter sur Docker
Comment intercepter ou falsifier la communication SSL de l'appareil iOS réel par un proxy