まずif構文で判定するプログラムを作る
データが少ない時のしきい値を見つける
import pandas as pd
df = pd.read_csv('./input/data.csv')
df.head()
先頭5行の表示
def should_re_exam(weight):
""" 再検査対象の人はTrue """
if weight > 90:
return True
else:
return False
for row in df.itertuples():
print(should_re_exam(row.weight), row.y)
df.itertuplesでDataframeのループができます
各行rowから、row.weightのように値を取り出しています。
forのみの構文だと、一つ、一つ、rowと関係なくバラバラに取り出すことになる。
各行の「weightからの判定結果」と「yの値」が一致していることを確認します
ヒストグラムを作成してしきい値を見つける
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("./input/data3.csv")
len(df)
100
df.head(3)
df.describe()
plt.hist(df[df["y"] == 0]["x"],
bins=24, range=(0, 6), color="blue")
plt.hist(df[df["y"] == 1]["x"],
bins=24, range=(0, 6), color="red");
yが0のデータと yが1のデータの2回に分けて描画しています
plt.hist(…) でヒストグラムを描画します
横軸は列xの階級で、縦軸は度数(階級に属する個数)です
df[df[‘y’] == 0][‘x’] で、「y列が 0の行の、x列の値」を取得しています
range=(0, 6) でビンの最小値、最大値を指定しています
bins=24 で階級(ビン)の数を指定しています(0.25刻みで24階級)
color=’blue’ で描画するグラフの色を指定しています
def is_one(x):
if x > 3:
return True
else:
return False
x が3以上の値か確認し、1(True)か0(False)かを判定するis_one関数を定義
answers = []
for row in df.itertuples():
answer = is_one(row.x)
answers.append(answer)
df
の各行のx
列の値を is_one
関数で判定し、answers
に追加
(answers == df['y']).sum() / len(answers)
1.0
データのy列の値(df[‘y’])とanswersを比較して、正答率を計算
(answers == df[‘y’]).sum()で、is_oneの判定結果が正しかった数を取得しています
その値を全体の数 len(answers) で割ることで、正答率を計算しています
正答率は1.0なので全て正解しています
条件が二つの場合
def is_man(height,weight):
if height> 163 and weight <60:
return True
else:
return False
answers = []
for row in df.itertuples():
answer = is_man(row.height,row.weight)
answers.append(answer)
このようにrow.heightと名前を付ける
コメント