Рік з Runkeeper: Аналіз і візуалізація геоданих про ваших подорожах


Переклад поста Bernat Espigulé-Pons "A Year of Runkeeper: Analysis and Visualization".
Код, наведений у статті, можна завантажити тут, а додаткові файли тут.
Висловлюю величезну подяку Кирилу Гузенко KirillGuzenko за допомогу в перекладі і підготовці публікації

Майже рік тому я вирішив записувати всі свої пересування за допомогою Runkeeper, і тепер хочу представити кілька варіантів візуалізації моєї річної активності. Проект виходить нескладним: дані за своїм пересуванням я буду довантажувати з Runkeeper, а аналізувати/візуалізувати — в Wolfram Language. У цій анімації (див. нижче) показано мої пересування по Барселоні, і я покажу вам, як зробити таку ж.



Слідуючи вказівкам на цій сторінці, я експортують свої дані з Runkeeper. Є й інший спосіб — підключити мій акаунт у Runkeeper до Wolfram Language за допомогою функції ServiceConnect. Правда, з допомогою цієї функції можна проаналізувати лише 25 пересувань, так що на цей раз я буду експортувати дані вручну.

Отже, в результаті у мене вийшов ZIP-файл з парою CSV файлів, і ще — всі мої раніше записані файли GPX. Насамперед я збережу ноутбук (файл Mathematica) в директорії, в якій розпакував архів, а потім призначу цю директорію основний:



Подивимося тепер на перший рядок файлу «cardioActivities.csv»:



У Runkeeper'е можна проводити відразу кілька вимірювань з різними елементами. Щоб правильно інтерпретувати ці величини, я використовую функцію SemanticImport з наступними типами стовпців:





В результаті я отримую Dataset об'єкт, який легко проаналізувати. Давайте попрацюємо з даними:

1. Порахуємо, скільки разів і яким способом я пересувався:



2. Обчислимо середнє відстань:



3. Побудуємо гістограму всіх відстаней:



4. Використовуємо функцію DateListStepPlot для візуалізації середньої швидкості пересування:



5. Виберемо подорожі довжиною більше 10 миль:





6. Дізнаємося, скільки разів я заліз би на Еверест:



7. Згрупуємо види діяльності по їх опису:



8. Виберемо заходи з позначкою «Бостон» і імпортуємо їх GPX файлів:



9. Позначимо на карті точки старту для всіх способів пересування:



10. І останнє, але не менш важливе: використовуємо функцію TimelinePlot для всіх видів пересування:



Поки все йде добре. Далі нам потрібно витягти дані з GPX файлів. Використовуючи функції Import і GeoGraphics, побудуємо GPS-трек, позначивши його чорною лінією.



Але я хочу отримати ще й дані про висоту, на якій я перебував, і швидкості, з якою пересувався. У функції Import є опція «Data», яка дозволяє отримати доступ до файла GPX для загальної Wolfram Language форми (списки, рядки і т. д.):



У цьому документі міститься список зафіксованих за допомогою функції GeoPosition точок висоти і відміток часу. Так як мене цікавлять тільки точки, я визначив функцію, яка знаходить моє розташування, і використовував функцію TimeSeries для визначення висоти, на якій я перебував:



