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.mzph.cn/news/759573.shtml

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

相关文章

Java柠檬班Java全栈自动化课程

Java柠檬班Java全栈自动化课程旨在教授学员Java编程技能与全栈开发知识,包括自动化测试、前端开发和后端开发。学员将学习如何构建完整的应用程序,并掌握自动化测试框架,为职业发展打下坚实基础。 课程大小:14G 课程下载&#x…

流畅的 Python 第二版(GPT 重译)(四)

第二部分:函数作为对象 第七章:函数作为一等对象 我从未认为 Python 受到函数式语言的重大影响,无论人们说什么或想什么。我更熟悉命令式语言,如 C 和 Algol 68,尽管我将函数作为一等对象,但我并不认为 Py…

爬虫基础:Web网页基础

爬虫基础:Web网页基础 前言Web网页基础网页的组成网页的结构节点树及节点间的关系选择器 前言 用浏览器访问不同的网站时,呈现的页面各不相同,你有没有想过为何会这样呢?了解一下网页的组成、结构和节点等内容。了解这些内容有助于…

挖掘网络宝藏:利用Scala和Fetch库下载Facebook网页内容

介绍 在数据驱动的世界里,网络爬虫技术是获取和分析网络信息的重要工具。本文将探讨如何使用Scala语言和Fetch库来下载Facebook网页内容。我们还将讨论如何通过代理IP技术绕过网络限制,以爬虫代理服务为例。 技术分析 Scala是一种多范式编程语言&…

用pdf2docx将PDF转换成word文档

pdf2docx是一个Python模块,可以将PDF文件转换为docx格式的Word文档。 pdf2docx模块基于Python的pdfminer和python-docx库开发,可以在Windows、Linux和Mac系统上运行。它可以从PDF文件中提取文本和图片,并将其转换成可编辑的Word文档&#xf…

分布式游戏服务器

1、概念介绍 分布式游戏服务器是一种专门为在线游戏设计的大型系统架构。这种架构通过将游戏服务器分散部署到多台计算机(节点)上,实现了数据的分散存储和计算任务的并行处理。每个节点都负责处理一部分游戏逻辑和玩家请求,通过高…

DM-达梦数据库实时主备搭建

dm实时主备说明 将主库产生的 Redo日志传输到备库,备库接收并重演Redo日志,从而实现备库与主库的数据同步。 一、环境准备 1.1、配置环境准备 首先搭建实时主备,要规划好机器的,我准备两台机器服务器 主服务器 mast…

监控系统prometheus+grafana+发送告警信息

1、基础环境准备两台或更多的主机 2、关闭selinux vi /etc/selinux/config,修改SELINUX的值为disabled 3、关闭防火墙 systemctl disable firewalld systemctl stop firewalld 4、prometheus官网下载 https://prometheus.io/download/ 5、grafana官网下载 https…

Cronos zkEVM 基于 Covalent Network(CQT)数据可用性 API,推动其 Layer2 DeFi 生态更好地发展

在一项旨在显著改善 DeFi 生态的战略举措中,Cronos 与 Covalent Network(CQT)携手合作,以期待 Cronos zkEVM 的推出。这一整合,预计将进一步降低以太坊生态系统的交易成本、提升交易速度,并带来更好的交易体…

【Qt】使用Qt实现Web服务器(三):QtWebApp中HttpRequest和HttpResponse

1、HttpRequest 1.1 示例 1)在Demo1的Dump HTTP request示例 在浏览器中输入http://127.0.0.1:8080点击Dump HTTP request 2)切换到页面:http://127.0.0.1:8080/dump 该页面显示请求和响应的内容: Request: Method: GET Path: /dump Version: HTTP/1.1 Headers: accep…

C语言 指针练习

一、 a、b是两个浮点型变量&#xff0c;给a、b赋值&#xff0c;建立两个指针分别指向a的地址和b的地址&#xff0c;输出两个指针的值。 #include<stdio.h> int main() {float a,b,*p1,*p2;a10.2;b2.3;p1&a;p2&b;printf("a%f,b%f\n",a,b);printf("…

Python 深度学习第二版(GPT 重译)(三)

七、使用 Keras&#xff1a;深入探讨 本章涵盖 使用 Sequential 类、功能 API 和模型子类创建 Keras 模型 使用内置的 Keras 训练和评估循环 使用 Keras 回调函数自定义训练 使用 TensorBoard 监控训练和评估指标 从头开始编写训练和评估循环 您现在对 Keras 有了一些经…

【Spring Cloud】微服务通信概述

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;人生乏味啊&#xff0c;我欲令之光怪陆离 本文封面由 凯楠&#x1f4f7; 友情赞助播出 目录 前言 1. Dubbo&#xff08;Spring Cloud Alibaba&#xff09;和 Spring Cloud 的适…

Python利用pygame实现飞机大战游戏

文章目录&#xff1a; 一&#xff1a;运行效果 1.演示 2.思路和功能 二&#xff1a;代码 文件架构 Demo 必备知识&#xff1a;python图形化编程pygame游戏模块 一&#xff1a;运行效果 1.演示 效果图◕‿◕✌✌✌ Python利用pygame实现飞机大战游戏运行演示 参考&#x…

AMPQ和rabbitMQ

RabbitMQ 的 Channel、Connection、Queue 和 Exchange 都是按照 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;标准实现的。 AMPQ的网络部分 AMQP没有使用HTTP&#xff0c;使用TCP自己实现了应用层协议。 AMQP实现了自己特有的网络帧格式。 一个Connection…

[网鼎杯 2020 朱雀组]Think Java

[网鼎杯 2020 朱雀组]Think Java swagger [[swagger]] 首先下载源码&#xff0c;查看之后发现 查找swagger资料&#xff0c;或者扫描&#xff0c;得到&#xff1a;swagger-ui.html swagger-ui 提供了一个可视化的UI页面展示描述文件。接口的调用方、测试、项目经理等都可以…

[激光原理与应用-76]:光束指向性与影响因素

目录 一、光束指向性 1.1 概述 2.2 光束指向性与光斑大小的区别 2.3 光束指向性与时间的关系 二、激光器的光束指向性的测量方法 2.1 概述 2.2 计算方法 三、激光器中影响光束指向性的因素 一、光束指向性 1.1 概述 光束指向性是指光束传播方向的特性&#xff0c;也可…

【Linux】进程通信

目录 一、管道通信 二、共享内存 三、消息队列 一、管道通信 管道是由操作系统维护的一个文件&#xff0c;管道通信的本质就是将管道文件作为临界资源&#xff0c;实现不同进程之间的数据读写&#xff0c;但是管道只允许父子进程或者兄弟进程之间的通信。 管道文件本身是全…

刷题DAY29 | LeetCode 491-递增子序列 46-全排列 47-全排列 II

491 递增子序列&#xff08;medium&#xff09; 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&#xff0c;也…

开放签开源电子签章白皮书-简版

开放签开源电子签章白皮书-简版 一、摘要&#xff1a; 开放签电子签章团队源自于电子合同SaaS公司&#xff0c;立志于通过开源、开放的模式&#xff0c;结合团队十多年的行业经验&#xff0c;将电子签章产品更简单、更低门槛的推广到各行各业中。让电子签章应用更简单&#x…