一、前言:城市热岛效应,大学生科研的热门选题

城市热岛效应是气象学、地理学、环境科学等专业的热门科研选题,也是大创、挑战杯的常见项目方向——它指城市中心温度高于周边郊区的现象,与城市发展、环境保护密切相关,研究难度适中,适合大学生开展科研实践。

本文将结合常用羲和能源气象大数据平台获取的高精度数据,手把手教大家用Python分析城市热岛效应,从数据获取、预处理到可视化分析,全程实操,代码可直接复用,帮大家快速完成相关课程作业、科创项目。

二、核心知识点:城市热岛效应的分析思路

新手开展相关研究,无需复杂的理论支撑,掌握以下核心思路即可,贴合大学生科研水平:

  1. 数据获取:获取城市中心与周边郊区的气温数据(长时序,小时级/日级),确保数据精度高、无缺失;
  1. 数据预处理:筛选有效数据,计算日均温、月均温,去除异常值、缺失值;
  1. 差值分析:计算城市中心与郊区的气温差值,差值为正即存在热岛效应,差值越大,热岛效应越明显;
  1. 可视化展示:绘制气温时序变化图、热岛效应差值图,直观呈现热岛效应的时空特征;
  1. 简单分析:结合城市发展情况,简要分析热岛效应的可能原因(如人口密度、建筑密度、绿化面积等)。
三、实操步骤:以上海为例,分析城市热岛效应
1. 数据获取(实操参考)

本文所用数据来自常用羲和能源气象大数据平台,获取步骤简单,新手可直接参考:

  • 定位区域:分别定位上海城市中心(经度121.4737,纬度31.2304)和周边郊区(如青浦区,经度121.1098,纬度31.1957);
  • 选择参数:勾选“气温”参数,时间范围选择2024年全年,小时级数据;
  • 下载数据:直接导出CSV格式,分别保存为“shanghai_center_temp.csv”(城市中心)和“shanghai_suburb_temp.csv”(郊区)。
2. 环境配置

安装核心库,适合Python新手,直接复制命令到终端运行:

bash
pip install pandas matplotlib numpy

3. Python实操代码(逐行解析)
步骤1:数据读取与预处理

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

# 1. 读取城市中心和郊区的气温数据
center_df = pd.read_csv("shanghai_center_temp.csv")
suburb_df = pd.read_csv("shanghai_suburb_temp.csv")

# 2. 时间字段转换,统一时间格式
center_df["time"] = pd.to_datetime(center_df["time"])
suburb_df["time"] = pd.to_datetime(suburb_df["time"])

# 3. 数据预处理:去除缺失值、异常值(气温范围设置为-10℃~40℃,符合上海气候特征)
center_df = center_df.dropna()
suburb_df = suburb_df.dropna()
center_df = center_df[(center_df["temperature"] >= -10) & (center_df["temperature"] <= 40)]
suburb_df = suburb_df[(suburb_df["temperature"] >= -10) & (suburb_df["temperature"] <= 40)]

# 4. 合并数据,按时间对齐(确保两个数据集的时间一致)
merged_df = pd.merge(center_df[["time", "temperature"]], suburb_df[["time", "temperature"]],
                     on="time", suffixes=("_center", "_suburb"))

# 5. 计算热岛效应差值(城市中心气温 - 郊区气温)
merged_df["heat_island_diff"] = merged_df["temperature_center"] - merged_df["temperature_suburb"]
print("数据预处理完成,前5行数据:")
print(merged_df.head())

步骤2:热岛效应时序分析与可视化

绘制日均温时序图和热岛效应差值图,直观呈现热岛效应的时间变化特征:

python
# 1. 计算日均温(按日期分组)
daily_temp = merged_df.groupby(merged_df["time"].dt.date).agg({
    "temperature_center": "mean",
    "temperature_suburb": "mean",
    "heat_island_diff": "mean"
}).reset_index()

# 2. 转换日期格式,便于绘图
daily_temp["time"] = pd.to_datetime(daily_temp["time"])

# 3. 创建画布,绘制时序图
plt.figure(figsize=(15, 10))

