[PYTHON] Commentaire sur la science des données à 100 coups (P021 ~ 040)

1.Tout d'abord

Suite à la précédente, je vais vous expliquer 100 coups de science des données. Pour l'installation, veuillez consulter cet article (* Docker est géré sur Mac)

Fondamentalement, c'est une explication de la réponse, mais cela décrit également une autre solution.

2. Commentaire

P-021: Comptez le nombre de caisses pour la trame de données des détails de réception (df_receipt).

P-021


#Le nombre est len()Utilisez la méthode.
len(df_receipt)

P-022: Comptez le nombre de cas uniques pour l'ID client (customer_id) du bloc de données des détails du reçu (df_receipt).

P-022


#Le nombre de cas uniques est unique()Utilisez la méthode.
# df_receipt['customer_id'].unique() >>>Renvoie une liste de valeurs d'élément uniques dans le tableau NumPy ndarray
len(df_receipt['customer_id'].unique())

Référence: https://note.nkmk.me/python-pandas-value-counts/

P-023: Additionnez le montant des ventes (montant) et la quantité des ventes (quantité) pour chaque code magasin (store_cd) pour le bloc de données des détails de réception (df_receipt).

P-023


#avec la méthode groupby'store_cd'Regroupement par
# agg()Agrégez les données avec. Type de dictionnaire somme du montant des ventes (montant) et de la quantité des ventes (quantité)
# reset_index()Réindexer avec
df_receipt.groupby('store_cd').agg({'amount': 'sum', 'quantity': 'sum'}).reset_index()

#(Une autre solution)
df_receipt[['amount', 'quantity', 'store_cd']].groupby('store_cd', as_index=False).sum()

Référence (groupby): https://note.nkmk.me/python-pandas-groupby-statistics/ Référence (agg): https://note.nkmk.me/python-pandas-agg-aggregate/

P-024: Pour le bloc de données des détails du reçu (df_receipt), recherchez la dernière date de vente (sales_ymd) pour chaque ID client (customer_id) et affichez 10 articles.

P-024


#Numéro client (client) avec groupby_Grouper par identifiant).
#Date de vente (ventes)_ymd) le plus récent(max()Entrer)
df_receipt.groupby('customer_id').sales_ymd.max().reset_index().head(10)

# (Une autre solution)
#ID client (client) en loc_Dates de vente (ventes) regroupées par identifiant)_ymd) le plus récent(idxmax()Entrer)
df_receipt[['customer_id', 'sales_ymd']].loc[df_receipt.groupby('customer_id').sales_ymd.idxmax()].head(10)

Référence (groupby): https://note.nkmk.me/python-pandas-groupby-statistics/

P-025: Pour le bloc de données des détails du reçu (df_receipt), recherchez la date de vente la plus ancienne (sales_ymd) pour chaque ID client (customer_id) et affichez 10 articles.

P-025


# P-Voir 023. La date de vente la plus ancienne est agg({'sales_ymd': min})Peut être exprimé par
df_receipt.groupby('customer_id').agg({'sales_ymd': min}).reset_index().head(10)

# (Une autre solution)
#ID client (client) en loc_Dates de vente (ventes) regroupées par identifiant)_ymd) le plus ancien(idxmin()Entrer)
df_receipt[['customer_id', 'sales_ymd']].loc[df_receipt.groupby('customer_id').sales_ymd.idxmin()].head(10)

P-026: Recherchez la date de vente la plus récente (sales_ymd) et la date de vente la plus ancienne pour chaque ID client (customer_id) dans le bloc de données de détail de la réception (df_receipt), et affichez 10 données différentes.

P-026


#Numéro client (client)_Date de vente (ventes) pour chaque identifiant)_ymd) nouvelle date de vente(max)Et ancienne date de vente(min)Créer un bloc de données pour
df_tmp = df_receipt.groupby('customer_id').agg({'sales_ymd':['max','min']}).reset_index()

#Changer de colonne(Les détails sont expliqués ci-dessous)
df_tmp.columns = ["_".join(pair) for pair in df_tmp.columns]

#Les deux interrogent des données différentes()Recherché par.
df_tmp.query('sales_ymd_max != sales_ymd_min').head(10)

Puisque df.columns devient MultiIndex ([('customer_id', ''), ('sales_ymd', 'max'), ('sales_ymd', 'min')],), extrayez-les un par un avec l'instruction for. Joignez les caractères entre parenthèses avec "_" .join (). スクリーンショット 2020-08-21 18.04.58.png

P-027: Calculez le montant moyen des ventes (montant) pour chaque code magasin (store_cd) pour le bloc de données des détails du reçu (df_receipt) et affichez le TOP5 par ordre décroissant.

P-027


