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]
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.
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.
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".
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
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.
Recommended Posts