[PYTHON] Commentaire de la science des données 100 coups (P041 ~ 060)

1.Tout d'abord

Dans la continuité de la dernière fois, j'expliquerai 100 coups de science des données. Commentaire sur la science des données à 100 coups (P001 ~ 020) Commentaire sur la science des données à 100 coups (P021 ~ 040)

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-041: Agréger le montant des ventes (montant) du bloc de données des détails de la réception (df_receipt) pour chaque date (sales_ymd) et calculer l'augmentation ou la diminution du montant des ventes du jour précédent. Il suffit d'afficher 10 résultats de calcul.

P-041


#Date du montant des ventes (montant) (ventes)_ymd) Agréger par(méthode groupby)
# reset_index()Réindexer avec.
df_sales_amount_by_date = df_receipt[['sales_ymd', 'amount']].groupby('sales_ymd').sum().reset_index()

#Date du montant des ventes (montant) pour comparaison_Combinez la copie de ymd) avec une ligne déplacée vers le bas.
# concat([df1, df2], axis=1)Combinez horizontalement avec. quart de travail()Descendre d'une ligne avec
df_sales_amount_by_date = pd.concat([df_sales_amount_by_date, df_sales_amount_by_date.shift()], axis=1)

#Changer le nom de la colonne

df_sales_amount_by_date.columns = ['sales_ymd','amount','lag_ymd','lag_amount']

#Augmentation / diminution du montant des ventes(diff_amount)Ajouter
df_sales_amount_by_date['diff_amount'] = df_sales_amount_by_date['amount'] - df_sales_amount_by_date['lag_amount']
df_sales_amount_by_date.head(10)

スクリーンショット 2020-08-22 9.28.21.png

Référence: concat qui concatène pandas.DataFrame, Series Référence: Décaler les données dans la direction ligne / colonne (verticale / horizontale) avec les pandas

P-042: Agréger le montant des ventes (montant) du cadre de données de détail de la réception (df_receipt) pour chaque date (sales_ymd), et combiner les données d'il y a 1 jour, 2 jours et 3 jours avec les données de chaque date. Seuls 10 résultats doivent être affichés.

P-042


#(Boîtier vertical)
#Date du montant des ventes (montant) (ventes)_ymd) Agréger par(groupby)
df_sales_amount_by_date = df_receipt[['sales_ymd', 'amount']].groupby('sales_ymd').sum().reset_index()

#Répétez avec l'instruction for. intervalle(1, 4)>>>1, 2,3 entre i.
for i in range(1, 4):
    # i==Lorsqu'il vaut 1, il est connecté dans le sens horizontal. Descendre d'une ligne avec shift (il y a 1 jour)
    if i == 1:
        df_lag = pd.concat([df_sales_amount_by_date, df_sales_amount_by_date.shift()], axis=1)
    #Si i est différent de 1, ajoutez-le à la trame de données.
    else:
        df_lag = df_lag.append(pd.concat([df_sales_amount_by_date, df_sales_amount_by_date.shift(i)], axis=1))

#Changer le nom de la colonne
df_lag.columns = ['sales_ymd', 'amount', 'lag_sales_ymd', 'lag_amount']

#Exclure la valeur manquante NaN(dropna())Et trier(sort_values)。
df_lag.dropna().sort_values('sales_ymd').head(10)

P-042


#Boîtier horizontal
#Date du montant des ventes (montant) (ventes)_ymd) Agréger par(groupby)
df_sales_amount_by_date = df_receipt[['sales_ymd', 'amount']].groupby('sales_ymd').sum().reset_index()

#Répétez avec l'instruction for. intervalle(1, 4)>>>1, 2,3 entre i.
for i in range(1, 4):
  #Quand i vaut 1, df connecté dans le sens horizontal_Créez un décalage.
    if i == 1:
        df_lag = pd.concat([df_sales_amount_by_date, df_sales_amount_by_date.shift(1)], axis=1)
   #Si i est différent de 1, c'est déjà df_Puisque le décalage est créé, df_Connectez-vous avec le décalage.
    else:
        df_lag = pd.concat([df_lag, df_sales_amount_by_date.shift(i)], axis=1)

#Changer le nom de la colonne
df_lag.columns = ['sales_ymd', 'amount', 'lag1_sales_ymd', 'lag1_amount', 
                  'lag2_sales_ymd', 'lag2_amount', 'lag3_sales_ymd', 'lag3_amount']

