基于Python的GIS分析之台风路径可视化(一)

摘要:2017年8月底,台风“天鸽”、“帕卡”、“泰利”相继(即将)造访我国,飓风“哈维”、“艾玛”席卷美国,给当地造成了巨大的财产和人员损失。如果能够借助历史数据,分析我国的台风灾害风险,无疑对于防灾减损具有重要意义。我们利用中国气象局提供的台风数据集,基于Python,利用Cartopy、Pandas等做了西北太平洋台风路径的可视化。

数据读取

数据说明

目前有许多机构发布台风的历史和实时路径,我们采用中国气象局热带气旋资料中心提供的数据集作为分析基础。现行版本的CMA热带气旋最佳路径数据集提供1949年以来西北太平洋(含南海,赤道以北,东经180°以西)海域热带气旋每6小时的位置和强度,按年份分别放在单独的文本文件中。

数据集文件的命名方式为CHYYBST.txt,以空格分隔的CSV文件。在每一个文件中,包含两类内容:

  1. 头记录
    • 每一个热带气旋有一个头记录;
    • 每一个头记录占单独一行;
    • 头记录以“66666”开头,包含编号、数据行数、数据频率等信息

CMA热带气旋最佳路径数据集头记录

  1. 最佳路径数据记录
    • 最佳路径数据记录紧随头记录之后,其行数可以从头记录中看到;
    • 每一行的数据包括时间(YYYYMMDDHH)、强度、纬度、经度、中心最低气压、2分钟平均近中心最大风速、2分钟平均风速等。

CMA热带气旋最佳路径数据记录

读取文件

前面提到,虽然CHBST的数据集是txt文件,但是可以按照csv文件的格式读取,借助Python的pandas模块完成数据读取。需要注意的是,CHBST的数据是按照年为单位,每一年存放在一个文本文件当中,因此实际上是要完成的指定目录下所有txt文件的读取。

glob.glob()获取文件列表

在读取的过程,首先要获取指定文件夹下的所有文件,利用python的glob模块,可以查找符合特定规则的文件路径名,这一点与windows下搜索文件类似,并且glob可以采用匹配符:"“, “?”, “[]”。”“匹配0个或多个字符;”?“匹配单个字符;”[]"匹配指定范围内的字符,如:[0-9]匹配数字。具体代码如下:

1
2
3
# Get files of specified format under the directory
file_list = glob.glob(r"./Data/*.txt")
# Detailed info at http://tcdata.typhoon.org.cn/zjljsjj_sm.html

pandas.read_csv()读取文件

接下来,我们就可以对file_list中的每一个文件依次进行读取。

1
2
for file in file_list:
temp_ty_data = pre_process(file)

python读取csv文件的方法有很多,简单起见,我们采用pandas模块的read_csv()函数加载数据。根据CMA的说明可知,头记录每一行有9列,而最佳路径数据记录每行为7列,read_csv()会按照最多的也就是9列读取,最佳路径记录中确实的则补充为None。

使用read_csv()时可以加入一些参数,例如sep,header,names,dtype等对分隔符、列名、数据类型等加以限定。具体的代码为

1
2
3
file_data = pd.read_csv(destfile, sep='\s+', header=None,
names=['time', 'level', 'lats', 'lons', 'pres', 'wind',
'ty_serial', 'chn_id', 'name'], dtype=object)

台风数据预处理

为了后续分析的需要,对数据做了预处理。我们对每一个热带气旋序号和台风编号加上年份的前缀,年份可以从文件名中提取。同时,我们将头记录中包含的“热带气旋序号”、“台风编号”、“台风名称”等提取出来加入到BST记录中,这样就可以删除头记录,统一数据格式。

1
2
3
4
5
6
for s in temp.index:
file_data.ix[s:s + int(temp.ix[s, 'lats']),
['ty_serial', 'chn_id', 'name']] = [year + temp.ix[s, 'lons'],
temp.ix[s, 'pres'], temp.ix[s, 'chn_id']]

file_data.drop(temp.index, inplace=True)

台风数据准备完毕

经过以上步骤,台风数据就整理为一个N行9列的矩阵,储存储为DataFrame。如果只是每次读取一个台风的话,其实可以不用如此处理,在这里,一方面是想展示Python读取数据的过程,另一方面更重要的是,可以对历史台风做时间和空间上的分析。

未完待续——基于Python的GIS

目前,我们只完成了历史台风数据的准备,接下来,我们将逐步进入正题,实现台风数据的可视化。


参考文献

  1. http://tcdata.typhoon.org.cn/zjljsjj_sm.html 中国气象局热带气旋资料中心
  2. https://docs.python.org/3/library/glob.html glob技术文档
  3. https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html pandas技术文档
  4. https://book.douban.com/subject/25779298/ 《利用Python进行数据分析》