可视化 | Python绘制高颜值台风地理轨迹图

简介: 可视化 | Python绘制高颜值台风地理轨迹图

本期导读

大家好,我是欧K。

今天给大家推荐一个比较方便绘制地理轨迹的库-plotly。plotly库是一个可交互,基于浏览器的绘图库,功能非常强大, 可以在线绘制常见的条形图、散点图、饼图、直方图等等,本期我们用plotly绘制台风地理轨迹图,希望对你有所帮助。


涉及到的内容:

request+json – 网页数据爬取

openpyxl – 保存数据至Excel

os.walk() – 文件路径遍历

pandas – 表格数据处理

plotly – 地图数据可视化


1. 数据爬取

1.1 网页分析


数据来源:中国天气台风网(http://typhoon.weather.com.cn/index.shtml)

以2020年为例,打开网址查看2020年台风列表:

去年有记录的台风一共有23个,编号2001~2023。


1.2 查看网页台风数据


F12调试模式,以编号2001为例:



可以看到轨迹数据在页面返回的getData字符串中,内部数据为json格式。



数据包含:台风名称、时间(间隔1小时)、经度、纬度、风速、移动方向、移动速度等等。


1.3 数据爬取

单个台风轨迹爬取需要输入年份台风编号

def get_tp_data(year, code):
    tim = int(time.time())
    url = f'http://d1.weather.com.cn/typhoon/typhoon_data/{year}/{code}.json?callback=getData&_={tim}'
    headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36' }
    r = requests.get(url,headers=headers)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    datas = json.loads(r.text[8:-1])
    tp_name = datas['typhoon'][2]
    detail_datas = datas['typhoon'][8]
    # 台风信息
    allinfo = []
    for data in detail_datas:
        # 时间
        tp_time = data[1]
        # 经度
        tp_lon = data[4]
        # 纬度
        tp_lat = data[5]
        # 中心气压
        central_pressure = data[6]
        # 风速
        tp_speed = data[7]
        # 移向
        tp_direction = data[8]
        # 去除台风登陆时的空行
        if tp_direction == None :
            continue
        # 移速
        move_speed = data[9]
        tp_info = [f'{code}-' + tp_name,tp_time,tp_lon,tp_lat,central_pressure,tp_speed,tp_direction,move_speed]
        allinfo.append(tp_info)

注意操作:去除台风登陆时的空行数据(该数据无经、纬度信息),这一步也可以在后续数据处理中进行

以前10个台风为例(可根据需要调整):


# 台风年份、编号
year = 2020
# 数据爬取
for code in range(2001,2011):
   get_tp_data(year, code)
   pass


1.4 数据保存

使用openpyxl库保存Excel文件:

def insert2excel(filepath, allinfo):
    try:
        # 表头
        tableTitle = ['名称','时间','经度','纬度','中心气压(hPa)','风速(m/s)','移向','移速(m/s)']
        wb = Workbook()
        ws = wb.active
        ws.title = 'sheet1'
        ws.append(tableTitle)
        for info in allinfo:
            ws.append(info)
        wb.save(filepath)
        return True
    except:
        return False

结果:


注意新建data文件夹(路径可自行调整):

2. 地理轨迹


2.1 mapbox网站Token获取


网站:https://account.mapbox.com/

需要邮箱注册:


2.2 导入plotly相关包


导入express模块:

import plotly.express as px

如果环境没有plotly包,直接pip install plotly即可。


2.2 单个台风轨迹

代码

def trace_point_shows():
    df = pd.read_excel('./data/2020_2001_黄蜂轨迹数据.xlsx')
    print(df)
    token = '你的token'
    fig = px.scatter_mapbox(df,
         hover_data=['时间'],
         lon = '经度',
         lat = '纬度',
         color = '风速(m/s)',
         hover_name = '名称',
         size_max = 14,
         color_continuous_scale = px.colors.carto.Temps
        )
    fig.update_layout(mapbox = {'accesstoken': token, # 官网注册token
                             'center':{'lon':121.54,'lat':25.00}, # 地图中心
                             'zoom': 8,
                             'style': 'dark', # 显示地图类型
                            },
                   margin = {'l': 1, 'r': 1, 't': 1, 'b': 1}) # 地图边界
    fig.write_html('trace_point_shows-1.html')

效果:


地图style可以是:basic, streets, outdoors, light, dark, satellite, satellite-streets 中的任意一种,默认为 'light'。

2.3 多个台风轨迹

os.walk()遍历文件夹中所有轨迹表格文件

filenames = []
for root, dirs, files in os.walk('./data'):
    for name in files:
        filenames.append(f'{root}/{name}')

代码

def trace_point_shows(filenames):
    df = pd.DataFrame()
    lsts = []
    for filename in filenames:
        df0 = pd.read_excel(filename)
        lsts.append(df0)
    df = pd.concat(lsts)
    token = '你的token'
    fig = px.scatter_mapbox(df,
         hover_data=['时间'],
         lon = '经度',
         lat = '纬度',
         color = '风速(m/s)',
         hover_name = '名称',
         size_max = 14,
         color_continuous_scale = px.colors.carto.Temps
        )
    fig.update_layout(mapbox = {'accesstoken': token, # 官网注册token
                             'center':{'lon':121.54,'lat':25.00}, # 地图中心
                             'zoom': 8,
                             'style': 'dark', # 显示地图类型
                            },
                   margin = {'l': 1, 'r': 1, 't': 1, 'b': 1}) # 地图边界
    fig.write_html('trace_point_shows.html')

效果:


END

以上就是本期为大家整理的全部内容了,赶快练习起来吧,喜欢的朋友可以点赞、点在看也可以分享让更多人知道哦


相关文章
|
2月前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
565 7
|
3月前
|
存储 数据可视化 数据挖掘
使用Python进行数据分析和可视化
本文将引导你理解如何使用Python进行数据分析和可视化。我们将从基础的数据结构开始,逐步深入到数据处理和分析的方法,最后通过实际的代码示例来展示如何创建直观的数据可视化。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起探索数据的世界,发现隐藏在数字背后的故事!
146 5
|
3月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第42天】本文将介绍如何使用Python进行数据分析和可视化。我们将从数据导入、清洗、探索性分析、建模预测,以及结果的可视化展示等方面展开讲解。通过这篇文章,你将了解到Python在数据处理和分析中的强大功能,以及如何利用这些工具来提升你的工作效率。
|
3月前
|
数据可视化 搜索推荐 Shell
Python与Plotly:B站每周必看榜单的可视化解决方案
Python与Plotly:B站每周必看榜单的可视化解决方案
|
3月前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第33天】本文将介绍如何使用Python编程语言进行数据分析和可视化。我们将从数据清洗开始,然后进行数据探索性分析,最后使用matplotlib和seaborn库进行数据可视化。通过阅读本文,你将学会如何运用Python进行数据处理和可视化展示。
|
3月前
|
数据可视化 数据挖掘 定位技术
Python和Geopandas进行地理数据可视化
【10月更文挑战第22天】本文介绍了如何使用Python和Geopandas进行地理数据可视化和分析,涵盖从准备工作、加载数据、数据探索与处理、地理数据可视化、空间分析与查询到交互式地理数据可视化等内容。通过丰富的代码示例和案例演示,帮助读者掌握地理数据分析的基本方法,为实际应用提供支持。
220 19
|
4月前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据处理与可视化——以气温数据分析为例
【10月更文挑战第12天】使用Python进行数据处理与可视化——以气温数据分析为例
490 0
|
4月前
|
数据采集 Web App开发 数据可视化
Python爬虫教程:Selenium可视化爬虫的快速入门
Python爬虫教程:Selenium可视化爬虫的快速入门
|
4月前
|
机器学习/深度学习 数据可视化 Python
Python实用记录(三):通过netron可视化模型
使用Netron工具在Python中可视化神经网络模型,包括安装Netron、创建文件和运行文件的步骤。
75 2
Python实用记录(三):通过netron可视化模型
|
4月前
|
数据采集 数据可视化 数据挖掘
Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
【10月更文挑战第3天】Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
223 0

热门文章

最新文章

推荐镜像

更多