Дані GPX дані представляються у вигляді асоціації (Association з парою ключів:



Тепер можна створити графік DateListPlot, пофарбований у залежності від значення функції (висоти).



Чи скористаємося параметром «Geometry»: використовуємо функцію Rescale для точок підйому, а потім розфарбуємо GPS-трек залежно від висоти:



Тепер, використовуючи ці дані, можна вирахувати миттєву швидкість. Сандер Хейсман (Sander Huisman), учасник спільноти Wolfram Community, показав недавно, як обчислити миттєву швидкість і розфарбувати GPS-трек. Нижче представлена функція, яку я визначив для обчислення часових рядів миттєвої швидкості точок GeoPosition і тимчасових рядів підйомів:



А тепер згадаймо попередній приклад: DateListPlot може сказати мені, коли я робив зупинку під час походу:



Під час цих коротких перерв я зупинявся, щоб сфотографувати скельні утворення, надихали самого Сальвадора Далі. Давайте складемо карту цих зупинок за допомогою розфарбовування GPS-треку в залежності від швидкості:



Тепер, коли я можу позначати точки свого місцезнаходження, висоту підйому і визначати миттєву швидкість руху, можна об'єднати все це в новий набір даних:



Рік тому я переїхав із сільської місцевості в Барселону:



Щоб позначити мої пересування в Барселоні, я міг би використовувати функції GeoWithinQ або GeoDistance, але зараз ці функції не знадобляться: я зробив позначки до моїм пересуванням по місту:



Спочатку я хочу переконатися, що всі мої пересування будуть позначені на чорно-білій однакової карті без поміток, і потім нанесу на карту свої пересування за допомогою функції GeoGraphics. Для цього я додав додаткові опції GeoStyling GeoBackground, щоб зробити фон сірих відтінків. Я також додав GeoScaleBar і обмежив відрізок на карті за допомогою функції GeoRange:



По-моєму, виглядає непогано. Нанесемо на карту все зафіксовані пересування:



Я покрив майже все місто! Якщо б я наносив на карту тільки початкові (жовті) і червоні (кінцеві) точки, стало б зрозуміло, де я живу. У більшості випадків я добирався з однієї точки в іншу, використовуючи city's bicycle-sharing system:



Давайте тепер побудуємо маршрут, який дозволить за короткий час знову відвідати всі ці місця:



Щоб відвідати їх усі, знадобиться проїхати (пройти) близько 170 км:



Непогано, якщо порівняти з тим, скільки у мене набігає за рік:



Що ще я помітив, користуючись Runkeeper'ом протягом року: мій шлях з точки А (будинок) в точку Б (центр капойэра) постійно змінюється. Справа в тому, що я ще не впевнений, що добиратися туди на велосипеді найкраще. Функція TravelDirections допоможе подивитися на дані по-новому:



Намалюємо «TravelPath» для трьох різних значень методу пересуванняTravelMethod«Biking» (на велосипеді) (зелений), «Walking» (пішки) (синій), «Driving» (за кермом) (червоний); однак тут зображено не тільки простий спосіб дістатися з точки А в точку В:



Функція TravelDistance повідомляє нам, що шлях «Пішки» — самий короткий:



Однак цей шлях проходить через центр Барселони — Ciutat Vella (старе місто), який являє собою лабіринт середньовічних вулиць з обмеженнями для пішоходів, так що мені знадобиться цілу годину, щоб дістатися з точки А в точку Б. Функція TravelTime показує, що шлях «На велосипеді» швидше:



Треба сказати, що за цей рік я випробував різні способи дістатися до точки B на велосипеді. Мій фаворит зараз — шлях «за кермом», позначений червоним кольором:



Давайте тепер побудуємо графіки всіх 55 поїздок, пофарбовані у відповідності з часом у дорозі.





Сині/зелені доріжки ближче всього до варіанту «Пішки», і схоже, що це найбільш короткі шляхи в точку B. Мій рекорд — близько 13 хвилин:



Середній час в дорозі близько до передбаченого функцією TravelDirectionsData:



З допомогою цих даних я можу подорожувати в часі по всьому минулому році. У наступних статтях, присвячених GeoGraphics, я збираюся розфарбувати GPS-треки відповідно зі швидкістю пересування і додам дати для кожного виду пересування за допомогою функції Tooltip:



А тепер можна взяти кожен кожен з варіантів пересування окремо і анімувати всі мої поїздки і походи по Барселоні за рік.

Код для створення анімації доступний в кінці цієї статті в форматі CDF. Пропоную використовувати його для аналізу ваших даних з Runkeeper. Потрібно більше ідей? Зверніть увагу на статтю (посилання на переклад, опублікований на Хабре) "В гонитві за самим собою або відмінний спосіб почати свій день".



З питань про технології Wolfram пишіть на info-russia@wolfram.com
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.