#Exclure la valeur manquante NaN(dropna())Et trier(sort_values)。
df_lag.dropna().sort_values('sales_ymd').head(10)

Référence: Exclure (supprimer) / remplacer (remplir) / extraire la valeur manquante NaN avec pandas

P-043: Cadre de données récapitulatif des ventes (df_sales_summary) qui combine le bloc de données de détail des reçus (df_receipt) et le bloc de données client (df_customer) et totalise le montant des ventes (montant) pour chaque sexe (sexe) et âge (calculé à partir de l'âge). ). Le sexe est 0 pour l'homme, 1 pour la femme et 9 pour l'inconnu.

Cependant, la composition de l'article doit être de quatre éléments: l'âge, le montant des ventes pour les femmes, le montant des ventes pour les hommes et le montant des ventes pour le sexe inconnu (tabulation croisée de l'âge verticalement et du sexe horizontalement). En outre, le groupe d'âge devrait être tous les 10 ans.

P-043


#Trame de données de détail du reçu (df_reçu) et trame de données client (df_client) rejoindre
# merge(df1, df2, on='Nom de la clé', how='inner')
df_tmp = pd.merge(df_receipt, df_customer, on='customer_id', how='inner')

#Faites le groupe d'âge tous les 10 ans.
# math.floor:Tronquer après la virgule décimale. ex)Dans le cas de 22 22/10 * 10 = 2(2.Troncature de 2) *10 = 20
df_tmp['era'] = df_tmp['age'].apply(lambda x: math.floor(x/10)*10)

#Créer un tableau croisé dynamique(pivot_table()une fonction)Détails ci-dessous
df_sales_summary = pd.pivot_table(df_tmp, index='era', columns='gender_cd', values='amount', aggfunc='sum').reset_index()

#Changer le nom de la colonne
df_sales_summary.columns = ['era', 'male', 'female', 'unknown']
df_sales_summary

Fonction __pivot_table () __ -Data (premier argument): trame de données à référencer ・ Index: spécifiez le nom de la ligne -Colonnes: spécifiez le nom de la colonne -Valeurs: Si vous spécifiez le nom de colonne du bloc de données référencé, seul le résultat de cette colonne est calculé. -Aggfunc: Spécifiez la méthode de calcul de la valeur du résultat Référence: Calculer les statistiques pour chaque catégorie à l'aide du tableau croisé dynamique pandas

P-044: La base de données de synthèse des ventes (df_sales_summary) créée à la question précédente était une vente côte à côte de sexe. Tenons le sexe verticalement à partir de cette base de données et convertissons-le en 3 éléments: âge, code de sexe et montant des ventes. Cependant, le code de genre est «00» pour les hommes, «01» pour les femmes et «99» pour les inconnues.

P-044


# set_Attribuer une colonne existante à l'index d'index (nom de ligne, étiquette de ligne) avec index
# stack()Pivotez de colonne en ligne.
# replace()Remplacez la chaîne par
# rename()Changer n'importe quel nom de ligne / nom de colonne avec la méthode
df_sales_summary.set_index('era').stack().reset_index().replace(
        {'female': '01', 'male': '00', 'unknown': '99'}).rename(
                columns={'level_1': 'gender_cd', 0: 'amount'})

Référence: Assignez la colonne pandas.DataFrame à l'index (nom de la ligne) set_index Référence: Formater les données en utilisant stack, unstack, pivot avec pandas Référence: Remplacer la chaîne de caractères par Python (remplacer, traduire, re.sub, re.subn) Référence: Changer le nom de ligne / nom de colonne de pandas.DataFrame

P-045: La date de naissance (date_anniversaire) du bloc de données client (df_customer) contient les données de type date (Date). Convertissez-le en une chaîne de caractères au format AAAAMMJJ et extrayez-la avec l'ID client (customer_id). Seules 10 données peuvent être extraites.

P-045


#Numéro client (client)_id) et date de naissance (naissance) convertis en chaîne de format AAAAMMJJ_jour) est combiné.
# concat([df1, df2], axis=1)Joindre dans le sens horizontal avec.
# pd.to_Datetime64 pour les chaînes[ns]Convertir en type.
# dt.strftime()Convertit les colonnes en chaînes dans n'importe quel format à la fois avec.
pd.concat([df_customer['customer_id'], pd.to_datetime(df_customer['birth_day']) \
           .dt.strftime('%Y/%m/%d')], axis=1).head(10)

Référence: Traiter les colonnes date / heure avec pandas (conversion de chaîne de caractères, extraction de date, etc.)

P-046: La date d'application (date_application) du télégramme de données client (df_customer) contient les données dans le type chaîne de caractères au format AAAAMMJJ. Convertissez-le en un type de date (date ou date / heure) et extrayez-le avec l'ID client (customer_id). Seules 10 données peuvent être extraites.

P-046


#Numéro client (client)_date de la demande (demande) convertie en id) et type de date (date ou date / heure)_Date)
# P-Se référer au 045
pd.concat([df_customer['customer_id'], pd.to_datetime(df_customer['application_date'])], axis=1).head(10)

Référence: Traiter les colonnes date / heure avec pandas (conversion de chaîne de caractères, extraction de date, etc.)

P-047: La date de vente (sales_ymd) du bloc de données de détail de réception (df_receipt) contient les données au format numérique au format AAAAMMJJ. Convertissez-le en un type de date (date ou date / heure) et extrayez-le avec le numéro de reçu (reçu_no) et le sous-numéro de reçu (reçu_sous_no). Seules 10 données peuvent être extraites.

P-047


#Date de vente (ventes)_ymd) à_datetime()Convertir en type de date avec
# pandas.concat()Combinez horizontalement avec
# astype()Convertir en chaîne de type str avec méthode, convertir en chaîne au format standard
pd.concat([df_receipt[['receipt_no', 'receipt_sub_no']],
           pd.to_datetime(df_receipt['sales_ymd'].astype('str'))],axis=1).head(10)

# (Une autre solution)
pd.concat([df_receipt[['receipt_no', 'receipt_sub_no'], 
           pd.to_datetime(df_receipt['sales_ymd']).dt.strftime('%Y-%m-%d')]], axis=1).head(10)

Référence: Traiter les colonnes date / heure avec pandas (conversion de chaîne de caractères, extraction de date, etc.)

P-048: Les secondes de l'époque de vente (sales_epoch) du bloc de données de détail du reçu (df_receipt) contiennent les données en secondes UNIX numériques. Convertissez-le en un type de date (date ou date / heure) et extrayez-le avec le numéro de reçu (reçu_no) et le sous-numéro de reçu (reçu_sous_no). Seules 10 données peuvent être extraites.

P-048


# pd.concat()Ventes en secondes en utilisant les ventes_epoch) trame de données et numéro de reçu(receipt_no), Numéro de sous-reçu (reçu_sub_Combiner non
#Ventes epoch secondes (ventes_epoch) au type de date(to_datetime(df, unit='s')Convertir avec)
pd.concat([df_receipt[['receipt_no', 'receipt_sub_no']],
           pd.to_datetime(df_receipt['sales_epoch'].astype(int), unit='s')], axis=1).head(10)

Référence: Comment utiliser la fonction to_datetime pour convertir les données d'heure et de date avec Pandas

P-049: Convertissez les secondes de l'époque de vente (sales_epoch) de la trame de données de détail de la réception (df_receipt) en type de date (type d'horodatage), extrayez uniquement "l'année" et extrayez-la avec le numéro de reçu (reçu_no) et le sous-numéro de reçu (reçu_sub_no). Faisons le. Seules 10 données peuvent être extraites.

P-049


#Ventes epoch secondes (ventes_epoch) au type de date (type d'horodatage)
# "Année"Sortez simplement(dt.year)
pd.concat([df_receipt[['receipt_no', 'receipt_sub_no']], 
           pd.to_datetime(df_receipt['sales_epoch'], unit='s').dt.year], axis=1).head(10)

Référence: Comment utiliser la fonction to_datetime pour convertir les données d'heure et de date avec Pandas

P-050: Convertissez les secondes de l'époque de vente (sales_epoch) de la trame de données de détail du reçu (df_receipt) en type de date (type d'horodatage), extrayez uniquement le "mois" et extrayez-le avec le numéro de reçu (reçu_no) et le sous-numéro de reçu (reçu_sub_no). Faisons le. De plus, "mois" doit être extrait avec 0 remplissage et 2 chiffres. Seules 10 données peuvent être extraites.

