你只需输入数据和需求,结果自然来。

自动可视化

在《如何用 ChatGPT 帮你自动分析数据?》这篇文章里,我已经为你介绍过 Code Interpreter 。它是 ChatGPT 的一个模式,目前还在 alpha 测试阶段。

Code Interpreter 可以接收文件输入,然后在用户的指令下与文件内容进行交互。它提供一个虚拟运行环境,让你可以在里面直接执行 Python 代码,还支持图文输出和文件下载链接生成功能。

如何用 ChatGPT 帮你自动分析数据?》里面,我用一组样例贷款数据给你演示了 Code Interpreter 如何帮你分析每个变量的含义,及其在数据集中的分布。咱们当时主要做的,是机器学习建模。

 

视频中没有展示的部分,你其实可以自己扩展。只需要提示 Code Interpreter 进行可视化,你就能看到相应的统计图形。

上面是连续型数据的描述,你也可以对类别数据做一些统计。

上面这些都是单变量描述统计。你还可以让 Code Interpreter 自动分析多变量之间的关系,例如下面这张图就展示了贷款数据集里不同变量间的关联。

这篇文章里,我也为你展示了如何使用 Code Interpreter 来做复杂网络仿真进程的可视化。

今天这篇文章,咱们来谈谈 Code Interpreter 的「高级」自动可视化功能。这里我主要介绍两方面的内容:

  • 三维交互图
  • 动图视频制作。

有些数据涉及时间轴,在分析和展示的时候,会用到上述图形。在时间基础上,查看数据集不同变量间的关系流变,至少会让可视化结果更有冲击力。

数据

我们首先当然需要找到一个合适的数据集。换作以前,我会乖乖去一些开放数据集网站找寻,或者直接在引擎里搜索时间序列数据。但现在我会问自己一个问题:需要我自己找吗?

当然不要。

怎么办?懒人有懒办法,我使用下面提示语在 ChatGPT 联网模式下搜索。

请帮我寻找 5 个公开的时间序列数据集,要求是包含多个维度的。用 markdown 列表列出数据集名称、下载地址,以及相关的介绍。谢谢

看到了没,ChatGPT 这是翻阅了多少页面啊?这些网页这要是我自己手动看,怎么也得用个 10 几分钟吧?而且还不一定找得全面,挑得精细。

很快,Code Interpreter 就把数据集查找结果整理出来了:

Code Interpreter 找到了 3 个数据集,我觉得已经足够了。因为我其实只需要一个嘛。点开第一个链接,浏览器显示出下载页面。

下载 CSV 文件,打开一看是这个样子。

你可以看到 P 代表产品,W 代表周,每一周每一种产品的销量都展示出来了。

我首先想画三维交互图。还是进入 Code Interpreter 模式,点击下图中的加号按钮,上传这个数据集。

上传 CSV 文件后,Code Interpreter 自动开始了处理。

这是它实际执行的代码:

Code Interpreter 通常先对变量名进行推理,同时检查前 5 条数据大概样子,来验证自己的推理。

下面是 Code Interpreter 给出的初步分析结果:

用 ChatGPT 翻译以后是这样的:

该数据集包含不同产品的每周销售数据。每行对应于特定的产品,由 “Product_Code” 列指示。列 “W0” 到 “W51” 表示每个产品的每周销售数字,“W0” 是第 0 周的销售数字,“W1” 是第 1 周,以此类推,直到第 51 周的 “W51”。除了每周销售数字外,还有标准化值用于表示每周销售量,分别为 'Normalized 0' 至 'Normalized 51'。通常使用标准化值将在不同比例上测量的值调整为公共比例。请问您想要对这些数据进行什么操作?例如我们可以执行一些描述性统计、可视化、预测等。

三维交互

数据有了,我的可视化分析要求是:

请把前 10 种商品在全部时间的变化,做成 3D 散点图,不同商品间用颜色加以区别。不要直接输出图形,而是做成下载链接形式。谢谢

Code Interpreter 立即开始为我生成这个图,它说使用的包是 Matplotlib,挺好。

但是不出所料,很快它的执行过程就出问题了。

其实你根本就不用担心。Code Interpreter 执行出问题时,会自己解释这个问题是什么,为什么发生,以及分析和尝试解答如何规避。这里 Code Interpreter 说要重新分配唯一数字 ID,再次尝试。我什么都没做,就看它在那里解释,然后看它重塑数据,很快图就绘制出来了。

其实这结果与我的要求有点出入。我明明要求它不要直接绘图,而是提供下载链接,可它还是把结果给我画出来了。好在这也无伤大雅。

按照链接打开 3D 散点图,是这个样子:

尽管 Code Interpreter 完成了任务,但是显然我不希望仅仅获得一张静态图,因为这样只能从一个角度来观察。这不是 Code Interpreter 的错误,而是我的要求不够精细。于是我改变了提示语,以达成交互效果:

很好,不过我希望生成的图形是可以交互式的。能否重新生成并且生成下载链接?谢谢

看到没有,我还鼓励了 Code Interpreter 一下。有人说这种鼓励和礼貌用语是「废话」,我不这样看。即便这些礼貌用语不能提升结果的准确性,总会让你觉得人机交互过程充满了善意,至少自己心里舒服不是?

