Application de Python: Nettoyage des données Partie 2: Nettoyage des données à l'aide de DataFrame

CSV

Lire CSV à l'aide de Pandas

CSV est un fichier dans lequel les valeurs sont séparées par des virgules. Il est couramment utilisé car il est très facile à manipuler dans l'analyse des données.

Pour lire un fichier csv avec Pandas, utilisez la fonction read_csv ().

read_csv("Chemin du fichier où se trouve le fichier csv", header=)

Comme la loi de l'en-tête

Par exemple, lisez un ensemble de données wine qui ne contient pas d'informations sur le nom de colonne du répertoire. Puisque nous ne savons pas ce que la valeur numérique représente telle quelle, ajoutez un nom de colonne (colonne) qui indique le contenu de la valeur.

import pandas as pd

df = pd.read_csv("./4050_data_cleansing_data/wine.csv", header=None)

#Ajoutez une colonne pour voir ce que chaque nombre représente
df.columns = ["", "Alcohol", "Malic acid", "Ash", "Alcalinity of ash", "Magnesium","Total phenols", "Flavanoids", "Nonflavanoid phenols", "Proanthocyanins","Color intensity", "Hue", "OD280/OD315 of diluted wines", "Proline"]
df

Le ./ dans le chemin du fichier indique le répertoire actuel. Le répertoire actuel est le répertoire de travail dans lequel Python est actuellement en cours d'exécution.

Création de CSV à l'aide de la bibliothèque CSV

Créez un fichier de données CSV à l'aide de la bibliothèque CSV fournie en standard avec Python 3.

Produit les données de la ville, de l'année et de la saison des 10 derniers Jeux olympiques sous forme de fichier de données CSV.

import csv

#Utilisez l'instruction with
# csv0.Mode d'écriture avec le fichier csv comme variable csvfile ("w") Ouvrir
with open("./4050_data_cleansing_data/csv0.csv", "w") as csvfile:
    #En tant qu'arguments de la méthode writer, la variable csvfile et le code de saut de ligne (\n)
    writer = csv.writer(csvfile, lineterminator="\n")
    #Ajouter une ligne à l'aide de writerow (list)
    writer.writerow(["city", "year", "season"])
    writer.writerow(["Nagano", 1998, "winter"])
    writer.writerow(["Sydney", 2000, "summer"])
    writer.writerow(["Salt Lake City", 2002, "winter"])
    writer.writerow(["Athens", 2004, "summer"])
    writer.writerow(["Torino", 2006, "winter"])
    writer.writerow(["Beijing", 2008, "summer"])
    writer.writerow(["Vancouver", 2010, "winter"])
    writer.writerow(["London", 2012, "summer"])
    writer.writerow(["Sochi", 2014, "winter"])
    writer.writerow(["Rio de Janeiro", 2016, "summer"])

#production
# csv0.Mode lecture avec fichier csv comme variable csvfile("r")Ouvrir avec
with open("./4050_data_cleansing_data/csv0.csv", "r") as csvfile:
    print(csvfile.read())

Une fois exécuté, un fichier de données CSV appelé csv0.csv sera créé et le contenu des données sera affiché. Pour savoir où le fichier de données CSV a été créé

import os #Faire
print(os.getcwd()) #Éxécuter.

Créer un CSV à l'aide de Pandas

Sans utiliser la bibliothèque CSV Vous pouvez également créer des données CSV à l'aide de Pandas. Il est plus pratique d'utiliser Pandas lors de la conversion de données au format PandasDataFrame en données CSV.

Pour créer un fichier csv avec Pandas, utilisez la fonction to_csv ().

to_csv("Nom du fichier csv à créer")

À titre d'exemple de DataFrame, comme dans l'échantillon précédent, les données de la ville, de l'année et de la saison des 10 derniers Jeux olympiques sont sorties sous forme de fichier de données CSV.

import pandas as pd

data = {"city": ["Nagano", "Sydney", "Salt Lake City", "Athens", "Torino", "Beijing", "Vancouver", "London", "Sochi", "Rio de Janeiro"], 
        "year": [1998, 2000, 2002, 2004, 2006, 2008, 2010, 2012, 2014, 2016],
        "season": ["winter", "summer", "winter", "summer", "winter", "summer", "winter", "summer", "winter", "summer"]}

df = pd.DataFrame(data)

df.to_csv("4050_data_cleansing_data/csv1.csv")
#Faire cela csv1.Un fichier appelé csv nettoie_Il sera créé dans le répertoire de données.

