[Python] df Lies und mache das erste Memo (NaN-Bestätigung usw.)

Zweck dieses Artikels

Notieren Sie sich am Beispiel der Titanic-Daten, was zuerst zu tun ist, um die Eigenschaften der Daten zu sehen. Normalerweise ist "Pandas-Profiling" besser, weil es detailliertere Informationen liefert.

Bibliothekslast

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

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

Datenaufbereitung

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

Daten lesen & ein wenig verarbeiten

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

#NaN richtig machen
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"]]

Sie können einen solchen Datenrahmen erstellen.

image.png

Ich werde später "collection.Counter" verwenden, aber wenn der Wert von NaN "float (" nan ")" ist, wird er nicht gut aggregiert, also ersetzen Sie ihn durch "np.nan". Weitere Informationen finden Sie unter hier.

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

Definieren Sie die Datentypen nacheinander.

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

Das Folgende ist der Hauptprozess.

n = df.shape[0]
max_n_unique = 10

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

#nur Kategorie
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: #Wenn es viele Kategorien gibt
            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
                           })

Sie können einen Datenrahmen erstellen, der die Eigenschaften solcher Variablen zusammenfasst.

image.png

major_data_rate betrachtet die durch max_n_unique angegebene Zahl, beispielsweise 10 häufig vorkommende Top 10-Daten, als major und berechnet das Verhältnis dieser Daten. (Es wird davon ausgegangen, dass andere als die Top 10 in der späteren Verarbeitung von "anderen" usw. zusammengefasst werden.)

Referenz

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

Recommended Posts

[Python] df Lies und mache das erste Memo (NaN-Bestätigung usw.)
Die Geschichte von Python und die Geschichte von NaN
Statistische Grundlagen und Python, Grafik usw. (Memo)
Das einfachste Python-Memo in Japan (Klassen und Objekte)
Erhalten Sie das Formular in Python und führen Sie verschiedene Aktionen aus
[Python] Lesen Sie die CSV-Datei und zeigen Sie die Abbildung mit matplotlib an
[Version 2020] Lassen Sie Python alle Steuer- und Take-Home-Berechnungen durchführen
Der Websocket von toio (nodejs) und python / websocket stellen keine Verbindung her.
Python und Ruby Slice Memo
Hinweis: Holen Sie sich das erste und letzte Element von Python OrderedDict zerstörungsfrei
[Python] So erhalten Sie den ersten und den letzten Tag des Monats
Unterschied zwischen Java und Python (Memo)
Erster Python 3 ~ Der Beginn der Wiederholung ~
Führen Sie Pylint aus und lesen Sie die Ergebnisse
Lesen und verwenden Sie Python-Dateien aus Python
Lassen Sie Python die Befehlsausgabe lesen
Siehe Python zum ersten Mal
Python-Memo ① Ordner- und Dateivorgänge
[Python] Lesen Sie den Flask-Quellcode
Der erste Schritt von Python Matplotlib
Erstellen und lesen Sie Messagepacks in Python
[Python] Visualisieren Sie die Hitze der Präfekturen Tokio und XX (DataFrame-Nutzungsnotiz)
Arbeitsnotiz zum Migrieren und Aktualisieren von Skripten der Python 2-Serie in der Cloud auf 3-Serien
Python-Anfänger ~ Runden Sie die N-te Stelle des Dezimalpunkts ab und geben Sie ~ aus (für Memo)
Lesen Sie die Datei mit Python und löschen Sie die Zeilenumbrüche [Hinweise zum Lesen der Datei]