The iMove dataset (called DS1 in the following) was collected during the December 2015 - March 2017 period. It contains 3,784,700 log records across 61,715 unique user pseudo-identifiers.
To filter out these users, we introduce the concept of “interaction session” (or simply, session). Dataset DS2 contains only log records from users having two or more sessions.
We partition this set into DS2-VO that contains the records for the users that generated at least one records while VoiceOver was active and DS2-NVO that contains all other records of DS2.
We also partition DS2 along a different dimension: the records of users that started using the app at version 31, 32 or 33 are in the dataset DS2-B34 (DS2 Before version 34), while the other records of DS2 are in DS2-A34 (DS2 at or After version 34).
Starting from iMove version 38 we also log system accessibility preferences. This means that, for any users that used version 38 we logged, at least once, his/her system accessibility preferences (This set also includes users that started using the app in a previous version and that updated to version 38).
The records from these users form dataset DS3.
Given the values of system accessibility parameters (SAT), we can partition DS3 according to whether a SAT is used. DS3-SAT includes logs of users that used a SAT at least once. DS3-NSAT contains the other records of DS3.
Each of these datasets are available as MongoDB dumps upon request. To obtain the data contact the developers at: info@everywaretechnologies.com. Please clearly state your affiliation and the intended use of the dataset in the request.
KeepUserInformed
(bool) - whether iMove should automatically read information about the current address, nearby POIs and nearby GeoNotes. This is a global option which enables/disabled all the "automatically read" settings illustrated in the followingAutoWhereAmI
(bool) - whether the application should automatically read new addresses while the user is movingLocationSpatial
(int) - the minimum spatial distance (meters) between two addresses required to trigger an automatic readLocationTemporal
(int) - the minimum temporal distance (seconds) between two automatic address readsSaySpeed
(bool) - whether the current speed should be read together with a new addressSayHeading
(bool) - whether the current bearing should be read together with a new addressSayCourse
(bool) - whether the current course should be read together with a new addressSayCity
(bool) - whether the current city should be read together with a new addressAutoAroundMe
(bool) - whether the application should automatically read new points of interest while the user is movingPOIProximity
(int) - the minimum spatial distance (meters) between two POIs required to trigger an automatic readPOITemporal
(int) - the minimum temporal distance (seconds) between two automatic POI readsAutoGeoNotes
(bool) - whether the application should automatically read/play GeoNotes while the user is movingGeoNoteSpatial
(int) - the minimum spatial distance (meters) between two GeoNotes required to trigger an automatic readGeoNoteTemporal
(int) - the minimum temporal distance (seconds) between two automatic GeoNote readsPreventIdle
(bool) - whether the application should prevent the screen from lockingBkgTimeLimit
(int) - how long the application is allowed to run in background on the user's deviceDisclaimerAccepted
(bool) - whether the user accepted the End-User License Agreement and Privacy PolicyPoiFirstScreen
(bool) - whether the application should start showing the list of nearby POIs ("POIList-Around_me" screen), instead of showing the root screenUseHit
(bool) - whether the application should read and/or send notification if the user hit the smartphone, e.g. while it is in a pocketUseSystemBoldText
(bool) - whether the user enabled/disabled the iOS setting related to System Bold TextSystemContentSize
(String) - the font sizing option preferred by the user (iOS API reference: preferredContentSize)DarkerSystemColorsEnabled
(bool) - whether the user enabled/disabled the iOS setting related to Darker System ColorsIsGreyScaleEnabled
(bool) - whether the user enabled/disabled the iOS setting related to Grey ScaleIsInvertColorsEnabled
(bool) - whether the user enabled/disabled the iOS setting related to Inverted ColorsIsReduceMotionEnabled
(bool) - whether the user enabled/disabled the iOS setting related to Reduced MotionIsReduceTransparencyEnabled
(bool) - whether the user enabled/disabled the iOS setting related to Reduced TransparencyIsSpeakScreenEnabled
(bool) - whether the user enabled/disabled the iOS setting related to Speak ScreenIsSpeakSelectionEnabled
(bool) - whether the user enabled/disabled the iOS setting related to Speak SelectionIn the following sections we illustrate the data structure of iMove logs. iMove log records are represented as JSON objects:
{
"_id" : ObjectId("58beb786e79a681308503b82"),
"appdata" : {
"device" : "iPhone9,3",
"voiceover" : true,
"os" : "10.2.1",
"lang" : "en-US",
"uuid" : "4BC1F025-4A56-46EF-92D9-8FC23D2651C9",
"appname" : "iMove",
"appversion" : "38"
},
"timestamp" : {
"user" : ISODate("2017-03-07T19:07:52.923+0000"),
"server" : ISODate("2017-03-07T13:37:10.000+0000")
},
"debug" : false,
"userdata" : {
"Event" : "Exited",
"ScreenName" : "POIList-Around_me"
},
"datetime" : ISODate("2017-03-07T19:07:52.923+0000")
}
The main components of each record are:
appdata
userdata
timestamp
datetime
*debug
* The reason of the duplication of a timing field, is due to the possible discrepancy and format among timestamps. This datetime field was manually added to each log, to use a uniform timing field.
Application data, data about the user and the device on which iMove is running, automatically populated by the logging library.
uuid
- the pseudo-identifier of the user who originated the log recordvoiceover
- whether VoiceOver was enabled or not when the log record was originateddevice
- the device's modellang
- the device's languageappname
- the name of the application that originated the log record (iMove)appversion
- the version of the application that originated the log record (31/32/33/34/38)Timestamp object, contains three different timestamps:
user
- the moment when the log record originated in the user's timezoneutc
- the moment when the log record originated in UTCserver
- the moment when the log record has been received by the server in UTC (may differ from user
and utc
because of client-side caching)Warning: This could have different formats or could contain errors. Use datetime instead.
Datetime object indicating the referring timestamp. This field is well-formatted and unified among all logs.
User data, the application usage data, defined by the developer.
In iMove we partition user data in five different categories:
userdata
component.
Screen logs are generated when the user enters/exits a screen
{
"userdata" : {
"Event" : "Entered",
"ScreenName" : "POIList-Around_me"
}
}
Event
(Entered/Exited) - If the user entered or exited a screenScreenName
- Name of the screenPossible values for the ScreenName
property:
These types of logs are generated when users perform certain actions in the application or when the application notifies the user about a new address/POI/GeoNote.
{
"userdata" : {
"EventName" : "NewRoute",
"EventCategory" : "Actions",
"EventLabel" : "Foreground_VoiceOverOFF"
}
}
{
"userdata" : {
"EventName" : "Location",
"EventCategory" : "Notifications",
"EventLabel" : "Background_VoiceOverON",
"EventContext" : {
"speed" : 1.09,
"activity" : {
"unknown" : false,
"cycling" : false,
"automotive" : true,
"confidence" : NumberInt(2),
"startTimestamp" : 1488895710.884092,
"stationary" : false,
"walking" : false,
"running" : false
},
"direction" : {
"heading" : 47.01852,
"course" : 52.88281
}
}
}
}
EventName
- The event's nameEventCategory
(Actions/Notifications) - The event's categoryEventLabel
- Additional information about the event (whether it is occurring in foreground or background, with VoiceOver enabled or disabled)EventContext
- (Optional) Contains information about user's context (i.e. speed, activity, direction), only from app version 38, if the user gave permission to use device's sensors dataPossible values for the EventName
property:
Preference logs are generated when users change the value of a preference.
{
"userdata" : {
"UserDefaults" : {
"kPref_SayCity" : {
"old" : false,
"new" : true
}
}
}
}
The UserDefaults
object contains one "preference" object for each preference key that has been changed. The preference object has two properties:
old
- The preference's old valuenew
- The preference's new valuePossible keys for the preference object:
Application logs are generated automatically from the application, when it modifies its state (switching from foreground to background and vice versa).
{
"userdata" : {
"EventName" : "willResignActive",
"EventLabel" : "Foreground_VoiceOverOFF",
"EventCategory" : "Application",
"EventContext" : {
"speed" : NumberInt(-1),
"activity" : {
"unknown" : false,
"cycling" : false,
"automotive" : false,
"confidence" : NumberInt(2),
"startTimestamp" : 1488900735.258705,
"stationary" : false,
"walking" : false,
"running" : false
},
"direction" : {
"heading" : 259.059,
"course" : NumberInt(-1)
}
}
}
}
EventName
- The event's nameEventCategory
(Application) - The event's categoryEventLabel
- Additional information about the event (whether it is occurring in foreground or background, with VoiceOver enabled or disabled)EventContext
- (Optional) Contains information about user's context (i.e. speed, activity, direction), only from app version 38, if the user gave permission to use device's sensors dataException logs can be automatically generated by the logging library when an exception occurs (catched
== false) or manually raised by the programmer (catched
== true)
{
"userdata" : {
"exception" : {
"reason" : "-[__NSCFDictionary interruption:]: unrecognized selector sent to instance 0x17027fd40",
"name" : "NSInvalidArgumentException",
"catched" : false,
"callstack" : [
"0 CoreFoundation 0x000000018410c248 + 160",
"1 libobjc.A.dylib 0x0000000195d800e4 objc_exception_throw + 60",
...
]
}
}
}