Valeur manquante

Suppression par liste / suppression par paire

S'il y a un blanc dans les données lues, il sera reconnu comme une valeur manquante NaN (pas un nombre). Pour supprimer les valeurs manquantes NaN pour améliorer la précision des données

dropna()Utilisez une fonction.
#Tout d'abord, créez au hasard une table avec une partie de la table manquante exprès.

import numpy as np
from numpy import nan as NA
import pandas as pd

sample_data_frame = pd.DataFrame(np.random.rand(10, 4))

#Certaines données sont intentionnellement perdues
sample_data_frame.iloc[1, 0] = NA
sample_data_frame.iloc[2, 2] = NA
sample_data_frame.iloc[5:, 3] = NA

sample_data_frame

Supprimer par liste

Pour effacer la ligne ou la colonne entière (ligne contenant NaN) avec perte de données C'est ce qu'on appelle la suppression par liste.

dropna()Utiliser une fonction

Supprimez toutes les lignes contenant au moins un NaN. Aussi Si axis = 1 est spécifié dans l'argument, même une colonne contenant NaN sera supprimée.

sample_data_frame.dropna()

Supprimer par paire

Si la méthode par liste supprime toutes les lignes manquantes et qu'il y a trop peu de données Une autre option consiste à n'utiliser que les données disponibles. Laisser les colonnes avec quelques défauts (par exemple, les colonnes 0 et 1) La suppression de lignes contenant NaN à partir de là est appelée suppression par paires.

sample_data_frame[[0, 1]].dropna()

Achèvement de la valeur manquante

Autre que la suppression des valeurs manquantes pour améliorer l'exactitude des données Vous pouvez également affecter des données alternatives aux valeurs manquantes.

Pour remplacer (remplacer) des données alternatives par la valeur manquante NaN

fillna()Utilisez une fonction.

Créez au hasard une table avec une partie de la table manquante exprès.


import numpy as np
from numpy import nan as NA
import pandas as pd

sample_data_frame = pd.DataFrame(np.random.rand(10, 4))

#Certaines données sont intentionnellement perdues
sample_data_frame.iloc[1, 0] = NA
sample_data_frame.iloc[2, 2] = NA
sample_data_frame.iloc[5:, 3] = NA
# fillna()Lors de l'utilisation d'une fonction, le nombre donné en argument est affecté à la partie NaN. Cette fois, je vais le remplir avec 0.

sample_data_frame.fillna(0)
#Si vous spécifiez ffill pour la méthode, vous pouvez le remplir avec la valeur de la ligne précédente.

sample_data_frame.fillna(method="ffill")

Saisie des valeurs manquantes (méthode de substitution de la valeur moyenne)

La méthode de remplissage des valeurs manquantes avec la valeur moyenne de la colonne (ou de la ligne) est appelée méthode de substitution de valeur moyenne.

La valeur moyenne est moyenne()Calculez à l'aide d'une fonction.
import numpy as np
from numpy import nan as NA
import pandas as pd

sample_data_frame = pd.DataFrame(np.random.rand(10, 4))

#Certaines données sont intentionnellement perdues
sample_data_frame.iloc[1, 0] = NA
sample_data_frame.iloc[2, 2] = NA
sample_data_frame.iloc[5:, 3] = NA

#Remplacez la valeur moyenne de la colonne par la pièce NaN en utilisant fillna
sample_data_frame.fillna(sample_data_frame.mean())

Agrégation de données

Calcul des statistiques pour chaque clé

Les statistiques peuvent être divisées en valeurs représentatives et en degrés de dispersion. Une valeur représentative est une valeur qui représente les caractéristiques de base des données. Par exemple, valeur moyenne, valeur maximale, valeur minimale, etc.

import pandas as pd

df = pd.read_csv("./4050_data_cleansing_data/wine.csv", header=None)
df.columns=["", "Alcohol", "Malic acid", "Ash", "Alcalinity of ash", "Magnesium","Total phenols", "Flavanoids", "Nonflavanoid phenols", "Proanthocyanins","Color intensity", "Hue", "OD280/OD315 of diluted wines", "Proline"]

# DataFrame `df`clé de"Alcohol"Calculez la valeur moyenne de
df["Alcohol"].mean()
#Résultat de sortie
13.000617977528091

Dupliquer les données

S'il y a un double des données, supprimez les données pour améliorer l'exactitude des données. Préparez un DataFrame contenant des données en double Essayez d'extraire ou de supprimer les données en double.

import pandas as pd
from pandas import DataFrame

