基于 Trae 的 Kaggle 天气数据可视化实践

大模型向量数据库机器学习

picture.image

picture.image

数据集下载请点击链接:https://www.kaggle.com/datasets/muthuj7/weather-dataset

建议创建一个文件夹,将下载下来的数据集放入文件夹中。此文件夹便于存储之后项目的所有文件。

  1. 本实践材料 ========

为了帮助编程初学者们更轻松地学习本文内容、上手实践项目,推荐使用 Trae 进行编程获得技术支持以及问题解答。

  • Trae:国内首个 AI 原生 IDE,点击阅读原文,直达下载链接。

picture.image

  1. 本实践需要的语法基础 =============

Python 基础与环境配置

  • Python 语法基础:变量、数据类型、函数、模块导入(import)。
  • 包管理工具:使用 pip 安装库(如 pandas, matplotlib, statsmodels)。
  • 开发环境:Jupyter Notebook 或 IDE(如 PyCharm、VS Code)的使用。

数据处理基础(Pandas)

  • 读取数据: pd.read\_csv() 方法。
  • 时间序列处理:
  • pd.to\_datetime() :日期格式转换。
  • set\_index() :设置日期为索引。
  • resample('M') :按月重采样。
  • agg() :聚合操作(如 'mean' 计算月平均气温)。
  • 数据筛选:
  • 布尔索引: df[df['Precip Type'] == 'rain']
  • dropna() :删除空值。
  • 数据合并: monthly['Rainy Days'] = daily\_rain

数据可视化(Matplotlib)

  • 基础绘图:
  • ax1.twinx() :创建共享 X 轴的右侧 Y 轴。
  • 设置不同轴的颜色和标签: ax.set\_ylabel(color='...')
  • plt.subplots() :创建画布和坐标轴。
  • ax.bar() 绘制柱状图, ax.plot() 绘制折线图。
  • 双 Y 轴:
  • 样式调整:
  • 颜色( color )、透明度( alpha )、线型( linestyle )、线宽( linewidth )。
  • 图例合并: ax.legend([lines], [labels], loc='...')
  • 日期优化:
  • fig.autofmt\_xdate(rotation=45) :旋转日期标签。
  • plt.tight\_layout() :自动调整子图间距。
  • 多子图布局:
  • plt.subplots(4,1, sharex=True) :创建 4 行 1 列的子图并共享 X 轴。

时间序列分析

  • 移动平均滤波:
  • rolling(window=3, center=True, min\_periods=1).mean() :滚动窗口计算移动平均。
  • STL 分解:
  • STL( series, period=12 ):初始化 STL 分解模型。
  • fit() 方法拟合模型,提取趋势项(res.trend) 和季节性项( res.seasonal )。

高级时间序列分析(Statsmodels)

  • STL 分解原理:趋势(Trend)、季节性(Seasonal)、残差(Residual)的理解。
  • 结果可视化:将分解后的趋势项和季节性项添加到 DataFrame 中。

项目整合与优化

  • 代码结构:分步骤实现数据处理、分析和可视化。
  • 图形保存: plt.savefig('filename.png', dpi=300, bbox\_inches='tight' )。
  • 调试技巧:处理缺失值、检查数据一致性(如 dropna() 的应用)。
  1. 开始实践 =======

picture.image

实现该项目的流程

3.1 项目要求

绘制气温趋势折线图+月降雨天数柱状组合图 。(组合图,也就是需要绘制双y轴的图形)

3.2 打开数据集,分析数据

picture.image

我们发现第一行有着 Formatted Date,Precip Type,Temperature 表头,这三列与我们数据可视化的目的有着明显关联,Formatted Date 的数据提取整理后可以作为图标的横坐标,Precip Type 的数据可以反映月降雨天数,Temperature 的数据可以反应气温趋势。

简单来说,需要三项关键数据,x轴上的,两个y轴上的数据。

3.3 新建 python 文件,开始编程

picture.image

点击箭头所示图标,之后输入“实践一.py”,文件后缀py,Trae 将自动建立 python 文件

调用库

  
import matplotlib.pyplot as plt  
import pandas as pd  

  • 读取数据

该文件格式为 csv,因此可以用 pandas 库中的

  
pd.read\_csv("文件路径")  

文件路径可用鼠标右键点击,然后复制路径或者复制相对路径得到,完成后如图所示。

picture.image

复制路径

picture.image

读取数据

  • 数据处理
  • 处理出x轴的数据

让我们尝试使用 Trae 书写代码:

Trae 提示词:

  
日期格式如何转换  

picture.image

  
# 转换日期格式并设置为索引  
df['Formatted Date'] = pd.to\_datetime(df['Formatted Date'], utc=True)  
df.set\_index('Formatted Date', inplace=True)  

  • 处理有关气温的数据

Trae 提示词:

  
如何按月重采样,计算月平均气温  

picture.image

  
#按月重采样,计算月平均气温  
monthly\_avg\_temp = df['Temperature (C)'].resample('M').mean()  

  • 处理有关降雨的数据

Trae 提示词:

  
如何过滤出降雨的记录,计算降雨天数  

picture.image

  
#过滤出降雨的记录  
rainy\_records = df[df['Precip Type'] == 'rain']  
#按月重采样并计算降雨天数  
monthly\_rainy\_days = rainy\_records['Precip Type'].resample('M').count()  

  • 创建图表
  
# 创建画布  
fig, ax1 = plt.subplots(figsize=(14,7))  

  
# 绘制降雨天数柱状图  
bars = ax1.bar(  
    monthly\_rainy\_days.index, #x轴数据  
    monthly\_rainy\_days, #y轴数据  
    width=20, # 柱状图宽度  
    color='#1f77b4', # 颜色  
    alpha=0.7, # 透明度  
    label='Rainy Days(origin)' # 图例  
)  

  
# 设置左侧Y轴  
ax1.set\_xlabel('Date',fontsize=12)  
ax1.set\_ylabel('Rainy Days',color='#1f77b4',fontsize=12)  
ax1.tick\_params(axis='y',labelcolor='#1f77b4')  

  
# 创建右侧Y轴(气温)  
ax2 = ax1.twinx()  

  
# 气温折线  
line\_orig = ax2.plot(  
    monthly\_avg\_temp.index, #x轴数据  
    monthly\_avg\_temp, #y轴数据  
    color='#d62728', alpha=0.7,  
    marker='o',markersize=6,  
    linestyle='-', linewidth=2,  
    label='Temperature(origin)' # 图例  
)  

  
# 设置右侧Y轴  
ax2.set\_ylabel('Temperature (℃)',color='#d62728',fontsize=12)  
ax2.tick\_params(axis='y',labelcolor='#d62728')  

  • 添加标题与图例
  
