Python数据可视化(五)GeoJSON文件

        先下载一个数据集,记录一个月内全球发生的所有地震,然后制作一幅散点图,展示这些地震的位置和震级。GeoJSON 格式是基于 JSON 的地理空间信息数据交换格式。

1、获取数据

获取地址:

https://download.youkuaiyun.com/download/Lin_Coder_/90460326https://download.youkuaiyun.com/download/Lin_Coder_/90460326部分数据如下:

        json 模块提供了探索和处理 JSON 数据的各种工具,其中一些有助于重新设置这个文件的格式,能够更清楚地查看原始数据。

from pathlib import Path
import json
# 将数据作为字符串读取并转换为 Python 对象
path = Path('eq_data/eq_data_1_day.geojson')
contents = path.read_text()
all_eq_data = json.loads(contents)
# 将数据文件转换为更易于阅读的版本
path = Path('eq_data/read_eq_data.geojson')
readable_contents = json.dumps(all_eq_data, indent=4)
path.write_text(readable_contents)

        json.loads() 将这个文件的字符串表示转换为 Python 对象。json.dumps() 接受参数 indent 指定数据结构中嵌套元素的缩进量。

输出文件部分展示:

2、提取数据

from pathlib import Path
import json

# 将数据作为字符串读取并转换为 Python 对象
path = Path('eq_data/eq_data_1_day.geojson')
contents = path.read_text()
all_eq_data = json.loads(contents)
# 查看数据集中的所有地震,创建列表
all_eq_dicts = all_eq_data['features']
print(len(all_eq_dicts))

# 震级,位置标题,经度,维度
mags, titles, lons, lats = [], [], [], []
for eq_dict in all_eq_dicts:
    mag = eq_dict['properties']['mag']
    title = eq_dict['properties']['title']
    lon = eq_dict['geometry']['coordinates'][0]
    lat = eq_dict['geometry']['coordinates'][1]
    mags.append(mag)
    titles.append(title)
    lons.append(lon)
    lats.append(lat)

print(mags[:10])

        从字典 all_eq_data 中提取与键 'features' 相关联的数据,并将其赋给变量 all_eq_dicts。创建一个空列表,用于存储地震的震级,再遍历列表 all_eq_dicts。每次地震的震级都存储在相应字典的 'properties' 部分的 'mag' 键下。

3、绘制散点图

from pathlib import Path
import json
import plotly.express as px
import pandas as pd

# 将数据作为字符串读取并转换为 Python 对象
path = Path('eq_data/eq_data_30_day.geojson')
try:
    contents = path.read_text()
except:
    contents = path.read_text(encoding='utf-8')

all_eq_data = json.loads(contents)
# 查看数据集中的所有地震,创建列表
all_eq_dicts = all_eq_data['features']
print(len(all_eq_dicts))

# 震级,位置标题,经度,维度
mags, titles, lons, lats = [], [], [], []
for eq_dict in all_eq_dicts:
    mag = eq_dict['properties']['mag']
    title = eq_dict['properties']['title']
    lon = eq_dict['geometry']['coordinates'][0]
    lat = eq_dict['geometry']['coordinates'][1]
    mags.append(mag)
    titles.append(title)
    lons.append(lon)
    lats.append(lat)

print(mags[:10])
# print(px.colors.named_colorscales())

data = pd.DataFrame(
    data=zip(lons, lats, titles, mags), columns=['经度', '纬度', '位置', '震级']
)
data.head()

fig = px.scatter(
    data,
    x='经度',
    y='纬度',
    range_x=[-200, 200],
    range_y=[-90, 90],
    width=800,
    height=800,
    title='全球地震散点图',
    size='震级',
    size_max=10,
    color='震级',
    hover_name='位置',
)
fig.write_html('global_eq.html')
fig.show()

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值