The iMove dataset, collected during the December 2015 - April 2016 period contains 771,975 log records across 17,624 unique user pseudo-identifiers. It is available as a MongoDB dump 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 deviceIn the following sections we illustrate the data structure of iMove logs. iMove log records are represented as JSON objects:
{
"_id" : ObjectId("5707d5889cf7fc690654be90"),
"appdata" : {
"uuid" : "D7A50802-12E3-4A94-B997-995BAF841A54",
"voiceover" : true,
"device" : "iPhone7,2",
"lang" : "en-GB",
"appname" : "iMove",
"appversion" : "32"
},
"debug" : false,
"userdata" : {
"Event" : "Entered",
"ScreenName" : "POIList-Around_me"
},
"timestamp" : {
"utc" : ISODate("2016-04-08T16:00:06.993+0000"),
"user" : ISODate("2016-04-08T11:00:06.993+0000"),
"server" : ISODate("2016-04-08T16:00:08.222+0000")
}
}
The main components of each record are:
appdata
userdata
timestamp
debug
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)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)User data, the application usage data, defined by the developer.
In iMove we partition user data in four 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:
Action 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"
}
}
{
"userdata" : {
"EventName" : "Location",
"EventCategory" : "Notifications",
"EventLabel" : "Background_VoiceOverON"
}
}
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)Possible values for the EventName
property:
Actions
Notifications
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:
Exception 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",
...
]
}
}
}