将到达和离开日期转换为电力需求曲线

问题描述 投票:0回答:1

我有到达港口停泊时消耗电力的船舶的到达和出发日期。我只是想累积他们的功率需求,以了解端口每分钟消耗的总功率。

例如:

Ship1 于 2019 年 1 月 1 日 02:10 到达,于 2019 年 1 月 1 日 22:25 出发,需要 100 kW。

Ship2 于 2019 年 1 月 1 日 16:35 到达,于 2019 年 2 月 1 日 08:10 出发,需要 150 kW。 等等。

我想知道端口向它们提供所需的功率,例如以分钟为单位的时间。因此,我可以在 y 轴上得到港口向船舶提供的总功率(以千瓦为单位),在 y 轴上得到以分钟为单位的时间。 有没有一种聪明的方法可以在 MATLAB 或 Python 中做到这一点?非常感谢提前

python matlab
1个回答
0
投票

无论使用哪种编程语言,其想法都是简单地将差异数组转换为原始数组。

具体来说,假设数据是用 Python 构建的

data = [
    (datetime(2019, 1, 1, 2, 10), datetime(2019, 1, 1, 22, 25), 100),
    (datetime(2019, 1, 1, 16, 35), datetime(2019, 1, 2, 8, 10), 150)
]

以下代码获取船舶到达或离开时的时间和功率,

from itertools import accumulate
from collections import defaultdict
import matplotlib.pyplot as plt

# Compute changes of power
dic = defaultdict(lambda: int)
for arrive, depart, power in data:
    dic[arrive] += power
    dic[depart] -= power

# Sort by date
x, y = zip(*sorted(dic.items(), key=lambda i: i[0]))

# Convert to original power
y = accumulate((0,) + y)

# Plot
plt.plot(
    [t for t in x for _ in range(2)],
    [p for p in y for _ in range(2)][1:-1],
    'o-'
)

结果:

result1

或者,如果您需要每一分钟的力量,那就

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(data, columns=('arrive', 'depart', 'power'))
xmin = df.arrive.min() - np.timedelta64(4, 'h')
xmax = df.depart.max() + np.timedelta64(4, 'h')
x = np.arange(xmin, xmax, np.timedelta64(1, 'm'))

y = np.zeros(x.shape)
np.add.at(y, (df.arrive - xmin).to_numpy().astype('timedelta64[m]').astype(int), +df.power)
np.add.at(y, (df.depart - xmin).to_numpy().astype('timedelta64[m]').astype(int), -df.power)

y = np.cumsum(y)

plt.plot(x, y, 'o-')

结果:

result2

© www.soinside.com 2019 - 2024. All rights reserved.