# 添加标题和图例  
plt.title('Wether Analysis(2006-2016)',fontsize=14  
# 合并图例  
all\_lines = [bars, line\_orig[0]]  
labels = [l.get\_label() for l in all\_lines]  
ax1.legend(all\_lines, labels, loc='lower right',fontsize=10)  

  • 保存并显示图形
  
# 保存显示图形  
plt.savefig('weather\_analysis.png',dpi=300,bbox\_inches='tight')  
plt.show()  

3.4 试运行

picture.image

3.5 Debug

可以发现左纵坐标数据明显有误,降雨天数不可能这么大,重新分析数据集,我们发现它一天记录了多个时刻的天气状况,而写代码时没有考虑到这个情况,直接把出现了“rain”的都记录了进去,导致数值远远大于实际值。

跟 Trae 说明现在面临的问题,然后重新生成代码

Trae 提示词:

  
csv文件中一天记录了多个时刻的天气数据,导致计算的降雨天数不准确。而我需要的是出现了rain的一天就把它记为下雨,怎么改代码,重新计算降雨天数  

picture.image

将原来的

  
#过滤出降雨的记录  
rainy\_records = df[df['Precip Type'] == 'rain']  
#按月重采样并计算降雨天数  
monthly\_rainy\_days = rainy\_records['Precip Type'].resample('M').count()  

改为:

  
#过滤出降雨的记录  
rainy\_records = df[df['Precip Type'] == 'rain']  
#按天重采样,检查每天是否有降雨记录  
daily\_rainy = rainy\_records['Precip Type'].resample('D').count() > 0  
#按月重采样并计算降雨天数  
monthly\_rainy\_days = daily\_rainy.resample('M').sum()  

再次运行:

picture.image

结果符合预期,我们的可视化目的实现了!

  1. 探索 =====

4.1 对本题的深入探索

根据上述图表,我们发现温度和月降雨天数都有显著的季节特点,你可以通过滤波,时间序列分析等方法挖掘这组数据集更深的特点吗?来试试吧!

Tips:可以询问豆包,了解滤波,时间序列分析等基础知识,并借助 Trae 编写相应的程序。

参考代码:

  
import matplotlib.pyplot as plt  
import pandas as pd  
from statsmodels.tsa.seasonal import STL  
  
1.读取数据  
df = pd.read\_csv("weatherHistory.csv")  
  
2.数据处理  
# 转换日期格式并设置为索引  
df['Formatted Date'] = pd.to\_datetime(df['Formatted Date'], utc=True)  
df.set\_index('Formatted Date', inplace=True)  
  
# 按月重采样,计算月平均气温  
monthly = df.resample('M').agg({  
    'Temperature (C)': 'mean'  
}).dropna() # 删除空值  
  
# 过滤出降雨的记录 # 计算降雨天数  
rainy\_days = df[df['Precip Type'] == 'rain']  
daily\_rain = rainy\_days.resample('D').size()  
daily\_rain = daily\_rain[daily\_rain > 0].resample('M').size() # 降雨天数  
monthly['Rainy Days'] = daily\_rain  
  
3.添加滤波和分解  
# 移动平均滤波(气温和降雨天数)  
window\_size = 3  
monthly['Temp\_MA'] = monthly['Temperature (C)'].rolling(  
    window=window\_size,center=True,min\_periods=1  
).mean()  
monthly['Rainy\_MA'] = monthly['Rainy Days'].rolling(  
    window=window\_size,center=True,min\_periods=1  
).mean()  
  
STL分解(气温)  
stl = STL(monthly['Temperature (C)'], period=12)  
res = stl.fit()  
monthly['Temp\_Trend'] = res.trend #趋势项  
monthly['Temp\_Seasonal'] = res.seasonal #季节性项  
  
4.创建主图表(画布和坐标轴)  
fig, ax1 = plt.subplots(figsize=(14,7))  
  
# 绘制原始降雨天数柱状图  
bars = ax1.bar(  
    monthly.index, x轴数据  
    monthly['Rainy Days'], y轴数据  
    width=20, # 柱状图宽度  
    color='#1f77b4', # 颜色  
    alpha=0.7, # 透明度  
    label='Rainy Days(origin)'# 图例  
)  
  
#叠加滤波后的降雨趋势线  
ax1.plot(  
    monthly.index, x轴数据  
    monthly['Rainy\_MA'], y轴数据  
    color='darkblue', # 深蓝色  
    linestyle='--', # 虚线  
    marker=' ', # 无标记  
    linewidth=2, # 线宽  
    label=f'Rainy Days({window\_size}Monthly Moving Average)'# 图例  
)  
# 设置左侧Y轴  
ax1.set\_xlabel('Date',fontsize=12)  
ax1.set\_ylabel('Rainy Days',color='#1f77b4',fontsize=12)  
ax1.tick\_params(axis='y',labelcolor='#1f77b4')  
  
5.创建右侧Y轴(气温)  
ax2 = ax1.twinx()  
  
# 原始气温折线  
line\_orig = ax2.plot(  
    monthly.index, x轴数据  
    monthly['Temperature (C)'], y轴数据  
    color='#d62728', alpha=0.7,  
    marker='o',markersize=6,  
    linestyle='-', linewidth=2,  
    label='Temperature(origin)'# 图例  
)  
  
#叠加移动平均气温  
line\_ma = ax2.plot(  
    monthly.index, x轴数据  
    monthly['Temp\_MA'], y轴数据  
    color='darkred', linewidth=2,   
    linestyle='-', marker=' ', # 无标记  
    label=f'Temperature({window\_size}Monthly Moving Average)'# 图例  
)  
  
#叠加STL分解的气温趋势  
line\_trend = ax2.plot(  
    monthly.index, x轴数据  
    monthly['Temp\_Trend'], y轴数据  
    color='black', linewidth=2,   
    linestyle=':', marker=' ', # 无标记  
    label='Temperature Trend(STL Decomposition)'# 图例  
)  
  
# 设置右侧Y轴  
ax2.set\_ylabel('Temperature (℃)',color='#d62728',fontsize=12)  
ax2.tick\_params(axis='y',labelcolor='#d62728')  
  
6.添加标题和图例  
plt.title('Wether Analysis(2006-2016)',fontsize=14,pad=20)  
  
# 合并图例  
all\_lines = [bars, line\_ma[0],line\_orig[0],line\_trend[0]]  
labels = [l.get\_label() for l in all\_lines]  
ax1.legend(all\_lines, labels, loc='lower right',fontsize=10)  
  
#优化日期显示  
fig.autofmt\_xdate(rotation=45)# 旋转日期标签  
plt.tight\_layout() # 自动调整子图参数  
  
7.保存显示图形  
plt.savefig('weather\_analysis.png',dpi=300,bbox\_inches='tight')  
plt.show()  
  
8.单独展示STL分解的气温趋势(新增子图)  
fig\_decomp, axes = plt.subplots(4,1,figsize=(14,10),sharex=True)  
  
# 绘制原始数据  
axes[0].plot(monthly.index, monthly['Temperature (C)'], label='Original')  
axes[0].set\_ylabel('Original')  
axes[0].legend(loc='upper right')  
  
# 绘制趋势项  
axes[1].plot(monthly.index, monthly['Temp\_Trend'], label='Trend', color='orange')  
axes[1].set\_ylabel('Trend')  
axes[1].legend(loc='upper right')  
  
# 绘制季节性项  
axes[2].plot(monthly.index, monthly['Temp\_Seasonal'], label='Seasonal', color='green')  
axes[2].set\_ylabel('Seasonal')  
axes[2].legend(loc='upper right')  
  
# 绘制残差项  
axes[3].plot(monthly.index, res.resid, label='Residual', color='red')  
axes[3].set\_ylabel('Residual')  
axes[3].legend(loc='upper right')  
  
# 设置共享的X轴标签  
axes[3].set\_xlabel('Date')  
  
# 优化日期显示  
fig\_decomp.autofmt\_xdate(rotation=45) # 旋转日期标签  
plt.tight\_layout() # 自动调整子图参数  
  
# 显示图形  
plt.show()  

picture.image

picture.image

4.2 关于本数据集的其它参考选题

温度与体感温度的差异分析

  • 选题说明:探究实际温度与体感温度之间的差异,分析湿度、风速对其影响。
  • 可视化方法:
  • 折线图:按小时绘制温度和体感温度的对比,观察一天中的波动。
  • 散点图:横轴为湿度或风速,纵轴为温度差值(体感温度 - 实际温度),观察湿度或风速如何放大或缩小温差。
  • 可能发现:高湿度或大风时,体感温度可能显著低于实际温度。

天气现象与气象参数的关系

  • 选题说明:对比不同天气类型(如“多云”、“有雾”、“晴朗”)下的温度、湿度、风速、气压等参数。
  • 可视化方法:
  • 箱线图:按天气类型(Summary或Daily Summary)分组,比较各参数的分布。
  • 热力图:展示天气类型与参数(如湿度、风速)的相关性。
  • 可能发现:有雾天气通常伴随高湿度和低风速,而晴天可能对应较低湿度和稳定气压。

降水事件的触发条件

  • 选题说明:分析降水(Precip Type=rain)发生时,湿度、气压、风速的典型特征。
  • 可视化方法:
  • 堆叠柱状图:按降水/非降水分类,统计不同湿度区间或风速区间的出现频率。
  • 密度图:对比降水和非降水时段的湿度、气压分布。
  • 可能发现:降水可能集中在高湿度(>80%)和气压下降阶段。

风向对天气的影响

  • 选题说明:探索风向(Wind Bearing)与温度、降水的关系。
  • 可视化方法:
  • 风向玫瑰图:展示不同风向的频率及其对应的平均温度或降水概率。
  • 极坐标散点图:用角度表示风向,半径表示风速,颜色表示温度。
  • 可能发现:特定风向(如西北风)可能带来更低温度或更高降水概率。

能见度与气象因子的关联

  • 选题说明:研究能见度(Visibility)与降水、湿度或风速的关联。
  • 可视化方法:
  • 散点矩阵图:联动展示能见度、湿度、风速、降水的分布。
  • 分面折线图:按降水/非降水分组,对比能见度的日变化。
  • 可能发现:降水时能见度显著降低,且风速较高可能改善能见度。

气压变化的天气预警信号

  • 选题说明:分析气压(Pressure)的短期波动是否预示天气变化(如降雨或放晴)。
  • 可视化方法:
  • 折线图:叠加气压和降水事件的时间序列,观察气压下降是否先于降水。
  • 滑动窗口统计:计算气压的24小时变化率,关联天气变化。
  • 可能发现:气压骤降可能预示即将降雨

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
火山引擎大规模机器学习平台架构设计与应用实践
围绕数据加速、模型分布式训练框架建设、大规模异构集群调度、模型开发过程标准化等AI工程化实践,全面分享如何以开发者的极致体验为核心,进行机器学习平台的设计与实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论