#Trame de données de détail du reçu (df_reçu) le code magasin (magasin_Grouper par cd).
# agg({'amount':'mean'})Calculez le montant moyen des ventes (montant) à
# reset_index()Réindexer avec et trier_values('amount', ascending=False)Trier par montant des ventes (montant) dans l'ordre décroissant
df_receipt.groupby('store_cd').agg({'amount':'mean'}) \
      .reset_index().sort_values('amount', ascending=False).head(5)

Référence (groupby): https://note.nkmk.me/python-pandas-groupby-statistics/ Référence (agg): https://note.nkmk.me/python-pandas-agg-aggregate/

P-028: Calculez la valeur médiane du montant des ventes (montant) pour chaque code magasin (store_cd) pour le bloc de données des détails du reçu (df_receipt), et affichez le TOP5 dans l'ordre décroissant.

P-028


# P-Se référer au 027
#La médiane est médiane
df_receipt.groupby('store_cd').agg({'amount':'median'}).reset_index().sort_values('amount', ascending=False).head(5)

Référence (médiane): https://note.nkmk.me/python-statistics-mean-median-mode-var-stdev/

P-029: Pour la trame de données des détails du reçu (df_receipt), recherchez la valeur la plus fréquente du code produit (product_cd) pour chaque code magasin (store_cd).

P-029


#La première moitié est P-Se référer au 027
#Code produit (produit_cd) pour fonctionner(Style Lambda)Postuler.
df_receipt.groupby('store_cd').product_cd.apply(lambda x: x.mode()).reset_index()
# df.groupby('grouping_content').Ce que vous voulez trouver le plus fréquemment.apply(lambda x: x.mode())

# (Mauvaise réponse)
df_receipt.groupby('store_cd').agg({'product_cd':'mode'}).reset_index()
# >>>AttributeError: 'SeriesGroupBy' object has no attribute 'mode'

Référence (expression lambda): https://note.nkmk.me/python-lambda-usage/

P-030: Pour la trame de données des détails du reçu (df_receipt), calculez la distribution de l'échantillon du montant des ventes (montant) pour chaque code magasin (store_cd) et affichez le TOP5 dans l'ordre décroissant.

P-030


#Code de magasin (magasin_Exemple de distribution du montant des ventes (montant) de cd)(var(ddof=0))
# reset_Réindexer et trier par index(sort_values),Ordre décroissant(ascending=False)
df_receipt.groupby('store_cd').amount.var(ddof=0).reset_index().sort_values('amount', ascending=False).head(5)

Référence: https://deepage.net/features/numpy-var.html Référence (distribution d'échantillon et distribution impartiale): https://bellcurve.jp/statistics/course/8614.html

P-031: Calculez l'échantillon d'écart-type du montant des ventes (montant) pour chaque code magasin (store_cd) pour le bloc de données des détails du reçu (df_receipt), et affichez le TOP5 dans l'ordre décroissant.

P-031


#Code de magasin (magasin_Échantillon d'écart type du montant des ventes (montant) de cd)(std(ddof=0))
# reset_Réindexer et trier par index(sort_values),Ordre décroissant(ascending=False)
df_receipt.groupby('store_cd').amount.std(ddof=0).reset_index().sort_values('amount', ascending=False).head()

Référence: https://deepage.net/features/numpy-var.html Référence (distribution d'échantillon et distribution impartiale): https://bellcurve.jp/statistics/course/8614.html

P-032: Trouvez la valeur en centile du montant des ventes (montant) de la trame de données du relevé de réception (df_receipt) par incréments de 25%.

P-032


#Valeur en pourcentage du montant des ventes (montant)(quantile)
# np.arange(5)/4 >>> [0, 0.25, 0.5, 0.75, 1]
df_receipt.amount.quantile(q=np.arange(5)/4)

# (Une autre solution)
np.percentile(df_receipt['amount'], q=[25, 50, 75,100])

Référence (quantile): https://note.nkmk.me/python-pandas-quantile/

P-033: Calculez le montant moyen des ventes (montant) pour chaque code magasin (store_cd) pour la trame de données des détails du reçu (df_receipt), et extrayez 330 ou plus.

P-033


#Code de magasin (magasin_Grouper par cd).
#Montant moyen des ventes (montant)(mean)Est calculé et réinitialisé_index()Réindexer avec
# query()300 ou plus du montant des ventes (montant) par méthode
df_receipt.groupby('store_cd').amount.mean().reset_index().query('amount >= 330')

# (Une autre solution)
df_receipt.groupby('store_cd').amount.mean()[df_receipt.groupby('store_cd').amount.mean() >= 300]

P-034: Pour le bloc de données des détails de réception (df_receipt), additionnez le montant des ventes (montant) pour chaque ID client (customer_id) et calculez la moyenne de tous les clients. Cependant, si l'ID client commence par "Z", il représente un non-membre, excluez-le du calcul.

