PFCバランスとは
PFCバランスとは、摂取カロリーのうち三大栄養素の「P=たんぱく質」「F=脂質(脂肪)」「C=炭水化物」がどれくらいの割合を占めるかを示した比率のこと。このPFCバランスを整えることによって極端な栄養の偏りを防ぎ、栄養バランスを整えながら健康的にダイエットすることができるのです。厚生労働省では「エネルギー産生栄養素バランス」として、生活習慣病の予防・改善の指標となる三大栄養素の目標量を、以下の通り提示しています。
たんぱく質:13~20%
脂質:20~30%(飽和脂肪酸は7%以下とする)
炭水化物:50~65%https://melos.media/wellness/ から引用
一般的なPFCグラフの形状


PFCグラフ作成の経緯
鮎斗君のお父さんは現在透析治療中で週4回、一回6時間の透析中です。愛機XPS13でベッドでアプリ制作にいそしんでいます。
透析治療では体重管理が非常に重要です。
飲んだ水や食べ物に含まれる水分は普通は「おしっこ」として排出されますが、私の場合は腎臓機能が完全に失われているため一滴の尿も出ません。体内に入った水分はそのまま「むくみ」として蓄積されます。当然生きるために食物を摂取した分の重さがは、前回透析終了直後の体重と今回透析開始前の体重差がその食物と水分の重さとして残るのです。
透析治療では具体的には、人工腎臓で血液中の有害物質を取り除くと同時に体に蓄積した水分を取り除く(除水)をします。
体重の増加率は通常ドライウエイト(標準体重)の 3~5%と言われていて、例えば、ドライウエイト63㎏(医師の指示)の場合、5%増加すると66.15kgでその差3.15㎏ですから、私の場合、栄養になる分と大便として排出される分を除いても約2.5㎏を水分とみて除水することになります。
何が辛いかといえば、この除水が非常につらい治療です。除水量がいつも一定していればいいのですが、時には前の晩少し食べすぎたり、ビールを飲みすぎたりすると当然その分の水分量が増えすぎてしまいます。除水量が3㎏を超えると透析治療中に血圧の急激に降下して、(私の場合80以下になることもある)体調が著しく悪化します。
そうした場合、血圧の上昇させるため、逆に血液中に蒸留水を注入したり、除水を停止したりします。
その結果、体調は徐々に回復しますが、透析治療終了時の体重がドライウエイトに戻らず増加した分の水分が体内に残ることになります。
当然、そうなると次回の透析までの間に摂取できる食事量をより少なくしなければなりません。それができなければ、除水しきらないで残る水分量がどんどん多くなってしまいます。
そこで、私の場合は自作したアプリで食事の摂取状況を逐一記録し体重の増加をグラフで見える化し摂取量を管理し自制しているのです。そこで心配になるのが食事量を抑える分カロリー不足や栄養不足にならないか、ということです。ここで今回自作したPFCバランスグラフの登場です。
下図 左、PFCグラフ 中央、食事の摂取記録画面 右、血圧グラフ



PFCバランスグラフの構造
栄養摂取状況記録
自作した食事管理アプリでは文部科学省のホームページで公開している栄養成分表を使ってSQLiteデータベースに摂取状況を記録蓄積しています。日付単位で3食ごとに摂取量を管理し摂取総カロリー(熱量)に対するタンパク質、脂質、炭水化物がそれぞれから発生する熱量に換算した値の割合をグラフに表現することになります。
図1
直線OーP’’の長さは(直線O-C’)÷2
直線C’ーP’’の長さは(直線O-C’)÷2×√3となります。
androidのcanvasの上に描画するC’点の座標がわかるのです。

