Джентельмены, стоит следующая задача:
База данных содержит значение сенсора. Данных много: сохранена каждая секунда в течении года.
Необходимо построить график. В предыдущие годы я ограничивался графиком строго для определенного дня: база быстро возвращала мне 86к значений, толковый чарт контрол включал семплирование и рисовался замечательный график с возможностью зуминга/скролинга.
Возникла идея отображения динамики за год - сразу встал вопрос а как построить чарт на основании гигантского кол-ва точек. Должен быть алгоритм как из одного множества получить второе множество (н-р график доу джонс за 50 лет - как они это делают): у меня бы тогда в базе хранилась бы еще и семплированя версия и мега график строился бы быстро и гладко.
Может умные люди чего подскажут ?
Вопрос про семплирование
-
- Сообщения:31
- Зарегистрирован:Сб май 12, 2007 7:51 am
- .Biv.
- Гуру
- Сообщения:2334
- Зарегистрирован:Ср янв 30, 2008 9:06 am
Re: Вопрос про семплирование
Есть вот отличный опенсорс проект по теме (сам использую с Python в сборке Python(x,y), как альтернативу MATLAB А в комбинации с IPython web-based notebook )
http://matplotlib.org/ , http://sourceforge.net/projects/matplotlib/
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.
"Песец всеяден, в состав его корма входит 125 видов животных и 25 видов растений. Однако его основу составляют мелкие грызуны, особенно лемминги" (Wiki)
-
- Сообщения:31
- Зарегистрирован:Сб май 12, 2007 7:51 am
Re: Вопрос про семплирование
График это вторично на самом деле. Главная задача написать функцию принимающую один массив и выдающую второй (значительно более компактный).
- Suche
- Новичок
- Сообщения:247
- Зарегистрирован:Сб апр 22, 2006 8:25 am
Re: Вопрос про семплирование
Попробуйте такой алгоритм:
1. Сгладить данные (например усреднить за 1 час). На выходе будет скользящее среднеее.
2. Сделайте ресемплинг каждые пол-часа.
У вас будет 365*24*2 точек. Значение каждой точки - среднее за +/- 30 минут от её времени.
Алгоритм можно прокачать, заменив среднее на мах, мин, медиану, стд. и т.п.
1. Сгладить данные (например усреднить за 1 час). На выходе будет скользящее среднеее.
2. Сделайте ресемплинг каждые пол-часа.
У вас будет 365*24*2 точек. Значение каждой точки - среднее за +/- 30 минут от её времени.
Алгоритм можно прокачать, заменив среднее на мах, мин, медиану, стд. и т.п.
-
- Сообщения:31
- Зарегистрирован:Сб май 12, 2007 7:51 am
Re: Вопрос про семплирование
Я реализовал как раз такой подход. И это очень сильно похоже на то, что делают всякие чарт контролы. Вопрос в том насколько это математически корректно. А так да - это на данный момент моя рабочая версия: разбиваем промежуток на участки, на участках считаем некий агрегат (вот на каком остановиться), и все дюже быстро. Просто чтобы серьезные пацаны меня не засмеяли с таким подходом :)
- Prostovasya
- Сообщения:54
- Зарегистрирован:Сб фев 11, 2006 12:26 pm
Re: Вопрос про семплирование
Математически корректно будет любой подход в зависимости от того, какая цель стоит. Даунсемплирование всегда связано с некоторой потерей данных. Поэтому перед данной процедурой нужно определить приоритеты. Если стоит цель показать общий характер процессов, то можно использовать скользящее среднее, если оценка разброса показаний датчика, то макс и мин. и тд.Я реализовал как раз такой подход. И это очень сильно похоже на то, что делают всякие чарт контролы. Вопрос в том насколько это математически корректно. А так да - это на данный момент моя рабочая версия: разбиваем промежуток на участки, на участках считаем некий агрегат (вот на каком остановиться), и все дюже быстро. Просто чтобы серьезные пацаны меня не засмеяли с таким подходом :)
Подумай дважды перед тем, как съесть самгебсаль!!!
-
- Сообщения:31
- Зарегистрирован:Сб май 12, 2007 7:51 am
Re: Вопрос про семплирование
Думаю в таком случае будем считать вопрос закрытым: остановлюсь на медиане заданого промежутка.
Всем спасибо.
Всем спасибо.