ChatGPT 揭露了 Riverlands 耐力赛

图 1. 作者在今年比赛中分发的 Riverlands 地图照片。

今年我跑了大约 60 英里的路程,并使用 GPS 记录了我的进度。我从Strava获得了 GPX 格式的录音笔录。地图在我的脑海中,比赛在我的想象中焕然一新,我要求 ChatGPT 对我在缅因州荒野度过的周末的各种图表进行“切片和切块”。下面讨论最有趣的一对图。

我使用ChatGPT-4o和代码解释器来撰写本文。

首先,我向 ChatGPT-4o 提示我的 GPX 数据和请求,如图 2 所示。请求是三个图:

  1. “地图可视化”图
  2. 具有纬度对齐的时间线
  3. 经度对齐的时间线

该提示还包括一个编码技巧 – 其作用的详细说明请参见附录 1。

图 2. 作者的屏幕截图。提示 ChatGPT-4o 生成三个 GPX 数据图。

下面提供了 ChatGPT 为图 3 中的图生成的代码。该 Python 脚本在 ChatGPT 代码解释器中运行以生成绘图。

import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 
import matplotlib.colors as mcolors 
import gpxpy 
from datetime import datetime 
import numpy as np 

# 解析 GPX 文件
gpx_file_path = '/mnt/data/Riverlands_100_2024.gpx' 
with  open (gpx_file_path, 'r' ) as file: 
    gpx = gpxpy.parse(file) 

# 提取轨迹点
data = [] 
for track in gpx.tracks: 
    for segment in track.segments: 
        for point in slot.points: 
            data. append([point.time, point.latitude, point.longitude, point.elevation]) 

# 创建一个 DataFrame
 df = pd.DataFrame(data, columns=[ 'time' , 'latitude' , 'longitude' , 'elevation' ]) 

# 计算经过的时间(以秒为单位)
 df[ 'elapsed_time' ] = (df[ 'time' ] - df[ 'time' ].iloc[ 0 ]).dt.total_seconds() 

# 计算点之间的距离
df[ 'distance ' ] = np.sqrt((df[ 'latitude' ].diff()** 2 ) + (df[ 'longitude' ].diff()** 2 )) * 111000   # 纬度/经度到米的近似转换
df[ 'distance' ].fillna( 0 , inplace= True ) 

# 计算速度(MPH)
 df[ 'time_diff' ] = df[ 'elapsed_time' ].diff().fillna( 0 ) 
df[ 'pace_mph' ] = ( df[ 'distance' ] / df[ 'time_diff' ]) * 2.23694   # 米每秒换算为英里每小时

# 标准化颜色映射的步速(剪辑值为 6 MPH)
 df[ 'pace_mph_clipped' ] = df[ 'pace_mph' ] .clip( 0 , 6 ) 

# 定义颜色贴图
time_cmap = plt.get_cmap( 'viridis' ) 
pace_cmap = plt.get_cmap( 'coolwarm' )

# 创建经过时间和步速的颜色数组
time_norm = mcolors.Normalize(vmin=df[ 'elapsed_time' ]. min (), vmax=df[ 'elapsed_time' ]. max ()) 
pace_norm = mcolors.Normalize(vmin= 0 , vmax= 6 ) 

time_colors = time_cmap(time_norm(df[ 'elapsed_time' ])) 
pace_colors =pace_cmap(pace_norm(df[ 'pace_mph_clipped' ])) 

# 绘制经过时间的地图可视化
Fig, ax = plt.subplots( 3 , 1 , Figsize=( 15 , 15 )) 

# 地图可视化
ax[ 0 ].scatter(df[ 'longitude' ], df[ 'latitude' ], c=time_colors, s= 10 , label= '轨迹点' ) 
ax[ 0 ].set_title( '地图可视化(经过时间)' ) 
ax[ 0 ].set_xlabel( '经度' ) 
ax[ 0 ].set_ylabel( '纬度' ) 

# 具有纬度对齐的时间进度
scatter_lat = ax[ 1 ] .scatter(df[ 'elapsed_time' ], df[ 'latitude' ], c=pace_colors, s= 10 , label= '轨迹点' ) 
ax[ 1 ].set_title( '纬度对齐的时间进程' ) 
ax[ 1 ].set_xlabel( '经过时间 (s)' ) 
ax[ 1 ].set_ylabel( '纬度' ) 
Fig.colorbar(scatter_lat, ax=ax[ 1 ],orientation= '垂直' , label= '步速 (MPH)' ) 

# 经度对齐的时间进度
scatter_lon = ax[ 2 ].scatter(df[ 'elapsed_time' ], df[ 'longitude' ], c=pace_colors, s= 10 , label= 'Track Points' ) 
ax[ 2 ]. set_title( '经度对齐的时间进度' ) 
ax[ 2 ].set_xlabel( '经过的时间(秒)' ) 
ax[ 2 ].set_ylabel( '经度' ) 
Fig.colorbar(scatter_lon, ax=ax[ 2 ],orientation = '垂直',label= '配速(MPH)' ) 

