[PYTHON] Data Science 100 Klopfkommentar (P041 ~ 060)

1. Zuallererst

Ich werde vom letzten Mal an 100 Schläge der Datenwissenschaft erklären. Data Science 100-Klopfkommentar (P001 ~ 020) Data Science 100-Klopfkommentar (P021 ~ 040)

Informationen zur Installation finden Sie in diesem Artikel (* Docker wird auf einem Mac verarbeitet)

Grundsätzlich ist es eine Erklärung der Antwort, aber es beschreibt auch eine andere Lösung.

2. Kommentar

P-041: Aggregieren Sie den Verkaufsbetrag (Betrag) des Belegdetail-Datenrahmens (df_receipt) für jedes Datum (sales_ymd) und berechnen Sie die Zunahme oder Abnahme des Verkaufsbetrags gegenüber dem Vortag. Es reicht aus, 10 Berechnungsergebnisse anzuzeigen.

P-041


#Verkaufsbetrag (Betrag) Datum (Verkauf)_ymd) Aggregieren nach(Groupby-Methode)
# reset_index()Neu indizieren mit.
df_sales_amount_by_date = df_receipt[['sales_ymd', 'amount']].groupby('sales_ymd').sum().reset_index()

#Datum Verkaufsbetrag (Betrag) zum Vergleich_Kombinieren Sie die Kopie von ymd) mit einer nach unten verschobenen Zeile.
# concat([df1, df2], axis=1)Horizontal kombinieren mit. Schicht verschieben()Bewegen Sie sich eine Zeile nach unten mit
df_sales_amount_by_date = pd.concat([df_sales_amount_by_date, df_sales_amount_by_date.shift()], axis=1)

#Ändern Sie den Spaltennamen

df_sales_amount_by_date.columns = ['sales_ymd','amount','lag_ymd','lag_amount']

#Zunahme / Abnahme der Verkaufsmenge(diff_amount)Hinzufügen
df_sales_amount_by_date['diff_amount'] = df_sales_amount_by_date['amount'] - df_sales_amount_by_date['lag_amount']
df_sales_amount_by_date.head(10)

スクリーンショット 2020-08-22 9.28.21.png

Referenz: concat, das pandas.DataFrame, Series verkettet Referenz: Daten in Zeilen- / Spaltenrichtung (vertikal / horizontal) mit Pandas verschieben

P-042: Aggregieren Sie den Verkaufsbetrag (Betrag) des Belegdetail-Datenrahmens (df_receipt) für jedes Datum (sales_ymd) und kombinieren Sie die Daten von vor 1 Tag, 2 Tagen und 3 Tagen mit den Daten jedes Datums. Es sollten nur 10 Ergebnisse angezeigt werden.

P-042


#(Vertikaler Fall)
#Verkaufsbetrag (Betrag) Datum (Verkauf)_ymd) Aggregieren nach(groupby)
df_sales_amount_by_date = df_receipt[['sales_ymd', 'amount']].groupby('sales_ymd').sum().reset_index()

#Wiederholen Sie dies mit der for-Anweisung. Reichweite(1, 4)>>>1, 2,3 tritt ein i.
for i in range(1, 4):
    # i==Wenn es 1 ist, ist es in horizontaler Richtung verbunden. Mit Schicht um eine Zeile nach unten gehen (vor 1 Tag)
    if i == 1:
        df_lag = pd.concat([df_sales_amount_by_date, df_sales_amount_by_date.shift()], axis=1)
    #Wenn i nicht 1 ist, fügen Sie es dem Datenrahmen hinzu.
    else:
        df_lag = df_lag.append(pd.concat([df_sales_amount_by_date, df_sales_amount_by_date.shift(i)], axis=1))

#Ändern Sie den Spaltennamen
df_lag.columns = ['sales_ymd', 'amount', 'lag_sales_ymd', 'lag_amount']

#Fehlenden Wert NaN ausschließen(dropna())Und sortieren(sort_values)。
df_lag.dropna().sort_values('sales_ymd').head(10)

P-042


#Horizontaler Fall
#Verkaufsbetrag (Betrag) Datum (Verkauf)_ymd) Aggregieren nach(groupby)
df_sales_amount_by_date = df_receipt[['sales_ymd', 'amount']].groupby('sales_ymd').sum().reset_index()

