Notes personnelles de prétraitement des données Python Pandas

À propos de cet article

Un mémo personnel que je mets à jour de temps en temps au fur et à mesure que j'apprends le "pré-traitement" des données à l'aide de pandas.

Une note sur cet article

――Lorsque vous pensez au prétraitement, vous pourriez penser à l'IA / l'apprentissage automatique. Le but de l'apprentissage de prétraitement est que je veux pouvoir traiter et analyser les données accumulées comme je le souhaite. Il peut être insuffisant en tant qu'informations de prétraitement à des fins d'apprentissage automatique. «Je ne suis pas une personne dans le domaine de l'IA, donc si vous recherchez des connaissances dans ce domaine, je pense qu'il serait préférable de garder le contenu de cet article à titre de référence uniquement. «Parce qu'il est sur le point d'être écrit, il y a de nombreuses expressions ambiguës et il peut y avoir des informations difficiles à comprendre. Nous prévoyons de le mettre à jour de temps en temps, mais nous vous serions reconnaissants si vous pouviez signaler toute information incorrecte.

Qu'est-ce que le prétraitement?

Pour nettoyer ou traiter les données accumulées afin d'effectuer le travail souhaité (apprentissage automatique, etc.). Il semble que les personnes qui font de l'apprentissage automatique passent également le plus de temps à ce travail avec le travail de collecte de données.

Mots qui apparaissent dans le prétraitement d'apprentissage

--Nettoyage des données --Synonyme de nettoyage des données. Se réfère peut-être à certains travaux de «prétraitement». --Nettoyage des données --Synonyme de nettoyage des données. --Data Langling -Plus large que les deux ci-dessus. Peut-être "synonyme de prétraitement" ou "comprend le prétraitement".

Flux de prétraitement

Procédez comme suit: Il peut y avoir une commande plus efficace et des tâches plus détaillées.

  1. Pré-analyse
  1. Nettoyage --Renommer la colonne
  1. Traitement / conversion / changement de configuration --Ajouter une colonne --Fusion d'autres données --Ajout de fonctionnalités

Préparation de l'environnement de test

environnement de test

Préparez un environnement de test Python pour l'apprentissage.

--Environnement local

  1. Mettez Python sur votre propre PC.
  2. Si vous placez Python et Jupyter Notebook sur un serveur interne et que vous configurez pour autoriser l'accès à distance depuis un navigateur, vous pouvez utiliser python sur un PC qui n'a pas Python, et vous pouvez distribuer un petit script aux membres de l'équipe qui ne comprennent pas Python avec une explication simple et faire divers progrès. ..
  3. Pour la méthode de configuration des autorisations d'accès à distance, reportez-vous à here.
  4. Si vous souhaitez installer Python et Jupyter Notebook à partir de zéro, il est facile de les installer en tant qu'ensemble avec le package Anaconda.

données de test

Ce serait bien de pouvoir préparer rapidement des données de test à la fois en série et en Dataframe.

Syntaxe / méthode utilisée pour la pré-analyse

#Références pour maximum, minimum, moyenne, écart type, etc.
df.describe()
#Référence du type de données de chaque colonne
df.info()
#Parcourir les premières lignes de données
df.head()
#Parcourir les dernières lignes de données
df.tail()
#Nombre de dimensions des données (combien de lignes et de colonnes)
df.shape
#Nombre de valeurs
df["column"].value_counts()
#Nombre de valeurs (identique à ci-dessus)
pd.value_counts(df["column"])
#Liste des noms de colonnes ①
df.columns
#Liste des noms de colonnes ②
df.count()

Syntaxe / méthode utilisée pour l'opération de gestion des valeurs manquantes

Confirmation des valeurs manquantes

#Nombre de valeurs manquantes ("Nombre de lignes-Le nombre de données"Lors de la demande à)
#Vous pouvez répertorier l'état manquant de la colonne entière.
df_s.shape[0] - df_s.count()

#Nombre de valeurs manquantes(Colonne spécifique)
df_s["Contenu défectueux.1"].isnull().value_counts()

#Afficher les lignes avec des valeurs manquantes(Dans une colonne spécifique)
df_s.loc[df_s["Contenu défectueux.1"].isnull()]

Supprimer les valeurs manquantes


#Supprimer une ligne s'il y a même une valeur manquante dans df
df.dropna(axis = 0, how = 'any', inplace=True)

#Définir un seuil et supprimer (supprimer les lignes avec 3 colonnes ou plus manquantes)
#S'il n'est pas remplacé, il ne sera pas reflété dans les données source.
df.dropna(thresh=3,inplace=True)

Remplissez les valeurs manquantes


fillna
df.loc[df["Prix unitaire"].isna(),"Prix unitaire"] = 0

Calculer en ignorant les valeurs manquantes

#S'il y a des valeurs manquantes dans le calcul, le résultat sera Nan. Utilisez l'option pour ignorer les valeurs manquantes.
df.sum(skipna=False)
df.mean(skipna=False)

Syntaxe / méthode utilisée pour la duplication

Rechercher les doublons


