Spaces:
Sleeping
Sleeping
File size: 4,248 Bytes
7ea2c78 740b9c1 8089eef 740b9c1 4b1dd4e e1e728b 4b1dd4e e1e728b 7ea2c78 4b1dd4e 7ea2c78 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | from pathlib import Path
import pickle
import streamlit as st
import datetime
from PIL import Image
import pandas as pd
from datetime import timedelta
import time
import os
# Принудительная настройка для Hugging Face
if 'HUGGINGFACE_SPACE' in os.environ:
st.set_page_config(
page_title="My App",
layout="wide"
)
else:
st.set_page_config(
page_title="My App",
layout="wide"
)
st.title("🚀 Тестовый заголовок")
st.success("Приложение работает!")
# ====================== главная страница ============================
# параметры главной страницы
# https://docs.streamlit.io/library/api-reference/utilities/st.set_page_config
# st.set_page_config(
# layout="wide",
# initial_sidebar_state="auto",
# page_title="M-cycle",
# page_icon="🧊",
# )
# ----------- функции -------------------------------------
# функция для загрузки картинки с диска
# кэшируем, иначе каждый раз будет загружаться заново
@st.cache_data
def load_image(image_path):
image = Image.open(image_path)
# обрезка до нужного размера с сохранением пропорций
MAX_SIZE = (600, 400)
image.thumbnail(MAX_SIZE)
return image
# функция загрузки модели
# кэшируем, иначе каждый раз будет загружаться заново
@st.cache_data
def load_model(model_path):
# загрузка сериализованной модели
with open(model_path, 'rb') as f:
model = pickle.load(f)
return model
# ------------- загрузка картинки для страницы и модели ---------
# путь до картинки
image_path = Path.cwd() / 'Dias-fertiles-de-una-mujer.jpg'
image = load_image(image_path)
# путь до модели
model_path = Path.cwd() / 'model_sar.pkl'
model_sar = load_model(model_path)
# ---------- отрисовка текста и картинки ------------------------
st.write(
"""
# Прогноз менструального цикла
Введите ваши данные и получите результат
"""
)
# отрисовка картинки на странице
st.image(image)
# ====================== боковое меню для ввода данных ===============
st.sidebar.header('Введите данные')
# словарь с названиями признаков и описанием для удобства
features_dict = {
'date_last': 'Дата последней менструации',
'pred_num': 'Прогноз (количество месяцев)',
}
# кнопки - слайдеры для ввода данных человека
date_last = st.sidebar.date_input(features_dict['date_last'], value=None)
pred_num = st.sidebar.slider(features_dict['pred_num'], min_value=1, max_value=3, value=1, step=1)
# предикт моделью входных данных, на выходе даты цикла
st_prediction = model_sar.forecast(pred_num)
st_prediction_int = st_prediction.astype(int)
pred_list = st_prediction_int.to_list()
new_list = []
for i in range(len(pred_list)):
new_list.append(pred_list[i] + sum(pred_list[:i]))
pred_cicle = pd.DataFrame(new_list, columns=['sarima_pred'])
pred_cicle['sarima_pred'] = pred_cicle['sarima_pred'].astype(str)
pred_cicle['sarima_pred'] = pred_cicle['sarima_pred'] + ' days'
pred_cicle['sarima_pred'] = pd.to_timedelta(pred_cicle['sarima_pred'])
pred_cicle['Даты цикла'] = pd.Timestamp(date_last) + pred_cicle['sarima_pred']
pred_cicle["Дни овуляции"] = pred_cicle["Даты цикла"] - timedelta(days=14)
pred_cicle['a'] = '/'
# вывести предсказание модели
st.write("## Даты начала менструального цикла")
st.write(pred_cicle[['Даты цикла', 'a']].to_string(index=False, header=False))
st.write("## Дни овуляции")
st.write(pred_cicle[['Дни овуляции', 'a']].to_string(index=False, header=False))
|