[PYTHON] Data Science 100 Knock ~ Bataille pour moins que les débutants part3

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 **

Au moment de la rédaction de l'article, il était terminé jusqu'au 27, mais il y avait beaucoup de styles d'écriture que je ne connaissais pas, et il y en avait beaucoup qui disaient "J'ai écrit ceci, mais la réponse était celle-ci", donc je vais le laisser comme mémo.

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 fois de 19 à 22. [Précédente] 10-18 Première fois avec la table des matières

La bataille commence ici

19e

P-19: Attribuez des rangs au bloc de données des détails du reçu (df_receipt) dans l'ordre décroissant du montant des ventes (montant) par article, et extrayez les 10 premiers articles. Les articles doivent afficher l'ID client (customer_id), le montant des ventes (montant) et le rang attribué. Si le montant (montant) des ventes est le même, le même classement sera donné.

L'exigence cette fois est

id amo rank
A00 100 1
B00 70 2
C00 80 2
D00 70 4

Il semble que ce soit pour faire une table en forme En SQL

rei.sql


SELECT id,amo amo,
(SELECT count(amo) FROM df b WHERE a.amo < b.amo)+1 rank
FROM df a ORDER BY rank 

(J'ai frappé SQL après un long moment) Pour le moment, comptez le nombre de ventes b.amo qui sont supérieures aux ventes que ʻamo et ʻa.amo recherchent actuellement (car la plus grande est 0) + 1 Le contenu consiste à créer un classement et à ajouter cette colonne. ** Attention **: C'est un style d'écriture qui prend beaucoup de temps à calculer. Je l'ai essayé avec 10 coups SQL, mais cela a pris quelques minutes.

** Idem pour Dataframe ** df_receipt[['customer_id', 'amount']] Et rank column, et jointure (horizontalement) pour créer une table

Comment créer une colonne de classement df_receipt['amount'].rank(method='min', ascending=False)

--ʻAscending = False, données en ordre décroissant (plus est prioritaire). --- method = 'min'` renvoie un petit nombre (valeur minimale) comme données de classement.

** Pour rejoindre horizontalement ** pd.concat ([['Colonne A'], ['Colonne B']], axe = 1) Il semble que pd.concat soit joint verticalement (le tableau est attaché au bas du tableau) lorsque axis est la valeur par défaut, mais est joint horizontalement lorsque ʻaxis = 1` est ajouté.

Enfin, si vous modifiez le nom de la colonne et triez par ordre croissant

mine19.py


df_tmp = pd.concat([df_receipt[['customer_id', 'amount']] ,df_receipt['amount'].rank(method='min', ascending=False)], axis=1)
df_tmp.columns = ['customer_id', 'amount', 'ranking']
df_tmp.sort_values('ranking', ascending=True).head(10)

Sera comme ça

** Bien sûr ** Je ne sais pas et c'est en conserve

20e

mine20.py


df=df_receipt
df=pd.concat([df[['customer_id','amount']] ,df['amount'].rank(method='first',ascending=False) ],axis=1)
df.columns=['customer_id','amount','ranking']
df.sort_values('ranking',ascending=True).head(10)

Je vais l'omettre car le 19 et certains contenus seront couverts La partie qui change

De plus, même si le montant (montant) des ventes est le même, donnez un classement différent.

Partie de. Autrement dit, comme affichage

id amo rank
A00 100 1
B00 70 2
C00 80 3
D00 70 4

Je veux prendre la forme.

-method = 'min' renvoie un petit nombre (valeur minimale) comme données de classement.

Vous pouvez changer cela, et après la conversion en données par ordre décroissant, en changeant min '' en premier '', les nombres seront numérotés dans l'ordre d'apparition.

21,22e

mine21.py


len(df_receipt)

mine22.py


len(df_receipt['customer_id'].unique())

~~ Avez-vous un commentaire? ~~ Si vous convertissez le 22e en SQL SELECT COUNT(DISTINCT customer_id) FROM receipt Je peux y aller. ~~ Qu'est-ce qui est le plus facile? ~~

Jusqu'à ici pour cette fois

J'ai senti que Python était plus rapide que SQL lorsque je comparais SQL et Python, alors j'ai finalement commencé à trouver un sens à l'utilisation de pandas. ~~ LIKE et SQL sont faciles ~~ Si vous résolvez simplement le problème, cela ne vous vient pas vraiment à l'esprit, alors j'aimerais à nouveau résoudre le problème, puis le régler.

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
"Data Science 100 Knock (traitement des données structurées)" Explication Python-001
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