#Wiederholen Sie dies mit der for-Anweisung. Reichweite(1, 4)>>>1, 2,3 tritt ein i.
for i in range(1, 4):
  #Wenn i 1 ist, ist df in horizontaler Richtung verbunden_Erstellen Sie eine Verzögerung.
    if i == 1:
        df_lag = pd.concat([df_sales_amount_by_date, df_sales_amount_by_date.shift(1)], axis=1)
   #Wenn ich anders als 1 bin, ist es bereits df_Da Verzögerung erzeugt wird, df_Mit Verzögerung verbinden.
    else:
        df_lag = pd.concat([df_lag, df_sales_amount_by_date.shift(i)], axis=1)

#Ändern Sie den Spaltennamen
df_lag.columns = ['sales_ymd', 'amount', 'lag1_sales_ymd', 'lag1_amount', 
                  'lag2_sales_ymd', 'lag2_amount', 'lag3_sales_ymd', 'lag3_amount']

#Fehlenden Wert NaN ausschließen(dropna())Und sortieren(sort_values)。
df_lag.dropna().sort_values('sales_ymd').head(10)

Referenz: Ausschließen (löschen) / ersetzen (ausfüllen) / fehlenden Wert NaN durch Pandas extrahieren

P-043: Verkaufsübersichtsdatenrahmen (df_sales_summary), der den Belegdetaildatenrahmen (df_receipt) und den Kundendatenrahmen (df_customer) kombiniert und den Verkaufsbetrag (Betrag) für jedes Geschlecht (Geschlecht) und Alter (berechnet aus dem Alter) summiert. ). Das Geschlecht ist 0 für Männer, 1 für Frauen und 9 für Unbekannte.

Die Artikelzusammensetzung sollte jedoch vier Artikel umfassen: Alter, Verkaufsbetrag für Frauen, Verkaufsbetrag für Männer und Verkaufsbetrag für unbekanntes Geschlecht (Kreuztabelle von Alter vertikal und Geschlecht horizontal). Außerdem sollte die Altersgruppe alle 10 Jahre alt sein.

P-043


#Belegdetail-Datenrahmen (df_Quittung) und Kundendatenrahmen (df_Kunde) beitreten
# merge(df1, df2, on='Schlüsselname', how='inner')
df_tmp = pd.merge(df_receipt, df_customer, on='customer_id', how='inner')

#Machen Sie die Altersgruppe alle 10 Jahre.
# math.floor:Nach dem Dezimalpunkt abschneiden. Ex)Im Falle von 22 22/10 * 10 = 2(2.Kürzung von 2) *10 = 20
df_tmp['era'] = df_tmp['age'].apply(lambda x: math.floor(x/10)*10)

#Erstellen Sie eine Pivot-Tabelle(pivot_table()Funktion)Details unten
df_sales_summary = pd.pivot_table(df_tmp, index='era', columns='gender_cd', values='amount', aggfunc='sum').reset_index()

#Ändern Sie den Spaltennamen
df_sales_summary.columns = ['era', 'male', 'female', 'unknown']
df_sales_summary

__pivot_table () Funktion __ -Daten (erstes Argument): Datenrahmen, auf den verwiesen werden soll ・ Index: Geben Sie den Zeilennamen an -Spalten: Geben Sie den Spaltennamen an -Werte: Wenn Sie den Spaltennamen des referenzierten Datenrahmens angeben, wird nur das Ergebnis für diese Spalte berechnet. -Aggfunc: Geben Sie die Berechnungsmethode für den Ergebniswert an Referenz: Statistiken für jede Kategorie mit der Pandas-Pivot-Tabelle berechnen

P-044: Der in der vorherigen Frage erstellte Datenrahmen für die Verkaufszusammenfassung (df_sales_summary) war ein Side-by-Side-Verkauf des Geschlechts. Lassen Sie uns das Geschlecht vertikal aus diesem Datenrahmen heraushalten und es in drei Elemente konvertieren: Alter, Geschlechtscode und Verkaufsbetrag. Der Geschlechtscode lautet jedoch "00" für Männer, "01" für Frauen und "99" für Unbekannte.

P-044


# set_Weisen Sie dem Indexindex (Zeilenname, Zeilenbezeichnung) mit index eine vorhandene Spalte zu
# stack()Von Spalte zu Zeile schwenken.
# replace()Ersetzen Sie die Zeichenfolge durch
# rename()Ändern Sie einen beliebigen Zeilennamen / Spaltennamen mit der Methode
df_sales_summary.set_index('era').stack().reset_index().replace(
        {'female': '01', 'male': '00', 'unknown': '99'}).rename(
                columns={'level_1': 'gender_cd', 0: 'amount'})

