2019年1月10日 星期四

BMI(Body Mass Index)指數

有1000個人的體型樣本,包括體重與身高兩項指標,不考慮性別和年齡因素,
計算每個人的BMI(Body Mass Index)指數,並根據關於肥胖的參考標準
(見下表),統計各種體型分類的人數。
體型BMI指數標準(資料來自網路)
     
BMI編號 BMI 分類 參考標準 相關疾病發病的危險性
1 體重過低 BMI < 18.5 低(但其它疾病危險性增加)
2 正常範圍 18.5 ≤ BMI < 24 平均水準
3 肥胖前期 24 ≤ BMI < 28 輕度增加
4 I度肥胖 28 ≤ BMI < 30 中度增加
5 II度肥胖 30 ≤ BMI < 40 嚴重增加
6 Ⅲ度肥胖 BMI ≥ 40.0 非常嚴重增加


# 使用均勻分佈亂數產生1000個 身高 樣本,取值範圍為 [0,1)
heights = rand(Float64, 1000)

# 使用均勻分佈亂數產生1000個 體重 樣本,取值範圍為 [0,1)
weights = rand(Float64, 1000)

# 將 身高 資料映射到 [1.5, 1.8) 公尺
heights = heights .* (1.8-1.5) .+ 1.5

# 將 體重 資料映射到 [30, 100) 公斤
weights = weights .* (100-30) .+ 30

# 定義BMI指數計算函數
bmi(w, h) = w / (h^2)

# 計算1000個樣本的BMI指數
indexes = broadcast(bmi, weights, heights)

# 或者以下面的語句替代上述的兩個語句
# indexes = weights ./ (heights.^2)

# 對BMI指數進行分類
# 1-體重過低,2-正常範圍,3-肥胖前期,4-I度肥胖,5-II度肥胖,6-III度肥胖
function bmi_category(index::Float64)
  class = 0
  if index < 18.5
     class = 1
  elseif index < 24
     class = 2
  elseif index < 28
     class = 3
  elseif index < 30
     class = 4
  elseif index < 40
     class = 5
  else
     class = 6
  end

  class            # 返回分類編號
end

# 計算每個樣本的BMI分類
classes = bmi_category.(indexes)

# 統計每個類別的數量
for c in [1 2 3 4 5 6]               # 遍歷6個類別,c為類別ID
  n = count(x->(x==c), classes)      # x->(x==c)為匿名函數
  println("category ", c, " ", n)    # 列印結果
end

輸出結果
$julia main.jl
category 1 280
category 2 242
category 3 148
category 4 75
category 5 236
category 6 19

沒有留言:

張貼留言

  清除項目編譯快取 執行 flutter clean 重新取得套件依賴 執行 flutter pub get 完整重新編譯並執行 flutter run 1. 新增專案套件 (pubspec.yaml) 在 Flutter 專案根目錄下的 pubspec.yaml 中,新增 ...