plt.tight_layout() 
plt.show()

请注意,ChatGPT 使用的上述代码并不试图消除其步速计算中的 GPS 抖动;这是一个不同的练习。其影响是随后的步速数据应该在高水平上进行解释。

图 3. 作者的屏幕截图。 ChatGPT 根据图 2 中的提示生成的图。纬度和经度对齐时间线按速度进行颜色编码 — 红色较快,蓝色较慢。右侧颜色条不准确 — 应该是 0-6 英里/小时。

讨论

与往常一样,在阅读 ChatGPT 结果时需要谨慎。通常,详细信息可能包含错误,并且会因会话而异。例如,在此处描述的会话中,颜色条被错误标记。尽管如此,如果您保持谨慎并交叉比较多个会话的结果(并在此过程中改进提示等),您可以获得真正的见解。

我发现图 3 的图很微妙,而且信息量惊人。

图 3(地图可视化)中的第一个图有效地传达了我的比赛如何结束。它可视化了我在缅因州特纳的安德罗斯科金河地州立公园的路线。绘制的路线是根据沿路线覆盖两个半环(往返)的数据构建的。第三圈时,我转了大约一半,回到了“中土援助站”(查看地图了解其地理位置——图1),那里的录音被关闭了。图 5 捕捉到了这种动态。参见图 4。

图 4。作者突出显示了中土救援站(圆圈)处的周转和终点。

图 3 中底部的一对图(纬度对齐和经度对齐时间线)有效地传达了比赛最后三分之一的配速如何下降 – 由蓝色编码段数量的增加表明。情节的内部结构信息丰富。我可以将蓝色线段与地图(图 1)或 Strava 中的位置(图 6)相关联。

例如,图 5 突出显示了我在开始/结束时停了一个多小时(胃部不适)的地方。请参阅图 1 中的地图,了解“开始/结束”的地理位置。其他以蓝色为主的部分对应于我记得我停下来的位置和时间。例如,我可以将这些片段与 Strava 中的位置进行比较 – 请参阅图 6 或返回地图 – 图 1,或图 3 中的地图可视化。

图 5. 作者的屏幕截图。带有突出显示的绘图显示了作者在比赛期间在起点/终点处停留了一个多小时的位置。

纬度和经度图提供同一时间线的不同视图。所描绘的速度信息在两者之间相关——红色和蓝色沿着时间线对齐。但“侧重点”却有所不同。例如,经度对齐图更详细地描绘了红色和蓝色部分(更快和更慢的节奏)。这是有道理的;总体而言,该路线在经度上覆盖的距离比在纬度上覆盖的距离更长(想象一下投影到这些轴上的路线)。然而,并非所有地点都是如此。这样,在这两种视角之间,人们就能更全面地了解我的曲折旅程的结构。

图 6. 作者的屏幕截图。 Strava 显示路线。

正如前面所提到的,ChatGPT 计算的步速信息在细节上可能不准确,但是,我相信在摘要中它是有用的。例如,绘图(图 3 和图 5)中的红色可能比应有的多,但可以准确地说,我在比赛前半段的移动速度比后半段快得多。

总的来说,在 ChatGPT 中处理比赛数据是一项刺激的练习,可以揭示洞察力。这是“假设”你的比赛日体验的好方法。但是,您应该谨慎解释 ChatGPT 告诉您的内容。

参考

此处使用的作者与 ChatGPT 的交流文字可在以下链接中找到(但请注意,ChatGPT 目前不共享代码解释器生成的图形数据):

附录 1 — 提示中编码提示的使用

在提示中添加编码提示类似于在Middlesex Fells Trail Analyzer Custom ChatGPT的“培训手册”中包含编码提示和代码示例。

它们指导 ChatGPT 的 Python 代码选择。在这种情况下,如果没有其他提示,ChatGPT 更有可能生成依赖于 gpxpy 模块的代码,从而导致在尝试在代码解释器中运行脚本时出现错误。

图 7. 作者的屏幕截图。 ChatGPT 的代码解释器因缺少 gpxpy 模块而出错。

虽然 ChatGPT 通常能够使用替代方法(基于直接解析 XML)修复其代码,但这会减慢响应速度。在极少数情况下,如果延迟很严重,则可能会结束会话。

给TA打赏
共{{data.count}}人
人已打赏
AI新闻AI科普

Stack Overflow 与 OpenAI 合作

2024-5-19 18:28:57

AI新闻AI科普

如何使用 Google Vertex AI 构建 AI 代理

2024-5-19 18:31:57

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
今日签到
有新私信 私信列表
搜索