Python 解析json文件 使用Plotly绘制地理散点图

目录

0、任务说明

1、解析json文件

2、使用Plotly绘制地理散点图

2.1 函数scatter_geo介绍

2.2 官方示例

3、根据json文件数据,准备绘制地理散点图的‘数据结构’

4、完整代码及运行效果


0、任务说明

json文件中存放了关于地震的地理信息。

使用plotly模块绘制地理散点图。

在世界地图上:

1)标识地震位置;

2)用标识的大小表示地震烈度;

3)当鼠标悬停在标识上时,显示详细地震信息;

4)通过拖拽可以滚动查看地图信息;

5)可以放大缩小地图查看信息。

最终将绘制完成结果保存为html文件

1、解析json文件

使用json模块。

要打开的json文件放在执行程序所在目录中的data文件夹下。

使用json.dump(all_eq_data,f,indent=4)语句,改变json的格式,用记事本打开时如下所示,更易查看。

{"type": "FeatureCollection","metadata": {"generated": 1550361461000,"url": "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/1.0_day.geojson","title": "USGS Magnitude 1.0+ Earthquakes, Past Day","status": 200,"api": "1.7.0","count": 158},"features": [{"type": "Feature","properties": {"mag": 0.96,"place": "8km NE of Aguanga, CA","time": 1550360775470,"updated": 1550360993593,"tz": -480,"url": "https://earthquake.usgs.gov/earthquakes/eventpage/ci37532978","detail": "https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci37532978.geojson","felt": null,"cdi": null,"mmi": null,"alert": null,"status": "automatic","tsunami": 0,"sig": 14,"net": "ci","code": "37532978","ids": ",ci37532978,","sources": ",ci,","types": ",geoserve,nearby-cities,origin,phase-data,","nst": 32,"dmin": 0.02648,"rms": 0.15,"gap": 37,"magType": "ml","type": "earthquake","title": "M 1.0 - 8km NE of Aguanga, CA"},"geometry": {"type": "Point","coordinates": [-116.7941667,33.4863333,3.22]},"id": "ci37532978"},

语句all_eq_dicts = all_eq_data['features'],将json文件中‘features’下的所有元素,放在all_eq_dicts中。

语句mags = [eq_dict['properties']['mag'] for eq_dict in all_eq_dicts],将每个元素中‘properties’下的‘mag’值存在列表mags中。这里使用了列表解析。

import jsonfilename = 'data/eq_data_1_day_m1.json'
with open(filename) as f:all_eq_data = json.load(f)readable_file = 'data/readable_eq_data.json'#重写json文件,使其便于阅读
with open(readable_file,'w') as f:json.dump(all_eq_data,f,indent=4)all_eq_dicts = all_eq_data['features']mags = [eq_dict['properties']['mag'] for eq_dict in all_eq_dicts]
titles = [eq_dict['properties']['title'] for eq_dict in all_eq_dicts]
longitudes = [eq_dict['geometry']['coordinates'][0] for eq_dict in all_eq_dicts]
latitudes = [eq_dict['geometry']['coordinates'][1] for eq_dict in all_eq_dicts]

2、使用Plotly绘制地理散点图

2.1 函数scatter_geo介绍

Plotly Express 中的 scatter_geo 函数是用于创建地理散点图的函数。它允许用户轻松地在地图上绘制数据点,每个数据点表示一个地理位置,并且可以根据数据中的某些属性来自定义数据点的颜色、大小等。

该函数的基本语法如下:

px.scatter_geo(data_frame, lat=None, lon=None, locations=None, locationmode=None, color=None, size=None, hover_name=None, hover_data=None, projection=None, animation_frame=None, title=None, template=None, width=None, height=None)

其中,主要参数包括(data_frame必须输入,其余根据需要选择使用):

  • data_frame: 包含数据的 DataFrame 对象。
  • latlon: 分别指定纬度和经度数据所在的列名。
  • locations: 指定用于标识地理位置的列名。
  • colorsize: 分别指定数据点的颜色和大小所对应的列名。
  • hover_namehover_data: 分别指定悬停时显示的标签和其他数据。
  • projection: 指定地图投影的类型,如 "equirectangular"、"mercator" 等。
  • animation_frame: 如果要创建动画效果,可以指定用于动画的时间序列数据所在的列名。
  • title: 图表的标题。
  • template: 图表的模板。
  • widthheight: 图表的宽度和高度。

2.2 官方示例

import plotly.express as px'''
px.data.gapminder() 是 Plotly Express 提供的一个函数,
用于加载示例数据集 "gapminder"。
这个数据集包含了关于世界各国在不同年份的人口、GDP 等数据。
.query("year == 2007") 是 Pandas 数据框(DataFrame)对象的一个方法,
用于查询符合特定条件的数据。在这里,它筛选出年份为 2007 年的数据。
'''
df = px.data.gapminder().query("year == 2007")'''
基于给定的数据集 df,创建一个地理散点图,
其中每个点表示一个国家,其位置由 ISO 3166-1 #alpha-3 代码指定,
点的大小表示该国的人口数量。
'''
fig = px.scatter_geo(df, locations="iso_alpha",size="pop", # size of markers, "pop" is one of the columns of gapminder)fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})fig.show()

运行结果:

3、根据json文件数据,准备绘制地理散点图的‘数据结构’

根据第一部分的说明,解析后的json数据是放在四个列表中的,此时这四个列表必须构成DataFrame对象,才能被scatter_geo 函数使用,具体方法如下:

import pandas as pdmags = [eq_dict['properties']['mag'] for eq_dict in all_eq_dicts]
titles = [eq_dict['properties']['title'] for eq_dict in all_eq_dicts]
longitudes = [eq_dict['geometry']['coordinates'][0] for eq_dict in all_eq_dicts]
latitudes = [eq_dict['geometry']['coordinates'][1] for eq_dict in all_eq_dicts]#根据以上数据创建‘字典’
data = {'mags':mags,'titles':titles,'longitudes':longitudes,'latitudes':latitudes}
# 使用字典创建 DataFrame
df = pd.DataFrame(data)

以上数据中,

mags是地震烈度,决定地图上标志点大小;

titles是地震信息,鼠标悬停在标志点上时显示;

longitudes是经度,决定标志点在地图上的位置;

latitudes是纬度。

4、完整代码及运行效果

import json
import plotly.express as px
import pandas as pd#准备数据
filename = 'data/eq_data_1_day_m1.json'
with open(filename) as f:all_eq_data = json.load(f)all_eq_dicts = all_eq_data['features']mags = [eq_dict['properties']['mag'] for eq_dict in all_eq_dicts]
titles = [eq_dict['properties']['title'] for eq_dict in all_eq_dicts]
longitudes = [eq_dict['geometry']['coordinates'][0] for eq_dict in all_eq_dicts]
latitudes = [eq_dict['geometry']['coordinates'][1] for eq_dict in all_eq_dicts]#根据以上数据创建‘字典’
data = {'mags':mags,'titles':titles,'longitudes':longitudes,'latitudes':latitudes}
# 使用字典创建 DataFrame
df = pd.DataFrame(data)
fig = px.scatter_geo(df,lat='latitudes',lon='longitudes',size='mags',hover_name='titles')fig.update_layout(margin={"r": 0, "t": 0, "l": 0, "b": 0})fig.write_html('global_earthquakes.html')
fig.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/280543.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

练习 9 Web [SUCTF 2019]CheckIn (未拿到flag)

上传图片格式的木马文件&#xff1a; 返回 <? in contents!,存在PHP代码检测 上传非图片格式文件&#xff1a; 返回 不允许非image 修改木马PHP代码规避检测 <? ?> 改为 < script language“php”>< /script ><?php eval($_POST[shell]);?>…

初始Java篇(JavaSE基础语法)(3)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 目录 方法的使用 方法定义 实参和形参的关系 方法重载 方法签名 递归 方法的使用 方法就是一个代码片段. 类似于 C 语言中的 "函数"…

华为openEuler系统卸载jdk

华为openEuler系统卸载jdk 1.查看openEuler上已安装的 Java 版本&#xff1a; 在终端中运行以下命令&#xff0c;查看系统中已经安装的 Java 版本。 sudo alternatives --config java这将列出已安装的 Java 版本&#xff0c;你可以看到当前使用的是哪个版本 2.卸载 Java&am…

git如何在某个commitId的状态提交到一个分支

有些时候&#xff0c;我们在使用子仓库&#xff0c;或者其他情况&#xff0c;会有一个状态是当前的git仓库是在一个commitId上&#xff0c;而没有在一个分支上&#xff1a; 这时如果想要把基于这个commitId创建一个分支&#xff0c;可以使用下面这个命令&#xff1a; git push…

软考高级:结构化需求分析概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

机器人路径规划:基于冠豪猪优化算法(Crested Porcupine Optimizer,CPO)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

Debezium vs OGG vs Tapdata:如何实时同步 Oracle 数据到 Kafka 消息队列?

随着信息时代的蓬勃发展&#xff0c;企业对实时数据处理的需求逐渐成为推动业务创新和发展的重要驱动力。在这个快速变化的环境中&#xff0c;许多企业选择将 Oracle 数据库同步到 Kafka&#xff0c;以满足日益增长的实时数据处理需求。本文将深入探讨这一趋势的背后原因&#…

Vue+Element-UI Table表格实现复选框单选效果(隐藏表头上的全选Checkbox)

实现效果 完整代码 <div class"box-pos"><el-table ref"table" :header-cell-style"{ color: #FFF, background: #333 }":cell-style"{ color: #FFF, background: #333 }" :data"grListData" style"width: 1…

01分布式搜索引擎ES

分布式搜索引擎ES 1.初识elasticsearch1.1.了解ES1.2.倒排索引1.3.es的一些概念 2.索引库操作2.1.mapping映射属性2.2.索引库的CRUD 3.文档操作3.1.新增文档3.2.查询文档3.3.删除文档3.4.修改文档3.5.总结 4.RestAPI4.0.导入Demo工程4.1.创建索引库4.2.删除索引库4.3.判断索引库…

Linux环境开发工具之vim

前言 上一期我们已经介绍了软件包管理器yum&#xff0c; 已经可以在linux上查找、安装、卸载软件了&#xff0c;本期我们来介绍一下文本编辑器vim。 本期内容介绍 什么是vim vim的常见的模式以及切换 vim命令模式常见的操作 vim底行模式常见的操作 解决普通用户无法执行sudo问…

Apache Superset

前言 最近在准备一个小的项目&#xff0c;需要对 Hive 的数据进行展示&#xff0c;所以想到了把 Hive 的数据导出到 MySQL 然后用 Superset 进行展示。 Superset 1.1 Superset概述 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用&#xff0c;可对接…

ASP .Net Core 配置集合 IConfiguration 的使用

&#x1f433;简介 IConfiguration 是 ASP.NET Core 中的一个接口&#xff0c;用于表示配置集合。以下是关于 IConfiguration 的详细介绍&#xff1a; 作用&#xff1a;IConfiguration 允许开发人员从各种来源&#xff08;如文件、环境变量、命令行参数等&#xff09;读取应用…

wireshark 使用实践

1、打开wireshark软件&#xff0c;选择网卡&#xff0c;开始抓包 2、打开浏览器&#xff0c;访问一个http网站&#xff1a;这里我用 【邵武市博物馆】明弘治十一年&#xff08;1498&#xff09;铜钟_文物资源_福建省文 测试&#xff0c;因为它是http的不是https&#xff0c;方…

Oracle19C静默安装教程

文章目录 一、安装前的准备1、安装Linux操作系统2、配置网络源或者本地源3、hosts文件配置 二、准备安装环境1、安装依赖包2、创建oracle用户组3、配置系统内核参数4、关闭selinux5、配置oracle用户环境6、修改用户的Shell限制 三、静默安装Oracle数据库1、创建oracle安装目录2…

申请双软认证需要哪些材料?软件功能测试报告怎么获取?

“双软认证”是指软件产品评估和软件企业评估&#xff0c;其中需要软件测试报告。 企业申请双软认证除了获得软件企业和软件产品的认证资质&#xff0c;同时也是对企业知识产权的一种保护方式&#xff0c;更可以让企业享受国家提供给软件行业的税收优惠政策。 那么&#xff0c;…

[BT]BUUCTF刷题第2天(3.20)

第2天&#xff08;共5题&#xff09; Web [ACTF2020 新生赛]Exec Payload&#xff1a;target127.0.0.1;cat /flag 分号;在许多shell中用作命令分隔符&#xff0c;意味着在执行完前一个命令&#xff08;这里是设置target变量&#xff09;后&#xff0c;接着执行cat /flag命令…

C++项目 -- 负载均衡OJ(一)compile_server

C项目 – 负载均衡OJ&#xff08;二&#xff09;compile_server 文章目录 C项目 -- 负载均衡OJ&#xff08;二&#xff09;compile_server一、compile_server设计1.总体服务流程 二、compiler.hpp三、runner.hpp四、compile_run.hpp五、compile_server.cc5.1.编译功能调试&…

【CNN轻量化】ParameterNet: Parameters Are All You Need 参数就是你所需要的

论文链接&#xff1a;http://arxiv.org/abs/2306.14525 代码链接&#xff1a;https://github.com/huawei-noah/Efficient-AI-Backbones 一、摘要 现有的低FLOPs模型&#xff08;轻量化模型&#xff09;无法从大规模预训练中受益。本文旨在增加大规模视觉预训练模型中的参数数量…

责任链模式(处理逻辑解耦)

前言 使用设计模式的主要目的之一就是解耦&#xff0c;让程序易于维护和更好扩展。 责任链则是将处理逻辑进行解耦&#xff0c;将独立的处理逻辑抽取到不同的处理者中&#xff0c;每个处理者都能够单独修改而不影响其他处理者。 使用时&#xff0c;依次调用链上的处理者处理…

从零到一构建短链接系统(八)

1.git上传远程仓库&#xff08;现在才想起来&#xff09; git init git add . git commit -m "first commit" git remote add origin OLiyscxm/shortlink git push -u origin "master" 2.开发全局异常拦截器之后就可以简化UserController 拦截器可以…