P-034


#Comment écrire sans utiliser de requête
# ~N'est pas. , Numéro client (client_id) commence par Z(str.startswith("Z"))
#Numéro client (client)_La moyenne de tous les clients en additionnant le montant des ventes (montant) pour chaque identifiant)
df_receipt[~df_receipt['customer_id'].str.startswith("Z")].groupby('customer_id').amount.sum().mean()

#Comment écrire à l'aide d'une requête
df_receipt.query('not customer_id.str.startswith("Z")', engine='python').groupby('customer_id').amount.sum().mean()

P-035: Pour le bloc de données du relevé de réception (df_receipt), additionnez le montant des ventes (montant) pour chaque ID client (customer_id) pour trouver la moyenne de tous les clients et extraire les clients qui achètent au-dessus de la moyenne. .. Cependant, si l'ID client commence par "Z", il représente un non-membre, excluez-le du calcul. Seules 10 données doivent être affichées.

P-035


#N ° de client"Z"Exclure.'customer_id'Divisez chaque groupe. (2547.742234529256) Moyenne de tous les clients
amount_mean = df_receipt[~df_receipt['customer_id'].str.startswith("Z")].groupby('customer_id').amount.sum().mean()

#Numéro client (client)_Additionner le montant des ventes (montant) pour chaque identifiant) (type de trame de données)
df_amount_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()

# amount_mean(Moyenne pour tous les clients)Afficher les 10 éléments ci-dessus
df_amount_sum[df_amount_sum['amount'] >= amount_mean].head(10)

P-036: Combinez en interne la trame de données de détail de reçu (df_receipt) et la trame de données de stockage (df_store), et affichez tous les éléments dans la trame de données de détail de reçu et 10 noms de magasin (nom de magasin) dans la trame de données de magasin.

P-036


# merge(A(df), B(df), how='inner'(Jointure interne), on='Colonne commune')
pd.merge(df_receipt, df_store[['store_cd','store_name']], how='inner', on='store_cd').head(10)

Référence: https://note.nkmk.me/python-pandas-merge-join/

P-037: Combinez en interne le bloc de données produit (df_product) et le bloc de données de catégorie (df_category), et affichez tous les éléments du bloc de données produit et 10 noms de sous-catégorie (category_small_name) du bloc de données de catégorie.

P-037


# merge(A(df), B(df), how='inner'(Jointure interne), on='Colonne commune')
pd.merge(df_product
         , df_category[['category_small_cd','category_small_name']]
         , how='inner', on='category_small_cd').head(10)

Référence: https://note.nkmk.me/python-pandas-merge-join/

P-038: Trouvez le montant total des ventes pour chaque client à partir du bloc de données client (df_customer) et du bloc de données de détail de réception (df_receipt). Cependant, pour les clients qui n'ont pas d'enregistrement d'achat, le montant des ventes doit être affiché à 0. En outre, les clients doivent cibler les personnes dont le code de genre (gender_cd) est féminin (1) et exclure les non-membres (identifiants clients commençant par "Z"). Seuls 10 résultats doivent être affichés.

P-038


#Montant total des ventes pour chaque client.
#Regrouper par numéro client et montant total des ventes (montant)(sum)
df_amount_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()

#Le client est le code de genre (gender_Pour ceux dont le cd) est une femme (1), non-membre (l'ID client est'Z'Exclut ceux commençant par)
df_tmp = df_customer.query('gender_cd == "1" and not customer_id.str.startswith("Z")', engine='python')

# merge(A(df), B(df), how='inner'(Jointure interne), on='Colonne commune')
# fillna(0)Pour les clients qui n'ont pas d'antécédents d'achat chez, le montant des ventes est de 0
pd.merge(df_tmp['customer_id'], df_amount_sum, how='left', on='customer_id').fillna(0).head(10)

P-039: Extrayez les 20 meilleurs clients avec le plus grand nombre de jours de vente et les 20 premiers clients avec le montant total des ventes le plus élevé de la trame de données du relevé de réception (df_receipt), et effectuez une jointure externe complète. Cependant, les non-membres (identifiants clients commençant par «Z») doivent être exclus.

P-039


#N ° de client('customer_id')Regrouper par et montant total des ventes (montant)(sum)
df_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()
# customer_id.str.startswith("Z")(Sauf pour les identifiants clients commençant par Z)
df_sum = df_sum.query('not customer_id.str.startswith("Z")', engine='python')
#Trier le montant total des ventes (montant) et extraire le top 20
df_sum = df_sum.sort_values('amount', ascending=False).head(20)

