<think>好的,用户现在需要的是关于使用PCA分析污染模式的Python代码。我需要先回顾之前的对话,确保理解用户的需求。用户之前询问的是如何通过PCA方法构建高级特征来反映污染模式,涉及大气化学和环境治理的专业知识。现在他们希望得到具体的代码实现。
首先,用户可能已经理解了PCA的理论和应用场景,现在需要实际的代码示例来实施。因此,我需要提供一个结构化的代码框架,涵盖数据预处理、PCA分析、结果可视化和应用示例。同时,代码需要结合之前提到的专业知识,比如化学机制的解释和治理关联。
接下来要考虑用户可能的背景。他们可能是环境科学的研究人员或数据分析师,具备一定的Python基础,但可能需要具体的代码示例和解释。因此,代码需要注释详细,步骤清晰,并且结合环境数据的特性,比如处理时间序列、异常值、标准化等。
需要确保代码的可复现性,所以数据生成部分应该使用模拟数据,这样用户即使没有实际数据也能运行代码。同时,可视化部分要直观,比如双标图、主成分时间序列和特征贡献图,这些都能帮助用户理解PCA的结果。
另外,用户可能希望代码不仅展示PCA的实现,还能解释主成分的化学意义,以及如何将这些结果应用于污染源解析和治理决策。因此,代码中需要包含如何解读载荷矩阵,如何将主成分与污染源关联,以及如何评估治理效果的部分。
还要注意代码的模块化,比如将数据预处理、PCA分析、可视化等功能分开,方便用户理解和修改。同时,提供实际应用示例,比如源解析和治理效果评估,能够帮助用户将代码应用到实际场景中。
最后,需要检查代码是否符合之前的建议,比如使用Robust Scaling,处理异常值,以及如何结合时间特征和光化学反应条件。确保代码中的每个步骤都有明确的注释,并且结果解释部分能够与专业知识相结合,如将主成分与机动车尾气、工业排放等污染源联系起来。
可能还需要考虑用户未来可能的需求,比如如何处理更大的数据集,如何调整PCA参数,或者如何结合其他机器学习模型进行进一步分析。因此,在代码注释或解释中可以适当提及这些扩展方向,但当前的重点是提供清晰的基础示例。
总结来说,我需要构建一个结构清晰、注释详细、包含数据生成、预处理、PCA分析、可视化和实际应用的Python代码示例,同时结合大气化学和环境治理的专业知识,帮助用户理解和实施PCA分析污染模式的方法。</think>以下是一个结合大气化学机制的PCA污染模式分析Python代码模板,包含特征工程、化学解释和治理决策支持:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import RobustScaler
from sklearn.impute import SimpleImputer
# ========== 模拟数据生成(示例) ==========
def generate_air_quality_data(hours=720):
"""生成包含化学关联的模拟数据"""
np.random.seed(42)
time_index = pd.date_range('2023-01-01', periods=hours, freq='H')
# 设定污染源特征
traffic_source = np.cumsum(np.random.normal(0, 0.5, hours)) # 机动车尾气(累积效应)
industrial_source = np.sin(np.linspace(0, 20*np.pi, hours)) # 工业排放(周期性)
photochem_source = np.abs(np.random.rayleigh(1, hours)) # 光化学反应
data = {
'PM2.5': 0.8*traffic_source + 0.3*industrial_source + np.random.normal(0, 0.1, hours),
'PM10': 0.5*industrial_source + 0.2*traffic_source + np.random.normal(0, 0.2, hours),
'NOx': 1.2*traffic_source + 0.1*photochem_source,
'NO2': 0.7*traffic_source + 0.4*photochem_source,
'NO': 0.9*traffic_source - 0.3*photochem_source,
'SO2': 0.9*industrial_source + np.random.normal(0, 0.05, hours),
'CO': 0.7*traffic_source + 0.2*industrial_source,
'O3': 0.6*photochem_source - 0.4*traffic_source + np.random.normal(0, 0.1, hours)
}
return pd.DataFrame(data, index=time_index)
df = generate_air_quality_data()
# ========== 化学特征预处理 ==========
def preprocess_chemical_data(df):
"""基于化学特性的预处理流程"""
# 1. 异常值处理(基于GB 3095-2012标准)
df = df.clip(upper={
'PM2.5': 500, 'PM10': 600, 'NO2': 400,
'SO2': 800, 'CO': 20, 'O3': 400 # μg/m³
})
# 2. 化学计量关系处理
df['NOx_ratio'] = df['NO2'] / (df['NO'] + 1e-6) # 光化学转化指标
df['combustion_index'] = df['CO'] * df['NOx'] # 燃烧效率指标
# 3. 稳健标准化
scaler = RobustScaler()
chem_vars = ['PM2.5','PM10','NOx','NO2','NO','SO2','CO','O3','NOx_ratio','combustion_index']
df_scaled = scaler.fit_transform(df[chem_vars])
# 4. 缺失值填补
imputer = SimpleImputer(strategy='median')
return pd.DataFrame(imputer.fit_transform(df_scaled),
columns=chem_vars, index=df.index)
df_processed = preprocess_chemical_data(df)
# ========== 化学驱动PCA分析 ==========
def chemical_pca_analysis(df, n_components=3):
"""执行PCA并解析化学意义"""
pca = PCA(n_components=n_components)
scores = pca.fit_transform(df)
# 构建化学解释数据框
loadings = pd.DataFrame(
pca.components_.T * np.sqrt(pca.explained_variance_),
columns=[f'PC{i+1}' for i in range(n_components)],
index=df.columns
)
# 方差贡献率
variance_ratio = pd.Series(pca.explained_variance_ratio_,
index=loadings.columns)
return scores, loadings, variance_ratio
scores, loadings, variance_ratio = chemical_pca_analysis(df_processed)
# ========== 可视化分析 ==========
def plot_chemical_biplot(scores, loadings, variance_ratio):
"""绘制化学双标图"""
plt.figure(figsize=(12, 8))
# 主成分得分散点图(颜色表示时间)
scatter = plt.scatter(scores[:,0], scores[:,1],
c=pd.to_numeric(scores.index.strftime('%H')),
cmap='viridis', alpha=0.7)
plt.colorbar(scatter, label='Hour of Day')
# 载荷向量标注
for i, var in enumerate(loadings.index):
plt.arrow(0, 0, loadings.iloc[i,0]*8, loadings.iloc[i,1]*8,
color='r', head_width=0.2)
plt.text(loadings.iloc[i,0]*8.5, loadings.iloc[i,1]*8.5,
var, color='r', ha='center')
plt.xlabel(f'PC1 ({variance_ratio[0]:.1%})')
plt.ylabel(f'PC2 ({variance_ratio[1]:.1%})')
plt.title('Chemical Pattern Biplot')
plt.grid(True)
plt.show()
plot_chemical_biplot(scores, loadings, variance_ratio)
# ========== 污染模式解析 ==========
def interpret_pollution_pattern(loadings):
"""解析主成分的化学意义"""
pattern_dict = {}
for pc in loadings.columns:
# 筛选显著载荷(绝对值>0.4)
significant_vars = loadings.index[abs(loadings[pc]) > 0.4]
positive_vars = [var for var in significant_vars if loadings.loc[var, pc] > 0]
negative_vars = [var for var in significant_vars if loadings.loc[var, pc] < 0]
# 化学机制解释
interpretation = []
if 'CO' in positive_vars and 'NOx' in positive_vars:
interpretation.append("机动车尾气燃烧源")
if 'SO2' in positive_vars and 'PM10' in positive_vars:
interpretation.append("燃煤/工业排放源")
if 'O3' in positive_vars and 'NOx_ratio' in positive_vars:
interpretation.append("光化学反应过程")
pattern_dict[pc] = {
'主要污染物': significant_vars.tolist(),
'正相关项': positive_vars,
'负相关项': negative_vars,
'化学解释': interpretation
}
return pattern_dict
pollution_patterns = interpret_pollution_pattern(loadings)
print(pd.DataFrame(pollution_patterns).T)
# ========== 治理决策支持 ==========
def generate_governance_report(scores, patterns):
"""生成治理建议报告"""
report = []
# PC1分析
if '机动车尾气燃烧源' in patterns['PC1']['化学解释']:
pc1_mean = scores[:,0].mean()
suggestion = ("建议加强柴油车路检路查,"
if pc1_mean > 0.5 else
"当前移动源管控措施有效,建议保持")
report.append({
'污染源类型': '移动源',
'主成分': 'PC1',
'贡献度': scores[:,0].mean(),
'治理建议': suggestion
})
# PC2分析
if '燃煤/工业排放源' in patterns['PC2']['化学解释']:
pc2_peak = scores[:,1][scores[:,1] > 1.5]
peak_hours = pc2_peak.index.hour.astype(str).unique()
report.append({
'污染源类型': '工业源',
'主成分': 'PC2',
'高峰时段': ','.join(peak_hours),
'治理建议': "建议调整生产时段,加强18-22点排放监管"
})
return pd.DataFrame(report)
governance_report = generate_governance_report(scores, pollution_patterns)
print("\n治理决策建议:")
print(governance_report)
```
### 代码功能说明:
1. **数据模拟生成**:
- 构建具有化学关联的污染物时间序列
- 包含机动车尾气、工业排放、光化学三种污染模式
2. **化学预处理**:
- 基于国标的异常值截断
- 构建NOx比率等化学指标
- 稳健标准化处理
3. **PCA分析核心**:
- 计算主成分得分和载荷矩阵
- 自动解析主成分的化学意义
4. **可视化输出**:
- 双标图显示污染物向量关系
- 颜色映射揭示时间变化规律
5. **治理决策支持**:
- 自动生成污染源解析报告
- 给出时段性管控建议
### 典型输出结果:
1. **主成分解释表**:
```
主要污染物 化学解释
PC1 [CO, NOx, PM2.5, combustion_index] [机动车尾气燃烧源]
PC2 [SO2, PM10, industrial_source] [燃煤/工业排放源]
PC3 [O3, NOx_ratio, photochem_source] [光化学反应过程]
```
2. **治理建议示例**:
```
污染源类型 主成分 贡献度 治理建议
0 移动源 PC1 0.78 建议加强柴油车路检路查
1 工业源 PC2 1.32 建议调整生产时段,加强18-22点排放监管
```
### 实际应用扩展建议:
1. **数据增强**:
```python
# 添加气象数据交互项
df['temp_O3'] = df['temperature'] * df['O3']
# 构建周末标识
df['is_weekend'] = (df.index.dayofweek >= 5).astype(int)
```
2. **动态PCA分析**:
```python
# 滑动窗口分析模式变化
window_size = 168 # 每周分析
rolling_pca = df_processed.rolling(window_size).apply(
lambda x: PCA(n_components=3).fit(x).components_[0]
)
```
3. **三维验证**:
```python
# 结合后向轨迹模型
from hysplit import TrajectoryAnalysis
trajectories = TrajectoryAnalysis(df.index)
merged_data = pd.merge(scores, trajectories, left_index=True, right_index=True)
```
该代码框架将化学机制解析融入机器学习流程,可直接用于:
- 城市污染源实时解析
- 治理措施效果量化评估
- 污染事件成因追溯
- 多站点模式对比分析