冷蔵庫に入っている食材を使ってどんなものが作れるのかをチェックするガジェットです。残り食材をもとに検索するので個人的なフードロスも抑えられます。レシピは「世界一美味しい手抜きごはん 最速! やる気のいらない100レシピ」から抜粋していますがこちらは本当に簡単に美味しい料理が作れます!
例えばこんな状況で
今回は、冷蔵庫に卵とニンジンと、大根ある。これで作れる美味しい料理って何? あと何を買ったらいい? とふと思った時にさっと使えるものがないかなと思い作りました。
このガジェットでできることはこちら
- 残り食材を入力するとそれを使用して作れる簡単メニューを表示してくれます。
- 一覧から選ぶとそのメニューで必要なものを表示してくれて、残り食材との差分も表示しますので、何を買えばいいか簡単にわかります。
- 必要な調味料も表示するので合わせてチェックできます。
- 残り食材が何もない場合は作りたいものをそのまま入力可能です
注意点はこちら
表記の揺れなど(卵と玉子など)材料のデータベースにない表記は再度入力を促すようにしています。
評価(自己)
役立ち度 ★★★★(良し)
効率化 ★★★★(良し)
ミス防止 ★★★(平均)
楽しさ ★★★★(良し)
操作 ★★★(平均)
実行環境
使用環境 streamlit
使用言語 python
使用ライブラリ pandas
コード
import pandas as pd
import streamlit as st
st.title('レシピ検索アプリ')
data = pd.read_excel('レシピ材料.xlsx')
seasonings = ['麺つゆ','牛乳','コーラ','コンソメ','チーズ','粉チーズ','ニンニク','生姜','辛子','ラー油','唐辛子','マヨ','ケチャップ','バター','醤油','みりん','酒','酢','ウスター','お好みソース','砂糖','味噌','黒胡椒','だしの素','うどんスープ','小麦粉','お好み焼きこ','パン粉','片栗粉','胡麻油','オリーブ']
df = None
def check_recipi(ingredient):
results = pd.DataFrame()
for i in range(len(ingredient)):
_df = data[data[ingredient[i]]==1]
results = pd.concat([results, _df])
results = results.drop_duplicates('調理名')
li_results = results['調理名'].to_list()
d = {}
for result in li_results:
_df = results[results['調理名'] == result]
_df = _df.T.reset_index(drop=False)
_df.columns=['gredient', 'bool']
d[result] = _df[_df['bool']==1]['gredient'].values
df = pd.DataFrame()
for key, values in d.items():
_d = {}
seasoning = []
gredient = []
for value in values:
if value in seasonings:
seasoning.append(value)
else:
gredient.append(value)
_d['レシピ'] = key
_d['材料'] = ",".join(gredient)
_d['調味料'] = ",".join(seasoning)
_df = pd.DataFrame([_d])
df = pd.concat([df, _df], ignore_index=True)
return df
def check_ingredient(recipi, ingredient):
if df is not None:
_need = df[df['レシピ']==recipi]['材料'].str.split(',').values[0]
need = [i for i in _need if i not in list(ingredient)]
else:
_need = all_df[all_df['レシピ']==recipi]['材料'].str.split(',').values[0]
need = [i for i in _need if i not in list(ingredient)]
return need
def get_all_recipis():
all_recipis = data['調理名'].to_list()
all_d = {}
for all_recipi in all_recipis:
_df = data[data['調理名'] == all_recipi]
_df = _df.T.reset_index(drop=False)
_df.columns=['gredient', 'bool']
all_d[all_recipi] = _df[_df['bool']==1]['gredient'].values
all_df = pd.DataFrame()
for key, values in all_d.items():
_d = {}
seasoning = []
gredient = []
for value in values:
if value in seasonings:
seasoning.append(value)
else:
gredient.append(value)
_d['レシピ'] = key
_d['材料'] = ",".join(gredient)
_d['調味料'] = ",".join(seasoning)
_df = pd.DataFrame([_d])
all_df = pd.concat([all_df, _df], ignore_index=True)
return all_df
all_df= get_all_recipis()
ingredient = ''
try:
ingredient = st.text_input('冷蔵庫にある材料を入れてください(複数の場合は全角スペースをあけ入力)')
print(ingredient)
if ingredient != '':
ingredient = ingredient.split(' ')
df = check_recipi(ingredient)
st.table(df)
except KeyError:
st.write('その材料はデータベースにないかもしれません。別の漢字やひらがなで試してください。')
recipi = st.text_input('作るものを決めてください')
try:
if recipi != '':
need = check_ingredient(recipi, ingredient)
if df is not None:
st.table(df[df['レシピ']==recipi])
else:
st.table(all_df[all_df['レシピ']==recipi])
if len(need)>1:
needs = 'と'.join(need)
st.write(f'{recipi}を作るために{needs}が必要です')
elif len(need) == 1:
needs = need[0]
st.write(f'{recipi}を作るために{needs}が必要です')
else:
st.write(f'{recipi}は今ある材料で作れます')
except:
st.write('その料理はデータベースにないかもしれません。別の漢字やひらがな、または別の料理で試してください')