基于Python的GIS分析之台风路径可视化(一)
摘要:2017年8月底,台风“天鸽”、“帕卡”、“泰利”相继(即将)造访我国,飓风“哈维”、“艾玛”席卷美国,给当地造成了巨大的财产和人员损失。如果能够借助历史数据,分析我国的台风灾害风险,无疑对于防灾减损具有重要意义。我们利用中国气象局提供的台风数据集,基于Python,利用Cartopy、Pandas等做了西北太平洋台风路径的可视化。
数据读取
数据说明
目前有许多机构发布台风的历史和实时路径,我们采用中国气象局热带气旋资料中心提供的数据集作为分析基础。现行版本的CMA热带气旋最佳路径数据集提供1949年以来西北太平洋(含南海,赤道以北,东经180°以西)海域热带气旋每6小时的位置和强度,按年份分别放在单独的文本文件中。
数据集文件的命名方式为CHYYBST.txt,以空格分隔的CSV文件。在每一个文件中,包含两类内容:
- 头记录
- 每一个热带气旋有一个头记录;
- 每一个头记录占单独一行;
- 头记录以“66666”开头,包含编号、数据行数、数据频率等信息
- 最佳路径数据记录
- 最佳路径数据记录紧随头记录之后,其行数可以从头记录中看到;
- 每一行的数据包括时间(YYYYMMDDHH)、强度、纬度、经度、中心最低气压、2分钟平均近中心最大风速、2分钟平均风速等。
读取文件
前面提到,虽然CHBST的数据集是txt文件,但是可以按照csv文件的格式读取,借助Python的pandas模块完成数据读取。需要注意的是,CHBST的数据是按照年为单位,每一年存放在一个文本文件当中,因此实际上是要完成的指定目录下所有txt文件的读取。
glob.glob()获取文件列表
在读取的过程,首先要获取指定文件夹下的所有文件,利用python的glob模块,可以查找符合特定规则的文件路径名,这一点与windows下搜索文件类似,并且glob可以采用匹配符:"“, “?”, “[]”。”“匹配0个或多个字符;”?“匹配单个字符;”[]"匹配指定范围内的字符,如:[0-9]匹配数字。具体代码如下:
1 | # Get files of specified format under the directory |
pandas.read_csv()读取文件
接下来,我们就可以对file_list中的每一个文件依次进行读取。
1 | for file in file_list: |
python读取csv文件的方法有很多,简单起见,我们采用pandas模块的read_csv()
函数加载数据。根据CMA的说明可知,头记录每一行有9列,而最佳路径数据记录每行为7列,read_csv()
会按照最多的也就是9列读取,最佳路径记录中确实的则补充为None。
使用read_csv()
时可以加入一些参数,例如sep,header,names,dtype
等对分隔符、列名、数据类型等加以限定。具体的代码为
1 | file_data = pd.read_csv(destfile, sep='\s+', header=None, |
台风数据预处理
为了后续分析的需要,对数据做了预处理。我们对每一个热带气旋序号和台风编号加上年份的前缀,年份可以从文件名中提取。同时,我们将头记录中包含的“热带气旋序号”、“台风编号”、“台风名称”等提取出来加入到BST记录中,这样就可以删除头记录,统一数据格式。
1 | for s in temp.index: |
台风数据准备完毕
经过以上步骤,台风数据就整理为一个N行9列的矩阵,储存储为DataFrame
。如果只是每次读取一个台风的话,其实可以不用如此处理,在这里,一方面是想展示Python读取数据的过程,另一方面更重要的是,可以对历史台风做时间和空间上的分析。
未完待续——基于Python的GIS
目前,我们只完成了历史台风数据的准备,接下来,我们将逐步进入正题,实现台风数据的可视化。
参考文献
- http://tcdata.typhoon.org.cn/zjljsjj_sm.html 中国气象局热带气旋资料中心
- https://docs.python.org/3/library/glob.html glob技术文档
- https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html pandas技术文档
- https://book.douban.com/subject/25779298/ 《利用Python进行数据分析》