数据工程占据了数据科学过程的很大一部分。在CRISP-DM中,这个过程阶段被称为“数据准备”。它包括数据摄取、数据转换和数据质量保证等任务。在本文中,我们使用ChatGPT和Python解决了典型的数据工程任务。通过这样做,我们探索了数据工程与新的提示工程学科之间的联系。

打开网易新闻 查看精彩图片

2022年5月,Stephen Wolfram和Lex Fridman发表了一次富有洞见的演讲,题为“编程是否已死?”他们讨论了高级语言在未来是否仍将被开发人员使用的问题。根据Wolfram的说法,许多编程任务可以通过大型语言模型(LLM)自动化。在撰写本文时,这种模型的最显著例子是ChatGPT。自2022年底推出以来,它产生了惊人的结果。指定由LLM执行的操作被称为“提示工程”。如果Wolfram是对的,至少部分软件开发将从编写代码转变为编写提示。

在数据科学中,数据准备可能是一项耗时且繁琐的任务。那么为什么不尝试使用LLM自动化它呢?在接下来的章节中,我们将使用ChatGPT和Python解决不同的数据工程问题。我们没有自己编写Python代码,而是使用提示工程生成了它。以下案例是基于可用ChatGPT中文版本-知否AI问答(https://chat.cloudwizdom.com)(GPT-3.5)进行。

让我们从一个简单的问题开始,从样本数据集创建一个Pandas数据框架。表1包含了例如世界银行提供的国家指标。

打开网易新闻 查看精彩图片

为了从上面的样本创建一个数据框架,我们与ChatGPT开始了一次新的对话,并发布了以下提示:

创建一个 Pandas 表格,数据如下:

大洲,国家,年份,类别,变量,值

亚洲,中国,2022,经济,GDP,18.1

亚洲,中国,2022,人口统计,人口,1412

北美洲,美国,2022,经济,GDP,25.5

北美洲,美国,2022,人口统计,人口,333

欧洲,德国,2022,经济,GDP,3.9

欧洲,德国,2022,人口统计,人口,84

作为回应,模型生成了以下Python代码:

打开网易新闻 查看精彩图片

当在python运行以上脚本,输出如下:

打开网易新闻 查看精彩图片

尽管我们在实验中使用了一个样本,但下面部分生成的代码原则上也可以处理更大的数据集。

数据框架的透视

对于数据科学来说,我们在第一个提示中创建的表格结构并不理想。相反,所谓的“平面表格”会更方便。在表格1中,指标“GDP”和“人口”由名为“变量”和“值”的两列表示。相比之下,平面表格将为每个指标单独包含列,如表格2所示。

打开网易新闻 查看精彩图片

将表格1的格式转换为表格2的格式称为“透视”。让我们尝试使用ChatGPT来解决这个任务。为此,在我们的对话中发布了第二个提示:

将表格转换为以下格式:

大陆,国家,年份,GDP,人口

亚洲,中国,2022,18.1,1412

北美洲,美国,2022,25.5,333

欧洲,德国,2022,3.9,84

上述消息基于所需数据格式的示例。或者,我们也可以用纯语言方式表达我们的请求。与经典编程一样,提示工程可以有多种实现目标的替代解决方案。寻找最佳方法将是一个令人兴奋的近期任务。根据我们的提示,ChatGPT中文版-知否AI问答(https://chat.cloudwizdom.com)将调整Python代码如下:

打开网易新闻 查看精彩图片

运行上述代码将输出所需格式的表格:

打开网易新闻 查看精彩图片

另一个典型的数据工程任务是通过附加信息来丰富数据集。为此,我们要求ChatGPT通过以下提示将ISO国家代码添加到我们的数据中:

对于上述表格中的每个国家,添加其ISO代码

提示4:添加国家代码

打开网易新闻 查看精彩图片

输出结果:

打开网易新闻 查看精彩图片

接下来,我们将通过将一个国家的GDP除以其人口数量来衍生出一个新的列"人均GDP"。为此,我发送了以下提示:

通过将一个国家的GDP除以其人口数量来衍生出一个新的列"人均GDP"

提示5: 衍生新列

作为响应,模型调整了代码,如下所示:

打开网易新闻 查看精彩图片

输出结果显示脚本产生了预期的结果。

不可否认,我们的实验是基于一个简单的数据集。尽管如此,结果仍然令人瞩目。我们在不编写一行代码的情况下完成了几个数据工程任务。ChatGPT能够在大多数情况下正确实现我们的提示。即使模型犯了错误,它也能够反思并进行修正。和软件开发一样,生成的代码必须经过测试。此外,它可能需要重构和优化。在人工智能时代,仍然建议使用pylint。总结起来,我们必须同意沃尔夫勒姆的观点:未来,数据工程的重要部分将从编码转向提示工程。这种新的方法不会取代数据工程师,而是使他们更加高效。

打开网易新闻 查看精彩图片