|
import streamlit as st
|
|
import pandas as pd
|
|
from Utility.data_loader import (
|
|
load_train_series, load_train_events,
|
|
load_sample_submission, load_test_series
|
|
)
|
|
|
|
st.set_page_config(page_title="Sleep Detection", layout="wide")
|
|
st.title("Sleep Detection")
|
|
|
|
st.markdown("""
|
|
### π About the App
|
|
|
|
This **Sleep Detection App** uses sensor data collected over time to predict sleep-related events such as *onset* or *wake-up*. The application allows users to analyze sleep patterns based on movement data and provides predictions using a machine learning model trained on labeled sensor events.
|
|
|
|
---
|
|
|
|
### π§Ύ Data Description
|
|
|
|
Each row in the dataset represents a time-stamped sensor reading with the following key columns:
|
|
|
|
- **series_id**: Unique identifier for a sleep session or user.
|
|
- **step**: Sequence number of the reading.
|
|
- **sensor_timestamp**: The time when the sensor reading was recorded.
|
|
- **anglez**: Z-axis body orientation angle (used as a feature).
|
|
- **enmo**: Euclidean Norm Minus One β a movement magnitude metric (used as a feature).
|
|
- **night**: Night identifier (used to separate sessions).
|
|
- **event**: The sleep-related label (e.g., `onset`, `wake`) indicating the event type.
|
|
- **event_timestamp**: Timestamp of the actual sleep event (used to calculate sleep duration).
|
|
|
|
---
|
|
|
|
### π€ App Capabilities
|
|
|
|
- Displays raw sensor data and sleep event counts.
|
|
- Trains an ML model (XGBoost) using movement features (`anglez`, `enmo`) to predict sleep events.
|
|
- Allows real-time prediction of sleep events based on user input.
|
|
- Displays evaluation metrics: **Accuracy**, **F1 Score**, **ROC AUC Score**.
|
|
|
|
---
|
|
""")
|
|
|
|
|
|
|
|
|
|
st.header("Select Dataset to View")
|
|
option = st.radio(
|
|
"Choose a dataset:",
|
|
("Train Events","Train Series", "Test Series", "Summary")
|
|
)
|
|
|
|
|
|
df = None
|
|
|
|
if option == "Train Events":
|
|
df = load_train_events()
|
|
st.subheader("Train Events")
|
|
st.dataframe(df.head())
|
|
|
|
elif option == "Sample Submission":
|
|
df = load_sample_submission()
|
|
st.subheader("Sample Submission")
|
|
st.dataframe(df.head())
|
|
|
|
elif option == "Train Series":
|
|
df = load_train_series()
|
|
st.subheader("Train Series (1M rows sample)")
|
|
st.dataframe(df.head())
|
|
|
|
elif option == "Test Series":
|
|
df = load_test_series()
|
|
st.subheader("Test Series")
|
|
st.dataframe(df.head())
|
|
|
|
elif option == "Summary":
|
|
st.subheader("Summary of All Key Datasets")
|
|
|
|
with st.expander("π Train Events"):
|
|
df_events = load_train_events()
|
|
st.dataframe(df_events.head())
|
|
st.write("Summary:")
|
|
st.dataframe(df_events.describe(include="all"))
|
|
|
|
with st.expander("π Sample Submission"):
|
|
df_sample = load_sample_submission()
|
|
st.dataframe(df_sample.head())
|
|
st.write("Summary:")
|
|
st.dataframe(df_sample.describe(include="all"))
|
|
|
|
with st.expander("π Train Series"):
|
|
df_series = load_train_series()
|
|
st.dataframe(df_series.head())
|
|
st.write("Summary:")
|
|
st.dataframe(df_series.describe())
|
|
|
|
with st.expander("π Test Series"):
|
|
df_test = load_test_series()
|
|
st.dataframe(df_test.head())
|
|
st.write("Summary:")
|
|
st.dataframe(df_test.describe())
|
|
|
|
|