『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

BMIと標準体重を計算する関数

体格指数BMI(body mass index)

今回は身長と体重を引数に渡して BMI (body mass index)標準体重を返す関数のサンプルコードを載せます。BMI は
 
 BMI = [体重(kg)] / [身長(m)×身長(m)]
 
によって定義され、この値を基準に痩せているか、肥満であるかという基準を作ります (WHO の基準と日本独自の基準があります。詳細についてはサンプルコードの中身を確認してください)。たとえば身長 170 cm, 体重 70 kg である場合、
 
 BMI = 70 / [1.7 × 1.7] = 24.221
 
となります。統計上は BMI = 22 の人が、高血圧や肝障害などの病気を持っている割合が少ないとされています。したがって BMI に基づく標準体重は
 
 標準体重(kg) = 22 × 身長(m) × 身長(m)
 
と定められています。

PythonでBMI関数を実装する

Python で作成した BMI 関数のコードです。
この関数をモジュールとして利用する場合には、関数の定義部分だけ(サンプルデータ以降を省いたコード)を .py 拡張子のついたファイルに保存して必要な時に import してください。

# PYTHON_BMI

# In[1]

# BMI関数
# 引数は身長(cm),体重(kg),日本基準適用の是非の順に指定
def bmi(h, w = False, j = False):
    
    # 標準体重を計算
    s_weight = round(22*(h/100)**2, 2)

    # BMI(body mass index)を計算
    x = round(w/((h/100)**2), 2)
    
    # WHO の基準
    if x < 16:
        advice_w = "痩せすぎです"
        
    elif 16 <= x < 17:
        advice_w = "痩せています"
        
    elif 17 <= x < 18.5:
        advice_w = "痩せ気味です"
        
    elif 18.5 <= x < 25:
        advice_w = "普通体重です"
        
    elif 25 <= x < 30:
        advice_w = "前肥満です"
        
    elif 30 <= x < 35:
        advice_w = "肥満(1度)です"
        
    elif 35 <= x < 40:
        advice_w = "肥満(2度)です"
        
    else:
        advice_w = "肥満(3度)です"
    
    # 日本の基準
    if x < 18.5:
        advice_j = "低体重です"
        
    elif 18.5 <= x < 25:
        advice_j = "普通体重です"
        
    elif 25 <= x < 30:
        advice_j = "肥満(1度)です"
        
    elif 30 <= x < 35:     
        advice_j = "肥満(2度)です"
        
    elif 35 <= x < 40:
        advice_j = "肥満(3度)です"
        
    elif x > 40:
        advice_j = "肥満です"
    
    # 体重を省略すると標準体重のみを返します
    if w == False:
        return s_weight
    
    # 第3引数をTrueにすると日本基準で返します
    elif j == True:
        return x, s_weight, advice_j
    
    # 第3引数がTrue以外の値であればWHO基準で返します
    else:
        return x, s_weight, advice_w

# 以下、サンプルデータを入力して動作を確認しています
# 身長170cm,体重75kg
sample_1 = bmi(170, 75)

# 身長170cm,体重75kg
sample_2 = bmi(170, 75, True)

# 身長183cmのみを入力
sample_3 = bmi(183)

print(sample_1)
print(sample_2)
print(sample_3)
# (25.95, 63.58, '前肥満です')
# (25.95, 63.58, '肥満(1度)です')
# 73.68

BMI() 関数は

BMI(身長(cm), [体重(kg)], [日本基準の適用])

という記述で呼びだします。この関数は引数の指定の仕方によって次のような値を返します。
 
(1) 引数に身長だけが渡された場合、関数は標準体重だけを数値で返します。
(2) 身長と体重だけが渡された場合は、標準体重と BMI, WHO基準の肥満度をタプルで返します。
(3) すべての引数が渡され、かつ日本基準に True が指定されると、標準体重と BMI, 日本基準の肥満度をタプルで返します。
 
上のサンプルコードの実行結果からわかるように、WHO 基準よりも日本基準のほうが少し厳しめです。

コメント