你只需输入数据和需求,结果自然来。
自动可视化
在《如何用 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 代表产品(product),W 代表周(week),每一周每一种产品的销量都展示出来了。
我首先想画三维交互图。还是进入 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 带来的优势更是不言而喻,是吧?只不过,你要注意对它生成的结果加以仔细甄别,以求稳妥。
祝(自动)数据可视化愉快!
点赞 +「在看」,转发给你身边有需要的朋友。收不到推送?那是因为你只订阅,却没有加星标。
欢迎订阅我的小报童付费专栏,每季度更新不少于10篇文章。目前价格优惠。2023年6月1日起,小报童订阅费调整,从目前的30元/季度,调整为40元/季度。
如果有问题咨询,或者希望加入社群和热爱钻研的小伙伴们一起讨论,订阅知识星球吧。不仅包括小报童的推送内容,还可以自由发帖与提问。之前已经积累下的帖子和问答,就有数百篇。足够你好好翻一阵子。知识星球支持72小时内无条件退款,所以你可以放心尝试。
若文中部分链接可能无法正常显示与跳转,可能是因为微信公众平台的外链限制。如需访问,请点击文末「阅读原文」链接,查看链接齐备的版本。
延伸阅读
如何在 Python 绘图中正常显示中文?(视频教程)
如何用 Python 可视化《三国》人物与兵器出现频率?(视频教程)
如何用 ChatGPT 帮你自动分析数据?
如何用 Python 做舆情时间序列可视化?
如何交互可视化你的卡片式笔记网络?