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.
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 ().
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/
100 coups de science des données Comment exécuter 100 frappes de science des données sur Mac
Recommended Posts