|
import random |
|
import pandas as pd |
|
import numpy as np |
|
import pickle |
|
import os |
|
|
|
SERVER_FILE_DIR = os.path.dirname(os.path.abspath(__file__)) |
|
NUTRITION_MODEL_PATH = os.path.join(SERVER_FILE_DIR, "../resources/models/nutrition_model.pkl") |
|
MEALS_JSON_PATH = os.path.join(SERVER_FILE_DIR, "../resources/datasets/meals.json") |
|
|
|
if not os.path.exists(MEALS_JSON_PATH): |
|
raise FileNotFoundError(f"File {MEALS_JSON_PATH} does not exist") |
|
|
|
df = pd.read_json(MEALS_JSON_PATH) |
|
|
|
class NutritionModel: |
|
def __init__(self): |
|
self.load() |
|
|
|
def generate_plan(self, calories): |
|
lunch_attr = { |
|
"Calories":calories*0.4, |
|
"FatContent":random.uniform(19, 97), |
|
"SaturatedFatContent":random.uniform(6, 12), |
|
"CholesterolContent": random.uniform(77, 299), |
|
"SodiumContent":random.uniform(565, 2299), |
|
"CarbohydrateContent":random.uniform(28, 317), |
|
"FiberContent": random.uniform(2, 38), |
|
"SugarContent": random.uniform(0, 38), |
|
"ProteinContent":random.uniform(20, 123), |
|
'weight' : 30 |
|
} |
|
|
|
lunch_df = pd.DataFrame(lunch_attr, index=[0]) |
|
|
|
breakfast_attr = { |
|
"Calories":calories*0.30, |
|
"FatContent":random.uniform(8.7, 20), |
|
"SaturatedFatContent":random.uniform(1.7, 3.7), |
|
"CholesterolContent": random.uniform(0, 63), |
|
"SodiumContent":random.uniform(163, 650), |
|
"CarbohydrateContent":random.uniform(23, 56), |
|
"FiberContent": random.uniform(2.6, 8), |
|
"SugarContent": random.uniform(3.5, 13), |
|
"ProteinContent":random.uniform(6, 25), |
|
'weight' : 0 |
|
} |
|
|
|
breakfast_df = pd.DataFrame(breakfast_attr, index=[0]) |
|
|
|
dinner_attr = { |
|
"Calories":calories*0.30, |
|
"FatContent":random.uniform(15, 33), |
|
"SaturatedFatContent":random.uniform(6, 8), |
|
"CholesterolContent": random.uniform(22, 86), |
|
"SodiumContent":random.uniform(265, 775), |
|
"CarbohydrateContent":random.uniform(14, 44), |
|
"FiberContent": random.uniform(201, 210), |
|
"SugarContent": random.uniform(3, 13), |
|
"ProteinContent":random.uniform(11, 25), |
|
'weight' :10 |
|
} |
|
|
|
dinner_df = pd.DataFrame(dinner_attr, index=[0]) |
|
|
|
snack_attr = { |
|
"Calories":random.uniform(90, 190), |
|
"FatContent":random.uniform(1.7, 10), |
|
"SaturatedFatContent":random.uniform(0.7, 3), |
|
"CholesterolContent": random.uniform(2, 16), |
|
"SodiumContent":random.uniform(47, 200), |
|
"CarbohydrateContent":random.uniform(10, 31), |
|
"FiberContent": random.uniform(0.4, 2.5), |
|
"SugarContent": random.uniform(5.7, 21), |
|
"ProteinContent":random.uniform(3, 20), |
|
'weight' :40 |
|
} |
|
|
|
snack_df = pd.DataFrame(snack_attr, index=[0]) |
|
|
|
lunch = self.nutrition_model.transform(lunch_df) |
|
breakfast = self.nutrition_model.transform(breakfast_df) |
|
dinner = self.nutrition_model.transform(dinner_df) |
|
snack = self.nutrition_model.transform(snack_df) |
|
|
|
meals = np.concatenate((breakfast, lunch, dinner, snack), axis=0) |
|
meals = np.transpose(meals) |
|
days = [] |
|
for i in range(7): |
|
day_meals = df.iloc[meals[i]].to_dict(orient="records") |
|
days.append(day_meals) |
|
return days |
|
|
|
def load(self): |
|
with open(NUTRITION_MODEL_PATH, "rb") as f: |
|
self.nutrition_model = pickle.load(f) |
|
|
|
|