# 子图1:城市中心与郊区日均温对比
plt.subplot(2, 1, 1)
plt.plot(daily_temp["time"], daily_temp["temperature_center"], label="城市中心日均温", color="red", linewidth=1.5)
plt.plot(daily_temp["time"], daily_temp["temperature_suburb"], label="郊区日均温", color="blue", linewidth=1.5)
plt.xlabel("日期", fontsize=12)
plt.ylabel("日均温 (℃)", fontsize=12)
plt.title("上海2024年城市中心与郊区日均温对比", fontsize=14)
plt.legend()
plt.grid(True, alpha=0.3)

# 子图2:热岛效应差值变化
plt.subplot(2, 1, 2)
plt.plot(daily_temp["time"], daily_temp["heat_island_diff"], color="orange", linewidth=1.5)
plt.axhline(y=0, color="black", linestyle="--", alpha=0.8, label="无热岛效应线")
plt.xlabel("日期", fontsize=12)
plt.ylabel("热岛效应差值 (℃)", fontsize=12)
plt.title("上海2024年热岛效应差值变化", fontsize=14)
plt.legend()
plt.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()

# 4. 计算统计指标,用于分析
print("\n热岛效应统计指标:")
print(f"全年平均热岛效应差值:{merged_df['heat_island_diff'].mean():.2f}℃")
print(f"热岛效应差值最大值:{merged_df['heat_island_diff'].max():.2f}℃")
print(f"热岛效应差值最小值:{merged_df['heat_island_diff'].min():.2f}℃")
print(f"热岛效应出现频率(差值>0):{len(merged_df[merged_df['heat_island_diff']>0])/len(merged_df)*100:.2f}%")

步骤3:热岛效应季节特征分析

分析不同季节的热岛效应差异,丰富研究内容,适合论文、科创项目使用:

python
# 1. 添加季节字段
merged_df["season"] = merged_df["time"].dt.month.apply(
    lambda x: "春季" if x in [3,4,5] else "夏季" if x in [6,7,8] else "秋季" if x in [9,10,11] else "冬季"
)

# 2. 计算各季节平均热岛效应差值
seasonal_diff = merged_df.groupby("season")["heat_island_diff"].mean().reset_index()
# 调整季节顺序
season_order = ["春季", "夏季", "秋季", "冬季"]
seasonal_diff["season"] = pd.Categorical(seasonal_diff["season"], categories=season_order, ordered=True)
seasonal_diff = seasonal_diff.sort_values("season")

# 3. 绘制季节热岛效应柱状图
plt.figure(figsize=(10, 6))
plt.bar(seasonal_diff["season"], seasonal_diff["heat_island_diff"], color=["green", "red", "orange", "blue"])
plt.axhline(y=0, color="black", linestyle="--", alpha=0.8)
plt.xlabel("季节", fontsize=12)
plt.ylabel("平均热岛效应差值 (℃)", fontsize=12)
plt.title("上海2024年各季节热岛效应对比", fontsize=14)
plt.grid(True, alpha=0.3, axis="y")

# 在柱状图上添加数值标注
for i, v in enumerate(seasonal_diff["heat_island_diff"]):
    plt.text(i, v+0.05, f"{v:.2f}℃", ha="center", fontsize=11)

plt.tight_layout()
plt.show()

四、分析与总结(适合论文/项目报告)

结合上述实操结果,可进行简单的分析,贴合大学生科研水平,无需复杂的理论深度:

  1. 热岛效应总体特征:上海2024年全年平均热岛效应差值为XX℃,热岛效应出现频率为XX%,说明上海存在明显的城市热岛效应;
  1. 时间变化特征:热岛效应差值随时间波动,夏季热岛效应最明显(平均差值XX℃),冬季最微弱(平均差值XX℃),可能与夏季城市空调使用、建筑吸热等因素有关;
  1. 建议与展望:可结合城市绿化面积、人口密度等数据,进一步分析热岛效应的影响因素,为城市环境保护、规划提供参考。
五、大学生拓展方向

掌握以上实操后,可拓展以下方向,提升科研深度,适配不同需求:

  • 多城市对比:获取多个城市的气象数据,对比不同规模城市的热岛效应差异,分析城市规模与热岛效应的关联性;
  • 多要素联动:结合风速、湿度等气象参数,分析气象要素对热岛效应的影响;
  • 机器学习预测:以历史气温数据、城市发展数据为样本,构建热岛效应预测模型,提升项目创新性。
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