sergey21000 commited on
Commit
b37c4e6
·
verified ·
1 Parent(s): 8ed6c03

Upload 4 files

Browse files
Files changed (4) hide show
  1. app.py +126 -0
  2. main_page_image.jpg +0 -0
  3. model.pkl +3 -0
  4. requirements.txt +3 -0
app.py ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pathlib import Path
2
+ import pickle
3
+
4
+ import streamlit as st
5
+ from PIL import Image
6
+ import pandas as pd
7
+
8
+
9
+ # ====================== главная страница ============================
10
+
11
+ # параметры главной страницы
12
+ # https://docs.streamlit.io/library/api-reference/utilities/st.set_page_config
13
+ st.set_page_config(
14
+ layout='wide',
15
+ initial_sidebar_state='auto',
16
+ page_title='Diabetes app',
17
+ page_icon='🧊',
18
+ )
19
+
20
+
21
+ # ----------- функции -------------------------------------
22
+
23
+ # функция для загрузки картики с диска
24
+ # кэшируем иначе каждый раз будет загружатся заново
25
+ @st.cache_data
26
+ def load_image(image_path):
27
+ image = Image.open(image_path)
28
+ return image
29
+
30
+ # функция загрузки модели
31
+ # кэшируем иначе каждый раз будет загружатся заново
32
+ @st.cache_data
33
+ def load_model(model_path):
34
+ # загрузка сериализованной модели
35
+ with open(model_path, 'rb') as f:
36
+ model = pickle.load(f)
37
+ return model
38
+
39
+
40
+ # ------------- загрузка картинки для страницы и модели ---------
41
+
42
+ # путь до картинки
43
+ image_path = 'main_page_image.jpg'
44
+ image = load_image(image_path)
45
+
46
+ # путь до модели
47
+ model_path = 'model.pkl'
48
+ diabet_model = load_model(model_path)
49
+
50
+
51
+ # ---------- отрисовка текста и картинки ------------------------
52
+ st.write(
53
+ """
54
+ ### Диагностика диабета
55
+ Введите ваши данные и получите результат
56
+ """
57
+ )
58
+
59
+ # отрисовка картинки на странице
60
+ st.image(image, width=600)
61
+
62
+
63
+ # ====================== боковое меню для ввода данных ===============
64
+
65
+ st.sidebar.header('Входные данные пользователя')
66
+
67
+ # словарь с названиями признаков на русском для отображения в приложении
68
+ features = dict(
69
+ gender='Пол',
70
+ age='Возраст',
71
+ hypertension='Гипертония',
72
+ heart_disease='Заболевание сердца',
73
+ smoking_history='История курения',
74
+ bmi='Индекс массы тела',
75
+ HbA1c_level='Гемоглобин',
76
+ blood_glucose_level='Глюкоза',
77
+ )
78
+
79
+ # словари с названиями признаков и соответствующими индексами
80
+ gender_label_to_index = {'Female': 0, 'Male': 1}
81
+ smok_label_to_index = {
82
+ 'Нет информации': 0,
83
+ 'Курю': 1,
84
+ 'Курил когда-либо': 2,
85
+ 'Не курю (курил)': 3,
86
+ 'Никогда не курил': 4,
87
+ 'Бросил курить': 5}
88
+
89
+ # кнопки - слайдеры для ввода данных человека
90
+ gender = st.sidebar.radio(features['gender'], gender_label_to_index.keys(), horizontal=True)
91
+ age = st.sidebar.slider(features['age'], min_value=11, max_value=80, value=45, step=1)
92
+ hypertension = st.sidebar.checkbox(features['hypertension'], value=False)
93
+ heart_disease = st.sidebar.checkbox(features['heart_disease'], value=False)
94
+ smoking_history = st.sidebar.radio(features['smoking_history'], smok_label_to_index.keys())
95
+ bmi = st.sidebar.slider(features['bmi'], min_value=10.0, max_value=60.0, value=30.0, step=0.1)
96
+ HbA1c_level = st.sidebar.slider(features['HbA1c_level'], min_value=3.5, max_value=9.0, value=5.5, step=0.01)
97
+ blood_glucose_level = st.sidebar.slider(features['blood_glucose_level'], min_value=80, max_value=300, value=138, step=1)
98
+
99
+
100
+ # записать входные данные в словарь и в датафрейм
101
+ data_df = pd.DataFrame([dict(
102
+ gender=gender_label_to_index[gender],
103
+ age=age,
104
+ hypertension=hypertension,
105
+ heart_disease=heart_disease,
106
+ smoking_history=smok_label_to_index[smoking_history],
107
+ bmi=bmi,
108
+ HbA1c_level=HbA1c_level,
109
+ blood_glucose_level=blood_glucose_level,
110
+ )])
111
+
112
+
113
+ # =========== вывод входных данных и предсказания модели ==========
114
+
115
+ # вывести входные данные на страницу
116
+ st.write("##### Ваши данные")
117
+ st.write(data_df)
118
+
119
+
120
+ # предикт моделью входных данных, на выходе вероятность диабета
121
+ diabetes_prob = diabet_model.predict_proba(data_df.values)[0, 1]
122
+
123
+
124
+ # вывести предсказание модели
125
+ st.write("##### Вероятность диабета")
126
+ st.write(f'{diabetes_prob:.2f}')
main_page_image.jpg ADDED
model.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3f5615cf06b64d372d9b185bb4f2d7d05727902de64e1f3820c586d676d76ec5
3
+ size 22235185
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ scikit-learn>=1.3.0
2
+ Pillow
3
+ streamlit