Подсчет количества шипов на графике в python - PullRequest
0 голосов
/ 05 февраля 2020

С набором данных df Я построил график, похожий на следующий:

df

Time    Temperature
8:23:04     18.5
8:23:04     19
9:12:57     19
9:12:57     20
9:12:58     20
9:12:58     21
9:12:59     21
9:12:59     23
9:13:00     23
9:13:00     25
9:13:01     25
9:13:01     27
9:13:02     27
9:13:02     28
9:13:03     28

График (в целом) enter image description here

При увеличении данных мы можем видеть более подробную информацию:

enter image description here

Я хотел бы посчитать количество активаций этого измерения температуры устройство, которое вызывает повышение температуры резко. Я определил активацию следующим образом:

Пусть T0, T1, T2, T3 - температура в момент времени t = 0, t = 1, t = 2, t = 3 и d0 = T1-T0, d1 = T2-T1, d2 = T3-T2, ... будет разностью двух смежных значений.

Если

1) d0 ≥ 0 и d1 ≥ 0 и d2 ≥ 0, и

2) T2-T0> max (d0, d1, d2) и

3) T2-T0 <30 секунд </p>

Это считается активацией. Я хочу посчитать, сколько всего активаций. Какой хороший способ сделать это?

Спасибо.

1 Ответ

1 голос
/ 05 февраля 2020

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

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

import numpy as np

# Data
x = np.array([0, 1, 2, 50, 51, 52, 53, 100, 99, 98, 97, 96, 10, 9, 8, 80])

# Data diff
xdiff = x[1:] - x[0:-1]

# Find mean change
xdiff_mean = np.abs(xdiff).mean()

# Identify all indices greater than the mean
spikes = xdiff > abs(xdiff_mean)+1
print(x[1:][spikes])  # prints 50, 100, 80
print(np.where(spikes)[0]+1)  # prints 3, 7, 15

Вы также можете посмотреть использование отклонения выброса, которое было бы намного умнее, чем это базовое c сравнение со средней разницей. Есть много ответов о том, как это сделать: Может ли scipy.stats идентифицировать и маскировать явные выбросы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...