Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2021ВКР750107ИСАКОВ

.pdf
Скачиваний:
8
Добавлен:
04.09.2023
Размер:
1.84 Mб
Скачать

33.

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