文科省が出している日本食品標準成分表示から、食品にどの栄養素がどのくらい含まれているかをチェックできるガジェットです。また、エイジングや快眠など目的に応じて必要な栄養素と必要な食品もチェックできます。
例えばこんな状況で
今回のガジェットは、今食べている食品にどのくらいの栄養があるのだろう。茹でたり生だったり料理の仕方でも違うのかな?エイジングしたいけど何を食べてどんな栄養素をとったらいいのかな?簡単にわかるといいなということから作ってみました。
pythonのpandasを利用してデータを整形し、それをstreamlitで表示するという形にしています。streamlitのselectboxとtext_inputを利用し、入力した値からpandasで検索して表示します。
このガジェットでできることはこちら
- 食品名を入力すると栄養素の一覧が確認できます。
- それぞれの栄養素ごとに並べ替えしたりすることもできます。
- エイジング、記憶力、快眠、腸活の4つの目的に応じた必要栄養素と食品の一覧を表示します。
注意点はこちら
- 食品の表記をあまりまとめておらず生のデータのまま使用しています。そのため若干見づらい。。。
評価(自己)
役立ち度 ★★★(平均)
効率化 ★★★(平均)
ミス防止 ★★★(平均)
楽しさ ★★(悪し)
操作 ★★(悪し)
※食品と栄養素の表記が見づらいことと、単位がバラバラなので一見してどのくらい必要なのかがわかりづらいです。データは今後修正する必要ありです。
実行環境
使用環境 streamlit
使用言語 python
使用ライブラリ pandas
コード
import pandas as pd
import streamlit as st
st.title('栄養素チェックアプリ')
data = pd.read_excel('ベースデータ.xlsx')
col1, col2 = st.columns(2)
with col2:
st.write('> 日本食品標準成分表2020年版(八訂)')
st.write('#### ■素材の栄養素を調べる')
search = st.text_input('調べたい素材を入力してください')
df = data[data['食品名(単位)'].str.contains(search)].iloc[:, 2:]
st.dataframe(df)
aging = ['ビタミンA(μg)', 'ビタミンC(mg)', 'ビタミンE(mg)', 'ミネラル(mg)']
memory = ['炭水化物(g)', 'ビタミンB1(mg)', 'ビタミンB2(mg)', 'カルシウム(mg)', '脂質(g)']
sleep = ['アミノ酸組成によるたんぱく質(g)', 'マグネシウム(mg)', 'ビタミンB6(mg)']
intestines = ['食物繊維総量(g)', ]
sorted_aging = data.sort_values(aging, ascending=False).reset_index(False)
aging_ten = sorted_aging.loc[:, ['食品名(単位)', aging[0], aging[1], aging[2], aging[3]]]
sorted_memory = data.sort_values(memory, ascending=False).reset_index(False)
memory_ten = sorted_memory.loc[:, ['食品名(単位)', memory[0], memory[1], memory[2], memory[3], memory[4]]]
sorted_sleep = data.sort_values(sleep, ascending=False).reset_index(False)
sleep_ten = sorted_sleep.loc[:, ['食品名(単位)', sleep[0], sleep[1], sleep[2]]]
sorted_intestines = data.sort_values(intestines, ascending=False).reset_index(False)
intestines_ten = sorted_intestines.loc[:, ['食品名(単位)', intestines[0]]]
li = ['', 'エイジング', '記憶力', '快眠', '腸活']
st.write('#### ■目的別栄養素一覧')
select = st.selectbox('目的を選んでください', options=li, )
if select == li[1]:
st.dataframe(aging_ten)
target = aging_ten
elif select == li[2]:
st.dataframe(memory_ten)
target = memory_ten
elif select == li[3]:
st.dataframe(sleep_ten)
target = sleep_ten
elif select == li[4]:
st.dataframe(intestines_ten)
target = intestines_ten
else:
target = None
select_food = ''
if target is not None:
st.write('#### ■さらに素材を絞る')
select_food = st.text_input('素材を絞ってください')
if select_food != '':
target_df = target[target['食品名(単位)'].str.contains(select_food)]
st.dataframe(target_df)