【前言】

每年夏季,台风就如期而至。去年八月份,“风王”利奇马真的如脱缰野马,让大家见识到台风的可怕之处。

这次收集到1945~2015年在中国登陆的所有台风数据,并通过Python对这些数据进行可视化分析,希望能得到一些有意思的结论。

【数据来源】

该数据集来自于上海追风团队,在其官网台风数据中心下载。

网站提到某些数据年代久远,会有缺失和误差,请甄别使用。所以这里无法对数据的精确性和完整性做保证,主要是想运用python对数据做分析展示,看看台风在等级、地点、时间上的分布。杠精勿扰~

部分数据展示

【分析工具】

本文使用python及其第三方库做分析展示,分析平台是Jupyter notebook,用到爬虫、词云、可视化、地理空间分析等技术。

主要工具:Python 3.6、pandas、numpy、matplotlib、seaborn、urllib、geopandas、wordcloud

【分析流程】

1、导入相关库

# 导入相关库import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport geopandas import seaborn as snsfrom urllib import requestimport refrom shapely.geometry import LineString,Pointfrom urllib import parsefrom urllib.request import urlopenimport hashlibimport jsonfrom wordcloud import WordCloudimport warningswarnings.filterwarnings('ignore')# 显示中文标签plt.rc('font', family='SimHei', size=18)sns.set()%matplotlib inline

2、加载数据集

# 加载台风数据data = pd.read_excel(r'caseaifeng.xlsx')# 数据规格data.shape# 输出:(715, 7)

3、查看数据集

# 查看后10行data.tail(10)

4、数据整理

我们可以看到数据集里只有登陆地址,没有确切的经纬度信息 。

这里需要通过地理编码的方式获取经纬度,使用的是百度地图API。

# 地理编码,通过登陆地址信息得到经、纬度def get_coor(address):    # 需填入自己申请应用后生成的ak    ak = 'mcH6sBNaAfsbkSndFI5zO90j9wUpRMFy1'    url = 'http://api.map.baidu.com/geocoder/v2/?address='    output = 'json'    add = parse.quote(address)  # 本文城市变量为中文,为防止乱码,先用quote进行编码    url2 = url + add + '&output=' + output + "&ak=" + ak    req = urlopen(url2)    response = req.read().decode()    #将返回的数据转化成json格式    responseJson = json.loads(response)    # 获取经纬度    lon = responseJson.get('result')['location']['lng']    lat = responseJson.get('result')['location']['lat']    return (lat,lon)# 添加经、纬度字段data['coor'] = data['登陆地点'].apply(lambda x:get_coor(x))data['lat'] = data['coor'].apply(lambda x: list(x)[0])data['lon'] = data['coor'].apply(lambda x: list(x)[1])

获取到登陆经纬度信息后,再通过地理逆编码的方式获取省、市、区县三级信息 。

有人可能会觉得“登陆地点”字段已经有地址信息,为什么不直接截取字段?往往地址信息比较复杂,没有办法用简单的正则表达式去截取,而地理逆编码的方式却能很好的捕捉省、市、区县三级信息。

# 地理逆编码,通过经纬度获取省、市、县区三级单位def get_address(lon,lat):    # 输入你的秘钥,获取地址http://lbsyun.baidu.com/apiconsole/key/create    your_ak = 'mcH6sBNaAfsbkSndFI5zO90j9wUpRMFy1'    url = 'http://api.map.baidu.com/geocoder/v2/?callback=renderReverse&extensions_town=true&location={},{}&output=json&pois=1&latest_admin=1&ak={}'.format(lat,lon,your_ak)    rp = request.urlopen(url).read().decode('utf-8')    rp = re.findall(r"((.*))",rp)[0]    rpjson= json.loads(rp)    # 省份    province = rpjson['result']['addressComponent']['province']    # 城市    city = rpjson['result']['addressComponent']['city']    # 区县    district = rpjson['result']['addressComponent']['district']    data = (province, city, district)    return data# 添加省、市、区县字段data['area'] = data['coor'].apply(lambda x:get_address(x[1],x[0]))data['省'] = data['area'].apply(lambda x:x[0])data['市'] = data['area'].apply(lambda x:x[1])data['区县'] = data['area'].apply(lambda x:x[2])

5、台风登陆地点分布

使用geopandas将台风登陆点放到地图上,这里会用到经、纬度数据。

# 使用shapely库的Point方法,将经、纬度数据转换地理几何点xy = [Point(xy) for xy in zip(data.lon,data.lat)]# 将data数据读取为GeoDataFrame格式,这是geopandas库用于地理空间可视化的专有数据格式geo_data = geopandas.GeoDataFrame(data,geometry=xy)# 读取已经下载好的中国地图shapefile格式底图gdf = geopandas.read_file(r"caseexportedBoundaries_shp_single_land_20190911_031017Taiwan_AL2-AL4.shp")# 展示中国地图ax = gdf.plot(figsize=(20, 20), alpha=0.5, edgecolor='white',color='g',linewidth=1)# 在中国地图底图上展示台风登陆点geo_data.plot(ax=ax,color='red',markersize=7)plt.rc('font', family='SimHei', size=18)plt.title('1945-2015 全国沿海省份台风登陆地点分布图',size=30)plt.show()

