- PVSM.RU - https://www.pvsm.ru -
Перевод поста Bernat Espigulé-Pons "A Year of Runkeeper: Analysis and Visualization [1]".
Код, приведенный в статье, можно скачать здесь [2], а дополнительные файлы здесь [3].
Выражаю огромную благодарность Кириллу Гузенко KirillGuzenko [4] за помощь в переводе и подготовке публикации
Следуя указаниям на этой странице [7], я экспортирую свои данные из Runkeeper. Есть и другой способ — подключить мой аккаунт в Runkeeper к Wolfram Language с помощью функции ServiceConnect [8]. Правда, с помощью этой функции можно проанализировать всего 25 передвижений, так что на этот раз я буду экспортировать данные вручную.
Итак, в результате у меня получился ZIP-файл с парой CSV [9] файлов, и еще — все мои ранее записанные GPX файлы. Прежде всего я сохраню ноутбук (файл Mathematica) в директории, в которой распаковал архив, а затем назначу эту директорию основной:
Посмотрим теперь на первую строку файла «cardioActivities.csv»:
В Runkeeper'е можно проводить сразу несколько измерений с разными элементами. Чтобы правильно интерпретировать эти величины, я использую функцию SemanticImport [10] со следующими типами столбцов:
В результате я получаю Dataset [11] объект, который легко проанализировать. Давайте поработаем с данными:
1. Посчитаем, сколько раз и каким способом я передвигался:
2. Вычислим среднее расстояние:
3. Построим гистограмму всех расстояний:
4. Используем функцию DateListStepPlot [12] для визуализации средней скорости передвижения:
5. Выберем путешествия длиной более 10 миль:
6. Узнаем, сколько раз я залез бы на Эверест:
7. Сгруппируем виды деятельности по их описанию:
8. Выберем мероприятия с пометкой «Бостон» и импортируем их GPX файлы:
9. Обозначим на карте точки старта для всех способов передвижения:
10. И последнее, но не менее важное: используем функцию TimelinePlot [13] для всех видов передвижения:
Пока все идет хорошо. Дальше нам нужно вытащить данные из GPX файлов. Используя функции Import [14] и GeoGraphics [15], построим GPS-трек, обозначив его черной линией.
Но я хочу получить еще и данные о высоте, на которой я находился, и скорости, с которой передвигался. У функции Import есть опция «Data», которая позволяет получить доступ к GPX файлу общей для Wolfram Language формы (списки, строки и т. д.):
В этом документе содержится список зафиксированных с помощью функции GeoPosition [16] точек высоты и отметок времени. Так как меня интересуют только точки, я определил функцию, которая находит мое местоположение, и использовал функцию TimeSeries [17] для определения высоты, на которой я находился:
Данные GPX данные представляются в виде ассоциации (Association [18]) с парой ключей:
Теперь можно создать график DateListPlot [19], окрашенный в зависимости от значения функции (высоты).
Или воспользуемся параметром «Geometry»: используем функцию Rescale [20] для точек подъема, а затем раскрасим GPS-трек в зависимости от высоты:
Теперь, используя эти данные, можно вычислить мгновенную скорость. Сандер Хейсман (Sander Huisman), участник сообщества Wolfram Community [21], показал недавно, как вычислить мгновенную скорость и раскрасить GPS-трек. Ниже представлена функция, которую я определил для вычисления временных рядов мгновенной скорости из точек GeoPosition и временных рядов подъемов:
А теперь вспомним предыдущий пример: DateListPlot может сказать мне, когда я делал остановку во время похода:
Во время этих коротких перерывов я останавливался, чтобы сфотографировать скальные образования, вдохновлявшие самого Сальвадора Дали [22]. Давайте составим карту этих остановок с помощью раскрашивания GPS-трека в зависимости от скорости:
Теперь, когда я могу обозначать точки своего местонахождения, высоту подъема и определять мгновенную скорость движения, можно объединить все это в новый набор данных:
Год назад я переехал из сельской местности в Барселону:
Чтобы обозначить мои передвижения в Барселоне, я мог бы использовать функции GeoWithinQ [23] или GeoDistance [24], но сейчас эти функции не понадобятся: я сделал пометки к моим передвижениям по городу:
Сначала я хочу убедиться, что все мои передвижения будут обозначены на черно-белой единообразной карте без пометок, и затем нанесу на карту свои передвижения с помощью функции GeoGraphics. Для этого я добавил дополнительные опции GeoStyling [25] для GeoBackground [26], чтобы сделать фон серых оттенков. Я также добавил GeoScaleBar [27] и ограничил отрезок на карте с помощью функции GeoRange [28]:
По-моему, выглядит неплохо. Нанесем на карту все зафиксированные передвижения:
Я покрыл почти весь город! Если бы я наносил на карту только начальные (желтые) и красные (конечные) точки, стало бы понятно, где я живу. В большинстве случаев я добирался из одной точки в другую, используя city’s bicycle-sharing system [29]:
Давайте теперь построим маршрут, который позволит за кратчайшее время снова посетить все эти места:
Чтобы посетить их все, понадобится проехать (пройти) около 170 км:
Неплохо, если сравнить с тем, сколько у меня набегает за год:
Что еще я заметил, пользуясь Runkeeper'ом на протяжении года: мой путь из точки А (дом) в точку Б (центр капойэра) постоянно меняется. Дело в том, что я еще не уверен, что добираться туда на велосипеде лучше всего. Функция TravelDirections [30] поможет посмотреть на данные по-новому:
Нарисуем «TravelPath» для трех различных значений метода передвиженияTravelMethod [31] — «Biking» (на велосипеде) (зеленый), «Walking» (пешком) (синий), и «Driving» (за рулем) (красный); однако здесь изображен не только простой способ добраться из точки А в точку В:
Функция TravelDistance [32] сообщает нам, что путь «Пешком» — самый короткий:
Однако этот путь проходит через центр Барселоны — Ciutat Vella (старый город), который представляет собой лабиринт средневековых улиц с ограничениями для пешеходов, так что мне понадобится целый час, чтобы добраться из точки А в точку Б. Функция TravelTime [33] показывает, что путь «На велосипеде» быстрее:
Надо сказать, что за этот год я испробовал различные способы добраться до точки B на велосипеде. Мой фаворит сейчас — путь «за рулем», обозначенный красным цветом:
Давайте теперь построим графики всех 55 поездок, окрашенные в соответствии с временем в пути.
Синие/зеленые дорожки ближе всего к варианту «Пешком», и похоже, что это самые короткие пути в точку B. Мой рекорд — около 13 минут:
Среднее время в пути близко к предсказанному функцией TravelDirectionsData [34]:
С помощью этих данных я могу путешествовать во времени по всему прошедшему году. В следующих своих статьях, посвященных GeoGraphics, я собираюсь раскрасить GPS-треки в соответствии со скоростью передвижения и добавлю даты для каждого вида передвижения с помощью функции Tooltip [35]:
А теперь можно взять каждый каждый из вариантов передвижения по отдельности и анимировать все мои поездки и походы по Барселоне за год.
Код для создания анимации доступен в конце этой статьи в формате CDF. Предлагаю использовать его для анализа ваших данных из Runkeeper. Нужно больше идей? Обратите внимание на статью (ссылка на перевод, опубликованный на Хабре) "В погоне за самим собой, или отличный способ начать свой день [36]".
По вопросам о технологиях Wolfram пишите на info-russia@wolfram.com
Автор: Wolfram Research
Источник [37]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/125956
Ссылки в тексте:
[1] A Year of Runkeeper: Analysis and Visualization: http://blog.wolfram.com/2015/12/04/a-year-of-runkeeper-analysis-and-visualization/
[2] здесь: http://blog.wolfram.com/data/uploads/2015/12/A-Year-of-Runkeeper-Blog-Post.cdf
[3] здесь: http://blog.wolfram.com/data/uploads/2015/12/runkeeper-data.zip
[4] KirillGuzenko: https://habrahabr.ru/users/kirillguzenko/
[5] Runkeeper: https://runkeeper.com/
[6] Wolfram Language: https://www.wolfram.com/language/
[7] на этой странице: https://support.runkeeper.com/hc/en-us/articles/201109886-How-to-Export-your-Runkeeper-data
[8] ServiceConnect: https://reference.wolfram.com/language/ref/service/RunKeeper.html
[9] CSV: https://reference.wolfram.com/language/ref/format/CSV.html
[10] SemanticImport: http://reference.wolfram.com/language/ref/SemanticImport.html
[11] Dataset: http://reference.wolfram.com/language/ref/Dataset.html
[12] DateListStepPlot: https://reference.wolfram.com/language/ref/DateListStepPlot.html
[13] TimelinePlot: http://reference.wolfram.com/language/ref/TimelinePlot.html
[14] Import: http://reference.wolfram.com/language/ref/Import.html
[15] GeoGraphics: https://reference.wolfram.com/language/ref/GeoGraphics.html
[16] GeoPosition: https://reference.wolfram.com/language/ref/GeoPosition.html
[17] TimeSeries: https://reference.wolfram.com/language/ref/TimeSeries.html
[18] Association: http://reference.wolfram.com/language/ref/Association.html
[19] DateListPlot: https://reference.wolfram.com/language/ref/DateListPlot.html
[20] Rescale: https://reference.wolfram.com/language/ref/Rescale.html
[21] Wolfram Community: http://community.wolfram.com/groups/-/m/t/567757
[22] Сальвадора Дали: http://www.wolframalpha.com/input/?i=Salvador+Dali
[23] GeoWithinQ: https://reference.wolfram.com/language/ref/GeoWithinQ.html
[24] GeoDistance: https://reference.wolfram.com/language/ref/GeoDistance.html
[25] GeoStyling: https://reference.wolfram.com/language/ref/GeoStyling.html
[26] GeoBackground: https://reference.wolfram.com/language/ref/GeoBackground.html
[27] GeoScaleBar: https://reference.wolfram.com/language/ref/GeoScaleBar.html
[28] GeoRange: https://reference.wolfram.com/language/ref/GeoRange.html
[29] city’s bicycle-sharing system: http://blog.wolfram.com/2015/05/01/a-smart-programming-language-for-a-smart-cities-hackathon/
[30] TravelDirections: https://reference.wolfram.com/language/ref/TravelDirections.html
[31] TravelMethod: https://reference.wolfram.com/language/ref/TravelMethod.html
[32] TravelDistance: https://reference.wolfram.com/language/ref/TravelDistance.html
[33] TravelTime: https://reference.wolfram.com/language/ref/TravelTime.html
[34] TravelDirectionsData: https://reference.wolfram.com/language/ref/TravelDirectionsData.html
[35] Tooltip: http://reference.wolfram.com/language/ref/Tooltip.html
[36] В погоне за самим собой, или отличный способ начать свой день: https://habrahabr.ru/company/wolfram/blog/263537/
[37] Источник: https://habrahabr.ru/post/302462/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.