df_s.duplicated().value_counts()
df_s[df_s.duplicated() == True].count()
#Unité de colonne
df_s[df_s.duplicated() == True ]["les pièces"].count()

Suppression des doublons

Syntaxe / méthode utilisée pour la vérification / conversion du type de données

Vérifiez qu'il a le type de données correct et convertissez-le au type approprié si nécessaire. Lors de la conversion en un type numérique, il est nécessaire de se souvenir du travail tel que la définition de la chaîne de caractères sur une valeur numérique et la définition des données nulles à 0 à l'avance. La méthode ʻAstype` est principalement utilisée.

#Référence du type de données
df2.info()
#Conversion de type de données (réalisée en ajoutant une nouvelle colonne)
df["Numéro de pièce 2"] = df["Numéro de produit"].astype(object)

#Conversion de type de données(Remplacez et convertissez la colonne d'origine telle quelle)
df_s["test"] = df_s["test"].astype(object) # object(string)
df_s["test"] = df_s["test"].astype(str) # object(string)
df_s["test"] = df_s["test"].astype(float) # Float
df_s["test"] = df_s["test"].astype(int) # integer

#Convertir en type numérique tout en éliminant de force les valeurs mal saisies (To Nan)
df_s["test"] = pd.to_numeric(df_s["test"] , errors="coerce")

Syntaxe / méthode utilisée pour l'extraction / récupération des données


#Extraire une colonne spécifique (ne modifie pas les données d'origine)
df[["colB","colD"]]

#Extraire à l'aide d'expressions régulières
tanka_nan = df["Prix unitaire"].str.extract("(^\D*)", expand=False)
tanka_nan.value_counts()

#「[La valeur dans la colonne de prix unitaire est"Produit en vrac"]Extrait par "extraction de ligne" et "extraction de colonne de la colonne de prix unitaire"
df.loc[df["Prix unitaire"] == "Produit en vrac","Prix unitaire"]

#Filtrer les lignes de la liste et créer un nouveau DF
df2 = df[df["Numéro de produit"].isin(mylist)]

Syntaxe / méthode utilisée pour ajouter des colonnes et des fonctionnalités

Ajouter des colonnes à l'aide de fonctions

dftest["grade"] = dftest["Nom du produit"].apply(lambda x : x[0:2] )

Ajouter des colonnes à l'aide de la fonction de carte


dftest = pd.DataFrame({"prefecture":["hokkaidou","shizuoka","okinawa"],"city":["sapporo","shizuoka","naha"]})
dftest_map = {"hokkaidou":10,"shizuoka":20,"okinawa":30}
dftest["maptest"] = dftest.prefecture.map(dftest_map)
dftest

Ajouter des colonnes à l'aide de la fonction Apply


# Créez la fonction suivante.
# # Si la valeur de l'argument contient "limited", la chaîne de caractères "limited product" est renvoyée.
# # Si la valeur de l'argument contient "nouveau", la chaîne de caractères "nouveau produit" est renvoyée.
# # Si la valeur de l'argument est différente de cela, la chaîne de caractères "na" est renvoyée.
def newitem(x):
  if "Limité" in str(x):
    return "Produit limité"
  elif "Nouveau" in str(x):
    return "nouveau produit"
  else:
    return "na"

# Créez une nouvelle colonne "Catégorie de produit" et renvoyez le résultat en évaluant la colonne de nom de produit avec la fonction créée.
df["Catégorie de produit"] = df["Nom du produit"].apply(newitem)

Nom de colonne / nom de ligne (index)


#Renommer la colonne(Changement de format de dictionnaire)
df = df.rename(columns={'Nom du produit':'Nom du produit'})
#Renommer la colonne (changer la toute première colonne)
df.rename(columns={df.columns[0]: "Nom du produit"})

Attribuer à la colonne


df.loc[:,"Prix unitaire"] = 0

Extraire et attribuer une colonne spécifique

df.loc[df["Prix unitaire"] == "La fourniture", "Prix unitaire"] = 0

Ajouter une colonne avec une expression régulière

df["grade"] = df["Nom du produit"].str.extract(
"(^[A-Z]{2}|^[A-Z]{2}|^/d/d?//d+|^[0-9][0-9]?/[0-9]*)", expand=False)

Syntaxe / méthode utilisée pour le regroupement

Le groupe utilise un objet groupby

--Utilisez df.groupby (). --Si vous groupez et placez-le dans une variable, la variable contiendra un objet Group by. (Pas DataFraem, Series)


df.groupby('items').get_group('item_1')
g1 = df.groupby('items')
print(g1.groups)
df.groupby('items').size()
#Agréger collectivement
df_s.groupby("Lieu d'ensachage").agg(np.sum)
#Agrégation à l'aide d'un dictionnaire
df_s.groupby("Lieu d'ensachage").agg({"Nombre total de production":np.sum, "lot":"first" })

Ajouté par la fonction Lambda

train["year"]= train["datetime"].apply(lambda x : x.split("-")[0] )

Syntaxe / méthode utilisée pour le maintien vertical ⇔ conversion du format des données de maintien horizontal

Principalement fait ci-dessous. L'écriture.

--melt (qui signifie fondre)

Convertir une tenue verticale en une tenue horizontale

en préparation

Convertir une tenue horizontale en une tenue verticale

en préparation

Syntaxe / méthode utilisée pour le binning

Qu'est-ce que le binning

Diviser les valeurs discontinues en nombres plus petits à l'aide de groupes pour les regrouper. Aussi appelé division de bac. Bin semble signifier une étagère. Par exemple, s'il existe une colonne contenant l'âge d'une personne, utilisez-la pour grouper par section par groupe d'âge tel que [adolescents, 20 ans, 30 ans ...]. Utilisez cut et qcut.

Une image de tri des données d'origine (dans ce cas, les données d'âge) dans la "tablette" créée. Sans surprise, le nombre de casiers est inférieur aux données source.


#Tout d'abord, supposons qu'il existe de telles données d'âge.
ages = [random.randint(0, 100) for i in range(20)]
print(ages)
#[84, 73, 27, 85, 8, 17, 46, 16, 95, 62, 38, 47, 63, 44, 69, 26, 0, 40, 34, 79]

#Préparer les bacs pour regrouper ces données d'âge
bins = np.arange(0,90,10) #Générer le numéro de série
print(bin)
# >>> [ 0 10 20 30 40 50 60 70 80]

#Couper
cats = pd.cut(ages, bins)
print(cats)

# [NaN, (70.0, 80.0], (20.0, 30.0], NaN, (0.0, 10.0], ..., (20.0, 30.0], NaN, (30.0, 40.0], (30.0, 40.0], (70.0, 80.0]]
# Length: 20
# Categories (8, interval[int64]): [(0, 10] < (10, 20] < (20, 30] < (30, 40] < (40, 50] < (50, 60] < (60, 70] < (70, 80]]

Qu'est-ce qu'une quantité de caractéristiques?

Quantité de fonctionnalités = une colonne donnée directement lors de la création d'un modèle de prédiction pour l'apprentissage automatique.

Lors de la création d'un modèle prédictif, toutes les colonnes des données collectées ne sont pas requises pour le modèle prédictif. Il est également possible qu'il n'y ait pas assez de lignes. Dans l'apprentissage automatique, il est important de sélectionner cette colonne ou d'ajouter une nouvelle colonne pour augmenter la quantité d'entités, et l'augmentation de la colonne de quantité d'entités s'appelle création de quantité d'entités. La création et le réglage des fonctionnalités s'appelle «Ingénierie des fonctionnalités».

référence

--Book (lien vers Amazon)

--Vidéo (udemy)

fin

Recommended Posts

Notes personnelles de prétraitement des données Python Pandas
notes personnelles python
mémo pandas python
Résumé des notes personnelles des pandas
notes personnelles en python manquantes
[Python] Notes sur l'analyse des données
Analyse de données à l'aide de pandas python
Frappez les données du trésor de Python Pandas
Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques
Remarques sur la gestion de grandes quantités de données avec python + pandas
Notes de pandas
Modèle de prétraitement pour l'analyse des données (Python)
(Notes personnelles) Métaclasses et métaprogrammation Python
Grattage WEB avec Python (pour mémo personnel)
Python: prétraitement en machine learning: acquisition de données
Python: prétraitement dans l'apprentissage automatique: conversion de données
mémo d'auto-apprentissage pandas
Mémo de raclage Python
Mes pandas (Python)
Notes d'apprentissage Python
Notes de débutant Python
Note d'apprentissage Python_006
lecture de données pandas
notes de python C ++
Note d'apprentissage Python_005
Notes de grammaire Python
Note sur la bibliothèque Python
Python pour moi-même Q.A
Note d'apprentissage Python_001
notes d'apprentissage python
Notes d'installation de Python3.4
[python] Lecture de données
Lire les données csv Python avec Pandas ⇒ Graphique avec Matplotlib
Notes personnelles sur le code doc Python dans Sphinx
[Python] Analyse de données, pratique du machine learning (Kaggle) -Prétraitement des données-
J'ai commencé l'apprentissage automatique avec le prétraitement des données Python
Analyse de données avec python 2
Bibliothèques de visualisation de données Python
Présentation de l'analyse de données python
Notes de développement de package Python
Manipuler des fichiers Excel à partir de python avec xlrd (mémo personnel)
Mémorandum Python (signet personnel)
Nettoyage des données à l'aide de Python
Construction d'un environnement d'analyse de données avec Python (notebook IPython + Pandas)
notes d'utilisation du décorateur python
Mémo du package d'adresse IP Python
Installer des pandas sur python2.6
Récapitulatif des méthodes Pandas utilisées lors de l'extraction de données [Python]
Notes sur le format Python Pickle
Corrélation par prétraitement des données
Visualisation des données avec les pandas
Premier mémo divers sur Python
Manipulation des données avec les Pandas!
Modèle d'analyse de données Python
Traiter les données csv avec python (traitement du comptage à l'aide de pandas)
Mélangez les données avec les pandas
Matlab => Notes de migration Python