6、台风登陆地点词云展示

词云字体越大代表登陆该地点的台风数量越多。

  • 登录省份分布
# 词云展示 台风登陆的省份分布words = ','.join(data['省'].values.tolist())wc = WordCloud(    background_color="white", #背景颜色    max_words=300, #显示最大词数    font_path='./fonts/simhei.ttf',#显示中文    min_font_size=5,    max_font_size=100,    width=500  #图幅宽度    )x = wc.generate(words)image = x.to_image()image
  • 登陆城市分布
# 词云展示 台风登陆的城市分布words = ','.join(data['市'].values.tolist())wc = WordCloud(    background_color="white", #背景颜色    max_words=300, #显示最大词数    font_path='./fonts/simhei.ttf',#显示中文    min_font_size=5,    max_font_size=100,    width=500  #图幅宽度    )x = wc.generate(words)image = x.to_image()image
  • 登陆区县分布
# 词云展示 台风登陆的区县分布words = ','.join(data['区县'].values.tolist())wc = WordCloud(    background_color="white", #背景颜色    max_words=300, #显示最大词数    font_path='./fonts/simhei.ttf',#显示中文    min_font_size=5,    max_font_size=100,    width=500  #图幅宽度    )x = wc.generate(words)image = x.to_image()image

7、数据可视化分析

准备数据

# 新建data_1data_1 = data[['登陆时间','登陆强度','巅峰强度','省']].dropna()data_1['登陆等级'] = data_1['登陆强度'].apply(lambda x:int(re.match('d+',str(x).split(',')[0]).group()))data_1['巅峰等级'] = data_1['巅峰强度'].apply(lambda x:int(re.match('d+',str(x).split(',')[0]).group()))data_1['登陆年份'] = data_1['登陆时间'].apply(lambda x:x.year)data_1['登陆月份'] = data_1['登陆时间'].apply(lambda x:x.month)
  • 看看在各省登陆的台风等级是怎样的
# 各省台风等级分类散点图plt.figure(figsize=(18,6))sns.swarmplot(x='省',y='登陆等级',data=data_1,palette='Set1')plt.title("1945-2015 各省台风登陆等级分类散点图(点数多少代表台风数量)",size=20)plt.show()
  • 1945~2015每年登陆台风数量变化
# 每年台风数量year_counts = data['登陆时间'].apply(lambda x:x.year).value_counts().sort_index()plt.figure(figsize=(15,6))plt.plot(year_counts,lw=2)plt.plot(year_counts,'ro',color='b')x = year_counts.index.tolist()y_mean = [year_counts.mean()]*year_counts.shape[0]plt.plot(x,y_mean,'--')plt.xlabel('年份')plt.ylabel('次数')plt.rc('font', family='SimHei', size=18) plt.title('1945-2015 全国每年台风登陆数量',size=20)plt.show()
  • 台风登陆次数热力图,横坐标代表登陆月份,纵坐标代表登陆等级,颜色代表登录次数
# 不同月份台风登陆时的强度等级data_3 = data_1.groupby(['登陆月份','登陆等级'],as_index=False)['登陆时间'].count()data_3 = data_3.rename(columns={'登陆时间':'登录次数'})# data_2.sort_values(['登陆等级','登陆月份'])data_3_pivot = data_3.pivot('登陆等级','登陆月份','登录次数')# data_2_pivotplt.figure(figsize=(8,6))sns.heatmap(data_3_pivot)plt.title('1945-2015 全国台风登陆次数热力图(按月份-登陆等级)',size=20)plt.show()
  • 台风登陆等级箱图,看看每个月的台风强度变化
plt.figure(figsize=(8,6))sns.boxplot(x='登陆月份',y='登陆等级',data=data_3)plt.title('1945-2015 全国台风登陆等级分布箱图',size=20)plt.show()
  • 台风登陆次数热力图,横坐标代表登陆月份,纵坐标代表巅峰等级,颜色代表登录次数
# 不同月份台风登陆时的强度等级data_2 = data_1.groupby(['登陆月份','巅峰等级'],as_index=False)['登陆时间'].count()data_2 = data_2.rename(columns={'登陆时间':'登录次数'})data_2_pivot = data_2.pivot('巅峰等级','登陆月份','登录次数')plt.figure(figsize=(8,6))sns.heatmap(data_2_pivot)plt.title('1945-2015 全国台风登陆次数热力图(按月份-巅峰等级)',size=20)plt.show()
  • 台风巅峰等级箱图,看看每个月的台风强度变化
plt.figure(figsize=(8,6))sns.boxplot(x='登陆月份',y='巅峰等级',data=data_2)plt.title('1945-2015 全国台风巅峰等级箱图',size=20)plt.show()

【结论】

从地理位置上看,1945-2015 台风主要登陆地点集中在广东省、海南省、台湾省,在台湾省登陆的台风等级较高,广东省数量最多。湛江市和台东县是台风最喜欢登陆的市、县。

从时间上看,年平均登陆台风数量9次左右,主要集中在8、9月份,8月份的台风等级中位数较高,并且强台风主要出现在9月份前后。

