[PYTHON] Science des données 100 coups ~ Bataille pour moins que les débutants part7

C'est un record de lutte pour frapper 100 œufs sans connaître l'œuf du scientifique des données. C'est un mystère que je puisse terminer la course. ~~ Même s'il disparaît en cours de route, pensez qu'il n'est pas donné à Qiita. ~~

100 articles frappants 100 Knock Guide

** Faites attention si vous essayez de le faire car cela inclut des spoilers **

Triste nouvelle: le problème ne progresse pas (41e au moment de la rédaction)

C'est difficile à voir! Cette façon d'écrire est dangereuse! Si vous avez des questions, n'hésitez pas à me le faire savoir. ~~ Je vais l'utiliser comme nourriture tout en souffrant de dommages à mon cœur.

Cette solution est fausse! Cette interprétation est différente! Veuillez commenter si vous en avez.

Cette fois de 36 à 40. [Dernière fois] 33-35 [Première fois avec la table des matières]

36e

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.

Enfin vint la jointure de table

En termes SQL

SQLteki.sql


SELECT *
FROM receipt r INNER JOIN store s 
ON r.___ = s.___ 

Quel endroit, comme. (Ignorer la projection)

Pour les pandas (référence) pd.maerge(df_receipt,df_store,on='store_cd',how='inner')

Parce que ça semble être

mine36.py


df=pd.merge(df_receipt,df_store[['store_cd','store_name']],on='store_cd',how='inner')
df.head(10)

'''Le modèle de réponse'''
pd.merge(df_receipt, df_store[['store_cd','store_name']], how='inner', on='store_cd').head(10)

37e

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.

mine37.py


df=pd.merge(df_product,df_category[['category_major_cd', 'category_medium_cd','category_small_cd','category_small_name']]
            ,on=['category_major_cd', 'category_medium_cd','category_small_cd'],how='inner')
df.head(10)

'''Le modèle de réponse'''
pd.merge(df_product
         , df_category[['category_major_cd', 'category_medium_cd','category_small_cd','category_small_name']]
         , how='inner', on=['category_major_cd', 'category_medium_cd','category_small_cd']).head(10)

Eh bien, c'est ça.

38ème

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.

J'ai l'habitude d'effacer le premier "Z". Ce que nous faisons cette fois est de créer une jointure externe gauche et de définir la valeur Null (Nan) sur 0.

Utilisez .fillna (0) pour régler Nan sur 0 OK

mine38.py


df_cst=df_customer[df_customer.customer_id.str.contains('^[^Z]')].query("gender_cd == '1'")
df_rct=df_receipt.groupby('customer_id').agg({'amount':'sum'}).reset_index()
df=pd.merge(df_cst,df_rct,on='customer_id',how='left').fillna(0)
df.head(10)

'''Le modèle de réponse'''
df_amount_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()
df_tmp = df_customer.query('gender_cd == "1" and not customer_id.str.startswith("Z")', engine='python')
pd.merge(df_tmp['customer_id'], df_amount_sum, how='left', on='customer_id').fillna(0).head(10)

Dans la réponse du modèle, je fais un calcul puis je sélectionne (Z start exclusion et femelle), mais je fais d'abord une sélection puis je calcule.

39e

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

Ce problème était complètement faux et a pris beaucoup de temps. la première,

miss39.py


df=df_receipt[df_receipt.customer_id.str.contains('^[^Z]')]
df_day=df.groupby('customer_id').agg({'sales_ymd':'count'}).sort_values('sales_ymd',ascending=False).reset_index().head(20)
df_amo=df_amo.groupby('customer_id').agg({'amount':'sum'}).sort_values('amount',ascending=False).reset_index().head(20)
pd.merge(df_amo,df_day,on='customer_id',how='outer')

Je l'ai écrit comme ça et j'ai répondu en toute confiance.

Comme le contenu

--Top 20 clients avec le plus de jours de vente dans df_day --Top 20 clients avec le montant total des ventes le plus élevé dans df_amo

J'avais l'intention de. Mais pour df_receipt

―― "Même personne" "Même jour" "Différentes choses"

J'ai oublié que j'avais acheté des données, j'ai donc dû les rassembler en une seule ligne. Donc, (Référence) Supprimer les lignes en double df_day=df[~df.duplicated(subset=['customer_id', 'sales_ymd'])] Ajouter

mine39.py


df=df_receipt[df_receipt.customer_id.str.contains('^[^Z]')]
df_day=df[~df.duplicated(subset=['customer_id', 'sales_ymd'])]
df_day=df_day.groupby('customer_id').agg({'sales_ymd':'count'}).sort_values('sales_ymd',ascending=False).reset_index().head(20)
df_amo=df_amo.groupby('customer_id').agg({'amount':'sum'}).sort_values('amount',ascending=False).reset_index().head(20)
pd.merge(df_amo,df_day,on='customer_id',how='outer')

'''Le modèle de réponse'''
df_sum = df_receipt.groupby('customer_id').amount.sum().reset_index()
df_sum = df_sum.query('not customer_id.str.startswith("Z")', engine='python')
df_sum = df_sum.sort_values('amount', ascending=False).head(20)

df_cnt = df_receipt[~df_receipt.duplicated(subset=['customer_id', 'sales_ymd'])]
df_cnt = df_cnt.query('not customer_id.str.startswith("Z")', engine='python')
df_cnt = df_cnt.groupby('customer_id').sales_ymd.count().reset_index()
df_cnt = df_cnt.sort_values('sales_ymd', ascending=False).head(20)

pd.merge(df_sum, df_cnt, how='outer', on='customer_id')

est devenu. (Je l'ai fait. C'était plus court que la réponse modèle)

40e

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).

mine40.py


len(df_store)*len(df_product)

** Oh non? ** **

mohan40.py


```Le modèle de réponse```
df_store_tmp = df_store.copy()
df_product_tmp = df_product.copy()

df_store_tmp['key'] = 0
df_product_tmp['key'] = 0
len(pd.merge(df_store_tmp, df_product_tmp, how='outer', on='key'))

Jusqu'à ici pour cette fois

Recommended Posts

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
Data Science 100 Knock ~ Bataille pour moins que les débutants part5
Data Science 100 Knock ~ Battle pour moins que les débutants part10
Science des données 100 coups ~ Bataille pour moins que les débutants part8
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)
Comment mettre en œuvre 100 coups de science des données pour les débutants en science des données (pour Windows 10 Home)
"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
Détection d'anomalies de données chronologiques pour les débutants
"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
[Pratique pour les débutants] Lire ligne par ligne "Prédire les prix des maisons" de kaggle (Partie 1: Lire les données)
[Commande Linux] Liste d'options de commande moins [À voir pour les débutants]
Comment utiliser les outils d'analyse de données pour les débutants
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)
Principes de base de Pandas pour les débutants ② Présentation des données de saisie