Referenz: Weisen Sie die Spalte von pandas.DataFrame dem Index (Zeilenname) set_index zu Referenz: Daten mit Stack formatieren, entstapeln, mit Pandas schwenken Referenz: [Ersetzen Sie die Zeichenfolge durch Python (ersetzen, übersetzen, re, sub)) (https://note.nkmk.me/python-str-replace-translate-re-sub/) Referenz: Zeilennamen / Spaltennamen von pandas.DataFrame ändern

P-045: Das Geburtsdatum (Birth_day) des Kundendatenrahmens (df_customer) enthält die Daten in der Datumsart (Date). Konvertieren Sie dies in eine Zeichenfolge im Format JJJJMMTT und extrahieren Sie diese zusammen mit der Kunden-ID (customer_id). Es können nur 10 Daten extrahiert werden.

P-045


#Kunden-ID (Kunde)_ID) und Geburtsdatum (Geburt) in Zeichenfolge im Format JJJJMMTT konvertiert_Tag) wird kombiniert.
# concat([df1, df2], axis=1)Verbinden Sie in horizontaler Richtung mit.
# pd.to_Datetime64 für Zeichenfolgen[ns]In Typ konvertieren.
# dt.strftime()Konvertiert Spalten in Zeichenfolgen in einem beliebigen Format gleichzeitig mit.
pd.concat([df_customer['customer_id'], pd.to_datetime(df_customer['birth_day']) \
           .dt.strftime('%Y/%m/%d')], axis=1).head(10)

Referenz: Datums- / Zeitspalten mit Pandas verarbeiten (Zeichenfolgenkonvertierung, Datumsextraktion usw.)

P-046: Das Anwendungsdatum (application_date) des Kundendatenrahmens (df_customer) enthält die Daten im Zeichenfolgentyp YYYYMMDD. Konvertieren Sie dies in einen Datumstyp (Datum oder Datum / Uhrzeit) und extrahieren Sie ihn zusammen mit der Kunden-ID (customer_id). Es können nur 10 Daten extrahiert werden.

P-046


#Kunden-ID (Kunde)_Anwendungsdatum (Anwendung) konvertiert in ID) und Datumstyp (Datum oder Datum / Uhrzeit)_Datum)
# P-Siehe 045
pd.concat([df_customer['customer_id'], pd.to_datetime(df_customer['application_date'])], axis=1).head(10)

Referenz: Datums- / Zeitspalten mit Pandas verarbeiten (Zeichenfolgenkonvertierung, Datumsextraktion usw.)

P-047: Das Verkaufsdatum (sales_ymd) des Belegdetail-Datenrahmens (df_receipt) enthält die Daten im numerischen Typ JJJJMMTT-Format. Konvertieren Sie dies in einen Datumstyp (Datum oder Datum / Uhrzeit) und extrahieren Sie ihn zusammen mit der Belegnummer (Quittungsnummer) und der Quittungsunternummer (Quittungsnummer). Es können nur 10 Daten extrahiert werden.

P-047


#Verkaufsdatum (Verkauf)_ymd) zu_datetime()In Datumstyp konvertieren mit
# pandas.concat()Horizontal kombinieren mit
# astype()Mit Methode in einen String-Str-Typ konvertieren, im Standardformat in einen String konvertieren
pd.concat([df_receipt[['receipt_no', 'receipt_sub_no']],
           pd.to_datetime(df_receipt['sales_ymd'].astype('str'))],axis=1).head(10)

# (Eine andere Lösung)
pd.concat([df_receipt[['receipt_no', 'receipt_sub_no'], 
           pd.to_datetime(df_receipt['sales_ymd']).dt.strftime('%Y-%m-%d')]], axis=1).head(10)

Referenz: Datums- / Zeitspalten mit Pandas verarbeiten (Zeichenfolgenkonvertierung, Datumsextraktion usw.)

P-048: Die Sekunden der Verkaufsepoche (sales_epoch) des Belegdetail-Datenrahmens (df_receipt) enthalten die Daten in numerischen UNIX-Sekunden. Konvertieren Sie dies in einen Datumstyp (Datum oder Datum / Uhrzeit) und extrahieren Sie ihn zusammen mit der Belegnummer (Quittungsnummer) und der Quittungsunternummer (Quittungsnummer). Es können nur 10 Daten extrahiert werden.

P-048


# pd.concat()Sekunden der Verkaufsepoche mit Verkäufen_Epoche) Datenrahmen und Belegnummer(receipt_no), Quittungsunternummer (Quittung_sub_Kombinieren Sie Nr
#Sekunden der Verkaufsepoche (Verkäufe_Epoche) bis heute Typ(to_datetime(df, unit='s')Konvertieren mit)
pd.concat([df_receipt[['receipt_no', 'receipt_sub_no']],
           pd.to_datetime(df_receipt['sales_epoch'].astype(int), unit='s')], axis=1).head(10)

Referenz: Verwendung der Funktion to_datetime zum Konvertieren von Zeit- und Datumsdaten mit Pandas

P-049: Konvertieren Sie die Sekunden der Verkaufsepoche (sales_epoch) des Belegdetail-Datenrahmens (df_receipt) in den Datumstyp (Zeitstempeltyp), extrahieren Sie nur das "Jahr" und extrahieren Sie es zusammen mit der Belegnummer (Quittung Nr.) Und der Quittungsteilnummer (Quittung_Unter). Machen wir das. Es können nur 10 Daten extrahiert werden.

P-049


#Sekunden der Verkaufsepoche (Verkäufe_Epoche) bis Datumstyp (Zeitstempeltyp)
# "Jahr"Einfach rausnehmen(dt.year)
pd.concat([df_receipt[['receipt_no', 'receipt_sub_no']], 
           pd.to_datetime(df_receipt['sales_epoch'], unit='s').dt.year], axis=1).head(10)

Referenz: Verwendung der Funktion to_datetime zum Konvertieren von Zeit- und Datumsdaten mit Pandas

P-050: Konvertieren Sie die Sekunden der Verkaufsepoche (sales_epoch) des Belegdetail-Datenrahmens (df_receipt) in den Datumstyp (Zeitstempeltyp), extrahieren Sie nur den "Monat" und extrahieren Sie ihn zusammen mit der Belegnummer (Quittungsnummer) und der Quittungsunternummer (Quittungsnummer). Machen wir das. Zusätzlich sollte "Monat" mit 0 Auffüllungen und 2 Ziffern extrahiert werden. Es können nur 10 Daten extrahiert werden.

P-050


#Sekunden der Verkaufsepoche (Verkäufe_Epoche) bis heute Typ(to_datetime(, unit='s'))
# "Mond"Einfach rausnehmen(Strftime zum Abrufen mit 0 aufgefüllten 2 Ziffern('%m'))
# pd.Kombinieren Sie Datenrahmen mit concat
pd.concat([df_receipt[['receipt_no', 'receipt_sub_no']], 
                      pd.to_datetime(df_receipt['sales_epoch'], unit='s') \
                       .dt.strftime('%m')], axis=1).head(10)

Referenz: Python - Datumsformat festlegen

P-051: Konvertieren Sie die Sekunden der Verkaufsepoche (sales_epoch) des Belegdetail-Datenrahmens (df_receipt) in den Datumstyp (Zeitstempeltyp), extrahieren Sie nur den "Tag" und extrahieren Sie ihn zusammen mit der Belegnummer (Quittung Nr.) Und der Quittungsteilnummer (Quittung_Unter). Machen wir das. Zusätzlich sollte "Tag" mit 0 Auffüllungen und 2 Ziffern extrahiert werden. Es können nur 10 Daten extrahiert werden.

P-051


#Sekunden der Verkaufsepoche (Verkäufe_Epoche) bis heute Typ(to_datetime(, unit='s'))
#Extrahieren Sie nur den Tag(dt.strftime('%d'))
# pd.concat()Kombinieren mit
pd.concat([df_receipt[['receipt_no', 'receipt_sub_no']],
                     pd.to_datetime(df_receipt['sales_epoch'], unit='s') \
                     .dt.strftime('%d')], axis=1).head(10)

Referenz: Python - Datumsformat festlegen

P-052: Gesamtumsatz (Betrag) des Belegdaten-Datenrahmens (df_receipt) für jede Kunden-ID (customer_id) und 0 für 2000 Yen oder weniger und 1 für über 2000 Yen für den Gesamtumsatz. Zeigen Sie dann 10 Artikel zusammen mit der Kunden-ID und dem Gesamtumsatz an. Wenn die Kunden-ID jedoch mit "Z" beginnt, handelt es sich um ein Nichtmitglied. Schließen Sie sie daher von der Berechnung aus.

P-052


#Bei Verwendung von Lambda
#Kundennummer"Z"Schließen Sie diejenigen aus, die mit beginnen(Suche nach Abfrage, außer nach nicht, str.startswith('Z'))
df_sales_amount = df_receipt.query('not customer_id.str.startswith("Z")', engine='python')
#Kunden-ID (Kunde)_Gruppieren nach ID). Gesamtumsatz (Betrag)(sum)
df_sales_amount = df_sales_amount[['customer_id', 'amount']].groupby('customer_id').sum().reset_index()
#Binarisieren Sie 2000 Yen oder weniger auf 0 und über 2000 Yen auf 1(apply(lambda)Wenden Sie die Bedingung zeilenweise auf die angegebene Spalte in an)
df_sales_amount['sales_flg'] = df_sales_amount['amount'].apply(lambda x: 1 if x>2000 else 0)
df_sales_amount.head(10)

# (Eine andere Lösung: np.where)
df_sales_amount = df_receipt.query('not customer_id.str.startswith("Z")', engine='python')
df_sales_amount = df_sales_amount[['customer_id', 'amount']].groupby('customer_id').sum().reset_index()
# np.where(Bedingter Ausdruck, x(Wenn wahr), y(Wenn falsch))
df_sales_amount['sales_flg'] = np.where(df_sales_amount['amount']>2000, 1, 0)
df_sales_amount.head(10)

# (Eine andere Lösung)
df_sales_amount = df_receipt[~df_receipt['customer_id'].str.startswith('Z')].groupby('customer_id').amount.sum().reset_index()
df_sales_amount.loc[df_sales_amount['amount']<=2000, 'threshold'] = 0
df_sales_amount.loc[df_sales_amount['amount']>2000, 'threshold'] = 1
df_sales_amount.head(10)

Referenz: Verwendung von apply + lambda, um eine Funktion zeilenweise auf eine bestimmte Spalte in Pandas anzuwenden

P-053: Für die postal_cd des Kundendatenrahmens (df_customer) binärisieren Sie Tokio (die ersten 3 Ziffern sind 100 bis 209) auf 1 und die anderen auf 0. Kombinieren Sie es außerdem mit dem Datenrahmen für die Belegabrechnung (df_receipt) und zählen Sie für jeden der beiden erstellten Werte die Anzahl der Kunden, die über den gesamten Zeitraum einen Einkaufsdatensatz haben.

P-053


#Post_cd) ist binärisiert(Tokio:1,Andere:0)
df_tmp = df_customer[['customer_id', 'postal_cd']].copy()
df_tmp['postal_flg'] = df_tmp['postal_cd'].apply(lambda x: 1 if 100 <= int(x[0:3]) <=209 else 0)

#Belegdetail-Datenrahmen (df_Quittung) und kombinieren(pd.merge(df1, df2, on='Schlüssel', how='inner'))
#Anzahl der eindeutigen Elemente(Nicht überlappende Nummer)Der Kunde_Berechnet für jede ID(pandas.DataFrame.nunique())
pd.merge(df_tmp, df_receipt, on='customer_id', how='inner') \
    .groupby('postal_flg').agg({'customer_id': 'nunique'})


# (Eine andere Lösung) np.Wie benutzt man wo ist P.-Siehe 052
df_tmp = df_customer[['customer_id', 'postal_cd']].copy()
df_tmp['postal_flg'] = np.where(df_tmp['postal_cd'].str[0:3].astype(int)
                                .between(100, 209), 1, 0)
pd.merge(df_tmp, df_receipt, how='inner', on='customer_id'). \
    groupby('postal_flg').agg({'customer_id':'nunique'})

P-054: Die Adresse des Kundendaten-Datenrahmens (df_customer) stammt aus der Präfektur Saitama, der Präfektur Chiba, der Metropolregion Tokio und der Präfektur Kanagawa. Erstellen Sie für jede Präfektur einen Codewert und extrahieren Sie ihn zusammen mit der Kunden-ID und der Adresse. Die Werte sollten 11 für die Präfektur Saitama, 12 für die Präfektur Chiba, 13 für Tokio und 14 für die Präfektur Kanagawa sein. Sie können 10 Ergebnisse anzeigen.

P-054


#Extrahieren Sie den Präfekturteil der Adresse und weisen Sie jedem einen Preis zu
# map()Wörterbuch diktieren ({key: value}) Wird angegeben, wird das Element, das dem Schlüssel entspricht, durch einen Wert ersetzt.
pd.concat([df_customer[['customer_id', 'address']], df_customer['address'].str[0:3] \
    .map({'Saitama': '11', 'Präfektur Chiba': '12', 'Tokio': '13', 'Kanagawa': '14'})], axis=1).head(10)

Referenz: Spaltenelemente durch Kartenmethode von pandas.Series ersetzen

P-055: Summieren Sie den Verkaufsbetrag (Betrag) des Belegdetail-Datenrahmens (df_receipt) für jede Kunden-ID (customer_id) und ermitteln Sie den Quadranten des Gesamtbetrags. Erstellen Sie dann einen Kategoriewert für den Gesamtumsatz für jeden Kunden basierend auf den folgenden Kriterien und zeigen Sie sowohl die Kunden-ID als auch den Verkaufsbetrag an. Kategoriewerte sind 1 bis 4 in der Reihenfolge von oben. Sie können 10 Ergebnisse anzeigen.

P-055


#Kunden-ID (Kunde)_Gruppieren nach ID)(groupby)Und addieren Sie den Verkaufsbetrag (Betrag)(sum)
df_sales_amount = df_receipt[['customer_id', 'amount']].groupby('customer_id').sum().reset_index()

#Finden Sie den Quadranten für jede Umsatzmenge (Menge).(25. Perzentil: 25pct,50. Perzentil: 50pct,75. Perzentil: 75pct)
pct25 = np.quantile(df_sales_amount['amount'], 0.25)
pct50 = np.quantile(df_sales_amount['amount'], 0.5)
pct75 = np.quantile(df_sales_amount['amount'], 0.75)

#Erstellen Sie eine Funktion von Kategoriewerten und wenden Sie sie an
def pct_group(x):
    if x < pct25:
        return 1
    elif pct25 <= x < pct50:
        return 2
    elif pct50 <= x < pct75:
        return 3
    elif pct75 <= x:
        return 4

#pct mit anwenden_Wenden Sie eine Gruppe auf jede Zeile an
df_sales_amount['pct_group'] = df_sales_amount['amount'].apply(lambda x: pct_group(x))
df_sales_amount

Referenz: Binning-Prozess mit Pandas Cut- und Qcut-Funktion (Binning)

P-056: Berechnen Sie das Alter in Schritten von 10 Jahren basierend auf dem Alter des Kundendatenrahmens (df_customer) und extrahieren Sie es zusammen mit der Kunden-ID (Kunden-ID) und dem Geburtsdatum (Geburtsdatum). Alle Personen über 60 sollten jedoch über 60 Jahre alt sein. Der Kategoriename, der das Alter angibt, ist beliebig. Die ersten 10 Elemente sollten angezeigt werden.

P-056


#Berechnen Sie das Alter in Schritten von 10 Jahren
# math.Auf dem Boden abschneiden. Mindest(, 60)60 oder mehr wird nicht ausgegeben.
df_customer_era = pd.concat([df_customer[['customer_id', 'birth_day']], 
                             df_customer['age'].apply(lambda x: math.floor(x / 10) * 10, 60)], axis=1)
df_customer_era.head(10)


# (Eine andere Lösung)
#Alter(Unter Teenagern, Teenagern, 20ern, 30ern, 40ern, 50ern, 60ern und darüber)Teilen durch.(flg_age)
def age_group(x):
    if x < 10:
        return 'Unter Teenagern'
    elif 10 <= x <20:
        return '10er'
    elif 20 <= x < 30:
        return '20er Jahre'
    elif 30 <= x < 40:
        return '30er Jahre'
    elif 40 <= x < 50:
        return 'Vierziger Jahre'
    elif 50 <= x < 60:
        return '50er Jahre'
    elif 60 <= x:
        return '60er Jahre und älter'

df_customer['flg_age'] = df_customer['age'].apply(lambda x: age_group(int(x)))

#Kunden-ID (Kunde)_id), Geburtsdatum (Geburt)_extrahiert mit Tag)
df_customer[['customer_id', 'birth_day', 'flg_age']].head(10)

P-057: Kombinieren Sie das Extraktionsergebnis der vorherigen Frage und des Geschlechts (Geschlecht) und erstellen Sie neue Kategoriedaten, die die Kombination von Geschlecht und Alter darstellen. Der Wert der Kategorie, die die Kombination darstellt, ist beliebig. Die ersten 10 Elemente sollten angezeigt werden.

P-057


#Kategoriedaten(Geschlecht x Alter)'gender_era'Erschaffen
#Alter ist int Typ so astype(str)Konvertieren mit
df_customer_era['gender_era'] = df_customer['gender_cd'] + df_customer_era['age'].astype(str)
df_customer_era.head(10)

P-058: Machen Sie den Gender-Code (gender_cd) des Kundendatenrahmens (df_customer) zu einer Dummy-Variablen und extrahieren Sie ihn zusammen mit der Kunden-ID (customer_id). Sie können 10 Ergebnisse anzeigen.

P-058


#Geschlechtscode (Geschlecht_cd) als Dummy-Variable(get_dummies)
#Geben Sie den Spaltennamen der Spalte an, die Sie in den Argumentspalten einer Liste als Dummy verwenden möchten
pd.get_dummies(df_customer[['customer_id', 'gender_cd']], columns=['gender_cd'])

Referenz: Konvertieren von kategorialen Variablen in Dummy-Variablen mit Pandas (get_dummies)

P-059: Der Gesamtumsatz (Betrag) des Belegdetail-Datenrahmens (df_receipt) wird für jede Kunden-ID (customer_id) summiert, und der Gesamtumsatz wird auf Durchschnitt 0 und Standardabweichung 1 auf Gesamt-Kunden-ID und Verkaufsbetrag standardisiert. Anzeige mit. Die zur Standardisierung verwendete Standardabweichung kann entweder eine unverzerrte Standardabweichung oder eine Stichprobenstandardabweichung sein. Wenn die Kunden-ID jedoch mit "Z" beginnt, handelt es sich um ein Nichtmitglied. Schließen Sie sie daher von der Berechnung aus. Sie können 10 Ergebnisse anzeigen.

P-059


#Kundennummer"Z"Schließen Sie diejenigen aus, die mit Kunden-ID (Kunde) beginnen._Addieren Sie den Verkaufsbetrag (Betrag) für jede ID)
df_sales_amount = df_receipt.query("not customer_id.str.startswith('Z')", engine='python') \
    .groupby('customer_id').agg({'amount': 'sum'}).reset_index()

#Verkaufsmenge standardisieren
df_sales_amount['amount_ss'] = preprocessing.scale(df_sales_amount['amount'])
df_sales_amount.head(10)


# (Eine andere Lösung)
#Codebeispiel 2 (Durch Ausführen einer Anpassung können verschiedene Daten mit demselben Durchschnitt und derselben Standardabweichung standardisiert werden.)
df_sales_amount = df_receipt.query('not customer_id.str.startswith("Z")', engine='python'). \
    groupby('customer_id').agg({'amount':'sum'}).reset_index()
scaler = preprocessing.StandardScaler()
scaler.fit(df_sales_amount[['amount']])
df_sales_amount['amount_ss'] = scaler.transform(df_sales_amount[['amount']])
df_sales_amount.head(10)

Referenz: Normalisieren / Standardisieren mit Python (Liste, NumPy-Array, pandas.DataFrame)

P-060: Der Verkaufsbetrag (Betrag) des Belegdetail-Datenrahmens (df_receipt) wird für jede Kunden-ID (customer_id) summiert, und der Gesamtverkaufsbetrag wird auf den Mindestwert 0 und den Maximalwert 1 auf die Kunden-ID und den Verkaufsbetrag normiert. Anzeige mit der Summe. Wenn die Kunden-ID jedoch mit "Z" beginnt, handelt es sich um ein Nichtmitglied. Schließen Sie sie daher von der Berechnung aus. Sie können 10 Ergebnisse anzeigen.

P-060


#Der Verkaufsbetrag (Betrag) ist die Kunden-ID (Kunde)_id) gesamt
df_sales_amount = df_receipt.query("not customer_id.str.startswith('Z')", engine='python') \
    .groupby('customer_id').agg({'amount': 'sum'}).reset_index()
df_sales_amount
#Normalisieren Sie den Verkaufsbetrag auf den Minimalwert 0 und den Maximalwert 1(preprocessing.minmax_scale)
df_sales_amount['amount_mm'] = preprocessing.minmax_scale(df_sales_amount['amount'])
df_sales_amount.head(10)


# (Eine andere Lösung)
#Codebeispiel 2 (Durch Ausführen einer Anpassung können verschiedene Daten mit demselben Durchschnitt und derselben Standardabweichung standardisiert werden.)
df_sales_amount = df_receipt.query('not customer_id.str.startswith("Z")', engine='python'). \
    groupby('customer_id').agg({'amount':'sum'}).reset_index()
scaler = preprocessing.MinMaxScaler()
scaler.fit(df_sales_amount[['amount']])
df_sales_amount['amount_mm'] = scaler.transform(df_sales_amount[['amount']])
df_sales_amount.head(10)

Referenz: Normalisieren / Standardisieren mit Python (Liste, NumPy-Array, pandas.DataFrame)

3. Referenzen

100 Schläge Data Science So führen Sie 100 Data Science-Schläge auf einem Mac aus

4. Eindrücke

Schwierigkeitsgrad nach 40 erhöht. Es ist in Ordnung, es zu kopieren, also verbalisieren Sie, was geschrieben steht.

Recommended Posts

Data Science 100 Klopfkommentar (P021 ~ 040)
Data Science 100 Klopfkommentar (P061 ~ 080)
Data Science 100 Klopfkommentar (P041 ~ 060)
Data Science 100 Klopfkommentar (P081 ~ 100)
"Data Science 100 Knock (Strukturierte Datenverarbeitung)" Python-007 Erläuterung
"Data Science 100 Knock (Strukturierte Datenverarbeitung)" Python-006 Erläuterung
Lernen Sie Data Science
"Data Science 100 Knock (Strukturierte Datenverarbeitung)" Python-001 Erläuterung
"Data Science 100 Knock (Strukturierte Datenverarbeitung)" Python-002 Erläuterung
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 021 Erläuterung
"Data Science 100 Knock (Strukturierte Datenverarbeitung)" Python-005 Erläuterung
"Data Science 100 Knock (Strukturierte Datenverarbeitung)" Python-004 Erläuterung
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 020 Erläuterung
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 025 Erläuterung
"Data Science 100 Knock (Strukturierte Datenverarbeitung)" Python-003 Erläuterung
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 019 Erläuterung
Vorbereitung zum Versuch "Data Science 100 Knock (Strukturierte Datenverarbeitung)"
Umgebungskonstruktion (Windows 10) für 100 Schläge Data Science (strukturierte Datenverarbeitung)
Fordern Sie 100 Data Science-Schläge heraus
OPT Data Science Wettbewerb
Data Science 100 Knock ~ Kampf um weniger als Anfänger Teil3
Data Science 100 Knock ~ Kampf um weniger als Anfänger Teil6
Data Science 100 Knock ~ Kampf um weniger als Anfänger Teil2
Data Science 100 Knock ~ Kampf um weniger als Anfänger Teil1
Data Science 100 Knock ~ Kampf um weniger als Anfänger Teil9
Data Science 100 Knock ~ Kampf um weniger als Anfänger Teil7
Data Science 100 Knock ~ Kampf um weniger als Anfänger Teil4
Data Science 100 Knock ~ Kampf um weniger als Anfänger Teil11
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 001-010 Impressionen + Zusammenfassung der Kommentare
Deshalb habe ich Pandas verlassen [Data Science 100 Knock (Strukturierte Datenverarbeitung) # 2]
Deshalb habe ich Pandas verlassen [Data Science 100 Knock (Strukturierte Datenverarbeitung) # 1]
Data Science Cheet Sheet (Python)
Deshalb habe ich Pandas verlassen [Data Science 100 Knock (Strukturierte Datenverarbeitung) # 3]
Versuchen Sie "100 Schläge auf Data Science" ①
Deshalb habe ich Pandas verlassen [Data Science 100 Knock (Strukturierte Datenverarbeitung) # 5]
Infra_Data Science Course Output
Deshalb habe ich Pandas verlassen [Data Science 100 Knock (Strukturierte Datenverarbeitung) # 4]
Deshalb habe ich Pandas verlassen [Data Science 100 Knock (Strukturierte Datenverarbeitung) # 6]
Starten Sie Data Science in der Cloud
Einführung in datenwissenschaftliche Bücher.
[Data Science-Grundlagen] Datenerfassung über API