2021ВКР750107ИСАКОВ
.pdf33. |
Stack |
Overflow |
Trends. |
- |
URL: |
https://insights.stackoverflow.com/trends?tags= (дата обращения: 16.05.2021).
34.TIOBE index. - URL: https://www.tiobe.com/tiobe-index/ (дата обращения: 15.05.2021).
35.A New Policy to Help Fight Spam. - URL: https://www.linode.com/blog/linode/a-new-policy-to-help-fight-spam/ (дата обращения: 16.05.2021).
36.Введение в WSGI-серверы. - URL: https://habr.com/ru/post/426957/
(дата обращения: 25.05.2021).
37.Architecture of SQLite. - URL: https://www.sqlite.org/arch.html (дата обращения: 13.05.2021).
38.About SQLite. - URL: https://www.sqlite.org/about.html (дата обращения: 13.05.2021).
39.SQLite. - URL: https://habr.com/ru/post/149356/ (дата обращения:
25.05.2021).
40.Result Values From A Query. - URL: https://sqlite.org/c3ref/column_blob.html (дата обращения: 13.05.2021).
41.Классификация, регрессия и другие алгоритмы Data Mining. - URL: https://ranalytics.github.io/data-mining/044-Ensembles.html (дата обращения:
13.05.2021).
42.Gatsou C., Politis A., Zevgolis D. The importance of mobile interface icons on user interaction//International Journal of Computer Science and Applications, 2012, Vol. 9, P. 92-107.
43.Kools M., Wiel M.W.J. van de, Ruiter R.A.C., Kok G. Pictures and text in instructions for medical devices: Effects on recall and actual performance//Patient Education and Counseling, 2006, Vol. 64, No. 1-3, P. 104-111.
44.Стандарты ЕСПД. - URL: https://www.swrit.ru/gost-espd.html (дата обращения: 17.05.2021).
45.Mendes-Soares H., Raveh-Sadka T., Azulay S., Edens K., Ben-Shlomo Y., Cohen Y., Ofek T., Bachrach D., Stevens J., Colibaseanu D., Segal L., Kashyap
81
P., Nelson H. Assessment of a Personalized Approach to Predicting Postprandial Glycemic Responses to Food among Individuals without Diabetes//JAMA Network Open, 2019, Vol. 2, No. 2, P. e188102-e188102.
46. Zeevi D., Korem T., Zmora N., Israeli D., Rothschild D., Weinberger A., Ben-Yacov O., Lador D., Avnit-Sagi T., Lotan-Pompan M., Suez J., Mahdi J.A., Matot E., Malka G., Kosower N., Rein M., Zilberman-Schapira G., Dohnalová L.,
Pevsner-Fischer M., Bikovsky R., Halpern Z., Elinav E., Segal E. Personalized Nutrition by Prediction of Glycemic Responses//Cell, 2015, Vol. 163, No. 5,
P.1079-1094.
47.ГОСТ Р МЭК 62304-2013. - URL: https://docs.cntd.ru/document/1200107111 (дата обращения: 20.05.2021).
48.ГОСТ 12.0.003-2015. - URL: https://docs.cntd.ru/document/1200136071
(дата обращения: 20.05.2021).
49.ГОСТ Р ИСО 9241-3-2003. - URL:
https://docs.cntd.ru/document/1200032010 (дата обращения: 20.05.2021).
50. СанПиН 1.2.3685-21. - URL: https://docs.cntd.ru/document/573500115
(дата обращения: 20.05.2021).
51.ГОСТ Р ИСО 9241-8-2007. - URL:
https://docs.cntd.ru/document/1200064120 (дата обращения: 21.05.2021).
52.ГОСТ Р ИСО 9241-151-2014. - URL:
https://docs.cntd.ru/document/1200113012 (дата обращения: 21.05.2021).
53.ГОСТ Р ИСО 9241-303-2012. - URL:
https://docs.cntd.ru/document/1200103133 (дата обращения: 21.05.2021).
82
ПРИЛОЖЕНИЕ А
def do_tb():
global fio
path = os.path.dirname(os.path.abspath(__file__)) db_15 = os.path.join(path, 'diacompanion.db') model = os.path.join(path, 'model.model')
con = sqlite3.connect(db_15) cur = con.cursor()
cur.execute('''SELECT date,time,type,
food,libra,carbo,prot,
fat,energy,micr,water,mds,kr,pv,ok,
zola,na,k,ca,mg,p,fe,a,kar,re,b1,b2, rr,c,hol,nzhk,ne,te,gi FROM favourites
WHERE user_id = ?''', (session['user_id'],))
L = cur.fetchall()
cur.execute('''SELECT date,time,min,type,empty FROM activity
WHERE user_id = ?''', (session['user_id']
,))
L1 = cur.fetchall()
cur.execute('''SELECT date,time,hour FROM sleep
WHERE user_id =?''', (session['user_id']
,))
L2 = cur.fetchall() cur.execute('''SELECT DISTINCT date FROM
favourites WHERE user_id = ?''', (sessio
n['user_id '],))
date = cur.fetchall()
cur.execute("""SELECT DISTINCT date FROM full_days WHERE id
= ?""", (session["user_id"],))
full_days = cur.fetchall() cur.execute("""SELECT*FROM deleted WHERE id = ?""",
(session["user_id"],))
deleted = cur.fetchall()
cur.execute("""SELECT date,time,type,BG0,gi,carbo,prot,kr FR
OM favouri tes
WHERE user_id = ?""", (session["user_id"] ,))
tb = cur.fetchall()
cur.execute('''SELECT username1 FROM user WHERE id = ?''', (session['user_id'],))
fio = cur.fetchall()
cur.execute('''SELECT BMI FROM user WHERE id = ?''', (session['user_id'],))
BMI0 = cur.fetchall() BMI0 = BMI0[0][0] con.close()
83
food_weight = pd.DataFrame(L, columns=['Дата', 'Время', 'При ем пищи', 'Продукт', 'Масса, гр
',
'Углеводы, гр', 'Белки, гр', 'Жиры, г р', 'ККал',
'Микроэлементы', 'Вод а, в г', 'МДС, в г',
'Крахмал, в г', 'Пищ вол, в г', 'Орган кислота, в г', 'Зола, в г',
'Натрий, в мг', 'Кали й, в мг', 'Кальций, в мг',
'Магний, в мг', 'Фосф ор, в мг', 'Железо, в мг', 'Ретинол, в мкг', 'Каротин, в мкг', 'Ретин экв, в мкг', 'Тиамин, в мг', 'Рибофлавин, в мг', 'Ниацин, в мг',
'Аскорб кисл, в мг', 'Холестерин, в мг', 'НЖК, в г', 'Ниационвый эквивален т, в мг', 'Токоферол эквивалент , в мг', 'Гликемический индекс
'])
list_of = ['Масса, гр', 'Углеводы, гр', 'Белки, гр', 'Жиры, гр',
'ККал', 'Микроэлементы', 'Вода, в г', 'МДС, в г', 'Крахмал, в г', 'Пищ вол, в г', 'Орган кислота, в г', 'Зола, в г',
'Натрий, в мг', 'Калий, в мг', 'Кальций, в мг', 'Магний, в мг', 'Фосфор, в мг', 'Железо, в мг', 'Ретинол, в мкг', 'Каротин, в мкг', 'Ретин экв, в мкг', 'Тиамин, в мг', 'Рибофлавин, в мг', 'Ниацин, в мг', 'Аскорб кисл, в мг', 'Холестерин, в мг', 'НЖК, в г',
84
'Ниационвый эквивалент, в мг', 'Токоферол эквивалент, в мг', 'Гликемический индекс']
for name1 in list_of:
for i in range(len(food_weight[name1])): food_weight[name1][i] = \
food_weight[name1][i].replace('.', ',') + '\t'
a = \ food_weight.groupby(
['Дата', 'Время',
'Прием пищи']).agg({
"Продукт": lambda tags: '\n'.join(tags), "Масса, гр": lambda tags: '\n'.join(tags), "Углеводы, гр": lambda tags: '\n'.join(tags),
"Белки, гр": lambda tags: '\n'.join(tags), "Жиры, гр": lambda tags: '\n'.join(tags), "ККал": lambda tags: '\n'.join(tags), "Микроэлементы": lambda tags: '\n'.join(tags),
"Вода, в г": lambda tags: '\n'.join(tags), "МДС, в г": lambda tags: '\n'.join(tags), "Крахмал, в г": lambda tags: '\n'.join(tags),
"Пищ вол, в г": lambda tags: '\n'.join(tags),
"Орган кислота, в г": lambda tags: '\n'.join(tags),
"Зола, в г": lambda tags: '\n'.join(tags),
"Натрий, в мг": lambda tags: '\n'.join(tags),
"Калий, в мг": lambda tags: '\n'.join(tags),
"Кальций, в мг": lambda tags: '\n'.join(tags),
"Магний, в мг": lambda tags: '\n'.join(tags),
"Фосфор, в мг": lambda tags: '\n'.join(tags),
"Железо, в мг": lambda tags: '\n'.join(tags),
"Ретинол, в мкг": lambda tags: '\n'.join(tags),
"Каротин, в мкг": lambda tags: '\n'.join(tags),
"Ретин экв, в мкг": lambda tags: '\n'.join(tags),
85
"Тиамин, в мг": lambda tags: '\n'.join(tags),
"Рибофлавин, в мг": lambda tags: '\n'.join(tags),
"Ниацин, в мг": lambda tags: '\n'.join(tags),
"Аскорб кисл, в мг": lambda tags: '\n'.join(tags),
"Холестерин, в мг": lambda tags: '\n'.join(tags),
"НЖК, в г": lambda tags: '\n'.join(tags),
"Ниационвый эквивалент, в мг": lambda tags: '\n'.join(tags),
"Токоферол эквивалент, в мг": lambda tags: '\n'.join(tags),
"Гликемический индекс": lambda tags: '\n'.join(tags)}).reset_index()
a["Дата1"] = \
pd.to_datetime(a['Дата'], format='%d.%m.%Y') a = a.sort_values(by="Дата1")
a = a.drop(["Дата1"], axis=1)
for i1 in range(len(a['Продукт'])): row = a['Продукт'][i1].split('\n') for i in range(len(row)):
row[i] = f'{i + 1}. ' + row[i] row = '\n'.join(row) a['Продукт'][i1] = row
if len(a['Продукт']) == 0:
a = pd.DataFrame({'Дата': [''], 'Время': [''], 'Прием пи щи': [''],
'Продукт': [''], 'Масса, гр': [''], 'Углеводы, гр': [''
],
'Белки, гр': [''], 'Жиры, гр': [''], 'ККал': [''], 'Микроэлементы': [''],
'Вода, в г': [''], 'МДС, в г': [''],
'Крахмал, в г': [''], 'Пищ вол, в г': [''],
'Орган кислота, в г': [''], 'Зола, в г': [''], 'Натрий, в мг': [''
],
'Калий, в мг': [''], 'Кальций, в мг': [''],
'Магний, в мг': [''], 'Фосфор, в мг': [''],
'Железо, в мг': [''], 'Ретинол, в мкг'
: [''],
86
'Каротин, в мкг': [''], 'Ретин экв, в мкг': [''], 'Тиамин, в мг': [''],
'Рибофлавин, в мг': [''], 'Ниацин, в м г': [''],
'Аскорб кисл, в мг': [''], 'Холестерин, в мг': [''], 'НЖК, в г':
[''],
'Ниациновый эквивалент, в мг': [''], 'Токоферол эквивалент, в мг': [''], 'Гликемический индекс': ['']})
activity1 = pd.DataFrame(L1, columns=['Дата', 'Время',
'Длительность, мин.', 'Тип нагрузки', 'Пусто е'])
activity2 = activity1.groupby(['Дата']).agg({ 'Время': lambda tags: '\n'.join(tags),
'Длительность, мин.': lambda tags: '\n'.join(tags), 'Тип нагрузки': lambda tags: '\n'.join(tags), 'Пустое': lambda tags: '\n'.join(tags)})
sleep1 = pd.DataFrame(L2, columns=['Дата','Время','Длительно сть, ч.'])
sleep2 = \ sleep1.groupby(
['Дата']).agg({'Время': lambda tags: '\n'.join(tags)
,
'Длительность, ч.': lambda tags: '\n'.j oin(tag)})
luck = pd.merge(left=activity2, right=sleep2, on="Дата", how='outer')
luck["Дата1"] = pd.to_datetime(luck.index, format='%d.%m.%Y'
)
luck = luck.sort_values(by="Дата1")
if len(luck.index) > 0: start1 = luck.index[0]
end1 = luck.index[len(luck.index) - 1]
start1 = datetime.datetime.strptime(start1, '%d.%m.%Y') end1 = datetime.datetime.strptime(end1, '%d.%m.%Y') start1 = start1.strftime('%m/%d/%Y')
end1 = end1.strftime('%m/%d/%Y')
luck = luck.drop(["Дата1"], axis=1)
ranges = pd.date_range(start=start1, end=end1) ranges1 = ranges.to_pydatetime()
87
new_ranges = []
for i in range(len(ranges1)): new_ranges.append(ranges1[i].strftime('%d.%m.%Y'))
luck = luck.reindex(new_ranges) else:
luck = luck.drop(["Дата1"], axis=1)
full_days1 = pd.DataFrame(full_days, columns=['Дата']) full_days1['Дата1'] = pd.to_datetime(full_days1['Дата'],
format='%d.%m.%Y') full_days1 = full_days1.sort_values(by='Дата1') full_days1 = full_days1.drop(['Дата1'], axis=1)
delet_ed = pd.DataFrame(deleted, columns=['id', 'Дата', 'Вре мя', 'Тип,
'Подробности'])
delet_ed = delet_ed.drop(['id'], axis=1)
delet_ed['Дата1'] = pd.to_datetime(delet_ed['Дата'], format= '%d.%m.%Y)
delet_ed = delet_ed.sort_values(by='Дата1') delet_ed = delet_ed.drop(['Дата1'], axis=1)
tb = pd.DataFrame(tb, columns=['date', 'time', 'types_food_n ', 'BG0', 'GI', 'carbo', 'prot', 'kr'])
tb['GI'] = pd.to_numeric(tb['GI'], downcast='float') tb['carbo'] = pd.to_numeric(tb['carbo'], downcast='float') tb['prot'] = pd.to_numeric(tb['prot'], downcast='float') tb['kr'] = pd.to_numeric(tb['kr'], downcast='float') tb['BG0'] = pd.to_numeric(tb['BG0'], downcast='float')
tb = tb.groupby(['date', 'time', 'types_food_n', 'BG0'], as_index=False).sum()
tb['GL'] = tb['GI']*tb['carbo']/100 tb['DateTime'] = tb['date'] + ' ' + tb['time']
tb['DateTime'] = pd.to_datetime(tb['DateTime'], format='%d.% m.%Y %H:%)
tb = tb.drop(['date', 'time', 'GI'], axis=1) prot = list()
for i in range(len(tb['DateTime'])): start_date = tb['DateTime'][i] mask = (tb['DateTime']
<= start_date) & (tb['DateTime'] >= (start_date
- pd.Timedelta(value=6, un it='h')))
prot_b6h = tb.loc[mask]['prot'].aggregate(np.sum) prot.append(prot_b6h)
tb.insert(7, 'prot_b6h', prot, True)
88
tb = tb.drop(['prot'], axis=1) BMI = list()
for i in range(len(tb['DateTime'])): BMI.append(BMI0)
if tb['types_food_n'][i] == 'Завтрак': tb['types_food_n'][i] = 1
elif tb['types_food_n'][i] == 'Обед': tb['types_food_n'][i] = 2
elif tb['types_food_n'][i] == 'Ужин': tb['types_food_n'][i] = 3
else:
tb['types_food_n'][i] = 4 tb.insert(7, 'BMI', BMI, True)
tb = tb.reindex(columns=["DateTime", "BG0", "GL", "carbo", " prot_b6h",
"types_food_n", "kr", "BMI"])
predict = list()
for i in range(len(tb['DateTime'])): best_model = xgb.Booster() best_model.load_model(model) core_features = ["BG0", "gl", "carbo",
"prot_b6h", "types_food_n", "kr", "BMI"
]
X_test = [tb.iloc[i, 1:7].values.tolist()]
predicted = best_model.predict(xgb.DMatrix(np.array(X_te st)))
predict.append(predicted[0])
tb.insert(3, 'Предсказанный сахар после', predict, True)
date3 = list() time3 = list()
tb['Прием пищи'] = tb['types_food_n'] for i in range(len(tb['DateTime'])):
date3.append(tb['DateTime'][i].strftime('%d.%m.%Y')) time3.append(tb['DateTime'][i].strftime('%H:%m'))
if tb['Прием пищи'][i] == 1: tb['Прием пищи'][i] = 'Завтрак'
elif tb['Прием пищи'][i] == 2: tb['Прием пищи'][i] = 'Обед'
elif tb['Прием пищи'][i] == 3: tb['Прием пищи'][i] = 'Ужин'
else:
tb['Прием пищи'][i] = 'Перекус' tb.insert(0, 'Дата', date3, True) tb.insert(1, 'Время', time3, True)
tb = tb.drop(['DateTime'], axis=1)
tb = tb.drop(['types_food_n'], axis=1)
tb['Сахар до'] = tb['BG0']
tb = tb.drop(['BG0'], axis=1) tb['Гликемическая нагрузка'] = tb['GL']
89
tb = tb.drop(['GL'], axis=1)
tb = tb.drop(['carbo'], axis=1)
tb = tb.drop(['prot_b6h'], axis=1) tb = tb.drop(['kr'], axis=1)
tb = tb.drop(["BMI"], axis=1)
tb = tb[['Дата', 'Время', 'Прием пищи', 'Сахар до', 'Предсказанный сахар после', 'Гликемическая нагрузк а']]
dirname = os.path.dirname(__file__)
filename = os.path.join(dirname, '%s.xlsx' % session["userna me"])
writer = pd.ExcelWriter(filename, engine='xlsxwriter',
options={'strings_to_numbers': True, 'default_date_format': 'dd/
mm/yy'}) a.to_excel(writer, sheet_name='Приемы пищи', startrow=0, sta
rtcol=0) tb.to_excel(writer, sheet_name='Предсказание сахара',
startrow=0, startcol=0)
luck.to_excel(writer, sheet_name='Физическая нагрузка и сон'
,
startrow=0, startcol=1) full_days1.to_excel(writer, sheet_name='Список полных дней',
startrow=2, startcol=-1) delet_ed.to_excel(writer, sheet_name='Удаленные записи',
startrow=2, startcol=-1, header=False)
writer.close()
90