You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB/Python中按分钟统计港口船舶靠泊总用电需求?

高效实现港口分钟级总供电功率计算与可视化

核心思路是用事件差分法:只记录功率发生变化的时间点(船舶抵港/离港),通过累加这些变化量得到各时间点的总功率,再补全分钟级序列。这种方法无需遍历每一分钟,在数据量大时效率远高于逐分钟统计。


Python 实现方案

使用 pandas 处理时间序列,matplotlib 绘图,步骤如下:

1. 准备数据与时间转换

import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime

# 示例数据:船舶名、抵港时间、离港时间、功率
ship_data = [
    ["Ship1", "2019-01-01 02:10", "2019-01-01 22:25", 100],
    ["Ship2", "2019-01-01 16:35", "2019-01-02 08:10", 150]
]

# 转换为DataFrame并解析时间
df = pd.DataFrame(ship_data, columns=["name", "arrival", "departure", "power"])
df["arrival"] = pd.to_datetime(df["arrival"])
df["departure"] = pd.to_datetime(df["departure"])

# 计算所有时间的起始点(最早抵港时间),统一转换为分钟数
start_time = df["arrival"].min()
df["arrival_min"] = (df["arrival"] - start_time).dt.total_seconds() // 60
df["departure_min"] = (df["departure"] - start_time).dt.total_seconds() // 60

2. 生成功率变化事件

# 构造事件:抵港+功率,离港-功率
events = []
for _, row in df.iterrows():
    events.append({"time_min": row["arrival_min"], "delta": row["power"]})
    events.append({"time_min": row["departure_min"], "delta": -row["power"]})

# 转为DataFrame并按时间排序
events_df = pd.DataFrame(events).sort_values("time_min").reset_index(drop=True)

# 计算累计功率
events_df["total_power"] = events_df["delta"].cumsum()

3. 补全分钟级序列并绘图

# 生成完整的分钟序列(从起始到最晚离港)
max_min = df["departure_min"].max()
full_time = pd.Series(range(int(max_min) + 1), name="time_min")

# 合并事件数据,填充缺失值(前向填充,保证每个分钟的功率正确)
full_power = pd.merge(full_time, events_df, on="time_min", how="left")
full_power["total_power"] = full_power["total_power"].ffill().fillna(0)

# 绘图
plt.figure(figsize=(12, 6))
plt.plot(full_power["time_min"], full_power["total_power"], linewidth=1.5)
plt.xlabel("时间(分钟,相对于最早抵港时间)")
plt.ylabel("总供电功率(kW)")
plt.title("港口分钟级总供电功率曲线")
plt.grid(True, alpha=0.3)
plt.show()

MATLAB 实现方案

利用 MATLAB 的 datetime 和 timetable 工具,同样基于事件差分法:

1. 准备数据与时间转换

% 示例数据
ship_names = ["Ship1", "Ship2"];
arrival_times = datetime(["2019-01-01 02:10", "2019-01-01 16:35"]);
departure_times = datetime(["2019-01-01 22:25", "2019-01-02 08:10"]);
powers = [100, 150];

% 计算起始时间,转换为分钟数
start_time = min(arrival_times);
arrival_min = minutes(arrival_times - start_time);
departure_min = minutes(departure_times - start_time);

2. 生成功率变化事件

% 构造事件时间和功率变化量
event_times = [arrival_min; departure_min];
delta_powers = [powers; -powers];

% 按时间排序事件
[event_times_sorted, idx] = sort(event_times);
delta_powers_sorted = delta_powers(idx);

% 计算累计功率
total_power = cumsum(delta_powers_sorted);

3. 补全分钟级序列并绘图

% 生成完整的分钟时间轴
max_min = max(departure_min);
full_time = 0:max_min;

% 插入功率数据(前向填充)
full_power = interp1(event_times_sorted, total_power, full_time, 'previous', 0);

% 绘图
figure('Position', [100, 100, 800, 400])
plot(full_time, full_power, 'LineWidth', 1.5)
xlabel('时间(分钟,相对于最早抵港时间)')
ylabel('总供电功率(kW)')
title('港口分钟级总供电功率曲线')
grid on
grid minor

内容的提问来源于stack exchange,提问作者Ameen Mohamed Bassam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 19:37:49