截取台风后的图片_Python数据分析案例 | 台风最喜欢在我国哪个省市登陆相关推荐

  1. 台风最喜欢在我国哪个省市登陆!我用Python来告诉你!

    [前言] 每年夏季,台风就如期而至.今年八月份,"风王"利奇马真的如脱缰野马,让大家见识到台风的可怕之处. 这次收集到1945~2015年在中国登陆的所有台风数据,并通过Pytho ...

  2. python商业数据分析_Python数据分析案例—商圈客流量特征分析

    这是 python 数据分析案例系列的第二篇,主要是聚类分析,实现起来较为简单.后续还会继续更新,欢迎关注交流! 在处理实际的数据分析案例时,我们面临的往往是比较复杂的研究对象,如果能把相似的样品(或 ...

  3. 截取台风后的图片_今年首个台风来袭!“大黄蜂”下,货代如何“防台”?

    听说大黄蜂要现身菲律宾东海了?! 货代们应当带上相机,拍下汽车人保卫地球的英姿! 啊?不是这个大黄蜂?是今年首个台风? 那我们不欢迎! 好了,玩笑归玩笑,台风可不是我们想让它走就能走的.如果" ...

  4. python医药数据分析_Python数据分析案例-药品数据分析案例

    最近学习了python数据分析的一些基础知识,有numpy,pandas,matplotlib等,找了一个药品数据分析的小项目练一下手. 数据分析的步骤一般可以分为6个: 1,明确分析的目的 2,数据 ...

  5. python数据分析案例分析题_Python数据分析-案例分析

    星火:Python数据分析基础​zhuanlan.zhihu.com 两个学习道具: 1)这个网页可以调用全球最大的搜索引擎(长按此处可以复制): 事先准备: 在notebook中想要导入Excel文 ...

  6. python截取字符串后三位_python如何截取字符串后几位

    字符串切片也就是截取字符串,取子串. Python中字符串切片方法 字符串[开始索引:结束索引:步长] 切取字符串为开始索引到结束索引-1内的字符串 步长不指定时步长为1,字符串[开始索引:结束索引] ...

  7. python分析数据图片_python数据分析常用图大集合

    以下默认所有的操作都先导入了numpy.pandas.matplotlib.seaborn import numpy as np import pandas as pd import matplotl ...

  8. python实验数据预处理案例_Python数据分析小案例——红楼梦文本分析(一) 文本预处理...

    本文开始介绍一个简单的数据分析案例,分析红楼梦文本,本文主要内容是将红楼梦文本按照章节获取每一回的标题,字数,段落数并保存到csv中方便后续数据分析 红楼梦小说文本可以在这里下载 链接:https:/ ...

  9. python字符串s最后一个字符的位置是_python截取字符串后几位?

    原标题:python截取字符串后几位? 字符串截取,也叫字符串切片,使用方括号[ ]来截取字符串,在Python中单字符也是作为一个字符串使用. 字符串[开始索引:结束索引:步长] 开始索引:从指定位 ...

最新文章

  1. python -使用del语句删除对象引用
  2. 云炬金融每日一题20210906
  3. linux固定分辨率,如何锁定分辨率
  4. Java 的这些坑,你踩到了吗?
  5. spark简介(大数据技术)
  6. require与include的区别
  7. mysql if语句
  8. Python各种推导式(列表推导式,字典推导式,集合推导式,嵌套列表推导式)
  9. 既稳又狂!黑鲨游戏手机2官宣发布时间:3月18日北京见
  10. unity探索者之微信分享回调
  11. 【华为 OJ 】成绩排序
  12. 8个免费和最佳开源视频流服务器软件
  13. 90后美女学霸传奇人生:出身清华姚班,成斯坦福AI实验室负责人高徒
  14. csm和uefi_【一点资讯】关于CSM和UEFI你要知道的一些事 www.yidianzixun.com
  15. html中加入计时器,javascript怎么做计时器?
  16. 不小心隐藏IDEA的main menu,让它恢复显示的解决方法
  17. uniapp 中使用彩色图标,引入阿里图库iconfont
  18. 积攒力量,终会展翅飞翔。Linux学习记录
  19. 使用代理爬去微信公众号_微信公众号怎么去推广运营?企业微信公众号要如何运营?微信公众号运营技巧,你get了吗?微信怎么去推广运营?...
  20. 加密php代码一担粮,分享8个PHP开发常用代码片段_后端开发

热门文章

  1. Java编写编译native方法
  2. 中科大计算机学院推免生录取名单,中科大2016年推免生拟录取名单
  3. c语言程序.cpp文件,[轉]C语言程序设计基础之文件
  4. mybatis 原理_Mybatis大揭秘:plugin插件设计原理
  5. close wait 过多原因_time_wait 详解和解决方案
  6. python算法实验是什么_PCA 算法实验代码(python)
  7. 微软在 ARM 上成功移植 OpenJDK for Windows 10
  8. 如何使用IIS重写模块将HTTP重定向到HTTPS
  9. 微软为 Windows Terminal 推出全新 logo
  10. Firefox 和 Chrome 性能测试对比