原文:
towardsdatascience.com/easy-hurricane-tracking-with-tropycal-4eaa9412382f
快速成功的数据科学
2017 年度北大西洋飓风轨迹,按风暴类型着色(作者提供)
最近一位朋友向我提出了一个有趣的要求:他想帮助他选择加勒比海的春假度假目的地。他的心已经倾向于帮助最近受到飓风影响的地区,希望他的旅游消费能对他们的恢复工作有所贡献。自然地,他想要避开最近受到影响的地区,所以我们决定查看过去八年(2017-2024 年)的飓风,并排除最近两年(2023-2024 年)受影响的地点。
当然,一个 AI 聊天机器人可以在几秒钟内处理这个问题,但我并不打算悄无声息地进入那个美好的夜晚,并决定自己使用 Python 进行分析。开源飓风数据可以从多个来源轻松获得,包括以下来源:
-
国家飓风中心(NHC)数据存档(HURDAT)
-
国际气候保护最佳轨迹档案(IBTrACS)
-
美国地质调查局(USGS)飓风数据
-
NOAA 大西洋海洋和气象实验室(AOML)
寻找和准备数据通常是数据科学项目中最困难的部分,所以拥有这些干净的数据是非常宝贵的。尽管如此,我并不期待开始。我过去与政府数据源的经验一直很具挑战性。提取它们通常比应该要困难得多。
但随后我发现 Tropycal,这是一个简化热带气旋数据检索和分析的 Python 包。对于研究过去风暴或积极追踪当前风暴的人来说,Tropycal 是一个颠覆性的工具。
根据文档,“Tropycal 可以读取 HURDAT2 和 IBTrACS 再分析数据以及操作 国家飓风中心(NHC)最佳轨迹 数据,并将它们转换为相同的格式,这可以用于进行气候学、季节性和单个风暴分析。对于每个风暴,操作 NHC 和模型预报、飞机侦察数据、降雨数据以及任何相关的龙卷风活动都可以检索和绘制。”
Tropycal 可以生成图表 和 地图,并且你可以轻松地将提取的数据转换为 pandas DataFrame 以进行进一步分析。
在这个 快速成功数据科学 项目中,我们将使用 Tropycal 绘制 2017 年至 2024 年加勒比海飓风的轨迹。
安装 Tropycal
您可以在 这里 找到 Tropycal 安装指南。
开发者还建议安装 cartopy 以充分利用 Tropycal 的绘图功能。Cartopy 是一个用于绘制地图的 Python 包。
代码
以下代码是在 JupyterLab 中编写的,并由单元格描述。
导入库和加载数据
tropycal.tracks 模块负责加载、过滤和绘制飓风路径。
Tropycal 可以评估来自世界各地的数据,因此下一步是选择一个流域(在这种情况下,north_atlantic)和一个数据源。为了处理当前季节的暴风雨,将 include_btk 参数设置为 True。这将从 NHC 网站读取初步最佳路径数据,因为 HURDAT 数据仅适用于 已完成 的季节。
注意:北大西洋的飓风季节从 6 月 1 日至 11 月 30 日。
import tropycal.tracks as tracks
# Load tracks; Set include_btk to True for current season data:
basin = tracks.TrackDataset(basin='north_atlantic',
source='hurdat',
include_btk=True)
这可能需要几秒钟才能运行。您将在输出单元格中看到进度:
--> Starting to read in HURDAT2 data
--> Completed reading in HURDAT2 data (4.62 seconds)
--> Starting to read in best track data
--> Completed reading in best track data (17.2 seconds)
过滤数据到类别和年份
现在我们使用 [filter_storms()](https://tropycal.github.io/tropycal/api/generated/tropycal.tracks.TrackDataset.filter_storms.html#trackdataset-filter-storms) 方法通过时间间隔和飓风类别过滤 basin 对象。我们将从 2017-2022 间隔开始,查看 1 级及以上的飓风类别。
# Filter N. Atlantic dataset to Category 1+ hurricanes for 2017-2022:
filtered_17_22 = basin.filter_storms(thresh={'v_min': 64},
year_range=(2017, 2022))
Tropycal 似乎不允许使用类别进行过滤。相反,它使用 节 的风速。为了参考,以下是带有节持续风速的萨菲尔-辛普森等级:
-
类别 1:64-82 节
-
类别 2:83-95 节
-
类别 3:96-112 节
-
类别 4:113-136 节
-
类别 5:137+ 节
要选择类别 1 及以上的风暴,我们将 v_min(速度最小值)参数设置为 64。
filter_storms() 方法返回一个 列表 的风暴名称。接下来,我们将此列表传递给 plot_storms() 方法。
绘制 2017-2022 年飓风路径
Tropycal 使用 Matplotlib 和 cartopy 绘制风暴。这种绘图功能封装在我们之前创建的 basin 对象中。要访问它,我们调用其 [plot_storms()](https://tropycal.github.io/tropycal/api/generated/tropycal.tracks.TrackDataset.plot_storms.html#tropycal.tracks.TrackDataset.plot_storms) 方法。
# Plot tracks colored by category:
title = 'Caribbean Hurricanes (2017-2022)'
basin.plot_storms(storms=filtered_17_22,
title=title,
domain={'w':-89,'e':-54,'s':8,'n':25},
prop={'plot_names': False,
'dots': False,
'linecolor': 'category',
'linewidth': 1.0},
map_prop={'plot_gridlines': False});
对于参数,我们传递我们的过滤风暴名称列表、一个 domain,它由加勒比海的经纬度边界组成,以及自定义选项(以字典格式),例如关闭风暴名称、跟踪点和经纬度网格线。以下是结果:
2017-2022 赛季的加勒比飓风路径(作者)
在这个时间段内,东北加勒比海遭受了几次毁灭性的风暴,包括 2017 年的艾尔玛和玛丽亚。
要重复 2023-2024 的过程,我们需要更改过滤标准和绘图标题:
# Filter N. Atlantic dataset to hurricanes for 2023-2024:
filtered_23_24 = basin.filter_storms(thresh={'v_min': 64},
year_range=(2023, 2024))
# Plot tracks colored by category:
title = 'Caribbean Hurricanes (2023-2024)'
basin.plot_storms(storms=filtered_23_24,
title=title,
domain={'w':-89,'e':-54,'s':8,'n':25},
prop={'plot_names': False,
'dots': False,
'linecolor': 'category',
'linewidth': 1.0},
map_prop={'plot_gridlines': False});
2023-2024 年加勒比飓风路径(作者制)
你可能已经注意到,虽然我们请求了飓风路径,但一些路径被标记为非飓风事件,如热带风暴和低压。这是因为路径对象包括飓风的整个历史,包括它作为热带低压开始,以热带(或非热带)风暴结束。
调整路径以捕捉眼墙宽度
飓风的眼墙是围绕风暴中心相对平静且清晰的眼周围的密集雷暴环。它包含最高的风速和最严重的天气。北大西洋飓风的眼墙通常宽度为 20-40 英里。
为了在我们的地图上捕捉这个严重的天气区域,我们可以使用属性字典来调整路径的线宽为 11。这个值在地图上大约是 40 英里宽。以下是 2023-2024 年数据的示例:
# Adjust track width to ~40 miles:
basin.plot_storms(storms=filtered_23_24,
title=title,
domain={'w':-89,'e':-54,'s':8,'n':25},
prop={'plot_names': False,
'dots': False,
'linecolor': 'category',
'linewidth': 11.0},
map_prop={'plot_gridlines': False});
加勒比飓风路径图,宽度约为 40 英里(作者制)
现在我们对哪些目的地遭受了最严重的破坏有了更好的了解。
很遗憾,似乎没有方法可以通过 Tropycal 控制路径的透明度(alpha)值。如果你有很多路径,最好调整点的大小,就像我们在 2017-2022 年数据集中所做的那样:
# Plot tracks colored by category:
title = 'Caribbean Hurricanes (2017-2022)'
basin.plot_storms(storms=filtered_17_22,
title=title,
domain={'w':-89,'e':-54,'s':8,'n':25},
prop={'plot_names': False,
'ms': 13,
'linecolor': 'category',
'linewidth': 1.0},
map_prop={'plot_gridlines': False});
加勒比飓风点阵图,宽度约为 40 英里(作者制)
在这种情况下,添加一个标记大小为 13('ms': 13)的参数,可以得到大约 40 英里直径的点。
AI 结果
为了检查结果与 AI 的对比,我向 Microsoft Copilot 输入了以下提示:“在过去 8 年(包括 2024 年)中,哪些加勒比度假胜地最受飓风影响?”
Copilot 反复返回错误的结果,并且无法通过其“厚脸皮”的“头”意识到飓风伊万是在 2004 年,而不是2024 年。它还包含了请求范围之外的飓风事件。虽然我对此表示担忧,但我也很高兴,因为这证明了我自己完成这个项目是有道理的!
我的成果
由于我们将搜索范围限制在飓风眼墙附近,我们的地图应该捕捉到加勒比地区受灾最严重的地区。这并不意味着其他地区没有遭受破坏。热带风暴也可能造成重大损害,严重的天气可能远远超出眼墙附近。
根据我们最初设定的参数,2023 年和(正在进行的)2024 年赛季受我们 40 英里飓风路径影响的地区包括:
-
巴布达
-
格林纳达
-
格兰迪尼群岛
对于 2017-2022 赛季,地区包括:
-
巴布达
-
圣马丁
-
安圭拉
-
圣巴泰勒米
-
美属维尔京群岛
-
波多黎各
-
多米尼加共和国(东海岸)
-
开曼群岛
摘要
好了,就这些了!多亏了第三方 Tropycal 库,我们仅用几行代码就获取、筛选和绘制了官方飓风数据。虽然我们专注于加勒比海,但请记住,Tropycal 提供了访问全球热带气旋数据的能力:
1851-2023 年 IBTrACS 数据库中热带风暴和气旋的数量(按作者统计)
为了帮助新用户,Tropycal 文档包括了多种类型分析的示例脚本。但请注意,即使有了这些,您可能也会在自定义图表时遇到麻烦。
就像任何用户友好的应用一样,Tropycal 以牺牲功能为代价使困难的任务变得简单。这种高度抽象化有时让我感到沮丧。我遇到的困难包括基于风暴类别进行筛选、绘制国家名称、吸引人地绘制风暴名称、调整轨迹颜色以及在轨迹填充上设置透明度值。
尽管如此,Tropycal 对于任何处理热带气旋数据的人来说都是一个巨大的资源。它不仅包括从 1851 年至今的全球风暴轨迹数据,还包括与气旋相关的龙卷风和降水数据,以及飞机侦察数据。
谢谢!
感谢阅读,并请关注我,未来将有更多快速成功数据科学项目。
324

被折叠的 条评论
为什么被折叠?



