[PYTHON] Data Science 100 Klopfkommentar (P021 ~ 040)

1. Zuallererst

Nach dem vorherigen werde ich 100 Schläge der Datenwissenschaft erklären. 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-021: Zählen Sie die Anzahl der Fälle für den Belegdetaildatenrahmen (df_receipt).

P-021


#Die Nummer ist len()Verwenden Sie die Methode.
len(df_receipt)

P-022: Zählen Sie die Anzahl der eindeutigen Fälle für die Kunden-ID (customer_id) des Datenrahmens für Belegdetails (df_receipt).

P-022


#Die Anzahl der Einzelfälle ist eindeutig()Verwenden Sie die Methode.
# df_receipt['customer_id'].unique() >>>Gibt eine Liste eindeutiger Elementwerte im NumPy-Array ndarray zurück
len(df_receipt['customer_id'].unique())

Referenz: https://note.nkmk.me/python-pandas-value-counts/

P-023: Summieren Sie den Verkaufsbetrag (Betrag) und die Verkaufsmenge (Menge) für jeden Geschäftscode (store_cd) für den Datenrahmen für Belegdetails (df_receipt).

P-023


#mit der groupby-Methode'store_cd'Gruppierung nach
# agg()Aggregieren Sie die Daten mit. Wörterbuchtyp Summe aus Verkaufsmenge (Menge) und Verkaufsmenge (Menge)
# reset_index()Neu indizieren mit
df_receipt.groupby('store_cd').agg({'amount': 'sum', 'quantity': 'sum'}).reset_index()

#(Eine andere Lösung)
df_receipt[['amount', 'quantity', 'store_cd']].groupby('store_cd', as_index=False).sum()

Referenz (groupby): https://note.nkmk.me/python-pandas-groupby-statistics/ Referenz (agg): https://note.nkmk.me/python-pandas-agg-aggregate/

P-024: Suchen Sie für den Belegdatenrahmen (df_receipt) das neueste Verkaufsdatum (sales_ymd) für jede Kunden-ID (customer_id) und zeigen Sie 10 Artikel an.

P-024


#Kunden-ID (Kunde) mit groupby_Gruppieren nach ID).
#Verkaufsdatum (Verkauf)_ymd) neueste(max()Reinkommen)
df_receipt.groupby('customer_id').sales_ymd.max().reset_index().head(10)

# (Eine andere Lösung)
#Kunden-ID (Kunde) in loc_Verkaufstermine (Verkäufe) gruppiert nach ID)_ymd) neueste(idxmax()Reinkommen)
df_receipt[['customer_id', 'sales_ymd']].loc[df_receipt.groupby('customer_id').sales_ymd.idxmax()].head(10)

Referenz (groupby): https://note.nkmk.me/python-pandas-groupby-statistics/

P-025: Suchen Sie für den Belegdatenrahmen (df_receipt) das älteste Verkaufsdatum (sales_ymd) für jede Kunden-ID (customer_id) und zeigen Sie 10 Artikel an.

P-025


# P-Siehe 023. Das älteste Verkaufsdatum ist agg({'sales_ymd': min})Kann ausgedrückt werden durch
df_receipt.groupby('customer_id').agg({'sales_ymd': min}).reset_index().head(10)

# (Eine andere Lösung)
#Kunden-ID (Kunde) in loc_Verkaufstermine (Verkäufe) gruppiert nach ID)_ymd) am ältesten(idxmin()Reinkommen)
df_receipt[['customer_id', 'sales_ymd']].loc[df_receipt.groupby('customer_id').sales_ymd.idxmin()].head(10)

P-026: Finden Sie das neueste Verkaufsdatum (sales_ymd) und das älteste Verkaufsdatum für jede Kunden-ID (customer_id) im Datenrahmen für Belegdetails (df_receipt) und zeigen Sie 10 verschiedene Daten an.

P-026


#Kunden-ID (Kunde)_Verkaufsdatum (Verkauf) für jede ID)_ymd) neues Verkaufsdatum(max)Und altes Verkaufsdatum(min)Erstellen Sie einen Datenrahmen für
df_tmp = df_receipt.groupby('customer_id').agg({'sales_ymd':['max','min']}).reset_index()

#Spalte ändern(Details werden unten erklärt)
df_tmp.columns = ["_".join(pair) for pair in df_tmp.columns]

#Beide fragen unterschiedliche Daten ab()Suche nach.
df_tmp.query('sales_ymd_max != sales_ymd_min').head(10)

