7.20河南郑州的特大暴雨牵动着亿万国民的心,笔者也是河南人,对郑州的暴雨自然也更加关心。那么郑州的暴雨到底有多大,为什么会形成如此严重的内涝?看新闻我们知道,郑州当天的小时降雨量超过200mm,日降雨量超过600mm,这是一个什么概念呢?作为数据从业者,自然想到用数据来说话,我们对比往年的降雨量来给大家一个直观的展示。
首先我们要能拿到降雨的历史数据,很幸运,笔者在查阅资料时发现了一个网站(
https://q-weather.info/weather/57083/history/?date=2021-07-24),这里可以查询到2014年以来的小时级天气情况。天气数据在诸多领域都有应用,比如农业、交通、外卖、旅游等等行业。笔者因为业务预测需要曾经苦苦搜寻的日级、小时级的数据而未得的小遗憾今天算是弥补了。
今天我们主要跟大家分享下2014年以来郑州的降雨情况。各位读者朋友们可以在我们的 "数据臭皮匠" 中输入"郑州7.20" 获取本文相关资料(包含2014年以来郑州、洛阳、偃师、巩义以及上海浦东等地区的小时级数据)及代码。
1.数据处理
# import 相关包
import pandas as pd
from matplotlib import pyplot as plt
import warnings
warnings.filterwarnings('ignore')
pd.set_option('display.max_rows',100)
# 数据处理使用到的函数
def date_split(df,drop=False):
"""将时次, 切分为年月日时"""
df['year'] = df['时次'].apply(lambda ss:ss[:4])
df['month'] = df['时次'].apply(lambda ss :ss[5:7])
df['day'] = df['时次'].apply(lambda ss:ss[8:10])
df['hour'] = df['时次'].apply(lambda ss:ss[11:13])
df= df[['时次','year', 'month','day', 'hour' ,'瞬时温度', '地面气压', '相对湿度', '2分钟平均风向', '2分钟平均风速', '1小时降水',
'10分钟平均能见度', 'city', '瞬时风向', '瞬时风速', '能见度', '1小时极大风速']]
if drop :
df.drop('时次',axis=1,inplace=True)
return df
fname = 'Weather of ZhengZhou_20140101-20210724.csv'
df = pd.read_csv(fname)
df = df.iloc[:,1:]
df = date_split(df,drop=True)
print(df.shape)
df.head(2).append(df.tail(2))
2. 异常值
df.groupby('year')['1小时降水'].sum()
我们发现2016年的数据显然是异常的,下面来处理下
df.groupby(['year','month'])['1小时降水'].sum().plot(figsize=(28,8),kind='bar')
可以看到是2016年6月的数据异常,接下来我们看下6月每天的降雨情况
df[(df['year']=='2016')&(df['month']=='06')].groupby('day')['1小时降水'].sum().plot(kind='bar')
很明显,问题出在2016年6月28日,然后我们来看是这一天那个时段的数据问题
df[(df['year']=='2016')&(df['month']=='06')&(df['day']=='28')].groupby('hour')['1小时降水'].sum().plot(kind='bar')
可以看到是2016年6月28日10点的数据异常,我们将它替换成0
df.loc[(df['year']=='2016') &(df['month']=='06')&(df['day']=='28')&(df['hour']=='10'),'1小时降水']= 0
3.看下近8年来郑州每年的降雨量
plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体)
plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)
df.groupby('year')['1小时降水'].sum().plot(kind='bar',title='近8年郑州每年降雨量',figsize=(10,6))
plt.plot()
可以看到, 郑州一般年降雨量在600mm左右, 2021年的降雨量已经超过前7年的水平,我们将时间窗口缩小,观察每年7月的降雨量
4.每年7月的降雨量
df[df['month']=='07'].groupby('year')['1小时降水'].sum().plot(kind='bar',title='近8年每年7月降雨量')
前7年的7月的降雨量均值在100mm左右, 2016年较多,超过了200mm, 但可以发现2021年7月的降雨量明显较前7年高的多,竟然超过了800mm。
5.郑州7月20日小时级降雨量
下面我们可以看7.20这天郑州小时级的降雨量
df[(df['year']=='2021')
&(df['month']=='07')
&(df['day']=='20')].groupby('hour')['1小时降水'].sum().plot(kind='bar',
title='当天分小时降雨量')
7月20号郑州17点的降雨量达到了200mm!!这是什么概念呢,引用网上的一段描述,按照郑州市7500平方千米的面积算,就是一个小时在郑州下了7500*0.2÷1000=1.5立方千米的雨。1.5平方千米,看起来不咋地?换成立方米就是15亿立方米,相当于150个西湖,也就是在1个小时内往郑州市倒进了150个西湖的水!!难怪连德国的专家都说:郑州7.20号的降水量,放在世界上任何一个城市都是抗不住的。
好在这次水灾牵动着全国人民的心,笔者也感谢全国人民对河南的援助,相信家乡会在社会的援助下很快走出灾难,河南加油!中国加油!
更多精彩内容,请关注:数据臭皮匠 共中号
作者:范小匠
审核:灰灰匠
编辑:森匠