dupli_data = DataFrame({"col1":[1, 1, 2, 3, 4, 4, 6, 6]
                       ,"col2":["a", "b", "b", "b", "c", "c", "b", "b"]})
dupli_data
duplicated()Avec la méthode

Génère des données de type Series qui renvoie True pour les lignes dupliquées et extrait les données dupliquées.

#Extraire les données en double
dupli_data.duplicated()
#Résultat de sortie
0    False
1    False
2    False
3    False
4    False
5     True
6    False
7     True
dtype: bool

dtype signifie "Type de données" et indique le type de données de l'élément.

drop_duplicates()Utilisez la méthode pour supprimer les données en double.
dupli_data.drop_duplicates()

cartographie

Qu'est-ce que le mappage? Pour les données qui ont une clé commune Il s'agit du processus de référencement de la valeur correspondant à la clé d'une autre table. En fait, préparez un DataFrame et essayez le processus de mappage.

import pandas as pd
from pandas import DataFrame

attri_data1 = {"ID": ["100", "101", "102", "103", "104", "106", "108", "110", "111", "113"]
        ,"city": ["Tokyo", "Osaka", "Kyoto", "Hokkaido", "Tokyo", "Tokyo", "Osaka", "Kyoto", "Hokkaido", "Tokyo"]
        ,"birth_year" :[1990, 1989, 1992, 1997, 1982, 1991, 1988, 1990, 1995, 1981]
        ,"name" :["Hiroshi", "Akiko", "Yuki", "Satoru", "Steeve", "Mituru", "Aoi", "Tarou", "Suguru", "Mitsuo"]}
attri_data_frame1 = DataFrame(attri_data1)

attri_data_frame1

Créez des données de type dictionnaire avec le nom de zone correspondant à la ville.

city_map ={"Tokyo":"Kanto"
          ,"Hokkaido":"Hokkaido"
          ,"Osaka":"Kansai"
          ,"Kyoto":"Kansai"}
city_map

En utilisant la colonne city de attri_data_frame1 préparée au début comme clé, reportez-vous aux données de nom de zone correspondantes de city_map et ajoutez-les à la nouvelle colonne. C'est le processus de cartographie. Si vous êtes familier avec Excel, imaginez un processus comme la fonction vlookup. Effectuez un traitement de mappage à l'aide de la fonction map () et ajoutez une région à attri_data_frame1 en tant que nouvelle colonne.

attri_data_frame1["region"] = attri_data_frame1["city"].map(city_map)
attri_data_frame1

Si vous regardez la sortie, vous pouvez voir que le nom de la région a été ajouté à la colonne de région. Les éléments dont les données correspondantes n'existent pas dans city_map sont remplis avec NaN.

Division des bacs

La division des bacs est le processus de division grossière des données numériques en catégories. Par exemple, il s'agit d'un processus pour diviser l'âge en 0-9 ans, 10-19 ans, 20-29 ans. Préparez à l'avance une liste divisée par casiers

pandas coupés()Processus à l'aide d'une fonction.
import pandas as pd
from pandas import DataFrame

attri_data1 = {"ID": [100,101,102,103,104,106,108,110,111,113]
        ,"city": ["Tokyo", "Osaka", "Kyoto", "Hokkaido", "Tokyo", "Tokyo", "Osaka", "Kyoto", "Hokkaido", "Tokyo"]
        ,"birth_year" :[1990, 1989, 1992, 1997, 1982, 1991, 1988, 1990, 1995, 1981]
        ,"name" :["Hiroshi", "Akiko", "Yuki", "Satoru", "Steeve", "Mituru", "Aoi", "Tarou", "Suguru", "Mitsuo"]}
attri_data_frame1 = DataFrame(attri_data1)

Spécifiez la granularité de la division dans une liste et effectuez une division de casier. Ici, nous nous concentrons sur la naissance_année.

#Créer une liste de granularité fractionnée
birth_year_bins = [1980,1985,1990,1995,2000]

#Faites un fractionnement de la poubelle
birth_year_cut_data = pd.cut(attri_data_frame1.birth_year,birth_year_bins)
birth_year_cut_data
#Résultat de sortie
0    (1985, 1990]
1    (1985, 1990]
2    (1990, 1995]
3    (1995, 2000]
4    (1980, 1985]
5    (1990, 1995]
6    (1985, 1990]
7    (1985, 1990]
8    (1990, 1995]
9    (1980, 1985]
Name: birth_year, dtype: category
Categories (4, interval[int64]): [(1980, 1985] < (1985, 1990] < (1990, 1995] < (1995, 2000]]

