[PYTHON] Data Science 100 Knock ~ Kampf um weniger als Anfänger Teil10

Dies ist ein Kampfbericht über das Klopfen von 100 Eiern, ohne das Ei des Datenwissenschaftlers zu kennen. Es ist ein Rätsel, ob ich das Rennen beenden kann. ~~ Auch wenn es unterwegs verschwindet, denken Sie bitte, dass es Qiita nicht gegeben wird. ~~

100 Klopfartikel 100 Knock Guide

** Sei vorsichtig, wenn du es versuchst, da es Spoiler enthält **

Ich verstehe das Problem der Statistik nicht. (59 ~)

Das ist schwer zu sehen! Diese Schreibweise ist gefährlich! Wenn Sie Fragen haben, lassen Sie es mich bitte wissen. ~~ Ich werde es als Nahrung verwenden, während mein Herz geschädigt wird.

Diese Lösung ist falsch! Diese Interpretation ist anders! Bitte kommentieren Sie, wenn Sie welche haben.

Diesmal von 52 bis 56. [Letztes Mal] 45-51 [Zum ersten Mal mit Inhaltsverzeichnis]

52

P-052: Gesamtumsatz (Betrag) des Datenrahmens für Belegdetails (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 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.

mine52.py


df=df_receipt[df_receipt['customer_id'].str.contains('^[^Z]')].reset_index()
df=df.groupby('customer_id').agg({'amount':'sum'}).reset_index()
df['amount']=df['amount'].apply(lambda x : 0 if x<=2000 else 1)
df.head(10)

'''Musterantwort'''
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()
df_sales_amount['sales_flg'] = df_sales_amount['amount'].apply(lambda x: 1 if x > 2000 else 0)
df_sales_amount.head(10)

Nachdem Sie groupby gemacht haben, addieren Sie es und teilen Sie es in 0 und 1, während Sie sie vergleichen.

Es war nach langer Zeit ein Python-Problem, weil es darum ging, "Lambda" zu beherrschen.

Python ist nicht das einzige Problem, aber es ist wirklich ärgerlich, typbewusst zu sein und mit typunabhängigen Anweisungen zu lösen.

In diesem Fall hat es lange gedauert, um zu verstehen, welcher Layer-Datentyp in "x" von "Lambda x:" enthalten ist.

53 ..

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.

mine53.py


df=df_customer.copy()
df['postal_cd']=df.postal_cd.apply(lambda x: 1 if 100<=int(x[:3])<=209 else 0)
df=pd.merge(df,df_receipt,how='inner',on='customer_id')
df.groupby('postal_cd').agg({'customer_id':'nunique'})

'''Musterantwort'''
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)

pd.merge(df_tmp, df_receipt, how='inner', on='customer_id'). \
    groupby('postal_flg').agg({'customer_id':'nunique'})

Es ist zu bequem, die Form 100 <= x <= 209 in die if-Anweisung in lambda zu schreiben. Es ist ein Geheimnis, dass ich vergessen habe, "wenn" zu schreiben, weil ich mich zu sehr auf "sonst" konzentriert habe.

54 ..

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.

mine54.py


df=df_customer.copy()
df['to_cd']=df['address'].apply(lambda x:11 if x.startswith('Saitama')\
                                else 12 if x.startswith('Präfektur Chiba')\
                                else 13 if x.startswith('Tokio') \
                                else 14 if x.startswith('Präfektur Kanagawa') else 0)
df[['customer_id','address','to_cd']].head(10)

'''Musterantwort'''
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)

Nun, es ist praktisch für "begin with ()" (ich habe vergessen, "enthält" zu buchstabieren) Was Sie beachten müssen, ist die Rückkehr mit dem Typ "bool".

55

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.

-Mehr als der Minimalwert und kleiner als der erste Quadrant

mine55.py


df=df_receipt.copy()
df=df.groupby('customer_id')['amount'].sum().reset_index()
si=df.quantile(q=[0.25,0.5,0.75]).T
#float(si[0.25])
df['sibun']=df['amount'].apply(lambda x:1 if x<float(si[0.25]) 
                              else 2 if x<float(si[0.5])
                              else 3 if x<float(si[0.75]) 
                              else 4)
