236 lines
7.4 KiB
Markdown
236 lines
7.4 KiB
Markdown
# 多场景聚类分析模块说明
|
||
|
||
## 模块概述
|
||
|
||
`multi_scenario.py` 是一个专门用于多维时间序列数据聚类分析的Python模块。该模块能够同时对光伏出力、风电出力和负荷需求进行聚类分析,识别不同的运行场景,提取典型场景,并生成详细的分析报告。
|
||
|
||
## 核心功能
|
||
|
||
### 1. 多维数据聚类
|
||
- **同时聚类**:光伏、风电、负荷三个维度同时进行聚类分析
|
||
- **特征标准化**:自动对多维数据进行标准化处理
|
||
- **智能命名**:根据聚类中心自动生成场景名称(如"场景1(高光伏+中风电+高负荷)")
|
||
|
||
### 2. 最优聚类数确定
|
||
- **肘部法则**:通过分析聚类内误差和确定最优聚类数
|
||
- **轮廓系数**:计算聚类质量,选择轮廓系数最高的聚类数
|
||
- **自动化选择**:支持自动寻找最优聚类数
|
||
|
||
### 3. 场景特征分析
|
||
- **统计信息**:计算各场景的光伏、风电、负荷的均值和标准差
|
||
- **频率统计**:分析各场景的出现频率和持续时间
|
||
- **特征对比**:生成雷达图对比不同场景的特征
|
||
|
||
### 4. 典型日提取
|
||
- **完整日识别**:自动识别各场景的完整代表日
|
||
- **典型曲线**:提取每个场景的典型日内变化曲线
|
||
- **场景标记**:记录典型日对应的年内的天数
|
||
|
||
### 5. 可视化分析
|
||
- **9宫格综合图表**:包含场景分布、频率、特征、典型日等
|
||
- **时间序列展示**:展示8760小时数据的场景分布
|
||
- **统计分析表格**:生成详细的场景统计摘要
|
||
|
||
### 6. 结果导出
|
||
- **Excel报告**:导出包含时间序列、统计、典型日的完整报告
|
||
- **图表保存**:保存高质量的分析图表
|
||
- **参数记录**:记录聚类参数和分析时间
|
||
|
||
## 主要类和函数
|
||
|
||
### MultiScenarioAnalyzer 类
|
||
|
||
#### 初始化参数
|
||
```python
|
||
MultiScenarioAnalyzer(n_clusters: int = 8, random_state: int = 42)
|
||
```
|
||
- `n_clusters`: 聚类数量,默认8个场景
|
||
- `random_state`: 随机种子,确保结果可重现
|
||
|
||
#### 核心方法
|
||
|
||
**fit_predict()** - 执行聚类分析
|
||
```python
|
||
result = analyzer.fit_predict(
|
||
solar_output, # 光伏出力曲线 (MW)
|
||
wind_output, # 风电出力曲线 (MW)
|
||
load_demand, # 负荷曲线 (MW)
|
||
find_optimal_k=False # 是否自动寻找最优聚类数
|
||
)
|
||
```
|
||
|
||
**plot_scenario_analysis()** - 生成分析图表
|
||
```python
|
||
analyzer.plot_scenario_analysis(
|
||
result, # 聚类结果
|
||
solar_output, # 光伏出力数据
|
||
wind_output, # 风电出力数据
|
||
load_demand, # 负荷数据
|
||
save_path=None, # 图片保存路径
|
||
show_plot=False # 是否显示图片
|
||
)
|
||
```
|
||
|
||
**export_scenario_results()** - 导出Excel报告
|
||
```python
|
||
excel_file = analyzer.export_scenario_results(
|
||
result, # 聚类结果
|
||
solar_output, # 光伏出力数据
|
||
wind_output, # 风电出力数据
|
||
load_demand, # 负荷数据
|
||
filename=None # 输出文件名
|
||
)
|
||
```
|
||
|
||
### ScenarioResult 数据类
|
||
|
||
存储聚类分析结果的容器:
|
||
```python
|
||
@dataclass
|
||
class ScenarioResult:
|
||
cluster_labels: np.ndarray # 每个时间点的场景标签
|
||
cluster_centers: np.ndarray # 各场景的聚类中心
|
||
scenario_names: List[str] # 场景名称
|
||
scenario_stats: Dict # 各场景统计信息
|
||
silhouette_score: float # 轮廓系数
|
||
n_scenarios: int # 场景数量
|
||
scenario_frequencies: np.ndarray # 各场景出现频率
|
||
typical_days: Dict # 典型日数据
|
||
```
|
||
|
||
## 使用示例
|
||
|
||
### 基础使用
|
||
```python
|
||
from src.multi_scenario import MultiScenarioAnalyzer
|
||
|
||
# 创建分析器
|
||
analyzer = MultiScenarioAnalyzer(n_clusters=6, random_state=42)
|
||
|
||
# 执行聚类分析
|
||
result = analyzer.fit_predict(solar_output, wind_output, load_demand)
|
||
|
||
# 输出结果
|
||
print(f"识别出 {result.n_scenarios} 个场景")
|
||
print(f"轮廓系数: {result.silhouette_score:.3f}")
|
||
for i, name in enumerate(result.scenario_names):
|
||
freq = result.scenario_frequencies[i]
|
||
print(f"{name}: 出现频率 {freq:.1%}")
|
||
```
|
||
|
||
### 自动寻找最优聚类数
|
||
```python
|
||
# 自动寻找最优聚类数
|
||
result = analyzer.fit_predict(
|
||
solar_output, wind_output, load_demand,
|
||
find_optimal_k=True
|
||
)
|
||
print(f"最优聚类数: {result.n_scenarios}")
|
||
```
|
||
|
||
### 生成分析图表
|
||
```python
|
||
# 生成综合分析图表
|
||
analyzer.plot_scenario_analysis(
|
||
result, solar_output, wind_output, load_demand,
|
||
save_path="scenario_analysis.png",
|
||
show_plot=True
|
||
)
|
||
```
|
||
|
||
### 导出详细报告
|
||
```python
|
||
# 导出Excel报告
|
||
excel_file = analyzer.export_scenario_results(
|
||
result, solar_output, wind_output, load_demand
|
||
)
|
||
print(f"报告已导出: {excel_file}")
|
||
```
|
||
|
||
## 输出文件说明
|
||
|
||
### Excel报告结构
|
||
|
||
**时间序列数据**工作表:
|
||
- 小时、天数、光伏、风电、负荷、场景标签、场景名称
|
||
|
||
**场景统计**工作表:
|
||
- 场景编号、名称、出现频率、各指标均值和标准差
|
||
|
||
**典型日数据**工作表:
|
||
- 各场景的典型日内24小时变化曲线
|
||
|
||
**分析参数**工作表:
|
||
- 聚类数量、轮廓系数、随机种子、分析时间
|
||
|
||
### 图表内容
|
||
|
||
生成的9宫格图表包含:
|
||
1. **场景时间分布** - 8760小时中各场景的分布情况
|
||
2. **场景频率饼图** - 各场景的出现频率
|
||
3. **聚类中心热力图** - 场景特征对比
|
||
4. **典型日曲线** - 前3个场景的日内变化
|
||
5. **场景特征雷达图** - 多维特征对比
|
||
6. **统计摘要表** - 关键指标汇总
|
||
7. **全年趋势图** - 日均值变化趋势
|
||
|
||
## 技术特点
|
||
|
||
### 1. 数据预处理
|
||
- 自动检测数据长度一致性
|
||
- 多维数据标准化处理
|
||
- 支持8760小时全年数据
|
||
|
||
### 2. 聚类算法
|
||
- 使用K-means聚类算法
|
||
- 通过轮廓系数评估聚类质量
|
||
- 支持自定义或自动确定聚类数
|
||
|
||
### 3. 场景理解
|
||
- 基于聚类中心自动生成场景描述
|
||
- 考虑光伏、风电、负荷的相对水平
|
||
- 提供直观的场景命名
|
||
|
||
### 4. 典型日提取
|
||
- 智能识别完整的代表日
|
||
- 确保典型日的场景纯度
|
||
- 提供典型日的年内位置信息
|
||
|
||
### 5. 可视化设计
|
||
- 中文标签和说明
|
||
- 专业的统计图表
|
||
- 清晰的数据展示
|
||
|
||
## 应用场景
|
||
|
||
1. **电力系统规划**:识别典型运行场景,指导储能配置
|
||
2. **新能源消纳分析**:分析不同场景下的新能源消纳特性
|
||
3. **负荷预测**:基于场景分类进行精准负荷预测
|
||
4. **运行策略优化**:针对不同场景制定差异化运行策略
|
||
5. **风险评估**:分析极端场景的出现概率和影响
|
||
|
||
## 性能说明
|
||
|
||
- **处理能力**:支持8760小时数据的聚类分析
|
||
- **计算效率**:K-means算法确保快速收敛
|
||
- **内存使用**:优化的数据结构,内存占用合理
|
||
- **结果稳定性**:固定随机种子确保结果可重现
|
||
|
||
## 依赖库
|
||
|
||
- numpy: 数值计算
|
||
- pandas: 数据处理
|
||
- matplotlib: 基础绘图
|
||
- seaborn: 统计图表
|
||
- scikit-learn: 机器学习算法
|
||
- dataclasses: 数据结构
|
||
|
||
## 注意事项
|
||
|
||
1. **数据质量**:确保输入数据无异常值和缺失值
|
||
2. **数据长度**:支持24小时或8760小时数据
|
||
3. **聚类数选择**:聚类数不宜过多,建议3-12个
|
||
4. **结果解释**:结合实际业务背景解释聚类结果
|
||
5. **图表显示**:如需显示图表,需要合适的显示环境
|
||
|
||
该模块为多能互补系统的运行分析和场景识别提供了强大的工具支持,有助于深入理解系统的运行规律和特性。 |