P-050


#Ventes epoch secondes (ventes_epoch) au type de date(to_datetime(, unit='s'))
# "Mois"Sortez simplement(Strftime pour récupérer avec 0 rembourré 2 chiffres('%m'))
# pd.Combiner des cadres de données avec concat
pd.concat([df_receipt[['receipt_no', 'receipt_sub_no']], 
                      pd.to_datetime(df_receipt['sales_epoch'], unit='s') \
                       .dt.strftime('%m')], axis=1).head(10)

Référence: Python --Définir le format de la date

P-051: Convertissez les secondes de l'époque de vente (sales_epoch) du bloc de données de détail du reçu (df_receipt) en type de date (type d'horodatage), extrayez uniquement le "jour" et extrayez-le avec le numéro de reçu (reçu_no) et le sous-numéro de reçu (reçu_sub_no). Faisons le. De plus, "jour" doit être extrait avec 0 remplissage et 2 chiffres. Seules 10 données peuvent être extraites.

P-051


#Ventes epoch secondes (ventes_epoch) au type de date(to_datetime(, unit='s'))
#Extraire uniquement le jour(dt.strftime('%d'))
# pd.concat()Combiner avec
pd.concat([df_receipt[['receipt_no', 'receipt_sub_no']],
                     pd.to_datetime(df_receipt['sales_epoch'], unit='s') \
                     .dt.strftime('%d')], axis=1).head(10)

