Страница 1 из 1

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

Добавлено: Вт фев 19, 2013 10:58 am
plochish
Джентельмены, стоит следующая задача:

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

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

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

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

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

Добавлено: Вт фев 19, 2013 11:27 am
.Biv.
Есть вот отличный опенсорс проект по теме (сам использую с 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: .

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

Добавлено: Вт фев 19, 2013 11:40 am
plochish
График это вторично на самом деле. Главная задача написать функцию принимающую один массив и выдающую второй (значительно более компактный).

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

Добавлено: Чт фев 21, 2013 5:56 pm
Suche
Попробуйте такой алгоритм:
1. Сгладить данные (например усреднить за 1 час). На выходе будет скользящее среднеее.
2. Сделайте ресемплинг каждые пол-часа.

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

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

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

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

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

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

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

Добавлено: Пт фев 22, 2013 4:58 pm
plochish
Думаю в таком случае будем считать вопрос закрытым: остановлюсь на медиане заданого промежутка.
Всем спасибо.