Перевод поста Mariusz Jankowski "A Rat Race, or a Great Way to Start the Day".
Код, приведенный в статье, можно скачать здесь.
Выражаю огромную благодарность Кириллу Гузенко KirillGuzenko за помощь в переводе.

Не так давно, когда бушевала зима, расчищая подъезд к дому от завалов снега, я решил вспомнить о хорошей погоде, рассмотрев с использованием Wolfram Language свой велосипедный маршрут на работу.

В прошлом году я решил заняться такой весьма распространённой деятельностью, как запись данных своей активности. Я отметил, что за последние несколько лет мои поездки становились все быстрее и давались мне проще по мере того, как сезон приближался к концу, так что мне стало интересно удостовериться в наличии подобных улучшений своей физической формы. Используя лишь смартфон и соответствующее приложение, я записал 27 поездок между домом и работой, а затем использовал Wolfram Language для чтения, анализа и визуализации результатов.

Вот изображение с Google Earth, показывающее мой утренний велосипедный маршрут, имеющий расстояние чуть меньше 18 км, пролегающий с востока на запад.



Для передачи данных из смартфона я использовал GPX (GPS Exchange Format) — формат файла, поддерживаемый крупнейшими производителями GPS-устройств и доступный в большинстве приложений. Обычный файл GPX включает в себя данные о местоположении и высоте с отметками времени, и Wolfram Language возвращает эти данные в виде списка правил с говорящими названиями Geometry, PointElevation и PointTimestamp.

Вот фрагмент одного из файлов формата GPX:



Воспользовавшись новыми функциями в сфере работы с геоданными в Wolfram Language и доступными данными о времени и положении, я смог легко и быстро создать анимацию дневной поездки (больше деталей доступно в разделе Initialization в прилагаемом CDF).




Ещё немного усилий, и вот кое-что интересное: я совместил все утренние поездки за сезон в рамках одной анимированной гонки — вот такие вот получились «крысиные бега» на работу! Лидер сезона показан жёлтым, конечно же!




Вот результаты этого «забега»:



Рассмотрим теперь поездки в хронологическом порядке. Получается, что моё предположение об улучшении времени поездки ближе к концу сезона и по мере увеличения пройденного километража оказалось верным.



И пусть предыдущие расчеты и визуализации достаточно хороши, но мы можем сделать нечто большее. Файлы GPX содержат данные о высоте с привязкой ко времени, однако не только это позволит легко визуализировать общий профиль дороги, но и кое-что ещё: обнаружение участков подъёма и спуска посредством нового функционала из сферы обработки сигналов — обнаружение пиков.

Начнём со стандартного профиля дороги:



Чтобы определить подъёмы и спады, я сгладил данные по подъёмам чтобы фиксировать в сигнале только наиболее крупные локальные максимумы и минимумы. Для этого я сначала построил линейную интерполяцию всей функции чтобы избавиться от слишком нестабильных интервалов в записанных данных, а затем сгладил её посредством GaussianFilter.



Операция сглаживания убирает «паразитные» пики и спады в данных по высотам. Я определил оставшиеся крупные пики с помощью FindPeaks и разделил маршрут на восходящие и нисходящие участки.



Визуализируем участки подъёмов и спусков утренней поездки на графике высот:



А вот несколько более полезная визуализация — участки подъёмов и спусков маршрута на карте:




Примерные расстояния участков подъёма и спуска доступны из списков подъёмов и спусков, вычисленных ранее. Следующий результат подтверждает простую истину о том, что отправляться на работу всегда тяжелее (т. е. в гору), и, следовательно, менее приятно, чем возвращаться с неё.



Я уже с нетерпением жду следующего сезона и всяких интересных фактов в анализе своих данных с помощью Wolfram Language.

Комментарии (13)


  1. midday
    25.07.2015 16:35

    Анимацию гонки конечно бы лучше нарисовать ему было на графике с высотами =)


  1. OsipovRoman Автор
    25.07.2015 17:08
    +1

    Это не сложно сделать:


    1. stationfuk
      25.07.2015 20:48

      Подозреваю, что имелся в виду график «вид сбоку».


      1. KirillGuzenko
        25.07.2015 22:03

        Вы это имеете ввиду?

        Визуализируем участки подъёмов и спусков утренней поездки на графике высот:


        Этот график следует называть именно графиком высот, потому что он изображает функцию, значение которой соответствует высоте.
        Примеры: график синуса, график изменения угла подъёма и т.п. То есть обычно они именуются по тому, какой смысл вкладывается в значения соответствующей им функции. В данном случае это высота.


        1. PapaBubaDiop
          25.07.2015 23:00

          Это гениально. Но хотелось бы на графике высот увидеть пелетон. На спусках он должен растягиваться, на подъемах сжиматься, очень любопытно. На проекции сверху это плохо видно из-за синуса проклятого.


  1. OsipovRoman Автор
    26.07.2015 00:45
    +5

    Прилагаю сделанную анимацию (качество картинки, к сожалению, упало из-за экспорта в gif и минимизации веса полученной gif-анимации):


    1. midday
      26.07.2015 21:26
      +1

      О спасибо большое! Отличная иллюстрация. Отлично видно как «лидер» в горочку прет мощно.


      1. OsipovRoman Автор
        26.07.2015 22:25

        К сожалению, после выгрузки на Хабр, гиф анимация почему то не доходит до конца.


    1. Alexeyslav
      27.07.2015 15:09

      Странно, но на графиках выше красным был обозначен подъем, а тут красный — спуск… так и надо, или ошибка?


      1. OsipovRoman Автор
        27.07.2015 15:16
        +1

        Когда я делал 3D вариант случайно перепутал цвета. Все остальное верно, безусловно.


  1. dtestyk
    26.07.2015 18:56

    Вы брали средний график высот по 27 поездкам? Интересно было бы увидеть разброс(больше он или меньше на пиках).


  1. genixg
    27.07.2015 09:45

    Тут не учтены такие факторы, как встречный/попутный ветер, загруженность дорог и светофоры, которые сильно влияют на итоговое время. Да и сердечный ритм неплохо бы тоже учитывать, т.к. усилие может быть приложено каждый день разное, в зависимости от настроения и даже общего состояния (выспался/не выспался, к примеру).
    Есть еще над чем работать!


    1. OsipovRoman Автор
      27.07.2015 09:50

      Из статьи вы видели, что это частное исследование конкретного человека. Про сердечный ритм еще ясно, но как будет учитывать все остальное человек, едущий на работу?
      Сфетофоры можно просто удалять, равно как и остановки, когда видно, что находишься в одной точке продолжительное время (скажем, более 1 сек).
      В остальном ваш комментарий конечно имеет здравое зерно, но с тем же успехом можно еще учитывать погодные явления, различное содержание кислорода на разной высоте, общую освещенность и пр. и пр.
      Всего учесть нельзя, да и не нужно. Интегральные характеристики сами по себе учитывают эти факторы.