Страница 1 из 1
Вопрос про семплирование
Добавлено: Вт фев 19, 2013 10:58 am
plochish
Джентельмены, стоит следующая задача:
База данных содержит значение сенсора. Данных много: сохранена каждая секунда в течении года.
Необходимо построить график. В предыдущие годы я ограничивался графиком строго для определенного дня: база быстро возвращала мне 86к значений, толковый чарт контрол включал семплирование и рисовался замечательный график с возможностью зуминга/скролинга.
Возникла идея отображения динамики за год - сразу встал вопрос а как построить чарт на основании гигантского кол-ва точек. Должен быть алгоритм как из одного множества получить второе множество (н-р график доу джонс за 50 лет - как они это делают): у меня бы тогда в базе хранилась бы еще и семплированя версия и мега график строился бы быстро и гладко.
Может умные люди чего подскажут ?
Re: Вопрос про семплирование
Добавлено: Вт фев 19, 2013 11:27 am
.Biv.
Есть вот отличный опенсорс проект по теме (сам использую с Python в сборке
Python(x,y), как альтернативу MATLAB
А в комбинации с
IPython web-based notebook
)
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.
Вот там если что понравилось, можно покопаться в исходниках
.
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
Думаю в таком случае будем считать вопрос закрытым: остановлюсь на медиане заданого промежутка.
Всем спасибо.