2016-06-27 3 views
1

У меня есть таблица температурных данных, обновляемая каждые 5-15 минут несколькими датчиками. Данные по существу таковы: уникальный идентификатор, устройство (идентификатор датчика), временная метка, значение (поплавок) Датчики не имеют точных часов, поэтому показания обречены на перекос с течением времени, поэтому я не могу использовать вещи как группа за часом в mysql, чтобы получить последние 24 часа данных о температуре. Моим решением в качестве программиста php было бы сделать предварительный процессор, который считывает все не обработанные показания и «присоединяется к ним» в таблице. Должны быть другие, чем я, у кого есть эта потребность в «уменьшении» х-минуты/часа, с точностью до одного часа, чтобы использовать в let say graphing.Преобразование данных нерегулярных временных рядов mysql в регулярную последовательность

Моя проблема заключается в том, как вычислить значение округленного часа из одного или нескольких показаний.

Например, у меня есть 12 показаний за 2,5 часа, и для всех этих чтений мне нужно явное значение для каждого целого часа.

данные:

Date     Device Value 
2016-06-27 12:15:15, TA,  23.5 
2016-06-27 12:30:19, TA,  23.1 
2016-06-27 12:45:35, TA,  22.9 
2016-06-27 13:00:55, TA,  22.5 
2016-06-27 13:05:15, TA,  22.8 
2016-06-27 13:35:35, TA,  23.2 

Я не так много в статистическую математику, так что «стандартное отклонение» и любит это Citys в России для меня.

Кроме того, устройства иногда засыпают и не всегда передают температуру.

Не стесняйтесь спрашивать меня, чтобы добавить информацию к вопросу, так как я не уверен, что вы, ребята, должны ответить на это.

Наиболее важные детали: 1. Я использую MySQL, и это не изменится. 2. Я надеюсь на решение (или подсказки) в php, хотя советы на многих других языках также помогли бы мне понять. Я, прежде всего, программист PHP, поэтому ответы на этом языке будут оценены наиболее высоко.

Редактировать: Я хотел бы указать несколько пунктов. Поскольку данные времени, записанные с датчиков, могут быть неточными, я полагаюсь на время вставки SQL. Таким образом, время контролируется только одним устройством, контроллер, который вставляет данные.

Например, если я выбираю 30 временных меток/значений в 24-часовом периоде, я хотел бы «объединить» их с 24 парами меток времени/значений, используя среднее значение для объединения переполняющих данных. Я не так хорошо объясняю, но я надеюсь, что это станет более ясным.

Кроме того, хотелось бы либо чистого SQL-способа сделать это, но и PHP-способом цикла через 30 строк для создания 24 целых рядов данных.

Моя цель состоит в том, чтобы иметь один ряд на каждый час, с точной меткой времени и значением температуры. В основном потому, что большинство графических библиотек ожидают такого ввода. Особенно, когда у меня на графике больше одной серии.

В какой-то момент мне может показаться полезным показать график, скажем, последние шесть часов с точностью до 15 минут.

Ключ в том, что я не хочу менять исходные данные, просто найдите способ извлечь/вычислить линейные результаты.

+0

голосование закрывается слишком широко. но как именно вы хотите обрабатывать данные, если время нет и не может быть точным? означает, что значение '13: 00: 55' должно учитываться в группе« 1 вечера », или это может быть« 12 вечера », потому что часы выключены на 56 секунд? возможно, если ваш датчик передал то, что было время, когда они взяли чтение, вы могли нормализоваться перед тем, как идти в дБ. «Хм, датчик сказал, что это 12:03 вечера, но это действительно 12:04, поэтому датчик отключен на 1 минуту». –

+0

@Bob Вы можете, вероятно, использовать [автоматическую инициализацию] (http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html) своего временного столбца, когда вы получаете данные от датчиков. Таким образом, вы можете игнорировать данные времени от датчиков, поскольку считаете их неточными. – postrel

+0

Дело в том, что если я получу чтение с отметкой времени 11:55:00 и более поздним чтением с отметкой времени 12:05:00, я бы хотел рассчитать среднее значение из двух в 12:00:00, чтобы иметь возможность использовать его в моем графике. Очевидно, что это не сработает, если у меня нет значения по обе стороны от желаемой отметки времени (12:00:00), но я могу игнорировать «будущие» значения, пока не получу новое чтение. Итак, это «формула», за которой я следую, как конвертировать «11: 55: 00,16.6» и «12: 05: 00,16.8» в «12: 00: 00,16.7» (используя симпатичные цифры) – Bob

ответ

0

Как я попытался бы справиться с этим;

Оценить начальную стоимость дня; 01/01/2016 00:00:00 и делать 'между' 'sql' в MySQL, прогрессируя каждый час.Итак, первый «sql» был бы похож;

'выберите avg (temp_value) из таблицы, где дата между 01/01/2016 00:00:00 и 01/01/2016 00:59:99' и прогресс по часам.

Неверный код, и весь 24-часовой период может быть записан программно, но я думаю, что это запустит вас на вашем пути.

+0

Тогда мне понадобится один SQL для каждого часа для 24-часового запроса, я надеялся, что смогу использовать какую-нибудь умную группировку, чтобы получить более длинный диапазон набор результатов с одним запросом. Или, может быть, какая-то формула, которую я мог бы использовать, когда я получаю результаты 24-го запроса для создания массива из 24 элементов со значениями для каждого целого часа. Я понимаю, что это очень широко, и я готов принять этот ответ, если у кого-то есть некоторые примеры кода/библиотеки, которые могли бы помочь. Я, вероятно, могу сделать некоторые умные программы для его решения, но я не хочу изобретать колесо;) – Bob

+0

Это сайт помощи, я сомневаюсь, что у людей будут готовые решения. если вы знаете php, это действительно не так сложно. Если вам нужно готовое решение, вы можете использовать сайт, например, elance, и опубликовать задание. Или я могу сделать это для мула. ИЛИ вы можете начать с кода и обратиться за помощью, когда застрянете. Люди не рождаются умными, их желание учиться делает их умными :) – bluepinto

Смежные вопросы