Code Interpreter 说要达成交互的目标, PNG 格式不行,要生成 HTML,使用的包是 plotly,很好嘛。

很快交互式图形结果重新生成了,咱们下载后打开,看看效果。

这个交互图,你可以用鼠标对图形整体转动、拖动和缩放,找到这些散点之间的关联。感觉怎么样?

不怎么样。眼花缭乱的,谁能看清这些数据之间的关系?

我给出 Code Interpreter 新的建议:

很好,不过我觉得这个图看起来很乱。能否以你的经验,对可视化过程加以改造,使得展示效果更好一些?你可以改变绘图要求的设定。但是我依然需要 3D 交互图形。谢谢

Code Interpreter 的反馈是:3D 散点图会显得混乱,特别是点重叠或靠近时。所以它自己提出整改措施如下:

第一,不用散点了,用折线图。这就是为什么在提示语中给它一定的自由度很重要。如果不给,Code Interpreter只能按散点图来处理。给了自由度后,它可以把数据可视化经验用上,帮你做出更好的技术路线选择。

第二,对销售数据进行偏移化,使线条在 3D 空间分开。这其实是我们自己做可视化时也会使用的技巧。

第三,不同颜色,表示不同商品。

Code Interpreter 重新生成了下载链接,我们看看效果。

现在的结果变成了折线图。折线图的好处是每一种商品更加紧凑,更清晰,你可以清楚看到哪一种商品销量一直高,哪些只在低谷徘徊。你还可以拉近,查看不同时间段上不同商品销售额的对比。

这个图完美吗?绝对算不上。但比之前的混乱散点图清晰多了,这就算是迭代改进的力量吧?

动图视频

下一步,我们来制作动画。我的提示语是:

请使用前 5 种商品的数据,以你认为合适的方式制作销量随时间变化的动画视频,做成 mp4 格式并且提供链接给我下载。谢谢

注意这里我没有指定用什么变量做横轴,什么变量做纵轴,也没有要求颜色、形状、范围。但是 Code Interpreter 凭借自身的经验,都可以自己做出分析决策。

Code Interpreter 使用 Matplotlib Animation 来制作折线图,并存成 MP4,还给了我一个下载链接。

结果给出的是一张静态图。我按照链接下载打开后,对应的视频是这个样子:

不同商品的销量都展现出来,而且根据时间顺序变化来逐步绘制,好不好?

不好!

线条颜色相似度这么高,基本分不出谁是谁,这图有什么用?

我说:

因为颜色和线条关系,这个视频看起来比较杂乱,能否根据你的经验改进一下?

Code Interpreter 说了 4 个解决步骤:更明显的颜色区分,线条粗细不同,使用不同线型,每帧只显示当周为止的一种商品销售数据。

我一边看,一遍评价 —— 好,好,好…… 且慢,这第四条是什么意思?

我下载了新的输出结果,看完哭笑不得。

它每次只画一条线,而且只有前 10 周的数据,这显然违背了我们的初衷。我们希望在全部 52 周时间里同时整体对比 5 种商品。

于是我又提出要求:

不大好。使用不同颜色、不同线条形状是正确的。但是我依然希望能够一起展现全部 5 种商品的变化,时间周期也是全部的 52 周。另外把播放速度稍微放慢一些,最好能在线条当前终点位置动态显示商品的名称编号,比较直观。请调整输出,谢谢

Code Interpreter 改进后的输出是这样的:

我通过链接下载,打开看看:

这次的结果有明显进步,但 Code Interpreter 自动给出的颜色还有些相近。

我建议继续调整:

把颜色的差别弄得再大一些,播放速度降低到目前的 1/3,谢谢

Code Interpreter 说收到了两条意见,于是继续画。结果如下:

颜色区分开了,线条线型也对,但是速度我没感觉降下来。回头咱们抽空再敦促 Code Interpreter 调一下吧。

小结

本文我为你介绍了 ChatGPT 的 Code Interpreter 模式的数据高级可视化功能,主要包括三维交互图和动图视频。通过演示,你已经见到了 Code Interpreter 的能力。它现在还只是个 Alpha 测试版,存在的问题依旧很多。你可以把目前的 Code Interpreter 当成一个迭代螺旋的起点。我们希望它变得越来越好用。对数据可视化高手,Code Interpreter 可以帮忙完成许多过去需要手动完成的琐碎枯燥工作。当然,对于新手来说,Code Interpreter 带来的优势更是不言而喻,是吧?只不过,你要注意对它生成的结果加以仔细甄别,以求稳妥。

祝(自动)数据可视化愉快!

如果你觉得本文有用,请充电

如果本文可能对你的朋友有帮助,请转发给他们。

欢迎关注我的专栏「科研利器」,以便及时收到后续的更新内容。

点击这个链接加入少数派会员,立享 9 折优惠!获得专属会员内容、会员播客以及会员定制周边。在更多的领域和方向帮你打开脑洞,找到新的兴趣点,与少数派一起洞悉当下,探索新知。

 

 

延伸阅读