基于Python城市历年气象数据可视化分析
——以眉山市为例
2023-10-10王雪芹
胡 超 王雪芹 赵 媛
(眉山市气象局,四川 眉山 620010)
0 引言
随着计算机技术的进步和发展,如何有效地分析各种海量数据成为重要课题。数据可视化技术作为有效分析各种数据的重要方法之一,已被广泛应用于各个领域,特别是在气象学领域的应用已经显示出强大的科研价值[1]。Python作为一种流行的编程语言,具有高效灵活、易学易用等优势,其丰富和强大的库,为数据分析提供了大量函数[2]。
本研究基于Python 编程,从数据处理的角度分析如何对气象数据进行预处理和清洗,以确保结果的准确性和可信度。并根据可视化分析的需要,选择合适的数据可视化方法,包括散点图、柱状图、折线图等,直观展示历年气象数据的总体情况。
综上所述,本研究以对眉山市历年气象数据的可视化分析为例,旨在为城市气象研究提供更加准确、可靠的数据支持,为应对城市气候变化和城市规划建设等方面提供科学决策参考。
1 数据和方法
1.1 数据
本研究所用资料来自国省统一的数据环境(CIMISS)中的中国地面日值资料(资料代码:SURF_CHN_MUL_DAY)。时间覆盖为1959—2022年,其中1959—1992 年、1995—2022 年为眉山站(站号:56391)数据,因1993—1994 年眉山站数据缺失故用邻近的彭山站(站号:56289)代替。所选要素包括日平均气温、日降雨量、日最高气温、日最低气温。
1.2 数据处理与绘图
1.2.1 数据处理。本研究数据处理及绘图工具均使用Python 语言,主要用到它的2 个库,分别为Pandas[3]和Matplotlib[4],它们分别提供数据处理、绘图等功能。首先从CIMISS[5]气象数据统一服务接口(MUSIC)将眉山站1959—2022 年逐日气象数据读取并按照每月4 行(4 个要素分别一行)的方式存储,并对异常数据进行处理。然后用Pandas库定义4 个空的二维表格型数据对象用于之后存放处理后的4个要素数据。再然后设计两个for循环,外循环用来对数据文件的逐行读取,内循环用来对每一行中每一天的列数值读取并分要素创建单行的日数据DataFrame,在这个过程中,利用HSV颜色模型(通过改变色相值,来实现用颜色表示数据大小的效果),加入了数据大小对应的颜色值,日数据DataFrame 中包含了时间、年、月、日、日序、要素值、颜色等,在获取并组合成新的日数据DataFrame 之后,将其添加进之前创建的对应类型的空二维表格型数据对象中。有了这四个要素的表格数据对象,就可以对数据进行可视化制作。
1.2.2 数据可视化方法。本研究分析的可视化图表可分为三类:散点图、线性图、柱状图,具体绘制方式如下[6]。
散点图包括降雨散点图、平均气温散点图、最高气温散点图、最低气温散点图等,现以TAVG(平均气温)为例说明其方法,其余散点图方法相似。其代码为Maltplotlib.pyplot.scatter(df_TAVG[‘dayIndex’], df_TAVG[‘value’],s=80,c=df_TAVG[‘color’],marker=‘.’, alpha=0.05)。Maltplotlib.pyplot 库有绘制图表的各类方法,其中绘制散点图的方法为scatter(),其参数中的x参数填入日序(当年的第几天)的集合,y参数填入当日平均气温的集合,s 表示点的大小,设置为80,c 表示点的颜色,这里填入之前的计算好的根据数据大小所对应的颜色值的集合,marker 为点的形状参数,‘.’表示其形状为圆点,alpha为点的透明度,0.05表示几乎不透明。
为展示数据逐年变化情况,本研究采用线性图的方式来呈现。需要统计的数据有:每一年有降雨发生的日数、达到高温(TMAX ≥35 ℃)的日数及寒冷(TMIN≤0 ℃)的日数。首先将逐日数据经过判定将满足条件的记录保留,再通过groupby()方法来将这些记录按照年份进行分组,之后再使用count()方法对各组数据进行组内计数统计,最后产生的数据集即为本研究所需的年统计数据。绘制线性图需要调用Maltplotlib.pyplot 库的plot()[7]方法,需要绘制的数据有三种,因此需要同时调用三次plot()方法,来分别绘制年降雨日数、年高温日数、年低温日数这三个数据集的逐年线性变化曲线。
本研究中的柱状图分为竖向柱状图和横向柱状图,其中竖向柱状图为降雨频率图,绘制前首先将逐日雨量经过判定(PRCP>0)后将满足条件的记录保留,然后通过groupby()方法来将这些记录按照日索引进行分组,再分别除以总的年数(64),之后再乘以100%就得到了历史上每个日期降雨频率的数据集,之后调用Maltplotlib.pyplot 库的bar()方法,即可绘制出历史降雨频率柱状图。
最后的一类数据分析为事件连续发生天数逐年最值及发生日期。需要可视化的有连续降雨、连续高温以及连续低温的天数极值分布图。这里以分析高温数据为例,首先需要计算出每一年连续高温天气最长的天数及从哪天开始到哪天结束。然后调用Maltplotlib.pyplot 库的barh()方法,即横向柱状图绘制,同时加入了left标签,用于对柱状图块进行位移(位移用来表示从哪一天开始),每一个柱状图块的长度表示了每一年的连续高温极值天数,图块的位置表示了连续高温的起始日和终止日。
2 结果与分析
2.1 平均气温
眉山市历年日平均气温散点图、分布图如图1所示。其中,图1(a)为散点图,图上每一个点都表示眉山建站以来某一天的平均气温,整体是像彩虹一样的弧形,其值的范围大致在0~30 ℃之间,弧线的宽度从头到尾大致相当,上下相差10 ℃左右,也有个别松散的点导致跨度最大在15 ℃左右,这表示历史上不同年份的同一天日平均气温最大可以相差15 ℃,这种情况较少。此外可以看到眉山几乎没有日平均气温低于0 ℃时候,说明眉山的气候总体还是暖的,冬季没有非常寒冷的时期;日平均气温最高也鲜有超过30 ℃的情况,说明眉山夏季总体不算非常炎热。从图形的走势来看,眉山的春季(3—5 月)和秋季(9—11 月)气温比较适中,且有明显的上升(春季)和下降(秋季)趋势,说明春秋两季气温变化较快;而夏季(6—8 月)和冬季(12—2 月)气温较为平稳的维持在春秋两季的季末气温附近。图1(b)为分布图,可以看到夏季连续高温的天气并不长,而连续的低温天气相对长一些,整体来看连续为绿色的天气最多,眉山连续高温和寒冷的天气都少。单从平均气温来看,眉山是一座四季分明且气候温和的城市。
2.2 最高最低气温
眉山历年最高气温、最低气温散点图如图2 所示。图2(a)和图2(b)整体来看和平均气温走势一致。最高气温分布相对松散一些,而最低气温相对紧密。最高气温历史同比的分布跨度较大,不同年份同比最大甚至超过了20 ℃的差异,而最低气温历史同比分布相对较小,不同年份比在15 ℃以内。由图2(a)可知,最高气温很少有超过35 ℃的时候,主要分布在5—9月,最多在7—8月盛夏时节,但点数都不多,大多数的点都在35 ℃下,也有个别点超过了40 ℃。由图2(b)可知,最低气温从12 月开始到2 月中旬有少数的点落在了0 ℃以下,大多数时候最低气温都在零度以上。
眉山历年连续低温(TMIN≤0 ℃)、连续高温(TMAX≥35 ℃)最长时段如图3所示。可见连续低温最长时段中最长的年份为5天,大多数年份都未出现连续的低温天气。连续高温最长时段为19天,出现在2022年的8月,2022年8月全国出现了历史上罕见的高温天气,除2022年外连续高温最长只有7天,分别出现在2002年的7月10—16日和2006年的8月8—14日,都集中在盛夏7、8月份,多数年份未出现连续性高温天气。这进一步说明眉山极端天气少,适宜居住。
图3 眉山历年连续低温、高温最长时段图
2.3 降水
眉山历年降雨量散点图如图4所示,图中每一个点都表示过去64年间某一天下过的雨量,对于某一天点越多表示下过雨的次数越多,点的位置越高表示当时的日雨量越大。可以看到过去的64 年间每个日期都曾有过下雨记录。雨量随着春季的到来呈上升趋势,在盛夏7、8 月到达顶峰,最大日降雨量为284.3 mm,出现在1995年的8月24日。接下来降雨量开始相对减少,10 月到次年3 月为非汛期雨量明显减小,这和眉山是中亚热带湿润季风气候的城市的特点相吻合。
图4 眉山历年降雨量散点图
眉山历年降雨频率如图5 所示,该图很直观地展示了历史同比日单位的降雨频率,统计了眉山过去64 年以来,某一日期出现过降雨的次数,以此来计算出这一天下雨频率。从图中可以看到,眉山常年降雨频次多在30%以上,冬季频次相对较低,从4 月初开始上升,超过50%,一直到11 月才有明显下降,其中6 月中旬到7 月初和10 月中旬出现降雨的概率最大,而这几天出现降雨的概率都在50%以上,最大的甚至达到70%。结合之前的气温和雨量的分析,可以得出眉山随着气温上升降雨概率以及降雨量都同步上升,即为雨热同季,且雨量丰沛。
图5 眉山历年降雨频率
眉山历年连续降雨的天数极值分布如图6所示,可以看到大多数年份连续降雨的天数极值都不算长,最长连续降雨天数记录出现在1992 的6 月14—30日,连续降雨了17天,这并不是说这17天一直在下雨,只是17天里每天都下过雨,最短的年份只有5天,大部分年份的极值都在10天左右。
图6 眉山历年连续降雨的天数极值分布
眉山历年降雨展示如图7 所示,图中每一个点都表示历史上当天有降雨记录,空白区域则表示当天没有降雨记录,综合来看每年都有一半左右的天数有降雨的情况,且在汛期相对非汛期更为频繁。
图7 眉山历年降水展示
2.4 要素逐年变化
眉山历年高温、低温及降雨天数逐年变化曲线如图8 所示,统计了眉山历史高温(TMAX≥35 ℃)、低温(TMIN≤0 ℃)和降雨的各年天数。由图5 可知,一年有不到一半天数(平均为156 天)在下雨,最长为197 天发生在1975 年,而最短为121 天发生在2013 年,且可以看到眉山的降雨天数在近几年有较为明显的下降趋势。通常只有6 天左右的低温寒冷天气,最长为11 天出现在1975年,且有8 年中未出现低温寒冷天气。而高温出现的天数平均只有不到5 天,最长的2022 年达到了36 天,其中有16 年未出现高温天气,而且可以看到最近20 年高温天气明显增多,尤其是2022 年全国都出现了罕见高温天气,对眉山来说,无论是高温极值还是高温持续时间都达到了历史第一高位。总的来说,眉山近年来降雨天数下降,高温天数上升,这不是好趋势,未来高温和干旱可能会越来越多,势必会给人们的生活带来各种不利影响[8],这也是今后需要深入研究的课题。
图8 眉山历年高温、低温及降雨天数逐年变化曲线
3 结语
利用Python 语言处理城市常规气象数据及可视化分析非常的便利[9],通过此次分析,为应对城市气候变化和城市规划建设等方面提供一些科学决策依据,也可为今后其他城市做历年气象数据可视化分析提供有益参考。