Da df.columns zu MultiIndex ([('customer_id', ''), ('sales_ymd', 'max'), ('sales_ymd', 'min')] wird, extrahieren Sie sie einzeln mit der for-Anweisung. Verbinden Sie die Zeichen in Klammern mit "_" .join (). スクリーンショット 2020-08-21 18.04.58.png

P-027: Berechnen Sie den durchschnittlichen Verkaufsbetrag (Betrag) für jeden Geschäftscode (store_cd) für den Datenrahmen für Belegdetails (df_receipt) und zeigen Sie den TOP5 in absteigender Reihenfolge an.

P-027


#Belegdetail-Datenrahmen (df_Quittung) den Geschäftscode (Geschäft_Gruppieren nach CD).
# agg({'amount':'mean'})Berechnen Sie den durchschnittlichen Verkaufsbetrag (Betrag) bei
# reset_index()Neu indizieren mit und sortieren_values('amount', ascending=False)Sortieren nach Verkaufsbetrag (Betrag) in absteigender Reihenfolge
df_receipt.groupby('store_cd').agg({'amount':'mean'}) \
      .reset_index().sort_values('amount', ascending=False).head(5)

Referenz (groupby): https://note.nkmk.me/python-pandas-groupby-statistics/ Referenz (agg): https://note.nkmk.me/python-pandas-agg-aggregate/

P-028: Berechnen Sie für den Datenrahmen für Belegdetails (df_receipt) den Medianwert des Verkaufsbetrags (Betrag) für jeden Geschäftscode (store_cd) und zeigen Sie den TOP5 in absteigender Reihenfolge an.

P-028


# P-Siehe 027
#Der Median ist der Median
df_receipt.groupby('store_cd').agg({'amount':'median'}).reset_index().sort_values('amount', ascending=False).head(5)

Referenz (Median): https://note.nkmk.me/python-statistics-mean-median-mode-var-stdev/

P-029: Ermitteln Sie für den Datenrahmen für Belegdetails (df_receipt) den häufigsten Wert des Produktcodes (product_cd) für jeden Geschäftscode (store_cd).

P-029


#Die erste Hälfte ist P.-Siehe 027
#Produktcode (Produkt_cd) funktionieren(Lambda-Stil)Bewerben.
df_receipt.groupby('store_cd').product_cd.apply(lambda x: x.mode()).reset_index()
# df.groupby('grouping_content').Was Sie am häufigsten finden möchten.apply(lambda x: x.mode())

# (Falsche Antwort)
df_receipt.groupby('store_cd').agg({'product_cd':'mode'}).reset_index()
# >>>AttributeError: 'SeriesGroupBy' object has no attribute 'mode'

Referenz (Lambda-Ausdruck): https://note.nkmk.me/python-lambda-usage/

P-030: Berechnen Sie für den Datenrahmen für Belegdetails (df_receipt) die Stichprobenverteilung des Verkaufsbetrags (Betrags) für jeden Geschäftscode (store_cd) und zeigen Sie den TOP5 in absteigender Reihenfolge an.

P-030


#Geschäftscode (speichern_Musterverteilung der Verkaufsmenge (Menge) der CD)(var(ddof=0))
# reset_Neu indizieren und nach Index sortieren(sort_values),absteigende Reihenfolge(ascending=False)
df_receipt.groupby('store_cd').amount.var(ddof=0).reset_index().sort_values('amount', ascending=False).head(5)

Referenz: https://deepage.net/features/numpy-var.html Referenz (Stichprobenverteilung und unvoreingenommene Verteilung): https://bellcurve.jp/statistics/course/8614.html

P-031: Berechnen Sie die Standardabweichung des Verkaufsbetrags (Betrags) für jeden Geschäftscode (store_cd) für den Datenrahmen für Belegdetails (df_receipt) und zeigen Sie den TOP5 in absteigender Reihenfolge an.

P-031


#Geschäftscode (speichern_Beispiel Standardabweichung des Verkaufsbetrags (Betrag) von CD)(std(ddof=0))
# reset_Neu indizieren und nach Index sortieren(sort_values),absteigende Reihenfolge(ascending=False)
df_receipt.groupby('store_cd').amount.std(ddof=0).reset_index().sort_values('amount', ascending=False).head()

Referenz: https://deepage.net/features/numpy-var.html Referenz (Stichprobenverteilung und unvoreingenommene Verteilung): https://bellcurve.jp/statistics/course/8614.html

P-032: Ermitteln Sie den Perzentilwert des Verkaufsbetrags (Betrags) des Belegrahmen-Datenrahmens (df_receipt) in Schritten von 25%.

P-032


#Prozentwert des Verkaufsbetrags (Betrag)(quantile)
# np.arange(5)/4 >>> [0, 0.25, 0.5, 0.75, 1]
df_receipt.amount.quantile(q=np.arange(5)/4)

# (Eine andere Lösung)
np.percentile(df_receipt['amount'], q=[25, 50, 75,100])

Referenz (Quantil): https://note.nkmk.me/python-pandas-quantile/

P-033: Berechnen Sie den durchschnittlichen Verkaufsbetrag (Betrag) für jeden Geschäftscode (store_cd) für den Datenrahmen für Belegdetails (df_receipt) und extrahieren Sie 330 oder mehr.

P-033


#Geschäftscode (speichern_Gruppieren nach CD).
#Durchschnittliche Umsatzmenge (Betrag)(mean)Wird berechnet und zurückgesetzt_index()Neu indizieren mit
# query()300 oder mehr des Verkaufsbetrags (Betrags) nach Methode
df_receipt.groupby('store_cd').amount.mean().reset_index().query('amount >= 330')

# (Eine andere Lösung)
df_receipt.groupby('store_cd').amount.mean()[df_receipt.groupby('store_cd').amount.mean() >= 300]

P-034: Addieren Sie für den Datenrahmen für Belegdetails (df_receipt) den Verkaufsbetrag (Betrag) für jede Kunden-ID (customer_id) und berechnen Sie den Durchschnitt aller Kunden. Wenn die Kunden-ID jedoch mit "Z" beginnt, handelt es sich um ein Nichtmitglied. Schließen Sie sie daher von der Berechnung aus.

P-034


#Wie schreibe ich ohne Abfrage
# ~Ist nicht. , Kundennummer (Kunde_id) beginnt mit Z.(str.startswith("Z"))
#Kunden-ID (Kunde)_Der Durchschnitt aller Kunden durch Summieren des Verkaufsbetrags (Betrags) für jede ID)
df_receipt[~df_receipt['customer_id'].str.startswith("Z")].groupby('customer_id').amount.sum().mean()

#Wie schreibe ich mit Abfrage
df_receipt.query('not customer_id.str.startswith("Z")', engine='python').groupby('customer_id').amount.sum().mean()

P-035: Addieren Sie für den Datenrahmen der Belegabrechnung (df_receipt) den Verkaufsbetrag (Betrag) für jede Kunden-ID (customer_id), um den Durchschnitt aller Kunden zu ermitteln, und extrahieren Sie die Kunden, die über dem Durchschnitt einkaufen. .. Wenn die Kunden-ID jedoch mit "Z" beginnt, handelt es sich um ein Nichtmitglied. Schließen Sie sie daher von der Berechnung aus. Es müssen nur 10 Daten angezeigt werden.

P-035


#Kundennummer"Z"Ausschließen.'customer_id'Teilen Sie jede Gruppe. (2547.742234529256) Durchschnitt für alle Kunden
amount_mean = df_receipt[~df_receipt['customer_id'].str.startswith("Z")].groupby('customer_id').amount.sum().mean()

#Kunden-ID (Kunde)_Summieren Sie den Verkaufsbetrag (Betrag) für jede ID) (Datenrahmentyp)
df_amount_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()

# amount_mean(Durchschnitt für alle Kunden)Zeigen Sie die obigen 10 Elemente an
df_amount_sum[df_amount_sum['amount'] >= amount_mean].head(10)

P-036: Kombinieren Sie intern den Belegdetaildatenrahmen (df_receipt) und den Geschäftsdatenrahmen (df_store) und zeigen Sie alle Elemente im Belegdetaildatenrahmen und 10 Geschäftsnamen (Geschäftsname) im Geschäftsdatenrahmen an.

P-036


# merge(A(df), B(df), how='inner'(Innere Verbindung), on='Gemeinsame Spalte')
pd.merge(df_receipt, df_store[['store_cd','store_name']], how='inner', on='store_cd').head(10)

Referenz: https://note.nkmk.me/python-pandas-merge-join/

P-037: Kombinieren Sie intern den Produktdatenrahmen (df_product) und den Kategoriedatenrahmen (df_category) und zeigen Sie alle Elemente im Produktdatenrahmen und 10 Unterkategorienamen (category_small_name) im Kategoriedatenrahmen an.

P-037


# merge(A(df), B(df), how='inner'(Innere Verbindung), on='Gemeinsame Spalte')
pd.merge(df_product
         , df_category[['category_small_cd','category_small_name']]
         , how='inner', on='category_small_cd').head(10)

Referenz: https://note.nkmk.me/python-pandas-merge-join/

P-038: Ermitteln Sie den Gesamtumsatz für jeden Kunden aus dem Kundendatenrahmen (df_customer) und dem Belegdetaildatenrahmen (df_receipt). Für Kunden ohne Einkaufsaufzeichnung sollte der Verkaufsbetrag jedoch als 0 angezeigt werden. Darüber hinaus sollten Kunden diejenigen ansprechen, deren Geschlechtscode (gender_cd) weiblich ist (1), und Nichtmitglieder ausschließen (Kunden-IDs beginnend mit 'Z'). Es müssen nur 10 Ergebnisse angezeigt werden.

P-038


#Gesamtumsatz für jeden Kunden.
#Gruppieren nach Kunden-ID und Gesamtumsatz (Betrag)(sum)
df_amount_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()

#Kunde ist Geschlechtscode (Geschlecht_Für diejenigen, deren CD weiblich ist (1), Nichtmitglieder (Kunden-ID ist'Z'Schließt diejenigen aus, die mit beginnen)
df_tmp = df_customer.query('gender_cd == "1" and not customer_id.str.startswith("Z")', engine='python')

# merge(A(df), B(df), how='inner'(Innere Verbindung), on='Gemeinsame Spalte')
# fillna(0)Für Kunden, bei denen noch keine Einkäufe getätigt wurden, beträgt der Verkaufsbetrag 0
pd.merge(df_tmp['customer_id'], df_amount_sum, how='left', on='customer_id').fillna(0).head(10)

P-039: Extrahieren Sie die Top-20-Kunden mit der höchsten Anzahl von Verkaufstagen und die Top-20-Kunden mit dem höchsten Gesamtumsatz aus dem Datenrahmen der Belegabrechnung (df_receipt) und kombinieren Sie sie vollständig extern. Nichtmitglieder (Kunden-IDs, die mit 'Z' beginnen) sollten jedoch ausgeschlossen werden.

P-039


#Kundennummer('customer_id')Gruppieren nach und Gesamtumsatz (Betrag)(sum)
df_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()
# customer_id.str.startswith("Z")(Mit Ausnahme von Kunden-IDs, die mit Z beginnen)
df_sum = df_sum.query('not customer_id.str.startswith("Z")', engine='python')
#Sortieren Sie den Gesamtumsatz (Betrag) und extrahieren Sie die Top 20
df_sum = df_sum.sort_values('amount', ascending=False).head(20)

#Anzahl der Verkaufstage(sales_ymd)Duplikate extrahieren.
df_cnt = df_receipt[~df_receipt.duplicated(subset=['customer_id', 'sales_ymd'])]
# customer_id.str.startswith("Z")(Mit Ausnahme von Kunden-IDs, die mit Z beginnen)
df_cnt = df_cnt.query('not customer_id.str.startswith("Z")', engine='python')
#Kundennummer('customer_id')Gruppiert nach und Verkaufstage(sales_ymd)Zahl der Fälle(count)
df_cnt = df_cnt.groupby('customer_id').sales_ymd.count().reset_index()
#Anzahl der Verkaufstage(sales_ymd)Sortieren Sie nach der Anzahl der Fälle in absteigender Reihenfolge(ascending=False)Die Top 20 Elemente sortiert nach werden extrahiert.
df_cnt = df_cnt.sort_values('sales_ymd', ascending=False).head(20)

#Äußere Verbindung mit Zusammenführung
pd.merge(df_sum, df_cnt, how='outer', on='customer_id')

Referenz (Duplikat): https://note.nkmk.me/python-pandas-duplicated-drop-duplicates/ Referenz (äußere Verknüpfung): https://note.nkmk.me/python-pandas-merge-join/

P-040: Ich möchte untersuchen, wie viele Daten durch die Kombination aller Geschäfte und Produkte erhalten werden. Berechnen Sie die Anzahl der direkten Produkte von Geschäften (df_store) und Produkten (df_product).

P-040


#Speichern (df_Kopie des Geschäfts erstellen)
df_store_tmp = df_store.copy()
#Produkt (df_Kopie des Produkts erstellen)
df_product_tmp = df_product.copy()

#Schlüssel zum Kombinieren(Säule)が必要なのでそれぞれSäuleを追加する。
df_store_tmp['key'] = 0
df_product_tmp['key'] = 0

#Äußere Verknüpfung und überprüfen Sie die Nummer mit der len-Methode
len(pd.merge(df_store_tmp, df_product_tmp, on='key', how='outer'))

Referenz: https://note.nkmk.me/python-pandas-merge-join/

3. Referenzen

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

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