3. suggestions.csv - LisaGotzian/HeartSteps GitHub Wiki
At two to five points during the day, a notification is sent, randomly selected and if the person was available. The walking suggestions and the responses are recorded in suggestions.csv
, a 8274x87 data frame.
This table includes the following data:
- notification time and response time as well as the type of walking suggestion: "active" if a person has been active or "sedentary" if a person has been sedentary
- the context the user was in during the notification
- recognized activity (still, active etc.) & when voting the suggestion up or down
- front end application
- location data
- weather data
- aggregated step counts before and after the suggestions
- identifier: user.index, ema.index and decision.index
Columns | Description |
---|---|
user.index | User ID |
ema.index | Ema ID |
decision.index | Decision index |
decision.index.nogap | Decision index without travel days |
sugg.select.utime | Date-time when user selected to receive walking suggestion |
sugg.select.slot | Intended decision time slot based on the selected notification time |
sugg.select.updated | Date-time, for the time at which the user updated their notification time slots |
sugg.tz | Time zone of the notification, updated when phone restarted, not when actually changed timezone |
sugg.gmtoff | Minutes difference of local timezone to UTC at notification |
sugg.decision.utime | Date-time, when the walking suggestion is sent, 1 NA |
sugg.decision.slot | Actual decision time slot based on when the notification was sent, usually 90 sec after decision, in 96 cases different from the intended time slot (sugg.select.slot) plus 735 NA due to connect issues. The 96 cases are due to timezone issues |
sugg.context.utime | Date-time, the time for which the decision context like location and weather etc. is recorded. Is always sugg.decision.utime, unless the phone was not connected to the server at the time of decision, then 30 min prior, this is the case for 709 observations, 735 NA |
sugg.response.utime | Date-time, the time at which the user either rated the message (thumbs up/down, snooze) or the notification timed out |
sugg.device.utime | Date-time of most recent phone usage before suggestion sugg.decision.utime |
sugg.device.since | Hours between suggestion (sugg.decision.utime) and most recent phone usage (sugg.device.utime) |
interaction.count | Number of times the screen was turned on between suggestion notification and a response |
Availability & Notification Variables
Columns | Description |
---|---|
connect | Logical, had active connection at decision time slot: in 6380 cases at time of decision or in 709 cases 30 min prior (735 false, 7539 true) |
is.randomized | Logical, if time point was randomly selected (3070 false, 4469 true, 735 NA) |
snooze.status | Logical, if snooze is enabled at the decision time slot (7496 false, 43 true, 735 NA) |
intransit | Logical, was in transit (walking or in a vehicle) at time of suggestion, based on recognized.activity (6628 false, 911 true, 735 NA) |
avail | Logical, if the person was available: had an active connection (7539), did not snooze (7496) and was not in transit (6628) = 1684 false, 6590 true |
send | Logical, if a notification has been sent after a decision. For this, the time point must be randomly selected (4469) and the person must be available (6590) = 3621 false, 3918 true, 735 NA |
send.active | Logical, suggestion type was an active notification because user was tagged as active within 90 seconds of the decision time slot |
send.sedentary | Logical, suggestion type was a sedentary notification because user was tagged as inactive within 90 seconds of the decision time slot |
is.prefetch | Logical. Each suggestion time slot is associated with prefetch data, generated 30 minutes ahead in the event that the user is not connected to the server at the time slot. “is.prefetch” Is TRUE if the decision result is based on prefetched contextual information, retrieved 30 minutes prior to the decision time slot (6380 false, 709 true, 735 NA) |
Decision & Response Context
Columns | Description | Response Columns | Description |
---|---|---|---|
recognized.activity | Google Activity Recognition result; the Detected Activity type with the highest confidence level, evaluated within 90 seconds of the decision time slot. More information: https://developers\.google\.com/android/reference/com/google/android/gms/location/DetectedActivity | recognized.activity.response | Google Activity Recognition result; the Detected Activity type with the highest confidence level, evaluated at the time of response. More information: https://developers\.google\.com/android/reference/com/google/android/gms/location/DetectedActivity |
tag.active | Logical, if user was tagged as active based on recognized.activity | ||
tag.indoor | Logical, if user was tagged as indoor based on recognized.activity | ||
tag.outdoor | Logical, if user was tagged as outdoor based on recognized.activity | ||
tag.outdoor_snow | Logical, if user was tagged as outdoor based on recognized.activity and there was snowfall | ||
front.end.application | Android package name of the application that in use at the notification time. If the screen was turned off, then "NA". | ||
returned.message | From decision, Message text sent to the user, converted to ASCII. If the decision result is "false", the string “do_not_notify". | response | Suggestion message rating ("no_response", "good", "bad", "snoozed_for_X_hours") |
dec.city | City name corresponding to the GPS coordinate at notification | response.city | City name corresponding to the GPS coordinate at response |
dec.location.exact | Location description ("work", "home", or establishment name) based on the GPS coordinate at notification | response.location.exact | Location description ("work", "home", or establishment name) based on the GPS coordinate at response |
dec.location.category | Location category ("work", "home" or the Google Place Type) based on the GPS coordinate at notification | response.location.category | Location category ("work", "home" or the Google Place Type) based on the GPS coordinate at response |
dec.weather.condition | Current weather condition classification from Weather Underground's API, based on the GPS coordinate at notification | response.weather.condition | Current weather condition classification from Weather Underground's API, based on the GPS coordinate at response |
dec.temperature | Temperature in Celsius, based on the GPS coordinate at notification | response.temperature | Temperature in Celsius, based on the GPS coordinate at response |
dec.windspeed | Wind speed in miles per hour, based on the GPS coordinate at notification | response.windspeed | Wind speed in miles per hour, based on the GPS coordinate at response |
dec.precipitation.chance | Precipitation chance (between 0 and 100) up to 60 minutes from EMA notification, based on the GPS coordinate at notification | response.precipitation.chance | Precipitation chance (between 0 and 100) up to 60 minutes from EMA notification, based on the GPS coordinate at response |
dec.snow | Snowfall in millimeters, based on the GPS coordinate at notification | response.snow | Snowfall in millimeters, based on the GPS coordinate at response |
Step counts before and after decision points
- jbminsX and gfminsX: Amount of minutes in which a participant was walking X minutes after decision point (Jawbone or "Google Fit" for phone accelerometer)
- jbstepsX and gfstepsX: Jawbone/Google Fit steps X minutes after decision point
- suffix "pre": step counts in slot before decision point
- suffix ".zero": step counts, but NA was imputed with 0. NAs occurred in a user's Jawbone data e.g. if the user just didn't wear the Jawbone for a whole day, or if she was traveling internationally and left the tracker at home.
Columns | Description |
---|---|
jbmins10 | Amount of minutes in which a participant was walking 10 minutes after decision point (jawbone) |
jbsteps10 | Jawbone steps 10 minutes after decision point |
jbmins40 | See above, 40 min jawbone |
jbsteps40 | See above, 40 min jawbone |
jbmins30 | See above, 30 min jawbone |
jbsteps30 | See above, 30 min jawbone |
jbmins60 | See above, 60 min jawbone |
jbsteps60 | See above, 60 min jawbone |
jbmins90 | See above, 90 min jawbone |
jbsteps90 | See above, 90 min jawbone |
jbmins120 | See above, 120 min jawbone |
jbsteps120 | See above, 120 min jawbone |
jbsteps10.zero | Jawbone steps, but NA was imputed with 0. NAs occurred in a user's Jawbone data e.g. if the user just didn't wear the Jawbone for a whole day, or if she was traveling internationally and left the tracker at home. |
jbsteps30.zero | See above, 30 min, jawbone imputed |
jbsteps40.zero | See above, 40 min, jawbone imputed |
jbsteps60.zero | See above, 60 min, jawbone imputed |
jbsteps90.zero | See above, 90 min, jawbone imputed |
jbsteps120.zero | See above, 120 min, jawbone imputed |
jbmins30pre | Amount of minutes in which a participant was walking 10 minutes before decision point (jawbone) |
jbsteps30pre | Jawbone steps 10 minutes before decision point |
jbmins40pre | See above, 40 min jawbone |
jbsteps40pre | See above, 40 min jawbone |
jbmins60pre | See above, 60 min jawbone |
jbsteps60pre | See above, 60 min jawbone |
jbsteps30pre.zero | See above, 30 min, jawbone imputed |
jbsteps40pre.zero | See above, 40 min, jawbone imputed |
jbsteps60pre.zero | See above, 60 min, jawbone imputed |
gfmins10 | See above, 10 min google fit |
gfsteps10 | See above, 10 min google fit |
gfmins30 | See above, 30 min google fit |
gfsteps30 | See above, 30 min google fit |
gfmins60 | See above, 60 min google fit |
gfsteps60 | See above, 60 min google fit |
gfmins30pre | See above, 30 min google fit |
gfsteps30pre | See above, 30 min google fit |
gfmins60pre | See above, 60 min google fit |
gfsteps60pre | See above, 60 min google fit |