"()" N'inclut pas cette valeur, et "[]" signifie que c'est le cas. Par exemple, (1985, 1990] n'inclut pas 1985, mais comprend 1990.

Si vous voulez compter le nombre de chaque bac

value_counts()Utilisez la méthode.
pd.value_counts(birth_year_cut_data)
#Résultat de sortie
(1985, 1990]    4
(1990, 1995]    3
(1980, 1985]    2
(1995, 2000]    1
Name: birth_year, dtype: int64

Vous pouvez également donner un nom à chaque bac.

group_names = ["first1980", "second1980", "first1990", "second1990"]
birth_year_cut_data = pd.cut(attri_data_frame1.birth_year,birth_year_bins,labels = group_names)
pd.value_counts(birth_year_cut_data)
#Résultat de sortie
second1980    4
first1990     3
first1980     2
second1990    1
Name: birth_year, dtype: int64

Il est également possible de spécifier le nombre de divisions à l'avance et de diviser. Vous pouvez l'utiliser pour créer des bacs à peu près de la même taille. Spécifiez le nombre de divisions dans le deuxième argument de la fonction cut ().

pd.cut(attri_data_frame1.birth_year,2)
#Résultat de sortie
0      (1989.0, 1997.0]
1    (1980.984, 1989.0]
2      (1989.0, 1997.0]
3      (1989.0, 1997.0]
4    (1980.984, 1989.0]
5      (1989.0, 1997.0]
6    (1980.984, 1989.0]
7      (1989.0, 1997.0]
8      (1989.0, 1997.0]
9    (1980.984, 1989.0]
Name: birth_year, dtype: category
Categories (2, interval[float64]): [(1980.984, 1989.0] < (1989.0, 1997.0]]

Recommended Posts

Application de Python: Nettoyage des données Partie 2: Nettoyage des données à l'aide de DataFrame
Application de Python: Nettoyage des données Partie 1: Notation Python
Nettoyage des données 2 Nettoyage des données à l'aide de DataFrame
Analyse de données avec Python
Application Python: Pandas # 3: Dataframe
Exemple de données créées avec python
Obtenez des données Youtube avec python
Application Python: visualisation de données, partie 2: matplotlib
Application Web avec Python + Flask ② ③
Application Web avec Python + Flask ④
Lire des données json avec python
Application Python: Traitement des données # 3: Format des données
Surveillez les performances des applications Python avec Dynatrace ♪
[Python] Obtenez des données économiques avec DataReader
Convertir la liste en DataFrame avec python
Application de Python: Nettoyage des données Partie 3: Utilisation d'OpenCV et prétraitement des données d'image
Structure de données Python apprise avec la chimioinfomatique
Visualisez facilement vos données avec Python seaborn.
Application Python: visualisation de données partie 1: basique
Traiter les données Pubmed .xml avec python
Analyse de données à partir de python (visualisation de données 1)
Développement d'applications avec Docker + Python + Flask
Analyse de données à partir de python (visualisation de données 2)
Obtenez des données supplémentaires vers LDAP avec python
Construction de pipeline de données avec Python et Luigi
[Note] Obtenir des données de PostgreSQL avec Python
Application de Python: visualisation de données Partie 3: divers graphiques
Obtenez des données alimentaires avec l'API Amazon (Python)
Essayez de travailler avec des données binaires en Python
Générer des données de test japonais avec Python Faker
Convertir des données Excel en JSON avec python
Manipulation des données DynamoDB avec Lambda (Node et Python)
Application de Python: Pandas Partie 4: Concaténation et combinaison de DataFrames
Convertissez des données FX 1 minute en données 5 minutes avec Python
[Python] Application Web à partir de 0! Pratique (4) - Mise en forme des données-
[Python] Une application web rapide avec Bottle!
Recommandation d'Altair! Visualisation des données avec Python
Analyse de données à partir de python (pré-traitement des données-apprentissage automatique)
Faisons la manipulation des données MySQL avec Python
Organisez les données séparées par dossier avec Python
Exécutez une application Web Python avec Docker
Traitez le Big Data avec Dataflow (ApacheBeam) + Python3
Statistiques avec python
Python avec Go
Analyse de données python
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
[python] Lecture de données
Micro-ordinateur avec Python
Cast avec python
Créez des données de test comme ça avec Python (partie 1)
Lire les données avec python / netCDF> nc.variables [] / Vérifier la taille des données