空间数据分析和空间统计工具库PySAL入门
空间数据分析是指利用地理信息系统(GIS)技术和空间统计学等方法,对空间数据进行处理、分析和可视化,以揭示数据之间的空间关系和趋势性,为决策者提供有效的空间决策支持。空间数据分析已经被广泛运用在城市规划、交通管理、环境保护、农业种植、自然资源管理等领域,成为现代社会中重要的数据分析手段。
1. PySAL空间数据分析工具库介绍
1.1. 概况
当涉及空间数据分析和空间统计时,PySAL(Python Spatial Analysis Library)是一个常用的 Python 库,它提供了丰富的空间数据分析工具和统计方法。PySAL是一个基于Python进行探索性空间数据分析的开放源码库,是由亚利桑那州立大学GeoDa Center for Geospatial Analysis and Computation赞助的社区项目,以下是其主要特点和功能:
-
空间数据结构: PySAL 提供了用于表示空间数据的数据结构,例如点、线、面等几何对象,以及空间权重矩阵、空间连接图等。这些数据结构可以方便地用于空间数据的存储、处理和分析。
-
空间权重矩阵: PySAL 支持多种空间权重矩阵的构建和处理,包括 Queen、Rook、Distance 等不同类型的空间权重矩阵。这些权重矩阵可以用于衡量空间数据中地理单元之间的空间关联程度。
-
空间自相关分析: PySAL 提供了用于计算莫兰指数、Getis-Ord 统计量等空间自相关指标的工具,用于评估空间数据中的空间相关性和集聚模式。
-
空间回归分析: PySAL 支持空间回归模型的构建和分析,包括空间滞后模型、空间误差模型等,用于探索空间数据中的空间依赖关系和空间异质性。
-
空间聚类分析: PySAL 提供了用于空间聚类分析的工具,例如 DBSCAN、K-means 等算法,用于发现空间数据中的集群和簇。
-
空间插值和空间可视化: PySAL 支持空间插值方法的应用,用于估计空间数据在未观测位置的值。此外,PySAL 还提供了用于空间数据可视化的工具,如地图绘制、空间图层叠加等。
PySAL 是一个功能强大且灵活的空间数据分析工具库,适用于地理信息系统、城市规划、环境科学、社会学等领域的空间数据分析和空间统计研究。通过使用 PySAL,可以更好地理解空间数据的特征和规律,支持空间决策和规划的制定。
1.2. 开源库构成
在 PySAL(Python Spatial Analysis Library)中,lib
、explore
、model
和 viz
是不同模块,各自提供了一些功能:
-
lib(Library):
lib
模块提供了一些核心的功能和工具,用于空间数据的处理、空间权重矩阵的构建、空间距离计算等基本操作。- 在
lib
模块中,你可以找到用于处理空间数据的数据结构、空间权重矩阵的构建方法、空间距离的计算函数等。
-
explore(Exploratory Spatial Data Analysis):
explore
模块提供了用于探索性空间数据分析的工具和方法,包括莫兰指数、Getis-Ord 统计量等空间自相关指标的计算方法。- 使用
explore
模块,你可以进行空间自相关分析、空间集群分析等,从而了解空间数据中的空间模式和空间关联性。
-
model(Spatial Econometrics Models):
model
模块提供了一些空间计量经济学模型的实现,包括空间回归模型、空间滞后模型等。- 使用
model
模块,你可以构建和估计空间计量经济学模型,用于分析空间数据中的空间依赖关系和空间异质性。
-
viz(Visualization):
viz
模块提供了用于空间数据可视化的工具和方法,包括地图绘制、空间图层叠加、空间数据的可视化效果等。- 使用
viz
模块,你可以将空间数据在地图上进行可视化展示,直观地呈现空间数据的分布特征和空间关联性。
这些模块提供了 PySAL 中常用的功能和工具,可以帮助你进行空间数据分析、空间统计和空间建模等任务。你可以根据自己的需求选择适合的模块和方法来处理和分析空间数据。
开源地址:https://github.com/pysal/pysal。
1.3. 核心模块libpysal
libpysal是Python空间分析库核心库,它提供了四个模块,构成了PySAL系列的空间分析工具:
- 空间权重: libpysal.weights
- 输入和输出:libpysal.io
- 计算几何学:libpysal.cg
- 内置示例数据集 libpysal.examples
开源地址:https://github.com/pysal/。
2. PySAL安装
我在windows10环境中,直接使用pip安装。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pysal
3. 空间数据分析案例
本文使用PySAL在线教程中探索莫兰指数可视化案例,其数据集为Guerry 。
Guerry 数据集是由法国统计学家 André-Michel Guerry 在 1833 年创建的。该数据集包含了法国各个行政区的社会经济数据,包括人口统计、犯罪率、教育水平等指标。这些数据被用来分析社会现象,并成为统计学和社会科学研究中的经典数据集之一。
Guerry 数据集最著名的用途是在统计图表的历史上,它被用来展示了统计图表中数据之间的相关性。这个数据集的独特之处在于,它是早期社会科学研究中首次采用统计方法来分析社会现象的尝试之一,对后来的社会科学研究产生了深远影响。
3.1. 数据项解释
这个表中各列的含义如下:
序号 | 名称 | 说明 |
---|---|---|
1 | dept | 部门(部门的标识符或名称) |
2 | Region | 地区(部门所在地区的标识符或名称) |
3 | Dprtmnt | 部门(部门的标识符或名称,与 ‘dept’ 列可能表示相同的信息) |
4 | Crm_prs | 犯罪人数(人口中的犯罪人数) |
6 | Litercy | 识字率(人口中的识字率) |
7 | Donatns | 慈善捐款(人均慈善捐款数额) |
8 | Infants | 婴儿死亡率(婴儿的死亡率) |
9 | Suicids | 自杀率(自杀的比率) |
10 | MainCty | 主要城市(部门所在的主要城市或城镇) |
11 | Wealth | 财富指数(部门或地区的财富水平) |
12 | Commerc | 商业指数(部门或地区的商业繁荣程度) |
13 | Clergy | 牧师数目(部门或地区的牧师数量) |
14 | Crm_prn | 犯罪率(犯罪率的另一种表示方式) |
15 | Infntcd | 婴儿死亡数目(婴儿的死亡数量) |
16 | Dntn_cl | 慈善捐款类别(慈善捐款的具体类别) |
17 | Lottery | 彩票支出(彩票支出的金额或比率) |
18 | Desertn | 遗弃(地区的遗弃现象或问题) |
19 | Instrct | 指导(教育或指导资源的可用性) |
20 | Prsttts | 圣职人员(地区的宗教或教堂官员数量) |
21 | Distanc | 距离(部门或地区之间的距离) |
22 | Area | 面积(部门或地区的面积大小) |
23 | Pop1831 | 人口(1831年的人口数量) |
24 | geometry | 几何数据(可能是地理空间数据中的几何信息) |
3.2. 数据获取
Guerry 数据集不在默认的安装包和github中,需要远程下载。
import libpysal
# Downloading Remote Datasets
balt_url = libpysal.examples.get_url('Guerry')
balt_url
获取地址为:'https://geodacenter.github.io/data-and-lab//data/guerry.zip'
。手工下载此压缩包,解压到Guerry文件夹中。
3.3. 实验之旅
%matplotlib inlineimport matplotlib.pyplot as plt
from libpysal.weights.contiguity import Queen
from libpysal import examples
import numpy as np
import pandas as pd
import geopandas as gpd
import os
import splotgdf = gpd.read_file('Guerry/Guerry.shp')
# 输出数据见上表
gdf
y = gdf['Donatns'].values
w = Queen.from_dataframe(gdf)
w.transform = 'r'
这段代码涉及地理空间数据分析的基本步骤,以下是对每行代码的解释:
-
y = gdf['Donatns'].values
:- 这一行从地理数据框架(geodataframe)
gdf
中选择了名为 ‘Donatns’ 的列,并将其转换为 NumPy 数组(array)。 - 这样做是为了提取感兴趣的变量(在这种情况下是慈善捐款)以便进行进一步的分析和建模。
- 这一行从地理数据框架(geodataframe)
-
w = Queen.from_dataframe(gdf)
:- 这一行使用
Queen.from_dataframe
方法从地理数据框架gdf
中创建了一个 Queen 邻接权重矩阵(spatial weights matrix)。 - Queen 邻接权重矩阵描述了地理空间中各个区域之间的邻接关系,即哪些区域是相邻的。
- 这一行使用
-
w.transform = 'r'
:- 这一行设置了权重矩阵
w
的转换方式为行标准化(row-standardized)。 - 行标准化是一种常见的操作,它将权重矩阵的每一行都除以该行的权重总和,以确保每个单位(即行)的权重之和为 1。
- 行标准化可以使权重矩阵更容易解释和应用,尤其在一些空间分析和空间统计方法中。
- 这一行设置了权重矩阵
from esda.moran import Moranw = Queen.from_dataframe(gdf)
moran = Moran(y, w)
moran.Iprint("Moran's I 值为:",moran.I)
print("随机分布假设下Z检验值为:",moran.z_rand)
print("随机分布假设下Z检验的P值为:",moran.p_rand)
print("正态分布假设下Z检验值为:",moran.z_norm)
print("正态分布假设下Z检验的P值为:",moran.p_norm)
Moran's I 值为: 0.3533613255848606随机分布假设下Z检验值为: 5.378368837667692随机分布假设下Z检验的P值为: 7.516371034073079e-08正态分布假设下Z检验值为: 5.235533901743425正态分布假设下Z检验的P值为: 1.6450862400833017e-07
-
Moran’s I 值(0.3533613255848606):这是莫兰指数,用于衡量空间自相关的程度。它的取值范围在 -1 到 1 之间。如果值接近 1,则表示正的空间自相关(即相似的值聚集在一起),如果接近 -1,则表示负的空间自相关(即相异的值聚集在一起),如果接近 0,则表示没有空间自相关。
-
随机分布假设下Z检验值(5.378368837667692):这是基于随机分布假设进行的 Z 检验的统计值。它衡量了观察到的莫兰指数是否显著地不同于在随机分布情况下预期的值。较大的 Z 值表明观察到的空间自相关性更高。
-
随机分布假设下Z检验的P值(7.516371034073079e-08):这是 Z 检验的 p 值,表示观察到的莫兰指数在随机分布假设下的显著性水平。p 值越小,表明观察到的空间自相关性越显著。
-
正态分布假设下Z检验值(5.235533901743425):这是基于正态分布假设进行的 Z 检验的统计值。它类似于随机分布假设下的 Z 检验值,用于检验观察到的莫兰指数是否显著地不同于在正态分布情况下预期的值。
-
正态分布假设下Z检验的P值(1.6450862400833017e-07):这是 Z 检验的 p 值,表示观察到的莫兰指数在正态分布假设下的显著性水平。与随机分布假设下的 p 值一样,p 值越小,表明观察到的空间自相关性越显著。
综合来看,莫兰指数值为 0.353 表明存在一定程度的正的空间自相关性,而随机分布假设下的 p 值和正态分布假设下的 p 值都非常小(小于 0.05),因此我们可以拒绝空间自相关性不存在的原假设,得出结论认为观察到的空间自相关性是显著的。
在这种情况下,莫兰指数 ( I = 0.353 ) 虽然不算非常大,但其所对应的 p 值非常小,远小于一般的显著性水平(比如 ( \alpha = 0.05 ))。这表示观察到的空间自相关性在统计上是显著的,即我们有足够的证据来拒绝空间自相关性不存在的原假设。
因此,显著性水平很低的 p 值表明我们对观察到的空间自相关性是非常有信心的,这增强了我们对结果的信任程度。
from splot.esda import moran_scatterplot
fig, ax = moran_scatterplot(moran, aspect_equal=True)
plt.show()
from splot.esda import plot_moranplot_moran(moran, zstandard=True, figsize=(10,4))
plt.show()
from splot.esda import plot_local_autocorrelation
plot_local_autocorrelation(moran_loc, gdf, 'Donatns')
plt.show()
通常情况下,通过不同的可视化方式来观察统计结果或者解释这些结果会更容易理解。在这里,例如,我们可以看到一个莫兰散点图(Moran Scatterplot)、LISA 聚类图和区域填充图(choropleth map)的静态可视化。
-
莫兰散点图(Moran Scatterplot):莫兰散点图用于展示空间自相关性的模式。它通常在 x 轴和 y 轴上分别表示变量的观测值,然后通过散点图来展示空间相关性的程度。通过观察散点图的分布模式,我们可以更直观地了解变量之间的空间关系。
-
LISA 聚类图:LISA(Local Indicators of Spatial Association)聚类图是用于展示空间聚类模式的工具。它显示了地理空间上不同区域之间的局部空间相关性,即是否存在局部空间集聚或分散的现象。通过不同的颜色和形状来表示不同类型的空间关系,比如高高(HH)、低低(LL)、高低(HL)、低高(LH)等。
-
区域填充图(Choropleth Map):区域填充图是一种常见的地图类型,用于展示地理空间上的统计数据。不同区域根据其对应的统计值着色,颜色的深浅或者颜色的种类表示不同的数值范围或者类别,使得观察者能够直观地了解地理空间上的数据分布情况。
综合来看,通过这些可视化工具,我们可以更全面地理解空间数据分析的结果,从不同角度和不同视觉效果来观察数据,有助于发现隐藏在数据背后的模式和规律。
4. 小结
当你有二维坐标的 POI 数据时,你可以使用 PySAL 进行各种空间分析。虽然 PySAL 最初是为地理空间数据设计的,但它也可以处理二维坐标数据,例如对于城市中的 POI 数据。
以下是一些你可以使用 PySAL 进行空间分析的示例:
-
空间权重矩阵的构建: 根据 POI 数据的二维坐标,你可以构建空间权重矩阵来衡量不同 POI 之间的空间关系。常见的空间权重矩阵包括邻近权重矩阵和距离权重矩阵。你可以使用 PySAL 的
weights
模块来构建这些权重矩阵。 -
空间自相关分析: 使用 PySAL,你可以计算莫兰指数等空间自相关指标,评估 POI 数据中的空间相关性和集聚模式。你可以使用
esda
模块中的Moran
类来计算莫兰指数。 -
空间聚类分析: 你可以使用 PySAL 进行空间聚类分析,发现城市中不同 POI 的空间集群和簇。你可以使用
cluster
模块中的聚类算法,如 DBSCAN、K-means 等。 -
空间可视化: PySAL 提供了丰富的空间可视化工具,你可以将二维坐标的 POI 数据在地图上进行可视化展示。你可以使用
matplotlib
等库来绘制地图,并结合 PySAL 提供的空间分析结果来进行可视化展示。
总体而言,尽管 PySAL 最初是为地理空间数据设计的,但它也可以处理二维坐标数据,并提供了丰富的空间分析工具和方法,可以帮助你理解和分析二维空间数据中的模式、关联和趋势。
参考:
[1]. 酱肉包-. Python空间分析| 01 利用Python计算全局莫兰指数(Global Moran’s I).CSDN博客. 2023.02
[2]. rgb2gray. ESDA in PySal (5):空间数据的探索性分析:空间自相关. CSDN博客. 2023.10
[3]. http://pysal.org/notebooks/viz/splot/esda_morans_viz.html
[4]. https://pysal.org/libpysal/notebooks/examples.html
相关文章:

