0
3

More than 3 years have passed since last update.

データサイエンス100本ノック(構造化データ加工編)をやってみた part2(P-017~P-022)

Last updated at Posted at 2021-08-03

 この記事はデータサイエンスを勉強しながら、データサイエンス協会が提供するデータサイエンス100本ノック(構造化データ加工編)を解く過程を自分用にまとめたものです。

 チャプター   リンク   チャプター   リンク 
 P-001~P-016   part1   P-052~P-062   part6 
 P-017~P-022   part2   P-063~P-068   part7 
 P-023~P-031   part3   P-069~P-078   part8 
 P-032~P-039   part4   P-079~P-088   part9 
 P-040~P-051   part5  P-089~P-100  part10 
  • ソート sort_values()
  • データフレームの結合 pd.concat()
  • 順位付け rank()
  • 長さや要素数を取得len()
  • ユニークな要素を抽出 unique()

P-017 sort_values()

P-17: 顧客データフレーム(df_customer)を生年月日(birth_day)で高齢順にソートし、先頭10件を全項目表示せよ。

p017.py
df_customer.sort_values('birth_day').head(10)

 sort_values('ソートしたい列名'):引数で指定した列をソートして昇順で返す。(DataFrame型)

P-018

P-18: 顧客データフレーム(df_customer)を生年月日(birth_day)で若い順にソートし、先頭10件を全項目表示せよ。

p018.py
df_customer.sort_values('birth_day', ascending=False).head(10)

  降順で返したい場合は引数にascending=Flaseを指定する。

P-019 pd.concat(), rank()

P-19: レシート明細データフレーム(df_receipt)に対し、1件あたりの売上金額(amount)が高い順にランクを付与し、先頭10件を抽出せよ。項目は顧客ID(customer_id)、売上金額(amount)、付与したランクを表示させること。なお、売上金額(amount)が等しい場合は同一順位を付与するものとする。

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

 pd.concat([df1, df2,]):第一引数に連結したいdfをリストで指定する。(問題では2つだが、それ以上でも可能)
 デフォルトでは縦に結合。(axis=0)横に結合したい場合は第二引数にaxis=1を指定する。

 rank():データを並び替えずに各要素の順位を返す。デフォルトは列、昇順。
 行に対して順位付けする場合は引数にaxis=1を指定する。
 降順に順位付けする場合は引数にascending=Falseを指定する。

 引数method:同一値に対する処理
 method='average':平均順位
 method='min':最小値が順位
 method='first':登場順に順位付け

P-020

P-020: レシート明細データフレーム(df_receipt)に対し、1件あたりの売上金額(amount)が高い順にランクを付与し、先頭10件を抽出せよ。項目は顧客ID(customer_id)、売上金額(amount)、付与したランクを表示させること。なお、売上金額(amount)が等しい場合でも別順位を付与すること。

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

P-021 len()

P-021: レシート明細データフレーム(df_receipt)に対し、件数をカウントせよ。

p021.py
len(df_receipt)

 len():引数に指定したオブジェクトの長さや要素の数を取得する。

P-022 unique()

P-022: レシート明細データフレーム(df_receipt)の顧客ID(customer_id)に対し、ユニーク件数をカウントせよ。

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

 unique():ユニークな要素の値(重複していない要素の値)のリストを返す。一次元のNumPy配列ndarray型。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3