当ページのリンクには広告が含まれています。
目次
この記事の対象者
・ データサイエンティストを目指している人
・ 小数の扱いについて理解したい人
以降はデータサイエンス100本ノックの問題を題材にしながら学んでいきます。
データサイエンス100本ノックの始め方は、以下の記事を参考にしていただければと思います。
>>データサイエンス100本ノックの始め方を確認する
第66問目: 小数の四捨五入
P-066: 商品データフレーム(df_product)の各商品について、利益率が30%となる新たな単価を求めよ。今回は、1円未満を四捨五入すること(0.5については偶数方向の丸めで良い)。そして結果を10件表示させ、利益率がおよそ30%付近であることを確認せよ。ただし、単価(unit_price)と原価(unit_cost)にはNULLが存在することに注意せよ。
小数の四捨五入をround
関数で行う場合、SeriesデータにNaNが存在するとエラーになります。
NaNが存在する場合は、numpy.round関数を使用します。
まずはdf_productのコピーをdf_tmp
に格納します。
1
| df_tmp = df_product.copy()
|
次に利益率が30%となる価格をnew_price
カラムに代入します。
1 2
| df_tmp['new_price'] = np.round(df_tmp['unit_cost']/0.7) df_tmp
|
出力1 2 3 4 5 6 7 8 9 10 11 12 13 14
| product_cd category_major_cd category_medium_cd category_small_cd unit_price unit_cost new_price 0 P040101001 04 0401 040101 198.0 149.0 213.0 1 P040101002 04 0401 040101 218.0 164.0 234.0 2 P040101003 04 0401 040101 230.0 173.0 247.0 3 P040101004 04 0401 040101 248.0 186.0 266.0 4 P040101005 04 0401 040101 268.0 201.0 287.0 ... ... ... ... ... ... ... ... 10025 P091503001 09 0915 091503 280.0 210.0 300.0 10026 P091503002 09 0915 091503 680.0 510.0 729.0 10027 P091503003 09 0915 091503 1080.0 810.0 1157.0 10028 P091503004 09 0915 091503 1130.0 848.0 1211.0 10029 P091503005 09 0915 091503 1280.0 960.0 1371.0 10030 rows × 7 columns
|
new_price
で利益率を算出し、new_profit_rate
カラムに代入します。
出力1 2
| df_tmp['new_profit_rate'] = (df_tmp['new_price'] - df_tmp['unit_cost']) / df_tmp['new_price'] df_tmp.head(10)
|
出力1 2 3 4 5 6 7 8 9 10 11
| product_cd category_major_cd category_medium_cd category_small_cd unit_price unit_cost new_price new_profit_rate 0 P040101001 04 0401 040101 198.0 149.0 213.0 0.300469 1 P040101002 04 0401 040101 218.0 164.0 234.0 0.299145 2 P040101003 04 0401 040101 230.0 173.0 247.0 0.299595 3 P040101004 04 0401 040101 248.0 186.0 266.0 0.300752 4 P040101005 04 0401 040101 268.0 201.0 287.0 0.299652 5 P040101006 04 0401 040101 298.0 224.0 320.0 0.300000 6 P040101007 04 0401 040101 338.0 254.0 363.0 0.300275 7 P040101008 04 0401 040101 420.0 315.0 450.0 0.300000 8 P040101009 04 0401 040101 498.0 374.0 534.0 0.299625 9 P040101010 04 0401 040101 580.0 435.0 621.0 0.299517
|
これで完成です。
第67問目: 小数の切り上げ
P-067: 商品データフレーム(df_product)の各商品について、利益率が30%となる新たな単価を求めよ。今回は、1円未満を切り上げること。そして結果を10件表示させ、利益率がおよそ30%付近であることを確認せよ。ただし、単価(unit_price)と原価(unit_cost)にはNULLが存在することに注意せよ。
小数の切り上げをmath.ceil
関数で行う場合、SeriesデータにNaNが存在する場合エラーとなります。
NaNが存在する場合は、numpy.ceil
関数を使用します。
まずはdf_product
のコピーを作成し、利益率が30%となる価格をnew_price
カラムに代入します。
1 2 3
| df_tmp = df_product.copy() df_tmp['new_price'] = np.ceil(df_tmp['unit_cost'] / 0.7) df_tmp
|
出力1 2 3 4 5 6 7 8 9 10 11 12 13
| product_cd category_major_cd category_medium_cd category_small_cd unit_price unit_cost new_price 0 P040101001 04 0401 040101 198.0 149.0 213.0 1 P040101002 04 0401 040101 218.0 164.0 235.0 2 P040101003 04 0401 040101 230.0 173.0 248.0 3 P040101004 04 0401 040101 248.0 186.0 266.0 4 P040101005 04 0401 040101 268.0 201.0 288.0 ... ... ... ... ... ... ... ... 10025 P091503001 09 0915 091503 280.0 210.0 300.0 10026 P091503002 09 0915 091503 680.0 510.0 729.0 10027 P091503003 09 0915 091503 1080.0 810.0 1158.0 10028 P091503004 09 0915 091503 1130.0 848.0 1212.0 10029 P091503005 09 0915 091503 1280.0 960.0 1372.0 10030 rows × 7 columns
|
new_price
で利益率を算出し、new_profit_rate
カラムに代入します。
1 2 3
| df_tmp = df_product.copy() df_tmp['new_price'] = np.ceil(df_tmp['unit_cost'] / 0.7) df_tmp
|
出力1 2 3 4 5 6 7 8 9 10 11 12 13
| product_cd category_major_cd category_medium_cd category_small_cd unit_price unit_cost new_price 0 P040101001 04 0401 040101 198.0 149.0 213.0 1 P040101002 04 0401 040101 218.0 164.0 235.0 2 P040101003 04 0401 040101 230.0 173.0 248.0 3 P040101004 04 0401 040101 248.0 186.0 266.0 4 P040101005 04 0401 040101 268.0 201.0 288.0 ... ... ... ... ... ... ... ... 10025 P091503001 09 0915 091503 280.0 210.0 300.0 10026 P091503002 09 0915 091503 680.0 510.0 729.0 10027 P091503003 09 0915 091503 1080.0 810.0 1158.0 10028 P091503004 09 0915 091503 1130.0 848.0 1212.0 10029 P091503005 09 0915 091503 1280.0 960.0 1372.0 10030 rows × 7 columns
|
new_price
で利益率を算出し、new_profit_rate
カラムに代入します。
1 2
| df_tmp['new_profit_rate'] = (df_tmp['new_price'] - df_tmp['unit_cost']) / df_tmp['new_price'] df_tmp.head(10)
|
出力1 2 3 4 5 6 7 8 9 10 11
| product_cd category_major_cd category_medium_cd category_small_cd unit_price unit_cost new_price new_profit_rate 0 P040101001 04 0401 040101 198.0 149.0 213.0 0.300469 1 P040101002 04 0401 040101 218.0 164.0 235.0 0.302128 2 P040101003 04 0401 040101 230.0 173.0 248.0 0.302419 3 P040101004 04 0401 040101 248.0 186.0 266.0 0.300752 4 P040101005 04 0401 040101 268.0 201.0 288.0 0.302083 5 P040101006 04 0401 040101 298.0 224.0 320.0 0.300000 6 P040101007 04 0401 040101 338.0 254.0 363.0 0.300275 7 P040101008 04 0401 040101 420.0 315.0 451.0 0.301552 8 P040101009 04 0401 040101 498.0 374.0 535.0 0.300935 9 P040101010 04 0401 040101 580.0 435.0 622.0 0.300643
|
これで完成です。
第68問目: 小数の切り捨て
P-068: 商品データフレーム(df_product)の各商品について、消費税率10%の税込み金額を求めよ。 1円未満の端数は切り捨てとし、結果は10件表示すれば良い。ただし、単価(unit_price)にはNULLが存在することに注意せよ。
少数の切り捨てをmath.froor
関数で行う場合、SeriesデータにNaNが存在する場合エラーとなってしまいます。
NaNが存在する場合は、numpy.floor関数を使用します。
まずはdf_productのコピーを作成し、df_tmpに代入します。
1
| df_tmp = df_product.copy()
|
税込価格をprice_taxカラムに代入します。
1 2
| df_tmp['price_tax'] = np.floor(df_tmp['unit_price'] * 1.1) df_tmp.head(10)
|
出力1 2 3 4 5 6 7 8 9 10 11
| product_cd category_major_cd category_medium_cd category_small_cd unit_price unit_cost price_tax 0 P040101001 04 0401 040101 198.0 149.0 217.0 1 P040101002 04 0401 040101 218.0 164.0 239.0 2 P040101003 04 0401 040101 230.0 173.0 253.0 3 P040101004 04 0401 040101 248.0 186.0 272.0 4 P040101005 04 0401 040101 268.0 201.0 294.0 5 P040101006 04 0401 040101 298.0 224.0 327.0 6 P040101007 04 0401 040101 338.0 254.0 371.0 7 P040101008 04 0401 040101 420.0 315.0 462.0 8 P040101009 04 0401 040101 498.0 374.0 547.0 9 P040101010 04 0401 040101 580.0 435.0 638.0
|
こちらで完成です。
まとめ: 小数の扱いを学びました。
本記事は、「【解説】データサイエンス100本ノック【問66〜68 回答】」というテーマでまとめました。
本記事で紹介した方法を元にデータサイエンティストとしての知見を深めていただければと思います。
AI・データサイエンティストのスキルを高めたい場合は、これまでの受講者数30,000人以上!【ikus.ai】にて無料カウンセリングを受けるのが良いと思います。
>> 無料カウンセリング予約はこちら
なお、データサイエンティストに必要な知識は、TechAcademyのデータサイエンスコースでの学習がおすすめです。