Référence: Python --Définir le format de la date

P-052: Montant total des ventes (montant) du bloc de données des détails du reçu (df_receipt) pour chaque ID client (customer_id), et 0 pour 2000 yens ou moins et 1 pour plus de 2000 yens pour le montant total des ventes. Ensuite, affichez 10 articles avec l'ID client et le montant total des ventes. Cependant, si l'ID client commence par "Z", il représente un non-membre, excluez-le du calcul.

P-052


#Lors de l'utilisation de lambda
#N ° de client"Z"Excluez ceux commençant par(Recherche par requête, sauf par non, str.startswith('Z'))
df_sales_amount = df_receipt.query('not customer_id.str.startswith("Z")', engine='python')
#Numéro client (client)_Grouper par identifiant). Montant total des ventes (montant)(sum)
df_sales_amount = df_sales_amount[['customer_id', 'amount']].groupby('customer_id').sum().reset_index()
#Binarize 2000 yens ou moins à 0 et plus de 2000 yens à 1(apply(lambda)Appliquer la condition ligne par ligne à la colonne spécifiée dans)
df_sales_amount['sales_flg'] = df_sales_amount['amount'].apply(lambda x: 1 if x>2000 else 0)
df_sales_amount.head(10)

# (Une autre solution: np.where)
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()
# np.where(Expression conditionnelle, x(Si vrai), y(Si faux))
df_sales_amount['sales_flg'] = np.where(df_sales_amount['amount']>2000, 1, 0)
df_sales_amount.head(10)

# (Une autre solution)
df_sales_amount = df_receipt[~df_receipt['customer_id'].str.startswith('Z')].groupby('customer_id').amount.sum().reset_index()
df_sales_amount.loc[df_sales_amount['amount']<=2000, 'threshold'] = 0
df_sales_amount.loc[df_sales_amount['amount']>2000, 'threshold'] = 1
df_sales_amount.head(10)

Référence: Comment utiliser apply + lambda pour appliquer une fonction ligne par ligne à une colonne spécifiée dans pandas

P-053: Pour le postal_cd de la trame de données client (df_customer), binarisez Tokyo (les 3 premiers chiffres vont de 100 à 209) à 1 et les autres à 0. De plus, combinez-le avec le bloc de données du relevé de réception (df_receipt) et comptez le nombre de clients qui ont un enregistrement d'achat pour toute la période pour chacune des deux valeurs créées.

P-053


#Postal_cd) est binarisé(Tokyo:1,Autre:0)
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)

#Trame de données de détail du reçu (df_reçu) et combiner(pd.merge(df1, df2, on='Clé', how='inner'))
#Nombre d'éléments uniques(Numéro sans chevauchement)Le consommateur_Calculé pour chaque identifiant(pandas.DataFrame.nunique())
pd.merge(df_tmp, df_receipt, on='customer_id', how='inner') \
    .groupby('postal_flg').agg({'customer_id': 'nunique'})


# (Une autre solution) np.Comment utiliser où est P-Se référer au 052
df_tmp = df_customer[['customer_id', 'postal_cd']].copy()
df_tmp['postal_flg'] = np.where(df_tmp['postal_cd'].str[0:3].astype(int)
                                .between(100, 209), 1, 0)
