[Python] df Lire et faire le premier mémo (confirmation NaN etc.)

Objectif de cet article

En prenant les données du Titanic comme exemple, notez ce qu'il faut faire en premier pour voir les caractéristiques des données. Habituellement, pandas-profiling peut être meilleur car il donne des informations plus détaillées.

Charge de la bibliothèque

import numpy as np
import pandas as pd
pd.set_option('display.max_columns', 100)

import warnings
warnings.filterwarnings('ignore')
import collections

Préparation des données

!wget https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv

Lecture des données et un peu de traitement

filename = "/content/titanic.csv"
df = pd.read_csv(filename, encoding='utf-8')

#Faire NaN correctement
df["Name"] = [di if np.random.rand()>0.1 else float("nan") for di in df["Name"]]
df["Sex"] = [di if np.random.rand()>0.01 else float("nan") for di in df["Sex"]]
df["Age"] = [di if np.random.rand()>0.05 else float("nan") for di in df["Age"]]

#family name
df["f_Name"] = [str(di).split(" ")[-1] if len(str(di).split(" "))>1 else float("nan") for di in df["Name"]]

Vous pouvez créer un bloc de données comme celui-ci.

image.png

J'utiliserai collections.Counter plus tard, mais si la valeur de NaN est float (" nan "), il ne sera pas bien agrégé, alors remplacez-le par np.nan. Pour plus de détails, voir ici

df = df.replace(float("nan"), np.nan)

Définissez les types de données un par un.

target = "Survived"
cate_list = ["Pclass", "Name", "f_Name", "Sex", "Siblings/Spouses Aboard", "Parents/Children Aboard"]
num_list = ["Age", "Fare"]

all_list = cate_list+num_list

Voici le processus principal.

n = df.shape[0]
max_n_unique = 10

n_unique_list=[]
min_data_list=[]
max_data_list=[]
major_data_rate_list=[]

#catégorie uniquement
for colname in all_list:

    if colname in cate_list: #cate
        n_unique = len(df[colname].unique())
        min_data = np.nan
        max_data = np.nan

        if n_unique>max_n_unique: #S'il y a plusieurs catégories
            c = collections.Counter(df[colname])
            c_dict = dict(c.most_common(max_n_unique-1))
            #k_list = [k for k,v in c_dict.items()]
            v_list = [v/n for k,v in c_dict.items()]
            major_data_rate = np.sum(v_list)
        else:
            major_data_rate = np.nan

    else: #num
        n_unique = np.nan
        major_data_rate = np.nan
        min_data = df[colname].min()
        max_data = df[colname].max()


    n_unique_list.append(n_unique)
    major_data_rate_list.append(major_data_rate)
    min_data_list.append(min_data)
    max_data_list.append(max_data)

have_nan = df.loc[:,all_list].isnull().any(axis=0)
nan_rate = df.loc[:,all_list].isnull().sum(axis=0)/n

summary_df = pd.DataFrame({"colname":all_list,
                           "have_nan":have_nan.values,
                           "nan_rate":nan_rate.values,
                           "n_unique":n_unique_list,
                           "major_data_rate":major_data_rate_list,
                           "min_data":min_data_list,
                           "max_data":max_data_list
                           })

Vous pouvez créer un bloc de données qui résume les caractéristiques de ces variables.

image.png

major_data_rate considère le nombre spécifié par max_n_unique, par exemple, 10 données Top 10 fréquentes comme étant majeur, et calcule le rapport de ces données. (On suppose que les autres que les 10 premiers seront résumés par les «autres», etc. dans le traitement ultérieur.)

référence

stack overflow:Why does collections.Counter treat numpy.nan as equal? CS109:A Titanic Probability GitHub:pandas-profiling

Recommended Posts

[Python] df Lire et faire le premier mémo (confirmation NaN etc.)
L'histoire de Python et l'histoire de NaN
Bases statistiques et Python, graphisme, etc. (mémo)
Le mémo Python le plus simple au Japon (classes et objets)
Recevez le formulaire en Python et faites diverses choses
[Python] Lisez le fichier csv et affichez la figure avec matplotlib
[Version 2020] Laissez Python faire tous les calculs de taxes et de recettes
Le websocket de toio (nodejs) et python / websocket ne se connecte pas.
Mémo tranche python et rubis
Remarque: obtenez les premier et dernier éléments de Python OrderedDict de manière non destructive
[Python] Comment obtenir le premier et le dernier jour du mois
Différence entre java et python (mémo)
First Python 3 ~ Le début de la répétition ~
Exécutez Pylint et lisez les résultats
Lire et utiliser des fichiers Python à partir de Python
Demandez à python de lire la sortie de la commande
Voir python pour la première fois
Mémo Python ① Opérations sur les dossiers et fichiers
[Python] Lire le code source de Flask
La première étape de Python Matplotlib
Créer et lire des paquets de messages en Python
[Python] Visualisez la chaleur de Tokyo et de la préfecture ○○ (mémo d'utilisation de DataFrame)
Note de travail pour migrer et mettre à jour les scripts de la série Python 2 sur le cloud vers la série 3
Débutant Python ~ Arrondissez le Nième chiffre de la virgule décimale et sortie ~ (pour mémo)
Lisez le fichier avec python et supprimez les sauts de ligne [Notes sur la lecture du fichier]