ntile (Dezil) -Funktion in Python

Was ich getan habe

Auch wenn die ntile-Funktion durchsucht wird, die in SQL während der Decyl-Analyse häufig verwendet wurde, Es kam nicht heraus, also habe ich eine Funktion erstellt.

Widmet sich den Brüdern, die der Meinung waren, dass "ntile das Beste ist. Warum ist es nicht Python .." in SQL.

ntile Funktion (etwas bearbeitet)

Nun, als Verwendung, Habe df = pandas dataframe eingefügt, col = Decyl Geben Sie den Spaltennamen ein, den Sie analysieren möchten. n = 10 ist gesetzt, aber wenn Sie 100 Gruppen bilden möchten, setzen Sie n = 100 usw. Wenn n_tile = True, geben Sie den Datenrahmen zurück, der als Spalten für die Anzahl der Dekores angegeben ist. Bei der Einstellung False wird ein Datenrahmen mit verschiedenen Aggregatfunktionen zurückgegeben. agg = Aggregatfunktion, die Sie verwenden möchten, wenn n_tile False oben, Für diejenigen, die "nur Summe" sagen, verwenden Sie agg = ["Summe"] als Argument.

def ntile(df, col, n=10, n_tile=True, ascending=False, aggs=["sum", "count", "min", "max", "median", "mean", "std"]):
    # check pandas dataframe type
    if type(df) == pd.core.frame.DataFrame:
        # check int or float
        if type(df[f"{col}"].max()) == np.int64 or type(df[f"{col}"].max()) == np.float64:
            ntile_df = pd.DataFrame()
            length = len(df)
            df = df.sort_values(col, ascending=ascending).reset_index(drop=True)
            div_n = math.ceil(len(df) / n)

            # mark N group 
            for idx, num in enumerate(range(0, length, div_n)):
                n_df = df[num: num+div_n]
                n_df["decile"] = idx + 1
                ntile_df = ntile_df.append(n_df)
            
            # return ntile_df if need only decile data
            if n_tile:
                return ntile_df
            
            # otherwise aggregate col
            agg_df = ntile_df.groupby("decile").agg({f"{col}": aggs}).reset_index()
            #  clean columns
            agg_df.columns = ["".join(c) for c in agg_df.columns]
            # merge two data
            ntile_df = ntile_df.merge(agg_df, on="decile").copy()
            
            return ntile_df
        
        raise TypeError(f"`{col}` must be int or float type")
    raise TypeError(f"`{type(df)}` must be pandas.core.frame.DataFrame type")

Erstellen Sie Beispieldaten

import pandas as pd
import random
#Erstellen Sie einen zufälligen Preis Kerl
price = random.sample(range(10000, 900000), k=10000)
#Erstellen Sie einen Datenrahmen mit den oben genannten
data = pd.DataFrame(price, columns=["price"])

Der Inhalt ist so.

スクリーンショット 2019-11-10 13.14.05.png

Verwenden Sie es so

#Daten in die Funktion einfügen. n=Belassen Sie die Standardeinstellung 10
data = ntile(data, "price")
#Gruppieren Sie nach mit Dezil und wenden Sie verschiedene Aggregatfunktionen an.
data.groupby("decile").agg({"price": ["sum", "count", "min", "max", "median", "mean"]}).reset_index()

n=10 スクリーンショット 2019-11-10 13.17.16.png

n=100 スクリーンショット 2019-11-10 13.17.52.png

Wenn n_tile = False

data = ntile(data, "price", n=5 , n_tile=False)

data.pricemin.value_counts().sort_index().reset_index().rename(columns={"index": "price_segment", "pricemin": "count"})

Und sieh dir das an.

スクリーンショット 2019-11-10 14.52.49.png

Haben Sie jemals so etwas getan? Und "Gibt es nicht eine Funktion, die eine Klasse mit n% aller Klassen in der Zielspalte erstellt?" Hast du das jemals gefühlt? スクリーンショット 2019-11-10 14.48.44.png

Ich bin ein Anfänger, deshalb habe ich mehrmals darüber nachgedacht. Ich habe jedes Mal auf ntile geschaut und es von Hand korrigiert, aber von nun an ist es möglich, es nur durch Ändern des Teils von n = 10 zu ändern. Immerhin hat Python eine kleinere Wendung als SQL.

Am Ende

Ich weiß nicht, ob die Suche unzureichend ist, aber es ist seltsam, dass es in SQL keine ntile-Funktion wie Python gibt. Nun, ich habe versucht, es als Übung zu machen. Wenn Sie also Jobs von SQLer zu Python geändert haben, verwenden Sie es bitte.

Recommended Posts

ntile (Dezil) -Funktion in Python
Verwenden Sie die Rückruffunktion in Python
Nichtlineare Funktionsmodellierung in Python
Zeichne die Yin-Funktion in Python
Sofortige Funktion (Lüge) in Python
Python-Funktion ①
[Python] -Funktion
Python-Funktion ②
Implementieren Sie die Funktion power.prop.test von R in Python
Definition des Funktionsargumenttyps in Python
Inklusive Notation im Argument der Python-Funktion
Schreiben Sie die AWS Lambda-Funktion in Python
Messen Sie die Ausführungszeit von Funktionen in Python
Funktionssynthese und Anwendung in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Python-Aufzählungsfunktion
Metaanalyse in Python
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
Unittest in Python
Nehmen Sie die logische Summe von List in Python (Zip-Funktion)
Python> Funktion> Schließen
Epoche in Python
Zwietracht in Python
[Python] Generatorfunktion
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
Python> Funktion> Innere Funktion
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Dualität in der Funktion
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Python-Funktionsdekorateur
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python