pd.merge(df_tmp, df_receipt, how='inner', on='customer_id'). \
    groupby('postal_flg').agg({'customer_id':'nunique'})

P-054: L'adresse de la trame de données client (df_customer) est celle de la préfecture de Saitama, de la préfecture de Chiba, de la région métropolitaine de Tokyo et de la préfecture de Kanagawa. Créez une valeur de code pour chaque préfecture et extrayez-la avec l'ID client et l'adresse. Les valeurs doivent être 11 pour la préfecture de Saitama, 12 pour la préfecture de Chiba, 13 pour Tokyo et 14 pour la préfecture de Kanagawa. Vous pouvez afficher 10 résultats.

P-054


#Extraire la partie préfecture de l'adresse et attribuer un prix à chacun
# map()Dictionnaire dict ({key: value}) Est spécifié, l'élément qui correspond à la clé est remplacé par value.
pd.concat([df_customer[['customer_id', 'address']], df_customer['address'].str[0:3] \
    .map({'Saitama': '11', 'Préfecture de Chiba': '12', 'Tokyo': '13', 'Kanagawa': '14'})], axis=1).head(10)

Référence: Remplacer les éléments de colonne par la méthode map de pandas.Series

P-055: Additionnez le montant des ventes (montant) du bloc de données de détail du reçu (df_receipt) pour chaque ID client (customer_id), et trouvez le quadrant du montant total. Ensuite, créez une valeur de catégorie pour le montant total des ventes pour chaque client en fonction des critères suivants et affichez à la fois l'ID client et le montant des ventes. Les valeurs de catégorie vont de 1 à 4 dans l'ordre du haut. Vous pouvez afficher 10 résultats.

P-055


#Numéro client (client)_Grouper par identifiant)(groupby)Et additionnez le montant des ventes (montant)(sum)
df_sales_amount = df_receipt[['customer_id', 'amount']].groupby('customer_id').sum().reset_index()

#Trouvez le quadrant pour chaque montant de ventes (montant).(25e centile: 25pct,50e centile: 50pct,75e centile: 75pct)
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)

#Créer et appliquer une fonction de valeurs de catégorie
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

#pct en utilisant appliquer_Appliquer le groupe à chaque ligne
df_sales_amount['pct_group'] = df_sales_amount['amount'].apply(lambda x: pct_group(x))
df_sales_amount

Référence: Processus de binning avec pandas cut et fonction qcut (binning)

P-056: Calculez l'âge par incréments de 10 ans en fonction de l'âge de la base de données client (df_customer), et extrayez-la avec l'ID client (customer_id) et la date de naissance (date_anniversaire). Cependant, toutes les personnes âgées de plus de 60 ans devraient être dans la soixantaine. Le nom de la catégorie indiquant l'âge est arbitraire. Les 10 premiers éléments doivent être affichés.

P-056


#Calculez l'âge par incréments de 10 ans
# math.Tronquez sur le sol. min(, 60)60 ou plus ne sont pas émis.
df_customer_era = pd.concat([df_customer[['customer_id', 'birth_day']], 
                             df_customer['age'].apply(lambda x: math.floor(x / 10) * 10, 60)], axis=1)
df_customer_era.head(10)


# (Une autre solution)
#Âge(Moins d'adolescents, adolescents, 20 ans, 30 ans, 40 ans, 50 ans, 60 ans et plus)Diviser par.(flg_age)
def age_group(x):
    if x < 10:
        return 'Sous les adolescents'
    elif 10 <= x <20:
        return '10 ans'
    elif 20 <= x < 30:
        return '20 ans'
    elif 30 <= x < 40:
        return '30 s'
    elif 40 <= x < 50:
        return 'Quarante'
    elif 50 <= x < 60:
        return 'Années 50'
    elif 60 <= x:
        return '60 ans et plus'

df_customer['flg_age'] = df_customer['age'].apply(lambda x: age_group(int(x)))

#Numéro client (client)_id), date de naissance (naissance)_extrait avec jour)
df_customer[['customer_id', 'birth_day', 'flg_age']].head(10)

P-057: Combinez le résultat de l'extraction de la question précédente et du sexe (sexe), et créez de nouvelles données de catégorie qui représentent la combinaison du sexe et de l'âge. La valeur de la catégorie représentant la combinaison est arbitraire. Les 10 premiers éléments doivent être affichés.