df.head(10)

'''Musterantwort'''
#Codebeispiel 1
df_sales_amount = df_receipt[['customer_id', 'amount']].groupby('customer_id').sum().reset_index()
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)

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

df_sales_amount['pct_group'] = df_sales_amount['amount'].apply(lambda x: pct_group(x))
df_sales_amount.head(10)

#Codebeispiel 2
df_temp = df_receipt.groupby('customer_id')[['amount']].sum()
df_temp['quantile'], bins = pd.qcut(df_receipt.groupby('customer_id')['amount'].sum(), 4, retbins=True)
display(df_temp.head())
print('quantiles:', bins)

Geben Sie von der Summe einen Viertelpunkt und dividieren Sie durch weniger als oder mehr ... In Codebeispiel 2 wird die Summe jedoch so wie sie ist in "pd.cut" eingegeben und als 4 Unterteilungen angegeben.

Der Quadrant war das, was ich beim 32. Lauf gemacht habe, aber ich habe es wie erwartet vergessen. Fukushu Shinakan

56 ..

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.

mine56.py


df=df_customer.copy()
df_bins=pd.cut(df.age,[10,20,30,40,50,60,150],right=False,labels=[10,20,30,40,50,60])

df=pd.concat([df[['customer_id','birth_day']],df_bins],axis=1)
df.head(10)

'''Musterantwort'''
#Codebeispiel 1
df_customer_era = pd.concat([df_customer[['customer_id', 'birth_day']],
                             df_customer['age'].apply(lambda x: min(math.floor(x / 10) * 10, 60))],
                             axis=1)

df_customer_era.head(10)

#Codebeispiel 2
df_customer['age_group'] = pd.cut(df_customer['age'], bins=[0, 10, 20, 30, 40, 50, 60, np.inf], right=False)
df_customer[['customer_id', 'birth_day', 'age_group']].head(10)

Diesmal ist es die 43. Bewertung. Ich wusste nicht, dass es "np, inf" gibt, also habe ich die Nummer 150 eingegeben, was offensichtlich unmöglich ist. Außerdem habe ich df.age.min () verwendet, um das Mindestalter zu ermitteln, und bestätigt, dass 10 ~ in Ordnung ist, und dann 0 herausgezogen.

Es gibt ein Element namens "Etiketten" in "pd.cut". Wenn Sie es also einfügen, erhalten Sie eine schöne Nummer. Außerdem nimmt right = False den Bereich "10 <= x <20" an.

Referenz

Bis hierher für diese Zeit

Recommended Posts

Data Science 100 Knock ~ Kampf um weniger als Anfänger Teil5
Data Science 100 Knock ~ Kampf um weniger als Anfänger Teil10
Data Science 100 Knock ~ Kampf um weniger als Anfänger Teil8
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
Implementieren von 100 Data Science-Schlägen für Anfänger in Data Science (für Windows 10 Home)
Fordern Sie 100 Data Science-Schläge heraus
Versuchen Sie "100 Schläge auf Data Science" ①
100 Pandas klopfen für Python-Anfänger
Erkennung von Zeitreihendatenanomalien für Anfänger
[Praktisch für Anfänger] Lesen Sie zaggles "Predicting Home Prices" Zeile für Zeile (Teil 1: Lesen von Daten)
[Linux-Befehl] Liste weniger Befehlsoptionen [Muss für Anfänger sein]
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 018 Erläuterung
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 023 Erläuterung
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 030 Erläuterung
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 022 Erläuterung
Verwendung von Datenanalysetools für Anfänger
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 017 Erläuterung
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 026 Erläuterung
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 016 Erläuterung
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 024 Erläuterung
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 027 Erläuterung
Pandas-Grundlagen für Anfänger ② Übersicht über die Daten
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 029 Erläuterung
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 015 Erläuterung
[Python] 100 Schläge auf Data Science (strukturierte Datenverarbeitung) 028 Erläuterung