Как рассчитать энергию, произведенную выше значения мощности, используя интеграл с пандами?

Что у меня есть?

У меня есть df pd.DataFrame со столбцом «мощность» и столбцом «отметка времени». У меня также есть значение мощности, которое называется «x_power».

Чего я хочу?

Я пытаюсь выяснить, сколько энергии производится выше и ниже «x_power» (например, x_power = 900), для этого я думаю сделать интеграл:

Ось у - мощность

Ось x - метка времени

Розовая область - произведенная энергия выше x_power

Зеленая зона - произведенная энергия ниже x_power

from scipy.interpolate import InterpolatedUnivariateSpline

x = df['timestamp'].to_numpy()
y = df['power'].to_numpy()
max = np.max(x)
min = np.min(x)

f = InterpolatedUnivariateSpline(x, y, k=1)  # k=1 gives linear interpolation

f.integral(min , max)

Выход - это область под графиком.

Есть ли простой способ рассчитать выше и ниже «x_power» без многократного интегрирования?

Я не понимаю, что вы подразумеваете под «интегральной» и «множественной интеграцией» в этом контексте. Пожалуйста, включите некоторые примеры данных (с кодом), ожидаемый результат и то, что вы пробовали до сих пор, в основной пост.

navneethc 20.12.2020 14:03

Как возможно, что ваша синяя кривая идет назад во времени с отметкой времени 32280 - 32290?

Stef 20.12.2020 16:04

Это ошибка, но она не имеет отношения к вопросу

Dean Taler 20.12.2020 16:10

Так как pandas... особенный в этом: столбец действительно является отметкой времени, а не datetime или float/int (как указано на вашем графике)?

Mr. T 20.12.2020 16:14

Да, это временная метка, мой график - это пример, который я сделал вручную в Excel

Dean Taler 20.12.2020 16:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Некоторые методы, о которых вы не знали, что они существуют в Python.
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
453
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы интегрировать площадь нашего графика по x_power, вам нужно "опустить" ваши значения y таким образом, чтобы "новый 0" находится на уровне x_power.

Затем вы должны обрезать отрицательные значения до нуля.

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

Код для этого:

intStep = 1    # Interpolation step
# Interpolated x and y
xInt = np.arange(min, max + 1, intStep)
yInt = (np.interp(xInt, x, y) - x_power).clip(min=0)

Чтобы увидеть эту строку, вы можете запустить:

fig, ax = plt.subplots()
ax.grid(True)
plt.plot(xInt, yInt)
plt.show()

А чтобы интегрировать эту функцию, запустите свой код, но на приведенных выше исходных данных:

f = InterpolatedUnivariateSpline(xInt, yInt, k=1)
result = f.integral(min, max)

Другие вопросы по теме