図1の場合上記の計算から、
・直線O-Cの長さ=炭水化物の目標とするエネルギー量で、総カロリーの65%だから1300kcal
・直線O-Cの長さを座標で表すと、円の半径と同じですから300ピクセル。
【実際の値】
・直線O-C’の長さ=炭水化物の実際摂取量をエネルギー量は2000kcaの70%で1400Kcal。
・直線O-C’の長さ=を座標で表す値x(求める値)
結果、直線O-C’の座標の直角三角形の斜辺の長さ≒323.1です
これを今度はcanvas上のC’座標点に変換します
通常座標原点はcanvasの左上が(0,0)になっていますが、ここでは円の中心である座標x=600、座標y=600(上から600p左端から600)にします。
具体的にはtranslate(600, 600)で円の中心О(オー)が示す座標に原点移動します。
座標x(O-P”)=323.1÷2≒161.6
座標y(C’-P”)=323.1÷2×√3≒279.8となります。つまり円の中心O(オー)がcanvas原点になったのでC’座標は(‐279.8, 161.6)となるわけです。
値を返すメソッド(関数)を作る。
斜辺(O-C’)の長さ(実際に摂取した栄養素の量)を引数にして上記の計算結果のx座標とy座標の値を配列にして返すメソッドを作っておけば処理が簡単になります。
下記はアプリで実際に使ったメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
/** * 摂取総カロリーに対する栄養素(脂質)の換算熱量値を基準円半径グラフ上の位置を示すx、y座標点を返す * @param syurui グラフの種類 * @param atai PFCの各栄養素当りの換算kcal値 * @return 計算結果のataiが示す座標(x,y)を配列resultで返す */ private float[] kZhy(String syurui, float atai) { // float[] result = new float[2]; //各栄養素当りの熱量値の換算係数 float keisuu = 0; float kijunwariai =0; if (syurui.equals("p")) { keisuu = 4f; kijunwariai = pfc_P; //タンパク質、総熱量の15% } else if (syurui.equals("f")) { keisuu = 9f; kijunwariai = pfc_F; //脂質、総熱量の30% } else { keisuu = 4f; kijunwariai = pfc_C; //炭水化物、総熱量の60% } float PFC_kcal = atai * keisuu; //① 各栄養素のresip3の集計合計値を熱量に換算 float PFC_kijun = kcalAll * kijunwariai; //② 円グラフ上の各栄養素kcalの基準となる長さを表す。 //上の①と②の対比を座標を示す長さの対比で ①のグラフ上の位置を座標上の位置に変換する // ②の基準の長さは円グラフの半径座標とイコールしているから下記の式で座標上の長さXを計算する // PFC_kijun : PFC_kcal // pfc_hankei : X float X = pfc_hankei * PFC_kcal / PFC_kijun; // 上記から得た座標の長さXが示す円グラフの中心からの距離にある座標点からx軸に垂直になるように // 伸ばすと直角三角形ができる。 // その斜辺の長さがXなので、三平方の定理(ピタゴラスの定理)を使って、Xの位置する座標(x,y)を計算する // 30、60、90度の直三角形の三平方の定理>>底辺の長さは、斜辺の半分で、他の一方の辺の長さは √3になる。 float teihenn = X / 2; float tahenn = (float) (teihenn * Math.sqrt(3)); // Xの位置する座標を割り出す //原点(0,0)がグラフの円の中心にtranslateしている場合 float X_x = 0; float X_y = 0; if (syurui.equals("f")) { X_x = tahenn; X_y = teihenn; } else if (syurui.equals("c")) { X_x = -tahenn; //中心が原点なので、Cは左方向だからマイナスになる X_y = teihenn; } else if (syurui.equals("p")) { X_x = 0; X_y = -X; //中心が原点なので上方への長さはマイナスになる } result[0] = X_x; result[1] = X_y; return result; } |
考え方は炭水化物のO-Cと全く同じです。ここにできる三角形はO-Cの時とは逆向きなのでX座標の値は(+)プラスになります。
・直線O-Fの長さを座標で表すと、円の半径と同じですから300ピクセル。
・脂質の実際摂取量をエネルギー量に換算した値は総カロリーの27%で540Kcal。
・求める長さ=座標で表す値 X(求める値)
結果、直線O-Fの座標の直角三角形の斜辺の長さ≒270です
これを今度はcanvas上のC’座標点に変換します
通常座標原点はcanvasの左上が(0,0)になっていますが、ここでは円の中心である座標x=600、座標y=600(上から600p左端から600)にします。
具体的にはtranslate(600, 600)で円の中心О(オー)が示す座標に原点移動していますから。
座標x(O-P”)=270÷2≒135
座標y(F’-P”)=270÷2×√3≒ 233.8となります。つまり円の中心O(オー)がcanvas原点になったのでF’座標は(233.8, 135)となるわけです。
【注意点】
脂質と炭水化物とは中心Оから見ると反対側ですから炭水化物のX座標はマイナスで
脂質のX座標はプラスになることです。

・直線O-Pの長さを座標で表すと、円の半径と同じですから300ピクセル。
・タンパク質の実際摂取量をエネルギー量に換算した値は総カロリーの14%で280Kcal。
・求める長さ=座標で表す値 X(求める値)
結果、直線O-Pの長さ≒210です
これを今度はcanvas上のC’座標点に変換します
座標x(O-P”)=中心Oから見て 0(ゼロ)
座標y(直線の長さその物)=210となります。つまり円の中心O(オー)がcanvas原点になっているので求めるP点座標は(0, 210)となるわけです。
【注意点】
中心Оから見るとY軸の上方側ですからY座標はプラスになることです。
もうちょっとわかりやすく
もう少し整理してみます
イメージ① 理想的に(目標にする)摂取したい栄養
【エネルギー換算係数】
食べた食品中に含まれる数々の栄養素の内タンパク質、脂質、炭水化物の3種類についてその摂取重量をそれぞれエネルギー値(熱量値)に変換する必要があります。
例えば、摂取したタンパク質が30gだったとしたらこれが体内で燃えてエネルギーになると熱量値は 30g×4kcal=120kcal となります
この 4kcal が換算係数です。脂質は9kcal、炭水化物は4kcalになっています。
これで計算した熱量値が理想的なエネルギー比になったとき下図の円グラフはその円に内接する正三角形になりますから、これに比較することで実際の栄養のバランスを見ることができるのです。
イメージ② 実際の栄養摂取の状況
下図は、例として実際に食べた食事の栄養状況を表しています。
見やすくするために、若干データを誇張しています。
下図の場合では、タンパク質、炭水化物は目標値(理想値)に達せず。脂質は摂取過多になっています。
つまり、もう少し高タンパクでかつ低脂肪の食品を摂取したいということをこのグラフから見て取ることができます。
イメージ③ 作図に必要な座標の計算方法(炭水化物の場合)
【作図のためのポイント】
ポイントは二つ
- 比例式 摂取したエネルギー値を計算
炭水化物の目標とするエネルギー値 対 との大きさを表す図形上の長さ の割合から
実際に摂取したエネルギー値 を表す図形上の長さを計算します
目標とするエネルギー値:図形上の目標の長さ=実際に摂取したエネルギー値:X
比例式では、内項の積と外項の積は等しいという性質を利用してXを計算します
ですから
目標エネルギー値×X = 図形上の目標の長さ×実際に摂取したエネルギー値となり
すなわち
X = 図形上の目標の長さ×実際に摂取したエネルギー値÷目標エネルギー値
- 三平方の定理 摂取したエネルギー値を直角三角形の斜辺として計算
前項で計算したXは炭水化物のエネルギー値を作図上の長さに変換した値で、このXを
特別な直角三角形(30°、60°、90°)の斜辺として、他の辺の長さを計算すると
三平方の定理 特別な直角三角形の辺の長さの比1:2:√3 から
その他辺の横線が斜辺の終点x座標、縦線が斜辺の終点のy座標となります。
特別な直角三角形として計算して作図した斜辺はx座標軸に対して30°の直線になります。
また、円の中心O(オー)を原点座標(0,0)として作図すると円の中心から120°で3等分した直線ができます。
イメージ④ 作図の方法(脂質)
具体的な作図の方法の考え方はイメージ③炭水化物の時と全く同じです。
違うのは、計算した結果のx座標の向きが逆になるだけです。
円の中心O(オー)を原点座標にしていますから、炭水化物は中心Oから左方向でx座標はマイナスで、脂質はプラスにします。
イメージ⑤ 作図の方法(タンパク質)
作図の方法は前項の炭水化物、脂質と考え方は同じです。
が、タンパク質のエネルギー値を表す直線は垂直線なので三平方の定理の計算は必要ありません。
比例式で計算した値がそのままy座標にあてはめますから、y座標にマイナスをつければ終わりです(円の中心が原点座標なのでx座標は0ゼロです)
座標の使われ方
座標計算が必要なわけ。
まとめ
どうだったでしょう。長々と書いてきましたが、中学生程度の数学で作図できましたので、もっと簡単な描き方もあるのでしょうがとりあえずデータを見える形にできましたので、android初心者としてはこれで上出来とおもいます。
現在はこのアプリを利用して、透析治療のツールとして毎日データを蓄積しながら順調に体調管理に利用しています。
超初心者ではありますが、プログラミングはボケ防止にも大変役立つものだと思いますので、これからも様々挑戦してみたいと思います。
透析治療の日々、ベッドでゲーミングキーボードをたたくカタカタ音が好きで何台もキーボードを買いましたが、最近そのカタカタ音は他の人に迷惑をかけているかもしれないことに気づいて、今は静音タイプのキーボードに変えました。透析導入のとき買ったXPS13が8年たって寿命を迎え、つい最近ASUSのZenBookに買い替えしました。8年前に16万円で買ったCPU i7、250SSD 当時としては爆速ですごいなあと思ったのですが、今回はランクを落として10万でCPU i5を買いました。SSDは倍の500Gとなり顔認証もついていて、起動してみると前のに比べて更に超爆速になっていました。技術革新の高さに驚かされました。今は67になりましたからパソコンを買うのはこれが最後かもしれないけど、それでも毎日カタカタやっていきます。
初心者ですが、少しでもこの記事がより初心者の方の理解の助けになれば幸いです。
コメント