#python #pandas
#python #pandas
Вопрос:
Представлено в качестве примера.
Два набора данных. Один из них был собран в течение 1 часа. Один из них был собран в течение 20 минут в течение этого часа.
Каждый набор данных содержит экземпляры событий, которые могут быть преобразованы в отдельные столбцы true ( -
) или false ( _
), представляющие, происходит событие или нет.
DS1.событие:
_-__-_--___----_-__--_-__---__
DS2.событие:
__--_-__--
Я ищу способ автоматизировать корреляцию (поправьте меня, если терминология неверна) двух наборов данных и найти смещение (ы) в DS1, при котором DS2 с наибольшей вероятностью (top x many) произошел. Вероятно, в итоге получится некоторый процент совпадения, который я затем смогу установить пороговым значением для определения достоверности совпадения.
Такое, что
_-__-_--___----_-__--_-__---__
__--_-__--
DS1.start 34min ~ = DS2.start
Дополнительная информация:
DS1 был записан с частотой примерно 1 Гц. DS2 — примерно с частотой 30 Гц. Это снижает вероятность 100% чистого совпадения.
Альтернативные методы (для pandas) будут оценены по достоинству, но python / pandas — это то, что есть в моем распоряжении.
Комментарии:
1. Можете ли вы использовать
numpy.convolve
и найти максимум этого?
Ответ №1:
Похоже, вы просто хотите что-то вроде взаимной корреляции?
Я бы сначала преобразовал строку в числовое представление, поэтому замените ваше -
и _
на 1
и 0
Вы можете сделать это с помощью replace
метода strings (например signal.replace("-", "1")
)
Преобразуйте их в список или массив numpy:
event1 = [int(x) for x in signal1]
event2 = [int(x) for x in signal2]
Затем вычислите взаимную корреляцию между ними:
xcor = np.correlate(event1, event2, "full")
Это даст вам значение взаимной корреляции при каждом временном запаздывании. Вы просто хотите найти наибольшее значение и временную задержку, с которой это происходит:
nR = max(xcor)
maxLag = np.argmax(xcor) # I imported numpy as np here
Предоставляя вам что-то вроде:
Cross correlation value: 5
Lag: 20
Похоже, здесь вас больше интересует значение задержки. По сути, задержка говорит вам о том, сколько временных / позиционных сдвигов требуется для получения максимального значения взаимной корреляции (степени соответствия) между вашими двумя сигналами
Возможно, вы захотите взглянуть на документы для np.correlate
и np.convolve
определения метода (полного, одинакового или допустимого), который вы хотите использовать, поскольку это определяется длиной ваших данных и тем, что вы хотите получить, если ваши сигналы имеют разную длину
Комментарии:
1. Я попробую это сделать.
-
И_
должны были быть репрезентативными. На самом деле это были бы значения логического типа. Будет ли это обрабатывать разницу в плотности выборки или мне нужно сначала выполнить выборку одного набора данных?2. Извините — я пропустил часть о частоте дискретизации в вопросе. В обоих случаях взаимной корреляции и свертки вы в основном берете один сигнал и накладываете его на другой. Вам, скорее всего, придется отключить выборку, потому что в противном случае ваши 2 сигнала будут по существу в разных масштабах. Я не уверен, как бы вы это сделали без выборки вверх / вниз