空间数据分析和空间统计工具库PySAL入门
空间数据分析是指利用地理信息系统(GIS)技术和空间统计学等方法,对空间数据进行处理、分析和可视化,以揭示数据之间的空间关系和趋势性,为决策者提供有效的空间决策支持。空间数据分析已经被广泛运用在城市规划、交通管理、环境保护、农业种植…...

LabVIEW电液伺服控制系统
介绍了如何利用ARM微处理器和LabVIEW软件开发一个高效、精准的电液伺服控制系统。通过结合这两种技术,我们能够提高系统的数字化程度、集成化水平,以及控制精度,从而应对传统电液伺服控制器面临的问题。 该电液伺服控制系统由多个关键部分组…...
Dubbo_入门
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 Dubbo_入门 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、什么是分布式系统二、什么…...

Ubuntu22.04更换软件源
本文以Ubuntu22.04更换科大源为例演示更改软件源的方法,其他版本的Ubuntu系统或更换其他软件源,如清华源,阿里源等,方法类似。 前言 中国科学技术大学开源软件镜像由中国科学技术大学网络信息中心提供支持。 mirrors.ustc.edu.…...
解密Android某信聊天记录
前置条件 frida, frida-tools, adb 获取密码 h.js console.log(script loaded successfully);function xx() {function strf(str, replacements) {return str.replace(/\$\{\w\}/g, function(placeholderWithDelimiters) {var placeholderWithoutDelimiters placeholderWi…...

海外云手机对于亚马逊卖家的作用
近年来,海外云手机作为一种新型模式迅速崭露头角,成为专业的出海SaaS平台软件。海外云手机在云端运行和存储数据,通过网页端操作,将手机芯片放置在机房,通过网络连接到服务器,为用户提供便捷的上网功能。因…...
交换机的发展历史
交换机发展历史是什么,详细介绍每代交换机的性能特点,特色功能 交换机的发展历史可以大致分为以下几个阶段,每个阶段的设备性能特点和特色功能有所差异: 1. 第一代以太网交换机(1980年代末至1990年代初) …...

用katalon解决接口/自动化测试拦路虎--参数化
不管是做接口测试还是做自动化测试,参数化肯定是一个绕不过去的坎。 因为我们要考虑到多个接口都使用相同参数的问题。所以,本文将讲述一下katalon是如何进行参数化的。 全局变量 右侧菜单栏中打开profile,点击default,打开之后…...

CSRF靶场练习
简述:CSRF漏洞实际很少;条件限制很多;局限性很大;实验仅供参考,熟悉csrf概念和攻击原理即可 Pikachu靶场 CSRF GET 登录用户vince的账户可以看到用户的相关信息; 点击修改个人信息,发现数据包…...
pgsql的查询语句有没有走索引
使用EXPLAIN ANALYZE命令: EXPLAIN ANALYZE [ ( option [, ...] ) ]statement示例: EXPLAIN ANALYZE SELECT * FROM employees WHERE age > 30;在执行计划中,如果看到索引扫描(Index Scan)或位图堆扫描࿰…...

jenkins部署(docker)
docker部署,避免安装tomcat 1.拉镜像 docker pull jenkins/jenkins2.宿主机创建文件夹 mkdir -p /lzp/jenkins_home chmod 777 /lzp/jenkins_home/3.启动容器 docker run -d -p 49001:8080 -p 49000:50000 --privilegedtrue -v /lzp/jenkins_home:/var/jenkins_…...

Python实现时间序列分析AR定阶自回归模型(ar_select_order算法)项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 时间序列分析中,AR定阶自回归模型(AR order selection)是指确定自回…...

Springboot自定义线程池实现多线程任务
1. 在启动类添加EnableAsync注解 2.自定义线程池 package com.bt.springboot.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTask…...

linux离线升级openssh方法
检查openssh版本: 升级前openssh 版本为7.4 openssl 版本为1.0.2k Openssh9.6 所需openssl >1.1.1 因此openssl也需要升级。 为了防止升级失败,无法使用SSH登录,首先安装telnet 预防。查看是否安装了telnet 客户端及服务 未安装tel…...

(五)MySQL的备份及恢复
1、MySQL日志管理 在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,这样情况下,我们必须保证数据的安全性和完整性,就需要使用日志来查看或者恢复数据了 数据库中数据丢失或被破坏可能原因: 误删除数据…...

VitePress-04-文档中的表情符号的使用
说明 vitepress 的文档中是支持使用表情符号的,像 😂 等常用的表情都是支持的。 本文就来介绍它的使用方式。 使用语法 语法 : :表情名称: 例如 : :joy: 😂 使用案例代码 # 体会【表情】的基本使用 > hello world …...
Redis客户端之Redisson(二)Redisson组件
Redisson的几个常用客户端 一、RedissonClient 1、创建 通过Config对象配置RedissonClient所需要的参数,然后获取RedissonClient对象即可。 Config config new Config(); config.useSingleServer().setAddress("redis://127.0.0.1:6379"); RedissonC…...

用Visual Studio Code创建JavaScript运行环境【2024版】
用Visual Studio Code创建JavaScript运行环境 JavaScript 的历史 JavaScript 最初被称为 LiveScript,由 Netscape(Netscape Communications Corporation,网景通信公司)公司的布兰登艾奇(Brendan Eich)在 …...
spring-web搭建
先说说这篇文章看完你能学习到什么吧 1:spring-web是什么原理以及组成,2:spring-web的搭建(以普通tomcat服务器做基础),3:敲黑板 1:spring-web是什么原理以及组成 spring-web是sp…...

C++ 之LeetCode刷题记录(二十三)
😄😊😆😃😄😊😆😃 开始cpp刷题之旅。 目标:执行用时击败90%以上使用 C 的用户。 118. 杨辉三角 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows …...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...