The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
The goal of asleep is to wrap up the https://github.com/OxWearables/asleep algorithm.
asleep Python
ModuleSee https://github.com/OxWearables/asleep?tab=readme-ov-file#install
for how to install the asleep python module.
In R, you can do this via:
envname = "asleep"
reticulate::conda_create(envname = envname,
python_version = "3.8")
reticulate::use_condaenv(envname)
reticulate::py_install(c("asleep", "argparse", "numpy", "pandas"),
envname = envname,
method = "conda",
python_version = "3.8",
pip = TRUE)Once this is finished, you should be able to check this via:
envname = "asleep"
reticulate::use_condaenv(envname)
asleep::have_asleep()asleep (file)The main function is asleep::asleep, which takes can
take in a file directly:
library(asleep)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(ggplot2)
#> Warning: package 'ggplot2' was built under R version 4.4.1
library(tidyr)
file = system.file("extdata/example_sleep.csv.gz", package = "asleep")
if (asleep_check()) {
out = asleep(file = file)
}
#> Checking Data
#> Parsing raw data
#> Lowpass filter...Skipping lowpass filter: data sample rate 30 too low for cutoff rate 20
#> Lowpass filter... Done! (0.00s)
#> Gravity calibration...Gravity calibration... Done! (0.08s)
#> Resampling...Resampling... Done! (0.19s)
#> {'WearTime(days)': 0.1666662808564815, 'NonwearTime(days)': 0.0, 'NumNonwearEpisodes': 0}
#> Time shift applied: 0 hours
#> Raw data file saved to: /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/raw.csv
#> Info data file saved to: /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/info.json
#> time x y z non_wear
#> 0 2000-01-04 20:00:00.000000000 -0.704000 0.413000 -0.540000 False
#> 1 2000-01-04 20:00:00.033333333 -0.720795 0.419000 -0.561667 False
#> 2 2000-01-04 20:00:00.066666666 -0.665154 0.428846 -0.578590 False
#> 3 2000-01-04 20:00:00.100000000 -0.698000 0.434000 -0.525000 False
#> 4 2000-01-04 20:00:00.133333333 -0.674051 0.417308 -0.575385 False
#> Transforming data for model input
#> Data2model file saved to: /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/data2model.npy
#> Times file saved to: /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/times.npy
#> Non-wear file saved to: /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/non_wear.npy
#> Data shape for data2model: (480, 3, 900)
#> Data shape for times: (480,)
#> Data shape for nonwear: (480,)
#> Detecting sleep windows
#> Downloading https://github.com/OxWearables/asleep/releases/download/0.4.12/ssl.joblib.lzma...
#> prediction set sample count: 480
#> Using local /Users/johnmuschelli/Library/Caches/org.R-project.R/R/reticulate/uv/cache/archive-v0/WkwZPbhzsuDleh3_sED9q/lib/python3.8/site-packages/asleep/torch_hub_cache/OxWearables_ssl-wearables_v1.0.0
#> (480,)
#> (array([0., 2., 3.]), array([ 79, 45, 356]))
#> Running SleepNet
#> pytorch device defaulting to 'cpu'
#> setting up cnn
#> access remote repo
#> 1
#> Total sample count : 355
#> Save predictions to /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/y_pred.npy
#> Save prediction probs to /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/pred_prob.npy
#> Time used 62.39296007156372
#> Mapping SleepNet predictions back to original time series
#> Generating predictions dataframe
#> Generating sleep block df and indicate the longest block per day
#> Generating daily summary statistics
#> Summary saved to: /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/summary.json
#> Creating outputsLet’s see inside the output, which is a list of values, namely a
data.frame of outputs:
names(out)
#> [1] "predictions" "sleep_windows" "sleep_windows_long"
#> [4] "day_summary" "summary" "paths"
#> [7] "output_data" "output_model" "output_windows"
#> [10] "output_sleep"
str(out)
#> List of 10
#> $ predictions :'data.frame': 480 obs. of 4 variables:
#> ..$ time : POSIXct[1:480], format: "2000-01-04 15:00:00" "2000-01-04 15:00:30" ...
#> ..$ sleep_wake : chr [1:480] "wake" "wake" "wake" "wake" ...
#> ..$ sleep_stage: chr [1:480] "wake" "wake" "wake" "wake" ...
#> ..$ raw_label : num [1:480] 0 0 0 0 0 0 0 0 0 0 ...
#> $ sleep_windows :'data.frame': 1 obs. of 6 variables:
#> ..$ start : POSIXct[1:1], format: "2000-01-04 16:02:00"
#> ..$ end : POSIXct[1:1], format: "2000-01-04 18:59:30"
#> ..$ interval_start : POSIXct[1:1], format: "2000-01-04 07:00:00"
#> ..$ interval_end : POSIXct[1:1], format: "2000-01-05 06:59:59"
#> ..$ wear_duration_H : num 4
#> ..$ is_longest_block: logi TRUE
#> ..- attr(*, "pandas.index")=RangeIndex(start=0, stop=1, step=1)
#> $ sleep_windows_long:'data.frame': 1 obs. of 2 variables:
#> ..$ start: POSIXct[1:1], format: "2000-01-04 16:02:00"
#> ..$ end : POSIXct[1:1], format: "2000-01-04 18:59:30"
#> ..- attr(*, "pandas.index")=RangeIndex(start=0, stop=1, step=1)
#> $ day_summary :'data.frame': 1 obs. of 183 variables:
#> ..$ start_day : chr "2000-01-04"
#> ..$ day_of_week : num 1
#> ..$ wear_duration_H : num 4
#> ..$ is_weekend : logi FALSE
#> ..$ sol_min : num 9
#> ..$ tst_min : num 156
#> ..$ waso_min : num 14
#> ..$ reml_min : num 31.5
#> ..$ se_perc : num 0.874
#> ..$ wake_min : num 22.5
#> ..$ n1_min : num 26.5
#> ..$ n2_min : num 50
#> ..$ n3_min : num 75
#> ..$ nrem_min : num 152
#> ..$ rem_min : num 4
#> ..$ 0_hour_wake_min : num 0
#> ..$ 0_hour_n1_min : num 0
#> ..$ 0_hour_n2_min : num 0
#> ..$ 0_hour_n3_min : num 0
#> ..$ 0_hour_nrem_min : num 0
#> ..$ 0_hour_rem_min : num 0
#> ..$ 0_hour_tst_min : num 0
#> ..$ 1_hour_wake_min : num 0
#> ..$ 1_hour_n1_min : num 0
#> ..$ 1_hour_n2_min : num 0
#> ..$ 1_hour_n3_min : num 0
#> ..$ 1_hour_nrem_min : num 0
#> ..$ 1_hour_rem_min : num 0
#> ..$ 1_hour_tst_min : num 0
#> ..$ 2_hour_wake_min : num 0
#> ..$ 2_hour_n1_min : num 0
#> ..$ 2_hour_n2_min : num 0
#> ..$ 2_hour_n3_min : num 0
#> ..$ 2_hour_nrem_min : num 0
#> ..$ 2_hour_rem_min : num 0
#> ..$ 2_hour_tst_min : num 0
#> ..$ 3_hour_wake_min : num 0
#> ..$ 3_hour_n1_min : num 0
#> ..$ 3_hour_n2_min : num 0
#> ..$ 3_hour_n3_min : num 0
#> ..$ 3_hour_nrem_min : num 0
#> ..$ 3_hour_rem_min : num 0
#> ..$ 3_hour_tst_min : num 0
#> ..$ 4_hour_wake_min : num 0
#> ..$ 4_hour_n1_min : num 0
#> ..$ 4_hour_n2_min : num 0
#> ..$ 4_hour_n3_min : num 0
#> ..$ 4_hour_nrem_min : num 0
#> ..$ 4_hour_rem_min : num 0
#> ..$ 4_hour_tst_min : num 0
#> ..$ 5_hour_wake_min : num 0
#> ..$ 5_hour_n1_min : num 0
#> ..$ 5_hour_n2_min : num 0
#> ..$ 5_hour_n3_min : num 0
#> ..$ 5_hour_nrem_min : num 0
#> ..$ 5_hour_rem_min : num 0
#> ..$ 5_hour_tst_min : num 0
#> ..$ 6_hour_wake_min : num 0
#> ..$ 6_hour_n1_min : num 0
#> ..$ 6_hour_n2_min : num 0
#> ..$ 6_hour_n3_min : num 0
#> ..$ 6_hour_nrem_min : num 0
#> ..$ 6_hour_rem_min : num 0
#> ..$ 6_hour_tst_min : num 0
#> ..$ 7_hour_wake_min : num 0
#> ..$ 7_hour_n1_min : num 0
#> ..$ 7_hour_n2_min : num 0
#> ..$ 7_hour_n3_min : num 0
#> ..$ 7_hour_nrem_min : num 0
#> ..$ 7_hour_rem_min : num 0
#> ..$ 7_hour_tst_min : num 0
#> ..$ 8_hour_wake_min : num 0
#> ..$ 8_hour_n1_min : num 0
#> ..$ 8_hour_n2_min : num 0
#> ..$ 8_hour_n3_min : num 0
#> ..$ 8_hour_nrem_min : num 0
#> ..$ 8_hour_rem_min : num 0
#> ..$ 8_hour_tst_min : num 0
#> ..$ 9_hour_wake_min : num 0
#> ..$ 9_hour_n1_min : num 0
#> ..$ 9_hour_n2_min : num 0
#> ..$ 9_hour_n3_min : num 0
#> ..$ 9_hour_nrem_min : num 0
#> ..$ 9_hour_rem_min : num 0
#> ..$ 9_hour_tst_min : num 0
#> ..$ 10_hour_wake_min: num 0
#> ..$ 10_hour_n1_min : num 0
#> ..$ 10_hour_n2_min : num 0
#> ..$ 10_hour_n3_min : num 0
#> ..$ 10_hour_nrem_min: num 0
#> ..$ 10_hour_rem_min : num 0
#> ..$ 10_hour_tst_min : num 0
#> ..$ 11_hour_wake_min: num 0
#> ..$ 11_hour_n1_min : num 0
#> ..$ 11_hour_n2_min : num 0
#> ..$ 11_hour_n3_min : num 0
#> ..$ 11_hour_nrem_min: num 0
#> ..$ 11_hour_rem_min : num 0
#> ..$ 11_hour_tst_min : num 0
#> .. [list output truncated]
#> ..- attr(*, "pandas.index")=RangeIndex(start=0, stop=1, step=1)
#> $ summary : NULL
#> $ paths :List of 7
#> ..$ raw_data_path : chr "/private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/raw.csv"
#> ..$ info_data_path : chr "/private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/info.json"
#> ..$ data2model_path : chr "/private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/data2model.npy"
#> ..$ times_path : chr "/private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/times.npy"
#> ..$ non_wear_path : chr "/private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/non_wear.npy"
#> ..$ day_summary_path: chr "/private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/day_summary.csv"
#> ..$ output_json_path: chr "/private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff11afb505d/summary.json"
#> $ output_data :List of 2
#> ..$ data:'data.frame': 432000 obs. of 5 variables:
#> .. ..$ time : POSIXct[1:432000], format: "2000-01-04 15:00:00.000" "2000-01-04 15:00:00.033" ...
#> .. ..$ x : num [1:432000] -0.704 -0.721 -0.665 -0.698 -0.674 ...
#> .. ..$ y : num [1:432000] 0.413 0.419 0.429 0.434 0.417 ...
#> .. ..$ z : num [1:432000] -0.54 -0.562 -0.579 -0.525 -0.575 ...
#> .. ..$ non_wear: logi [1:432000] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> .. ..- attr(*, "pandas.index")=RangeIndex(start=0, stop=432000, step=1)
#> ..$ info:List of 17
#> .. ..$ Filename : chr "/Library/Frameworks/R.framework/Versions/4.4-x86_64/Resources/library/asleep/extdata/example_sleep.csv.gz"
#> .. ..$ Device : chr ".csv"
#> .. ..$ Filesize(MB) : num 3
#> .. ..$ SampleRate : int 30
#> .. ..$ LowpassOK : int 0
#> .. ..$ CalibNumSamples : int 1061
#> .. ..$ CalibErrorBefore(mg) : num 15.1
#> .. ..$ CalibErrorAfter(mg) : num 15.1
#> .. ..$ CalibNumIters : int 0
#> .. ..$ CalibOK : int 0
#> .. ..$ ResampleRate : int 30
#> .. ..$ NumTicksAfterResample: int 432000
#> .. ..$ WearTime(days) : num 0.167
#> .. ..$ NonwearTime(days) : num 0
#> .. ..$ NumNonwearEpisodes : int 0
#> .. ..$ StartTime : chr "2000-01-04 20:00:00"
#> .. ..$ EndTime : chr "2000-01-04 23:59:59"
#> $ output_model :List of 3
#> ..$ data2model: num [1:480, 1:3, 1:900] -0.704 -0.689 -0.625 -0.736 -0.663 -0.83 -0.569 -0.408 0.331 0.367 ...
#> ..$ times : POSIXct[1:480], format: "2000-01-04 15:00:00" "2000-01-04 15:00:30" ...
#> ..$ non_wear : logi [1:480(1d)] FALSE FALSE FALSE FALSE FALSE FALSE ...
#> $ output_windows :List of 5
#> ..$ binary_y : num [1:480(1d)] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ all_sleep_wins_df :'data.frame': 1 obs. of 5 variables:
#> .. ..$ start : POSIXct[1:1], format: "2000-01-04 16:02:00"
#> .. ..$ end : POSIXct[1:1], format: "2000-01-04 18:59:30"
#> .. ..$ interval_start : POSIXct[1:1], format: "2000-01-04 07:00:00"
#> .. ..$ interval_end : POSIXct[1:1], format: "2000-01-05 06:59:59"
#> .. ..$ wear_duration_H: num 4
#> .. ..- attr(*, "pandas.index")=RangeIndex(start=0, stop=1, step=1)
#> ..$ sleep_wins_long_per_day_df:'data.frame': 1 obs. of 2 variables:
#> .. ..$ start: POSIXct[1:1], format: "2000-01-04 16:02:00"
#> .. ..$ end : POSIXct[1:1], format: "2000-01-04 18:59:30"
#> .. ..- attr(*, "pandas.index")=RangeIndex(start=0, stop=1, step=1)
#> ..$ master_acc : num [1:355, 1:3, 1:900] 0.683 0.009 0.009 0.009 0.009 0.009 0.009 0.009 0.009 0.009 ...
#> ..$ master_npids : num [1:355(1d)] 0 0 0 0 0 0 0 0 0 0 ...
#> $ output_sleep :List of 2
#> ..$ y_pred : num [1:355(1d)] 0 0 0 0 0 0 0 0 0 0 ...
#> ..$ test_pids: num [1:355(1d)] 0 0 0 0 0 0 0 0 0 0 ...
head(out$predictions)
#> time sleep_wake sleep_stage raw_label
#> 1 2000-01-04 15:00:00 wake wake 0
#> 2 2000-01-04 15:00:30 wake wake 0
#> 3 2000-01-04 15:01:00 wake wake 0
#> 4 2000-01-04 15:01:30 wake wake 0
#> 5 2000-01-04 15:02:00 wake wake 0
#> 6 2000-01-04 15:02:30 wake wake 0
head(out$summary)
#> NULL
head(out$day_summary)
#> start_day day_of_week wear_duration_H is_weekend sol_min tst_min waso_min
#> 1 2000-01-04 1 4 FALSE 9 155.5 14
#> reml_min se_perc wake_min n1_min n2_min n3_min nrem_min rem_min
#> 1 31.5 0.8735955 22.5 26.5 50 75 151.5 4
#> 0_hour_wake_min 0_hour_n1_min 0_hour_n2_min 0_hour_n3_min 0_hour_nrem_min
#> 1 0 0 0 0 0
#> 0_hour_rem_min 0_hour_tst_min 1_hour_wake_min 1_hour_n1_min 1_hour_n2_min
#> 1 0 0 0 0 0
#> 1_hour_n3_min 1_hour_nrem_min 1_hour_rem_min 1_hour_tst_min 2_hour_wake_min
#> 1 0 0 0 0 0
#> 2_hour_n1_min 2_hour_n2_min 2_hour_n3_min 2_hour_nrem_min 2_hour_rem_min
#> 1 0 0 0 0 0
#> 2_hour_tst_min 3_hour_wake_min 3_hour_n1_min 3_hour_n2_min 3_hour_n3_min
#> 1 0 0 0 0 0
#> 3_hour_nrem_min 3_hour_rem_min 3_hour_tst_min 4_hour_wake_min 4_hour_n1_min
#> 1 0 0 0 0 0
#> 4_hour_n2_min 4_hour_n3_min 4_hour_nrem_min 4_hour_rem_min 4_hour_tst_min
#> 1 0 0 0 0 0
#> 5_hour_wake_min 5_hour_n1_min 5_hour_n2_min 5_hour_n3_min 5_hour_nrem_min
#> 1 0 0 0 0 0
#> 5_hour_rem_min 5_hour_tst_min 6_hour_wake_min 6_hour_n1_min 6_hour_n2_min
#> 1 0 0 0 0 0
#> 6_hour_n3_min 6_hour_nrem_min 6_hour_rem_min 6_hour_tst_min 7_hour_wake_min
#> 1 0 0 0 0 0
#> 7_hour_n1_min 7_hour_n2_min 7_hour_n3_min 7_hour_nrem_min 7_hour_rem_min
#> 1 0 0 0 0 0
#> 7_hour_tst_min 8_hour_wake_min 8_hour_n1_min 8_hour_n2_min 8_hour_n3_min
#> 1 0 0 0 0 0
#> 8_hour_nrem_min 8_hour_rem_min 8_hour_tst_min 9_hour_wake_min 9_hour_n1_min
#> 1 0 0 0 0 0
#> 9_hour_n2_min 9_hour_n3_min 9_hour_nrem_min 9_hour_rem_min 9_hour_tst_min
#> 1 0 0 0 0 0
#> 10_hour_wake_min 10_hour_n1_min 10_hour_n2_min 10_hour_n3_min
#> 1 0 0 0 0
#> 10_hour_nrem_min 10_hour_rem_min 10_hour_tst_min 11_hour_wake_min
#> 1 0 0 0 0
#> 11_hour_n1_min 11_hour_n2_min 11_hour_n3_min 11_hour_nrem_min 11_hour_rem_min
#> 1 0 0 0 0 0
#> 11_hour_tst_min 12_hour_wake_min 12_hour_n1_min 12_hour_n2_min 12_hour_n3_min
#> 1 0 0 0 0 0
#> 12_hour_nrem_min 12_hour_rem_min 12_hour_tst_min 13_hour_wake_min
#> 1 0 0 0 0
#> 13_hour_n1_min 13_hour_n2_min 13_hour_n3_min 13_hour_nrem_min 13_hour_rem_min
#> 1 0 0 0 0 0
#> 13_hour_tst_min 14_hour_wake_min 14_hour_n1_min 14_hour_n2_min 14_hour_n3_min
#> 1 0 0 0 0 0
#> 14_hour_nrem_min 14_hour_rem_min 14_hour_tst_min 15_hour_wake_min
#> 1 0 0 0 0
#> 15_hour_n1_min 15_hour_n2_min 15_hour_n3_min 15_hour_nrem_min 15_hour_rem_min
#> 1 0 0 0 0 0
#> 15_hour_tst_min 16_hour_wake_min 16_hour_n1_min 16_hour_n2_min 16_hour_n3_min
#> 1 0 0 0 0 0
#> 16_hour_nrem_min 16_hour_rem_min 16_hour_tst_min 17_hour_wake_min
#> 1 0 0 0 0
#> 17_hour_n1_min 17_hour_n2_min 17_hour_n3_min 17_hour_nrem_min 17_hour_rem_min
#> 1 0 0 0 0 0
#> 17_hour_tst_min 18_hour_wake_min 18_hour_n1_min 18_hour_n2_min 18_hour_n3_min
#> 1 0 0 0 0 0
#> 18_hour_nrem_min 18_hour_rem_min 18_hour_tst_min 19_hour_wake_min
#> 1 0 0 0 0
#> 19_hour_n1_min 19_hour_n2_min 19_hour_n3_min 19_hour_nrem_min 19_hour_rem_min
#> 1 0 0 0 0 0
#> 19_hour_tst_min 20_hour_wake_min 20_hour_n1_min 20_hour_n2_min 20_hour_n3_min
#> 1 0 0 0 0 0
#> 20_hour_nrem_min 20_hour_rem_min 20_hour_tst_min 21_hour_wake_min
#> 1 0 0 0 11
#> 21_hour_n1_min 21_hour_n2_min 21_hour_n3_min 21_hour_nrem_min 21_hour_rem_min
#> 1 12.5 24.5 8.5 45.5 1.5
#> 21_hour_tst_min 22_hour_wake_min 22_hour_n1_min 22_hour_n2_min 22_hour_n3_min
#> 1 47 11 12.5 12.5 21.5
#> 22_hour_nrem_min 22_hour_rem_min 22_hour_tst_min 23_hour_wake_min
#> 1 46.5 2.5 49 0.5
#> 23_hour_n1_min 23_hour_n2_min 23_hour_n3_min 23_hour_nrem_min 23_hour_rem_min
#> 1 1.5 13 45 59.5 0
#> 23_hour_tst_min
#> 1 59.5The main caveat is that asleep is very precise in the
format of the data, primarily it must have the columns
time, x, y, and z in
the data.
asleep (data
frame)Alternatively, you can pass out a data.frame, rename the
columns to what you need them to be and then run asleep on
that:
df = readr::read_csv(file)
#> Rows: 432000 Columns: 4
#> ── Column specification ────────────────────────────────────────────────────────
#> Delimiter: ","
#> dbl (3): x, y, z
#> dttm (1): time
#>
#> ℹ Use `spec()` to retrieve the full column specification for this data.
#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(df)
#> # A tibble: 6 × 4
#> time x y z
#> <dttm> <dbl> <dbl> <dbl>
#> 1 2000-01-04 20:00:00.000 -0.704 0.413 -0.54
#> 2 2000-01-04 20:00:00.031 -0.721 0.419 -0.562
#> 3 2000-01-04 20:00:00.067 -0.665 0.429 -0.579
#> 4 2000-01-04 20:00:00.100 -0.698 0.434 -0.525
#> 5 2000-01-04 20:00:00.133 -0.674 0.417 -0.575
#> 6 2000-01-04 20:00:00.167 -0.707 0.412 -0.538
out_df = asleep(file = df)
#> Checking Data
#> Writing file to CSV...
#> Parsing raw data
#> Lowpass filter...Skipping lowpass filter: data sample rate 30 too low for cutoff rate 20
#> Lowpass filter... Done! (0.00s)
#> Gravity calibration...Gravity calibration... Done! (0.05s)
#> Resampling...Resampling... Done! (0.16s)
#> {'WearTime(days)': 0.1666662808564815, 'NonwearTime(days)': 0.0, 'NumNonwearEpisodes': 0}
#> Time shift applied: 0 hours
#> Raw data file saved to: /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff16bb55829/raw.csv
#> Info data file saved to: /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff16bb55829/info.json
#> time x y z non_wear
#> 0 2000-01-04 20:00:00.000000000 -0.704000 0.413000 -0.540000 False
#> 1 2000-01-04 20:00:00.033333333 -0.720795 0.419000 -0.561667 False
#> 2 2000-01-04 20:00:00.066666666 -0.665154 0.428846 -0.578590 False
#> 3 2000-01-04 20:00:00.100000000 -0.698000 0.434000 -0.525000 False
#> 4 2000-01-04 20:00:00.133333333 -0.674051 0.417308 -0.575385 False
#> Transforming data for model input
#> Data2model file saved to: /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff16bb55829/data2model.npy
#> Times file saved to: /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff16bb55829/times.npy
#> Non-wear file saved to: /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff16bb55829/non_wear.npy
#> Data shape for data2model: (480, 3, 900)
#> Data shape for times: (480,)
#> Data shape for nonwear: (480,)
#> Detecting sleep windows
#> prediction set sample count: 480
#> Using local /Users/johnmuschelli/Library/Caches/org.R-project.R/R/reticulate/uv/cache/archive-v0/WkwZPbhzsuDleh3_sED9q/lib/python3.8/site-packages/asleep/torch_hub_cache/OxWearables_ssl-wearables_v1.0.0
#> (480,)
#> (array([0., 2., 3.]), array([ 79, 45, 356]))
#> Running SleepNet
#> pytorch device defaulting to 'cpu'
#> setting up cnn
#> access remote repo
#> 1
#> Total sample count : 355
#> Save predictions to /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff16bb55829/y_pred.npy
#> Save prediction probs to /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff16bb55829/pred_prob.npy
#> Time used 7.000052213668823
#> Mapping SleepNet predictions back to original time series
#> Generating predictions dataframe
#> Generating sleep block df and indicate the longest block per day
#> Generating daily summary statistics
#> Summary saved to: /private/var/folders/1s/wrtqcpxn685_zk570bnx9_rr0000gr/T/Rtmp7hwtHx/file5ff16bb55829/summary.json
#> Creating outputsWhich gives same output for this data:
all.equal(out[c("predictions", "summary", "day_summary")],
out_df[c("predictions", "summary", "day_summary")])
#> [1] TRUEThese binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.