P-057


#Données de catégorie(Sexe x âge)'gender_era'Créer
#age est de type int donc astype(str)Convertir avec
df_customer_era['gender_era'] = df_customer['gender_cd'] + df_customer_era['age'].astype(str)
df_customer_era.head(10)

P-058: Faites du code de genre (gender_cd) de la trame de données client (df_customer) une variable fictive et extrayez-le avec l'ID client (customer_id). Vous pouvez afficher 10 résultats.

P-058


#Code de genre (genre_cd) comme variable fictive(get_dummies)
#Spécifiez le nom de colonne de la colonne que vous souhaitez facturer dans les colonnes d'argument d'une liste
pd.get_dummies(df_customer[['customer_id', 'gender_cd']], columns=['gender_cd'])

Référence: Convertir les variables catégorielles en variables factices avec pandas (get_dummies)

P-059: Le montant total des ventes (montant) du bloc de données des détails du reçu (df_receipt) est totalisé pour chaque ID client (customer_id), et le montant total des ventes est normalisé à 0 moyen et l'écart type 1 à l'ID client total et au montant des ventes. Afficher avec. L'écart type utilisé pour la normalisation peut être soit un écart-type non biaisé, soit un écart-type d'échantillon. Cependant, si l'ID client commence par "Z", il représente un non-membre, excluez-le du calcul. Vous pouvez afficher 10 résultats.

P-059


#N ° de client"Z"Exclure ceux commençant par, numéro client (client)_Additionnez le montant des ventes (montant) pour chaque identifiant)
df_sales_amount = df_receipt.query("not customer_id.str.startswith('Z')", engine='python') \
    .groupby('customer_id').agg({'amount': 'sum'}).reset_index()

#Normaliser le montant des ventes
df_sales_amount['amount_ss'] = preprocessing.scale(df_sales_amount['amount'])
df_sales_amount.head(10)


# (Une autre solution)
#Exemple de code 2 (en effectuant un ajustement, différentes données peuvent être standardisées avec la même moyenne et la même déviation standard)
df_sales_amount = df_receipt.query('not customer_id.str.startswith("Z")', engine='python'). \
    groupby('customer_id').agg({'amount':'sum'}).reset_index()
scaler = preprocessing.StandardScaler()
scaler.fit(df_sales_amount[['amount']])
df_sales_amount['amount_ss'] = scaler.transform(df_sales_amount[['amount']])
df_sales_amount.head(10)

Référence: Normaliser / Standardiser avec Python (List, NumPy Array, pandas.DataFrame)

P-060: Le montant des ventes (montant) du bloc de données de détail de la réception (df_receipt) est totalisé pour chaque ID client (customer_id), et le montant total des ventes est normalisé à la valeur minimale 0 et la valeur maximale 1 à l'ID client et au montant des ventes. Afficher avec le total. Cependant, si l'ID client commence par "Z", il représente un non-membre, excluez-le du calcul. Vous pouvez afficher 10 résultats.

P-060


#Le montant des ventes (montant) est l'ID client (client)_id) total
df_sales_amount = df_receipt.query("not customer_id.str.startswith('Z')", engine='python') \
    .groupby('customer_id').agg({'amount': 'sum'}).reset_index()
df_sales_amount
#Normaliser le montant des ventes à la valeur minimale 0 et à la valeur maximale 1(preprocessing.minmax_scale)
df_sales_amount['amount_mm'] = preprocessing.minmax_scale(df_sales_amount['amount'])
df_sales_amount.head(10)


# (Une autre solution)
#Exemple de code 2 (en effectuant un ajustement, différentes données peuvent être standardisées avec la même moyenne et la même déviation standard)
df_sales_amount = df_receipt.query('not customer_id.str.startswith("Z")', engine='python'). \
    groupby('customer_id').agg({'amount':'sum'}).reset_index()
scaler = preprocessing.MinMaxScaler()
scaler.fit(df_sales_amount[['amount']])
df_sales_amount['amount_mm'] = scaler.transform(df_sales_amount[['amount']])
df_sales_amount.head(10)

Référence: Normaliser / Standardiser avec Python (List, NumPy Array, pandas.DataFrame)

3. Références

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

4. Impressions

La difficulté a augmenté après 40. C'est normal de le copier, alors verbaliser ce qui est écrit.

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