0
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-08-13

 この記事はデータサイエンスを勉強しながら、データサイエンス協会が提供するデータサイエンス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 
  • 小数点以下を切り捨て np.floor()
  • 小数点以下を四捨五入 np.around(), np.rint()
  • 小数点以下を切り上げ np.ceil()

P-063

P-063: 商品データフレーム(df_product)の単価(unit_price)と原価(unit_cost)から、各商品の利益額を算出せよ。結果は10件表示させれば良い。

p063
df_tmp = df_product.copy()
df_tmp['unit_profit'] = df_tmp['unit_price'] - df_tmp['unit_cost']
df_tmp.head(10)

 列ごとに演算を行うだけで結果を得られる。
 下のコードはdiff()を使うんじゃないかと思って書いたコード。

df_profit = df_product[['unit_price', 'unit_cost']].diff(-1, axis=1)['unit_price'].rename('unit_profit')
pd.concat([df_product, df_profit], axis=1).head(10)

P-064

P-064: 商品データフレーム(df_product)の単価(unit_price)と原価(unit_cost)から、各商品の利益率の全体平均を算出せよ。 ただし、単価と原価にはNULLが存在することに注意せよ。

p064.py
df_tmp = df_product.copy()
df_tmp['unit_profit_rate'] = (df_tmp['unit_price'] - df_tmp['unit_cost']) / df_tmp['unit_price']
df_tmp['unit_profit_rate'].mean(skipna=True)

 mean()の引数でskipna=Trueを選択すると値がないデータを飛ばして計算してくれる。
 (デフォルトでskipna=Trueだから、別に書く必要はない)

 ちなみに利益率は以下のように計算している。
$$
利益率 = \frac{単価 - 原価}{単価}
$$

P-065 np.floor()

P-065: 商品データフレーム(df_product)の各商品について、利益率が30%となる新たな単価を求めよ。ただし、1円未満は切り捨てること。そして結果を10件表示させ、利益率がおよそ30%付近であることを確認せよ。ただし、単価(unit_price)と原価(unit_cost)にはNULLが存在することに注意せよ。

065.py
df_tmp = df_product.copy()
df_tmp['new_price'] = np.floor(df_tmp['unit_cost'] / 0.7)
df_tmp['new_profit_rate'] = (df_tmp['new_price'] - df_tmp['unit_cost']) / df_tmp['new_price']
df_tmp.head(10)

 np.floor():小数点以下を切り捨て(正の数の場合)

 math.floor()を使う場合は2行目を下のようにすればいい。

df_tmp['new_price'] = df_tmp['unit_cost'].apply(lambda x: np.floor(x / 0.7))

P-066 np.around()np.rint()

P-066: 商品データフレーム(df_product)の各商品について、利益率が30%となる新たな単価を求めよ。今回は、1円未満を四捨五入すること(0.5については偶数方向の丸めで良い)。そして結果を10件表示させ、利益率がおよそ30%付近であることを確認せよ。ただし、単価(unit_price)と原価(unit_cost)にはNULLが存在することに注意せよ。

p066.py
df_tmp = df_product.copy()
df_tmp['new_price'] = np.around(df_tmp['unit_cost'] / 0.7)
df_tmp['new_profit_rate'] = (df_tmp['new_price'] - df_tmp['unit_cost']) / df_tmp['new_price']
df_tmp.head(10)

 np.around():小数点以下を四捨五入(偶数への丸め)
 np.rint()でも同じ結果を得られる。

P-067 np.ceil()

P-067: 商品データフレーム(df_product)の各商品について、利益率が30%となる新たな単価を求めよ。今回は、1円未満を切り上げること。そして結果を10件表示させ、利益率がおよそ30%付近であることを確認せよ。ただし、単価(unit_price)と原価(unit_cost)にはNULLが存在することに注意せよ。

p067.py
df_tmp = df_product.copy()
df_tmp['new_price'] = np.ceil(df_tmp['unit_cost'] / 0.7)
df_tmp['new_profit_rate'] = (df_tmp['new_price'] - df_tmp['unit_cost']) / df_tmp['new_price']
df_tmp.head(10)

 np.ceil():小数点以下の切り上げ

P-068

P-068: 商品データフレーム(df_product)の各商品について、消費税率10%の税込み金額を求めよ。 1円未満の端数は切り捨てとし、結果は10件表示すれば良い。ただし、単価(unit_price)にはNULLが存在することに注意せよ。

p068.py
df_tmp = df_product.copy()
df_tmp['tax_include_price'] = np.floor(df_tmp['unit_price'] * 1.1)
df_tmp.head(10)
0
0
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
0