

データサイエンティスト協会の100本ノックがGitHubに公開しているデータとPythonコードを初心者にでも分かるように解説していきます。
今回は65~68本です。内容は主に、データから新たなデータを作成する「小数点を処理する方法」について解説していきます。
Pythonの環境設定は以下の記事を参考にして下さい。
【2021年最新】M1 mac でanacondaをインストールする方法
【2021年最新】WindowsでAnacondaをインストールする方法
- 小数点の処理
- P-065: 商品データフレーム(df_product)の各商品について、利益率が30%となる新たな単価を求めよ。ただし、1円未満は切り捨てること。そして結果を10件表示させ、利益率がおよそ30%付近であることを確認せよ。ただし、単価(unit_price)と原価(unit_cost)にはNULLが存在することに注意せよ。
- P-066: 商品データフレーム(df_product)の各商品について、利益率が30%となる新たな単価を求めよ。今回は、1円未満を四捨五入すること(0.5については偶数方向の丸めで良い)。そして結果を10件表示させ、利益率がおよそ30%付近であることを確認せよ。ただし、単価(unit_price)と原価(unit_cost)にはNULLが存在することに注意せよ。
- P-067: 商品データフレーム(df_product)の各商品について、利益率が30%となる新たな単価を求めよ。今回は、1円未満を切り上げること。そして結果を10件表示させ、利益率がおよそ30%付近であることを確認せよ。ただし、単価(unit_price)と原価(unit_cost)にはNULLが存在することに注意せよ。
- P-068: 商品データフレーム(df_product)の各商品について、消費税率10%の税込み金額を求めよ。 1円未満の端数は切り捨てとし、結果は10件表示すれば良い。ただし、単価(unit_price)にはNULLが存在することに注意せよ。
小数点の処理
まずは、以下からダウンロードして下さい。
P-065: 商品データフレーム(df_product)の各商品について、利益率が30%となる新たな単価を求めよ。ただし、1円未満は切り捨てること。そして結果を10件表示させ、利益率がおよそ30%付近であることを確認せよ。ただし、単価(unit_price)と原価(unit_cost)にはNULLが存在することに注意せよ。
import pandas as pd import numpy as np df_product = pd.read_csv("product.csv") df_65 = df_product.copy() df_65['new_price'] = np.floor(df_65['unit_cost']/0.7) df_65['new_profit_rate'] = 1-df_65['unit_cost']/df_65['new_price'] df_65.head(10)
コスト「unit_cost」を 0.7 で割ると利益率が30%になる価格が計算できます。
そして、利益率30%になる価格を変数「new_price」とします。
「new_price」が正しいく利益率30%になっているかを確認するために、新しく作った変数「new_price」を使って利益率を計算しています。このときに、小数点以下の計算を行っています。
すなわち、小数点以下の切り捨てを、np.floor() を使って行っています。
利益率は、コスト「unit_cost」を新しい変数「new_price」で割った数値を、1から引くことで計算できます。計算結果を「new_profit_rate」として結果を表出しています。
P-066: 商品データフレーム(df_product)の各商品について、利益率が30%となる新たな単価を求めよ。今回は、1円未満を四捨五入すること(0.5については偶数方向の丸めで良い)。そして結果を10件表示させ、利益率がおよそ30%付近であることを確認せよ。ただし、単価(unit_price)と原価(unit_cost)にはNULLが存在することに注意せよ。
df_66 = df_product.copy() df_66['new_price'] = np.round(df_65['unit_cost']/0.7) df_66['new_profit_rate'] = 1-df_66['unit_cost']/df_66['new_price'] df_66.head(10)
基本的には前問と同じです。
小数点以下の処理に違いがあるだけです。
小数点以下を四捨五入を、np.round() を使って行っています。
P-067: 商品データフレーム(df_product)の各商品について、利益率が30%となる新たな単価を求めよ。今回は、1円未満を切り上げること。そして結果を10件表示させ、利益率がおよそ30%付近であることを確認せよ。ただし、単価(unit_price)と原価(unit_cost)にはNULLが存在することに注意せよ。
df_67 = df_product.copy() df_67['new_price'] = np.ceil(df_67['unit_cost']/0.7) df_67['new_profit_rate'] = 1-df_67['unit_cost']/df_67['new_price'] df_67.head(10)
こつらは、小数点以下の切り上げを、np.ceil() を使って行っています。
ここで小数点の処理方法をまとめて確認してみましょう。
print(np.floor(1.9)) # 切り捨て print(np.round(1.5)) # 四捨五入 print(np.round(1.4)) # 四捨五入 print(np.ceil(1.1)) # 切り上げ
出力:
1.0
2.0
1.0
2.0
小数点以下の処理はこのような種類があります。データ分析の目的に応じて使い分けていきましょう。
小数点以下の処理をしないと、出力結果が分かりにくくなってしまいます。
P-068: 商品データフレーム(df_product)の各商品について、消費税率10%の税込み金額を求めよ。 1円未満の端数は切り捨てとし、結果は10件表示すれば良い。ただし、単価(unit_price)にはNULLが存在することに注意せよ。
df_68 = df_product.copy() df_68["unit_price_intax"] = np.floor(df_68["unit_price"]*1.1) df_68.head(10)
np.floor() を使って、小数点以下の切り捨てをしています。
また、10%の消費税を計算するために、価格 ✕ 1.1 を計算しています。
データサイエンティスト協会の100本ノックを解説|ダウンロードから読み込みまで
データサイエンティスト協会の100本ノックを解説|データの抽出
データサイエンティスト協会の100本ノックを解説|変数の一部を使ってデータを抽出する
データサイエンティスト協会の100本ノックを解説|ソート(順序で整列)
データサイエンティスト協会の100本ノックを解説|グループ分け
データサイエンティスト協会の100本ノック|新たなデータフレームの作成
コメント