GridDBを用いたBMIの健康調査データ解析

## はじめに

BMI（Body mass index）とは、身長に対する体重の比率で、多くのフィットネストレーナーや健康専門家の間で健康指標として利用されています。人は性別とBMIによって、普通、過体重、肥満、超肥満に分類されます。

今回は、全米健康・栄養調査（NHANES）データを用いて、様々な健康指標とBMIを相対化します。[全米健康・栄養調査（NHANES）][1]データは、米国の大人と子供の健康と栄養状態を評価するために、何万人もの人を対象に行われた複雑な調査です。NHANESデータには、健康全般、身体活動、食事、心理的健康、社会経済的要因などに関する多くの測定値が含まれています。

## GridDBを使ったデータセットのエクスポートとインポート

NHANESの前処理された大量のデータを保存するために、GridDBを使用する予定です。GridDBは、高いスケーラビリティとインメモリNoSQLデータベースで、並列処理により高いパフォーマンスと効率性を実現します。IoTやビッグデータ技術に対応した時系列データベースとして最適化されています。GridDBのpythonクライアントを使えば、リアルタイムでデータのインポートやエクスポートができるようになります。

### GridDBのセットアップ

まず最初に、GridDBがシステムに正しくインストールされていることを確認する必要があります。GridDBを様々なOSにインストールする方法は、こちらの [リンク][2] を参照してください。

### データセット

NHANESは、Rと同様にpythonでビルトインライブラリを利用できます。pythonまたはanacondaコマンドプロンプトで以下のコマンドを実行してNHANESライブラリをインストールすれば、データを利用することができるようになります。

![][3]

次に、ライブラリをインポートして、データを任意の変数、ここでは "data_df "に保存することができます。

![][4]

NHANESのライブラリとともに、Pandas、Matplotlib、Seabornライブラリを使用して、データセットの解析と可視化を行います。

### データの前処理

NHANESのデータセットには約200の変数があり、その中には食事やその人の健康状態に関する情報が含まれています。BMIに影響を与える条件に集中してわかりやすく分析するために、より重要と思われるいくつかの列をフィルタリングすることにします。

![][5]

最後に、NULL列を削除して、主キー列をデータセットに導入します。

![][6]

データのローカルコピーを保持するために、GridDBにエクスポートする前に、システム上でCSVファイルとして保存することができます。

![][7]

### GridDBにデータをアップロードする

GridDB が定める標準的なデータの挿入方法は、コンテナを作成し、put メソッドを使用することです。

![][8]

エラーなくGridDBクラウドにデータをエクスポートすることに成功し、GridDBのインターフェイスを使ってどこからでもデータにアクセスできるようになりました。

### GridDBからデータにアクセスする

GridDBクラウドのデータにアクセスするには、GridDBのクエリ言語であるTQLを使ってデータベースに問い合わせる必要があります。TQLは、標準的なSQLプロトコルと同様のコマンドを使用して、GridDBコンテナからデータを問い合わせることができます。

![][9]

次に、クエリしたデータをデータフレームに保存して分析に利用することになります。pd.DataFrame() メソッドを用いて、GridDB のコンテナリストをデータフレームに変換しています。

![][10]

## 解析と可視化

解析を始める前に、プロジェクトに役立ついくつかの Python ライブラリをインポートします。

![][11]

lambdaメソッドを使って、データにcategorizeBMI関数を適用し、「Underweight」「Healthy Weight」「Overweight」「Obesity」の4段階に分けてみます。

![][12]

まずはBMIと性別の関係を探り、BMIが男性と女性でどのように異なるかを知ることから始めることになります。

![][13]

![][14]

> 図1 : BMI値の異なる男性と女性

グラフから分かるように、男性は女性より太りやすい傾向にありますが、女性の方が肥満になる確率が高いことが分かります。

列のひとつには、その人のHDLコレステロール値が含まれています。CDCによると、正常なHDL値は40以上なので、この情報を使って、その人を「正常」と「危険」の2つのカテゴリーに分類することにします。

![][15]

HDL値とBMI区分を用いてデータを分割し、BMI値がHDL値にどのような影響を与えるかを検証していきます。

![][16]

![][17]

> 図2：BMI区分とHDL値との関係

BMIが「肥満」「過体重」の範囲にある人は、危険な状態にある可能性が高いことが分かります。

同様に、BMI値を使って、その人がとっている食事との関係も調べていきます。

![][18]

![][19]

> 図3：BMI区分における食事効果

上記のグラフを見ると、食生活が貧弱な人、あるいはまずまずの食生活を送っている人が最も多く、肥満に直面していることがわかりますが、優れた食生活を送っている人の多くは健康的な体重を維持しています。

最後に、BMIと比較する上で最も重要な要素は、脳卒中や心臓発作の可能性です。その為に、まず脳卒中や心臓発作を起こした人を個別にフィルタリングし、その人のBMI値を探ってみます。

![][20]

![][21]

![][22]

> 図4 & 5：脳卒中・心臓発作とBMIの関係

やはり、肥満の人は脳卒中や心筋梗塞になりやすいというのは、私たちの共通の関心事でしょう。

## 結論

NHANESの調査データは、BMIが健康状態に悪影響を及ぼす原因となりうるため、人々にとって重要な関心事であるべきだという結論を導いてくれました。同様に、食生活もBMI値に大きく影響するため、健康的な生活を送るためには食生活に気を配る必要があります。すべての分析は、バックエンドでGridDBデータベースを使用して行われ、シームレスかつ効率的な統合を実現しました。

 [1]: https://www.cdc.gov/nchs/nhanes/index.htm
 [2]: https://griddb.net/ja/blog/griddb-quickstart/
 [3]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Dataset-1.png
 [4]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Dataset-2.png
 [5]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Preprocessing-1.png
 [6]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Preprocessing-2.png
 [7]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Preprocessing-3.png
 [8]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Exporting-1.png
 [9]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Importing-1.png
 [10]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Importing-2.png
 [11]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Analysis-1.png
 [12]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Analysis-2.png
 [13]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Analysis-3.png
 [14]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/BMI-Gender.png
 [15]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Analysis-4.png
 [16]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Analysis-5.png
 [17]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/BMI-HDL.png
 [18]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Analysis-6.png
 [19]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/BMI-Diet.png
 [20]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Analysis-7.png
 [21]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/Stroke.png
 [22]: https://raw.githubusercontent.com/EmadBinAbid/Health-Survey-Data-Analysis-of-BMI-using-GridDB/main/Images/HeartAttack.png