#Nombre de jours de vente(sales_ymd)Pour extraire les doublons.
df_cnt = df_receipt[~df_receipt.duplicated(subset=['customer_id', 'sales_ymd'])]
# customer_id.str.startswith("Z")(Sauf pour les identifiants clients commençant par Z)
df_cnt = df_cnt.query('not customer_id.str.startswith("Z")', engine='python')
#N ° de client('customer_id')Regroupés par et jours de vente(sales_ymd)Nombre de cas(count)
df_cnt = df_cnt.groupby('customer_id').sales_ymd.count().reset_index()
#Nombre de jours de vente(sales_ymd)Trier par le nombre de cas, par ordre décroissant(ascending=False)Les 20 premiers éléments triés par sont extraits.
df_cnt = df_cnt.sort_values('sales_ymd', ascending=False).head(20)

#Jointure externe avec fusion
pd.merge(df_sum, df_cnt, how='outer', on='customer_id')

Référence (en double): https://note.nkmk.me/python-pandas-duplicated-drop-duplicates/ Référence (jointure externe): https://note.nkmk.me/python-pandas-merge-join/

P-040: Je voudrais savoir combien de données seront obtenues en combinant tous les magasins et tous les produits. Calculez le nombre de produits directs des magasins (df_store) et des produits (df_product).

P-040


#Magasin (df_faire une copie du magasin)
df_store_tmp = df_store.copy()
#Produit (df_faire une copie du produit)
df_product_tmp = df_product.copy()

#Clé à combiner(Colonne)が必要なのでそれぞれColonneを追加する。
df_store_tmp['key'] = 0
df_product_tmp['key'] = 0

#Jointure externe et vérification du numéro avec la méthode len
len(pd.merge(df_store_tmp, df_product_tmp, on='key', how='outer'))

Référence: https://note.nkmk.me/python-pandas-merge-join/

3. Références

100 coups de science des données Comment exécuter 100 frappes de science des données sur Mac

Recommended Posts

Commentaire sur la science des données à 100 coups (P021 ~ 040)
Commentaire sur la science des données à 100 coups (P061 ~ 080)
Commentaire de la science des données 100 coups (P041 ~ 060)
Commentaire sur la science des données à 100 coups (P081 ~ 100)
"Data Science 100 Knock (traitement de données structurées)" Explication Python-007
"Data Science 100 Knock (traitement des données structurées)" Explication Python-006
Apprenez la science des données
"Data Science 100 Knock (traitement des données structurées)" Explication Python-001
"Data Science 100 Knock (traitement des données structurées)" Explication Python-002
[Python] 100 coups sur la science des données (traitement de données structurées) 021 Explication
"Data Science 100 Knock (traitement des données structurées)" Explication Python-005
"Data Science 100 Knock (traitement de données structurées)" Explication Python-004
[Python] 100 coups sur la science des données (traitement de données structurées) 020 Explication
[Python] 100 coups sur la science des données (traitement de données structurées) 025 Explication
"Data Science 100 Knock (traitement des données structurées)" Explication Python-003
[Python] 100 coups sur la science des données (traitement de données structurées) 019 Explication
Préparation à l’essai de «Data Science 100 Knock (traitement des données structurées)»
Construction d'environnement (Windows 10) pour 100 coups de science des données (traitement de données structurées)
Défiez 100 coups de science des données
Concours de science des données OPT
Data Science 100 Knock ~ Bataille pour moins que les débutants part3
Data Science 100 Knock ~ Bataille pour moins que les débutants part6
Data Science 100 Knock ~ Bataille pour moins que les débutants part2
Data Science 100 Knock ~ Bataille pour moins que les débutants part1
Data Science 100 Knock ~ Battle pour moins que les débutants part9
Science des données 100 coups ~ Bataille pour moins que les débutants part7
Data Science 100 Knock ~ Bataille pour moins que les débutants part4
Data Science 100 Knock ~ Bataille pour moins que les débutants part11
[Python] 100 coups sur la science des données (traitement de données structurées) 001-010 Impressions + résumé du lien de commentaire
C'est pourquoi j'ai quitté les pandas [Data Science 100 Knock (traitement des données structurées) # 2]
C'est pourquoi j'ai quitté les pandas [Data Science 100 Knock (traitement des données structurées) # 1]
Fiche technique de la science des données (Python)
C'est pourquoi j'ai quitté les pandas [Data Science 100 Knock (traitement des données structurées) # 3]
Essayez «100 coups sur la science des données» ①
C'est pourquoi j'ai quitté les pandas [Data Science 100 Knock (traitement des données structurées) # 5]
Sortie du cours Infra_Data Science
C'est pourquoi j'ai quitté les pandas [Data Science 100 Knock (traitement des données structurées) # 4]
C'est pourquoi j'ai quitté les pandas [Data Science 100 Knock (traitement des données structurées) # 6]
Démarrez la science des données dans le cloud
Présentation de livres liés à la science des données.
[Bases de la science des données] Acquisition de données à partir de l'API