Вопрос про семплирование

Вопросы, ответы, дискуссии на технические темы. А также сообщения о багах и советы по поводу организации, оформлению и улучшению функциональности форума.
Ответить
plochish
Сообщения:31
Зарегистрирован:Сб май 12, 2007 7:51 am
Вопрос про семплирование

Сообщение plochish » Вт фев 19, 2013 10:58 am

Джентельмены, стоит следующая задача:

База данных содержит значение сенсора. Данных много: сохранена каждая секунда в течении года.

Необходимо построить график. В предыдущие годы я ограничивался графиком строго для определенного дня: база быстро возвращала мне 86к значений, толковый чарт контрол включал семплирование и рисовался замечательный график с возможностью зуминга/скролинга.

Возникла идея отображения динамики за год - сразу встал вопрос а как построить чарт на основании гигантского кол-ва точек. Должен быть алгоритм как из одного множества получить второе множество (н-р график доу джонс за 50 лет - как они это делают): у меня бы тогда в базе хранилась бы еще и семплированя версия и мега график строился бы быстро и гладко.

Может умные люди чего подскажут ?

Аватара пользователя
.Biv.
Гуру
Сообщения:2334
Зарегистрирован:Ср янв 30, 2008 9:06 am

Re: Вопрос про семплирование

Сообщение .Biv. » Вт фев 19, 2013 11:27 am

Есть вот отличный опенсорс проект по теме (сам использую с Python в сборке Python(x,y), как альтернативу MATLAB :co_ol: А в комбинации с IPython web-based notebook :co_ol: :co_ol: :co_ol: )
http://matplotlib.org/ , http://sourceforge.net/projects/matplotlib/
matplotlib is a python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python and ipython shell (ala MATLAB®* or Mathematica®†), web application servers, and six graphical user interface toolkits.
Вот там если что понравилось, можно покопаться в исходниках :cry_ing: .
"Песец всеяден, в состав его корма входит 125 видов животных и 25 видов растений. Однако его основу составляют мелкие грызуны, особенно лемминги" (Wiki)

plochish
Сообщения:31
Зарегистрирован:Сб май 12, 2007 7:51 am

Re: Вопрос про семплирование

Сообщение plochish » Вт фев 19, 2013 11:40 am

График это вторично на самом деле. Главная задача написать функцию принимающую один массив и выдающую второй (значительно более компактный).

Аватара пользователя
Suche
Новичок
Сообщения:247
Зарегистрирован:Сб апр 22, 2006 8:25 am

Re: Вопрос про семплирование

Сообщение Suche » Чт фев 21, 2013 5:56 pm

Попробуйте такой алгоритм:
1. Сгладить данные (например усреднить за 1 час). На выходе будет скользящее среднеее.
2. Сделайте ресемплинг каждые пол-часа.

У вас будет 365*24*2 точек. Значение каждой точки - среднее за +/- 30 минут от её времени.

Алгоритм можно прокачать, заменив среднее на мах, мин, медиану, стд. и т.п.

plochish
Сообщения:31
Зарегистрирован:Сб май 12, 2007 7:51 am

Re: Вопрос про семплирование

Сообщение plochish » Пт фев 22, 2013 12:28 pm

Я реализовал как раз такой подход. И это очень сильно похоже на то, что делают всякие чарт контролы. Вопрос в том насколько это математически корректно. А так да - это на данный момент моя рабочая версия: разбиваем промежуток на участки, на участках считаем некий агрегат (вот на каком остановиться), и все дюже быстро. Просто чтобы серьезные пацаны меня не засмеяли с таким подходом :)

Аватара пользователя
Prostovasya
Сообщения:54
Зарегистрирован:Сб фев 11, 2006 12:26 pm

Re: Вопрос про семплирование

Сообщение Prostovasya » Пт фев 22, 2013 4:38 pm

Я реализовал как раз такой подход. И это очень сильно похоже на то, что делают всякие чарт контролы. Вопрос в том насколько это математически корректно. А так да - это на данный момент моя рабочая версия: разбиваем промежуток на участки, на участках считаем некий агрегат (вот на каком остановиться), и все дюже быстро. Просто чтобы серьезные пацаны меня не засмеяли с таким подходом :)
Математически корректно будет любой подход в зависимости от того, какая цель стоит. Даунсемплирование всегда связано с некоторой потерей данных. Поэтому перед данной процедурой нужно определить приоритеты. Если стоит цель показать общий характер процессов, то можно использовать скользящее среднее, если оценка разброса показаний датчика, то макс и мин. и тд.
Подумай дважды перед тем, как съесть самгебсаль!!!

plochish
Сообщения:31
Зарегистрирован:Сб май 12, 2007 7:51 am

Re: Вопрос про семплирование

Сообщение plochish » Пт фев 22, 2013 4:58 pm

Думаю в таком случае будем считать вопрос закрытым: остановлюсь на медиане заданого промежутка.
Всем спасибо.

Ответить