В погоне за самим собой, или отличный способ начать свой день

http://blog.wolfram.com/2015/03/24/a-rat-race-or-a-great-way-to-start-the-day/
  • Перевод

Перевод поста 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.
Wolfram Research 45,20
Wolfram Language, Mathematica, Wolfram Alpha и др.
Поделиться публикацией
Комментарии 13
  • 0
    Анимацию гонки конечно бы лучше нарисовать ему было на графике с высотами =)
    • +1
      Это не сложно сделать:
      • 0
        Подозреваю, что имелся в виду график «вид сбоку».
        • 0
          Вы это имеете ввиду?
          Визуализируем участки подъёмов и спусков утренней поездки на графике высот:


          Этот график следует называть именно графиком высот, потому что он изображает функцию, значение которой соответствует высоте.
          Примеры: график синуса, график изменения угла подъёма и т.п. То есть обычно они именуются по тому, какой смысл вкладывается в значения соответствующей им функции. В данном случае это высота.
          • 0
            Это гениально. Но хотелось бы на графике высот увидеть пелетон. На спусках он должен растягиваться, на подъемах сжиматься, очень любопытно. На проекции сверху это плохо видно из-за синуса проклятого.
      • +5
        Прилагаю сделанную анимацию (качество картинки, к сожалению, упало из-за экспорта в gif и минимизации веса полученной gif-анимации):

        • +1
          О спасибо большое! Отличная иллюстрация. Отлично видно как «лидер» в горочку прет мощно.
          • 0
            К сожалению, после выгрузки на Хабр, гиф анимация почему то не доходит до конца.
          • 0
            Странно, но на графиках выше красным был обозначен подъем, а тут красный — спуск… так и надо, или ошибка?
            • +1
              Когда я делал 3D вариант случайно перепутал цвета. Все остальное верно, безусловно.
          • 0
            Вы брали средний график высот по 27 поездкам? Интересно было бы увидеть разброс(больше он или меньше на пиках).
            • 0
              Тут не учтены такие факторы, как встречный/попутный ветер, загруженность дорог и светофоры, которые сильно влияют на итоговое время. Да и сердечный ритм неплохо бы тоже учитывать, т.к. усилие может быть приложено каждый день разное, в зависимости от настроения и даже общего состояния (выспался/не выспался, к примеру).
              Есть еще над чем работать!
              • 0
                Из статьи вы видели, что это частное исследование конкретного человека. Про сердечный ритм еще ясно, но как будет учитывать все остальное человек, едущий на работу?
                Сфетофоры можно просто удалять, равно как и остановки, когда видно, что находишься в одной точке продолжительное время (скажем, более 1 сек).
                В остальном ваш комментарий конечно имеет здравое зерно, но с тем же успехом можно еще учитывать погодные явления, различное содержание кислорода на разной высоте, общую освещенность и пр. и пр.
                Всего учесть нельзя, да и не нужно. Интегральные характеристики сами по себе учитывают эти факторы.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое