(注:本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费)
万字长文,助力你用 AI 提升科研效率。
2024 年 4 月 14 日,应武汉大学信息管理学院的邀请,我和北京大学步一老师给几千名学员(其中正式报名超过千人)做了一次数据分析与可视化工作坊。我负责的是上午场,题目为《运用 AI 工具进行数据分析与可视化 》。具体报道,请 查看武大信息管理学院的新闻。
有很多读者表示之前未能第一时间得到消息,没来得及报名,错过这次活动颇感遗憾。于是我把工作坊的内容做成了这篇图文教程,还包含了全部的练习材料(图文和视频)。为了学到技能,注意不能光阅读,还是得上手练习。
工作坊主体上分为三个部分,分别是讲解篇、练习篇和展望篇。下面咱们逐一展开。
第一部分 讲解篇
这一部分讲解相关背景知识,让你了解数据分析与可视化自动化工具和方法发展脉络、AI 究竟能帮助我们做什么,以及我们该如何做。
数据分析与可视化的目标
我们先来看看数据分析的目标。首先,这个目标并不是为了炫酷。虽然现在有很多长图、PDF 或高清图片格式的数据可视化效果看起来很漂亮,但这不是我们的目标。我们的目标是帮助用户获取洞察力,对于数据的洞察力。
可视化与我们人类演化的过程密不可分。在很长一段时间里,人类并不是坐在电脑前敲键盘看屏幕,而是在各种地理环境中与各种猎物和捕猎者发生互动。残酷的生存压力导致我们对图形图像的敏感程度远超数字。
(当然了,上面这幅图,也是 AI 辅助绘制的。)
当你看到一堆会计报表或原始数据堆积如山时,你大概会感到烦躁。确实有人看到统计报表感觉它活了起来,特别兴奋,但大部分人不具备这样的演化特征,所以我们中的大多数很难有效处理和消化原始数据。
怎么办呢?
我们可以采用各种可视化图表,目标是让用户一目了然地感受到数据所代表的含义。
比如,学生期中、期末考试成绩呈现一条上扬曲线,家长就会很高兴;如果曲线急速下跌,家长可能心情就不够爽朗了。这个例子虽然简单,却可以说明数据可视化有助于人们了解趋势和规律。
学术研究
在学术研究中,数据分析与可视化更可以有效帮助我们展现证据,与他人沟通我们的发现。
我来给你举个切身的经历。我当年上硕士研究生时,学的是计算机应用专业。当时我们实验室的一项重要工作是进行网络协议改进效果仿真。仿真不能只运行一轮结果就汇报,而会有许多轮次,这其中还有各种参数的变化。二维图形不足以展现全部这些变化,所以当时做数据可视化的一个重点是展现多轮仿真效果的三维模型。
我当时用的工具是 MatLab。当时我为了更好地画一个 3D 图形,真是绞尽脑汁,曾经花了整整一个寒假琢磨怎么改进。下面是我在 2007 年 4 月提交给导师的最终结果,有若干张图,我把它做成了一个动图演示给你。
你可以看到我当时做的这些三维图形从各个角度展现一组数据的变化。你可以一目了然地看到参数和最终结果(吞吐率)之间的关系。
从今天的眼光看例子里的这张图,你会觉得它很一般,很粗糙,谈不上多美观。但是在当时,这是我们实验室的核心技能之一。为了避免这项技能随着我的毕业而失传,在导师的强烈要求下,我当时还在实验室范围内做了专门的知识技能分享。之所以要分享,是因为要学会这些内容并不容易,Matlab 使用起来还是有门槛的。
好消息是,这些年数据分析与可视化门槛在逐渐降低,这一方面是由技术进步带来的,另一方面也是普通用户的需求被开发者关注到了。
数据分析的方式演进
数据分析的方式是不断的在演进的。我在这里分三个阶段给你讲。分别为全手动、半自动和全自动。
全手动
像我刚才列举的 MatLab,以及 Octave(一个开源的 MatLab 版本)、R、 Python 编程,都属于全手动方式。
用户想做数据分析与可视化,需要自行规划,然后自己编程。如果出现问题怎么办呢?这个时候,你需要带着你的报错,转化成合适的问题去 Stack Overflow 上查询。
这是我在 Stack Overflow 上找到的关于 MatLab 相关的一些问题。直到今天,还有很多人在 MatLab 使用中遇到问题时,会选择使用 Stack Overflow 来查询和交流。
而自己编程,谈何容易?特别是对人文社科或者艺术方面的小伙伴来说。
我自己授课的研究生,本科就有很多来自会计、营销、中文、日语等专业,跨考到了情报学。导师要求他们处理分析数据时,他们会非常焦虑,不知所措。
于是 2017 年 6 月,我写了一篇文章叫《如何用 Python 做词云》,当时没多想,就是给自己课上的学生写的,希望他们能够轻松掌握这些基本的数据可视化技巧,不再一听编程就头疼。
这篇文章采取实践导向,用尽量简单的案例和平时生动的语言来讲解,而不会用那些复杂公式,来把他们吓跑。
我真的没想到这篇文章那么受欢迎,以至于一发而不可收拾。后续我又写了一系列的主题,包括 [中文分词用 Python 怎么做](如何用 Python 做中文分词?)、[情感分析用 Python 怎么做](如何用 Python 做情感分析?)、[如何用机器学习做金融机构贷款决策](贷还是不贷:如何用 Python 和机器学习帮你决策?) 等关于 python 与机器学习应用的文章。
2021 年 10 月,上述的文章集结成了这本《数亦有道 ——Python 数据科学指南》。
这是我和我的同事翟羽佳老师一起写的。书里涵盖了很多关于数据获取、预处理、分析、可视化、机器学习、深度学习等一系列内容。这本书在豆瓣的评价超过 8 分。
能够给文科生们提供一条不那么痛苦的数据科学入门路径,我很开心。
然而,悄然间,未来已来。
半自动
今天,你如果是个「文科生」,再也不需要茫然无助,自己从头开始进行数据分析了。因为 AI 来了。
一个里程碑事件是 ChatGPT 在 2022 年 11 月 30 号发布。几天之后,我的文章《AI 答题真有智能吗?聊聊 ChatGPT 的印象》出现在 少数派的首页上。
在这篇文章中,我探讨了一些 AI 能够帮助我们做的事。后来,我干脆写了一篇论文《ChatGPT 给科研工作者带来的机遇与挑战》,发表在 2023 年 3 月的《图书馆论坛》上。
地址:
在这篇文章中,我谈到了不少用 AI 辅助编程的例子。这篇文章下载量比较高,你如果感兴趣的话可以读一读。
我在许多文章中提到 AI 的作用 —— 它可以帮助你在整个数据分析过程中进行规划、编程、对错误进行有效的反馈。
例如,对于规划,我问 ChatGPT ,如何用 Python 写一个简单的分类模型。
这是当时 ChatGPT 3.5 回答时截图。ChatGPT 说:「用 Python 写一个简单的分类模型,你需要做以下的几步……」如果你是个初学者,有了这些指引,你就有标准化的流程帮助理解如何做一个分类模型。
然后,你还可以让它来自行编程。
这里我让 ChatGPT 做一个逻辑回归的分类器,它就会把代码全部编写出来。你复制完之后,可以放到你的本地环境或线上环境来尝试运行。
我在本地运行了 ChatGPT 编写的 LDA 主题挖掘代码之后,就出现了下面这张图(选自我去年 3 月的那篇论文)。
AI 还可以对错误进行有效的反馈。以前,我们遇到一些报错,会跑到 Stack overflow、知乎等网站去问。但是现在,这些问题你可以直接请教 ChatGPT,把报错信息贴上去,它就会告诉你该怎么解决。
但是,这里面还有一些问题。用户依然需要了解编程的基本知识,例如得知道界面上具体哪里是重要的报错信息。因为这里涉及到模型的上下文长度限制 —— 你把全部报错信息都贴进去,它可能贴不下。还有,你得知道 ChatGPT 给你编写的代码该怎么放在一个合适的环境中去运行。
万事开头难,如果你不了解这些基本的信息,不知道该如何运行这些代码,那么 ChatGPT 给你输出的代码对你来说没有用处。
还有就是调试。有一些程序运行时本身没有报错,但是不出结果,这时候你需知道该怎么来处理。这个过程中,你需要反复地和 AI 打交道,这就需要你有比较好的提示词能力。
上述这些因素,对普通用户来说依然是难以忽视的门槛。
全自动
好在很快,我们就进入 AI 辅助编程的下一个阶段 —— 全自动,这也是我们今天要给你展示、讲解和练习的部分。
AI 既然具备了帮助我们规划、编程、根据报错和反馈来进行修订的能力,我们就期待着它能端到端地完成任务。
用户只需要提出需求、给出数据,甚至有时候都不需要提供数据(AI 可以自己去找),AI 便可以自行进行规划、编程、运行、迭代,然后根据结果进行反馈。
如果 AI 是一遍处理就通过了,那当然是最好的。如果不行的话,有报错或没有得到预期的结果,AI 会自己根据结果来调整,不断迭代后给你一个满意的解决方案。这里面很重要的一条是,它得能够有足够的智能,能够理解这些报错信息,并知道该如何利用它们来修正代码。
当然,有的时候,AI 反复运行的最终结果未必是目标达成,而可能是彻底失败。最后告诉你「这个我着实完成不了」。
本次工作坊,你会见到不同的情况。如果你一开始没有一些跟 AI 互动的基础,彻底失败出现的概率要远远高于目标达成。
但是,这恰恰是我们今天做这个工作坊的意义 —— 学会如何跟 AI 更好交互,从而让目标达成的概率显著提升。
下面,咱们介绍一些常用的端到端 AI 数据分析与可视化工具。
工具
第一个,当然是 ChatGPT 。
ChatGPT
2023 年 5 月份,ChatGPT 提供了 code interpreter 模式。我在当时写了一篇《如何用 ChatGPT 帮你自动分析数据?》,为你详细介绍了它。
我们来看一下 Code Interpreter 当时的演示案例。
我给他上传了一个 CSV 数据,是一个关于贷款的问题。我前面列的那篇文章《贷还是不贷?如何用 Python 和机器学习帮你决策》中,你可以找到这个数据。
Code Interpreter 读了 CSV 文件之后,把所有的列名列出来,并且还把这一列究竟是在干什么完全地给你展现了出来,甚至帮助你分析了最常出现变量的形式、数值,以及分类的取值,比如 1、-1 等。
你可以要求 Code Interpreter 展开分析过程,就能看到对应的代码。
从展开的代码里,你不难看出 Code Interpreter 并不神秘,在背后实际上做的就是我们刚才说的 —— 规划、编程,运行,然后对结果进行反馈。它是依据运行的结果来撰写给用户最终答案。
假设你是个初学者,甚至可以直接把数据交给 ChatGPT,说 “根据目前的数据,思考它可以做哪些分析,一步步思考,给我有信心的答案”。
Code Interpreter 就可以告诉你描述性分析、相关性分析、预测模型、分类问题等。我说你给我做一个描述性分析,它就把数据的分布进行相关的分析与展示。
然后我说你给我做个相关性分析,Code Interpreter 就把变量之间的关联展现了出来。
我说你给我建立一个预测模型,然后 Code Interpreter 立即说出来步骤 —— 它要对数据进行预处理,对模型进行选择,训练这个模型,然后使用准确率(accuracy)作为评价指标来评估。
我现在教机器学习课。如果到期末的时候,我的学生还记得这些标准化的流程,并且能够完整规范地实施,我就会觉得很欣慰。
Code Interpreter执行操作做预处理,选择模型,训练,得到一个 60% 多这样的准确率,然后还告诉你这里面可能的改进策略有哪些,以及为什么这些策略管用。
如果你不满意,当然还可以继续追问。
刚才我们讲的都属于数据分析的范畴,我在 12 天之后又写了一篇文章叫《如何用 ChatGPT 做数据进阶可视化?(三维交互图与动图视频)》。
在这篇文章中,我演示了最普通的分布图形绘制、一些变量之间的关联绘制、多个变量之间的相关矩阵等。
甚至,Code Interpreter 还可以做 3D 图像。如果你刚才看了前面我自己求学时的经历,应该知道为什么我对 3D 图像那么执着。在这里,Code Interpreter 甚至可以很简单地做出 3D 动图。
这里的简单可不是动图简单,而是你让它做动图的方式很简单。你还可以把图片拉近,然后各种旋转。你还可以做一些二维动图,比如时间序列的动态可视化,看曲线是如何随着时间变化是生成出来的。
这里的关键点在于,不论是做分布、做模型、进行预测判断、做可视化,还是做 3D 动图…… 用户全部无需自己编程。甚至对初学者来讲,让大语言模型根据自己的经验来做,甚至有可能比初学者做得更好。虽然有些冒犯,但这是我一年多以来跟无数的非数据分析相关专业用户打交道后得出的真实结论。
限制
可惜 Code Interpreter 里面,仍存在一些限制,包括资源的限制和价格问题。
先说资源。我曾经让它给我做一张图。
这张图实际上是很简单的词频图。它在这里面所有该出现词的地方全都给我用了方块。如果你对 Python 编程已经比较熟悉了,应该一眼就看出来,这是没有使用合适的中文字体造成的。
于是我对 Code Interpreter 反馈,表达了结果没有正确地显示中文,让 ChatGPT 来自行处理。
其实 Code Interpreter 知道该怎么办,比如说这里面它自己编程选择使用了中文字体。但是实际执行的结果是什么呢?
Code Interpreter 说:“对不起,我这里没有相应包,我装不上。”
这就是问题,因为资源限制,它不让用户装安装新软件包。在 Code Interpreter 回答你问题过程中程序是如何运行的?实际上 ChatGPT 为每一位用户的每一次Code Interpreter会话,都新建了一个虚拟机。我第一次知道这个事儿的时候,评论到:
真是下血本了。
这个虚拟机执行你的编程指令、操作数据、预装了一些软件包。但出于成本原因,这个虚拟机的配置和预装内容不可能令千千万万的用户中每个人满意。
另外,出于安全性考量,ChatGPT 也不能让用户自定义的安装软件包。
如果把自定义安装软件包的权限开放给普通用户,让用户通过自然语言对话就能随意安装新软件包,那万一用户做了超越预期的事就不好办了。
比如说,用户利用提供的虚拟机作为跳板去攻击别的机器,这样的结果是任何一个大语言模型提供商都不能够承受的。
考虑到 ChatGPT 提供的虚拟机容量有限,你想跑海量数据也是不可能的。在里面运行深度学习?更是想都不要想。
还有一个限制,就是价格。
ChatGPT Plus 现在的价格是 20 美元每月,还是挺贵的。对很多学生来说,这是一笔不小的投入。有没有解决办法呢?
当然有,而且有两种。
解决办法
替代品
第一种,我们选用一些替代品,就是其他的大语言模型厂商开发的近似功能的模型。比如,智谱清言。
智谱清言推出 GLM-4 之后,在今年的 1 月份我就写了一篇评测文章,其中专门提到了智谱清言当中有一个数据分析模式。
在这里你可以上传自己的数据,基本上可以和 ChatGPT 的 Code Interpreter 模式划等号。注意,是「基本上」,并不是百分百。毕竟二者后端大语言模型的能力,差别还是很大的。
从实际效果来看,4 万多条贷款数据扔给智谱清言的数据分析模式后,它也能做描述性的统计和可视化。
GLM-4 也可以做机器学习的建模,并且获得结果。
使用下来,我觉得智谱清言的优点非常明显。
第一,全集成。直接拿过来开箱即用,零门槛。
第二,目前还是免费的(后面会不会收费就不知道了)。
但是,它和 ChatGPT 一样,都给了你一个基于对话的虚拟机,所以 ChatGPT 遇到什么限制,它也会遇到什么问题。
出于成本、可扩展性、安全性的考量,用户还是只能接受它默认已经存在的软件包,无法自行安装新软件包。这使它的能力受到了限制。
好在,对中文用户来说,这个国产大语言模型对中文支持,比 ChatGPT 好许多。
这就引出了我今天着重给你介绍并且要练习的第二种方式。