从 数据工程 到 Prompt 工程

news2024/11/26 8:41:12

动动发财的小手,点个赞吧!

alt

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

简介

2022 年 5 月,斯蒂芬·沃尔夫勒姆 (Stephen Wolfram) 和莱克斯·弗里德曼 (Lex Fridman) 发表了题为“编程已死吗?”的深刻见解。他们讨论了未来开发者是否还会使用高级语言。根据 Wolfram 的说法,许多编程任务可以通过大型语言模型 (LLM) 实现自动化。在撰写本文时,此类模型最突出的例子是 ChatGPT。自 2022 年底推出以来,它产生了惊人的效果。指定要由 LLM 执行的操作称为“提示工程”。如果 Wolfram 是对的,至少软件开发的一部分将从编写代码转向编写提示。

在数据科学方面,数据准备可能是一项耗时且乏味的任务。那么,为什么不尝试使用 LLM 使其自动化呢?在以下部分中,我们将使用 ChatGPT 和 Python 解决不同的数据工程问题。我们没有自己编写 Python 代码,而是使用提示工程来生成它。我们的实验是在 2023 年 5 月 19 日基于当时最新的免费 ChatGPT 版本 (GPT-3.5) 进行的。

创建数据框

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

image-20230524153840794
image-20230524153840794

为了从上面的示例中创建数据框,我们开始了与 ChatGPT 的新对话并发布了以下提示:

Create a Pandas table with the following data:
Continent, Country, Year, Category, Variable, Value
Asia, China, 2022, Economy, GDP, 18.1
Asia, China, 2022, Demographics, Population, 1412
North America, USA, 2022, Economy, GDP, 25.5
North America, USA, 2022, Demographics, Population, 333
Europe, Germany, 2022, Economy, GDP, 3.9
Europe, Germany, 2022, Demographics, Population, 84

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

import pandas as pd

data = {
    'Continent': ['Asia''Asia''North America''North America''Europe''Europe'],
    'Country': ['China''China''USA''USA''Germany''Germany'],
    'Year': [202220222022202220222022],
    'Category': ['Economy''Demographics''Economy''Demographics''Economy''Demographics'],
    'Variable': ['GDP''Population''GDP''Population''GDP''Population'],
    'Value': [18.1141225.53333.984]
}

df = pd.DataFrame(data)
print(df)

运行脚本时,我们看到输出符合我们的规范:

alt

尽管我们在实验中使用了示例,但下一节中生成的代码原则上也可以处理更大的数据集。

旋转数据框

对于数据科学,我们在第一个提示中创建的表结构并不是最优的。相反,所谓的“平板”会更方便。在表 1 中,指标“GDP”和“人口”分别用名为“Variable”和“Value”的两列表示。相比之下,平面表格将为每个指标包含单独的列,如表 2 所示。

alt

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

Transform the table into the following format:
Continent, Country, Year, GDP, Population
Asia, China, 2022, 18.1, 1412
North America, USA, 2022, 25.5, 333
Europe, Germany, 2022, 3.9, 84

上述消息基于所需数据格式的示例。或者,我们也可以纯口头表达我们的要求。与经典编程一样,在提示工程中有实现目标的替代解决方案。在不久的将来,寻找最佳方式将是一项激动人心的任务。根据我们的提示,ChatGPT对Python代码进行了如下调整:

import pandas as pd

data = {
    'Continent': ['Asia''Asia''North America''North America''Europe''Europe'],
    'Country': ['China''China''USA''USA''Germany''Germany'],
    'Year': [202220222022202220222022],
    'Category': ['Economy''Demographics''Economy''Demographics''Economy''Demographics'],
    'Variable': ['GDP''Population''GDP''Population''GDP''Population'],
    'Value': [18.1141225.53333.984]
}

df = pd.DataFrame(data)

# Pivot the table
pivot_df = df.pivot_table(index=['Continent''Country''Year'], columns='Category', values='Value').reset_index()

# Rename the columns
pivot_df.columns.name = None
pivot_df.columns = [column if column != 'Variable' else None for column in pivot_df.columns]

print(pivot_df)

然而,运行脚本的第二个版本显示输出不是我们所要求的: alt

该表包含名为“人口统计”和“经济”的两列,而不是预期的“GDP”和“人口”列。为了解决这个问题,我们发布了下一个提示:

The columns are not correct, you should have used 
the variables GDP and population

作为响应,模型纠正了错误并生成了另一个版本的 Python 代码:

import pandas as pd

data = {
    'Continent': ['Asia''Asia''North America''North America''Europe''Europe'],
    'Country': ['China''China''USA''USA''Germany''Germany'],
    'Year': [202220222022202220222022],
    'Category': ['Economy''Demographics''Economy''Demographics''Economy''Demographics'],
    'Variable': ['GDP''Population''GDP''Population''GDP''Population'],
    'Value': [18.1141225.53333.984]
}

df = pd.DataFrame(data)

# Pivot the table
pivot_df = df.pivot_table(index=['Continent''Country''Year'], columns='Variable', values='Value').reset_index()

# Rename the columns
pivot_df.columns.name = None
pivot_df.columns = ['Continent''Country''Year''GDP''Population']

print(pivot_df)

运行脚本表明这次旋转已正确实现:

alt

富集数据框

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

For each country, in the table above, add its ISO code

结果,模型调整了响应并返回了以下代码片段:

import pandas as pd

data = {
    'Continent': ['Asia''Asia''North America''North America''Europe''Europe'],
    'Country': ['China''China''USA''USA''Germany''Germany'],
    'Year': [202220222022202220222022],
    'Category': ['Economy''Demographics''Economy''Demographics''Economy''Demographics'],
    'Variable': ['GDP''Population''GDP''Population''GDP''Population'],
    'Value': [18.1141225.53333.984]
}

iso_codes = {
    'China''CN',
    'USA''US',
    'Germany''DE'
}

df = pd.DataFrame(data)

# Add ISO code column
df['ISO Code'] = df['Country'].map(iso_codes)

# Pivot the table
pivot_df = df.pivot_table(index=['Continent''Country''ISO Code''Year'], columns='Variable', values='Value').reset_index()

# Rename the columns
pivot_df.columns.name = None
pivot_df.columns = ['Continent''Country''ISO Code''Year''GDP''Population']

print(pivot_df)

运行脚本显示一个带有 ISO 代码的新列已添加到数据框中。

alt

派生列

接下来让我们通过将一个国家的 GDP 除以其人口规模来得出一个新的列“人均 GDP”。为此,我们发送了以下提示:

Derive a new column "GDP per capita" by dividing the GDP 
of a country by its population size

对此,模型修改了代码如下:

import pandas as pd

data = {
    'Continent': ['Asia''Asia''North America''North America''Europe''Europe'],
    'Country': ['China''China''USA''USA''Germany''Germany'],
    'Year': [202220222022202220222022],
    'Category': ['Economy''Demographics''Economy''Demographics''Economy''Demographics'],
    'Variable': ['GDP''Population''GDP''Population''GDP''Population'],
    'Value': [18.1141225.53333.984]
}

iso_codes = {
    'China''CN',
    'USA''US',
    'Germany''DE'
}

df = pd.DataFrame(data)

# Add ISO code column
df['ISO Code'] = df['Country'].map(iso_codes)

# Pivot the table
pivot_df = df.pivot_table(index=['Continent''Country''ISO Code''Year'], columns='Variable', values='Value').reset_index()

# Calculate GDP per capita
pivot_df['GDP per capita'] = pivot_df['GDP'] / pivot_df['Population']

# Rename the columns
pivot_df.columns.name = None
pivot_df.columns = ['Continent''Country''ISO Code''Year''GDP''Population''GDP per capita']

print(pivot_df)

输出表明脚本产生了预期的结果:

alt

分析数据

一旦数据转换完成,实际的分析就可以开始了。最后让我们计算一下各国GDP与人口的相关系数。为此,我们贴出最后一个提示:

Use the table above to calculate the correlation coefficient between 
the GDP and the population of the countries

结果,模型返回了以下代码片段:

import pandas as pd

data = {
    'Continent': ['Asia''Asia''North America''North America''Europe''Europe'],
    'Country': ['China''China''USA''USA''Germany''Germany'],
    'Year': [202220222022202220222022],
    'Category': ['Economy''Demographics''Economy''Demographics''Economy''Demographics'],
    'Variable': ['GDP''Population''GDP''Population''GDP''Population'],
    'Value': [18.1141225.53333.984]
}

df = pd.DataFrame(data)

# Pivot the table
pivot_df = df.pivot_table(index=['Continent''Country''Year'], columns='Variable', values='Value').reset_index()

# Calculate correlation coefficient
correlation_coefficient = pivot_df['GDP'].corr(pivot_df['Population'])

print("Correlation Coefficient: {:.3f}".format(correlation_coefficient))

运行脚本时,我们发现两个变量之间存在很强的正相关性,这并不奇怪:

alt

总结

不可否认,我们的实验是基于一个简单的数据集。然而,结果是显著的。我们执行了几项数据工程任务,而没有编写一行代码。 ChatGPT 不仅能够在大多数情况下正确执行我们的提示。但即使模型犯了错误,它也能够反映和修复错误。与软件开发一样,生成的代码必须经过测试。此外,它可能需要重构和优化。在 AI 时代使用 pylint 仍然是一个好主意。然而,总而言之,我们必须同意 Wolfram 的观点:在未来,数据工程的重要部分将从编码转向提示工程。这种新方法不会取代数据工程师,但会提高他们的效率。

Reference

[1]

Source: "https://towardsdatascience.com/from-data-engineering-to-prompt-engineering-5debd1c636e0"

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用HTML5制作精美战机游戏

每天要被大学老师催H5作业👏🏻👏🏻👏🏻 不如看看本文,代码齐全,直接用来做参考案例👌🏻 干货满满不看后悔👍👍👍 代码…

用友畅捷通CRM SQL注入漏洞复现

0x01 产品简介 用友畅捷通CRM是面向小企业全力打造的简单、实用的客户关系管理应用。帮助企业用好自己的客户资源、管好商机跟进过程、引导好业务员跟单行为,促进团队销售能力的提升;通过查询和分析,识别企业的价值客户,融合电话、…

JUC笔记(二)

多线程编程核心 在前面,我们了解了多线程的底层运作机制,我们终于知道,原来多线程环境下存在着如此之多的问题。在JDK5之前,我们只能选择synchronized关键字来实现锁,而JDK5之后,由于volatile关键字得到了…

湖南大学CS-2021期末考试解析

【特别注意】 答案来源于@wolf 是我在备考时自己做的,仅供参考,若有不同的地方欢迎讨论。 【试卷评析】 有必要一做。 【试卷与答案】 1.简答题(10 分) 小明设计了一款机器,整数和浮点数都占 10 个 bit,其中整数采用补码表示,浮点数采用 IEEE 754 标准。 (1)…

matlab横向连接字符组成文件路径

f fullfile(myfolder,myfile.tif) %字符串中不包含反斜杠 f strcat(myfolder\,myfile.tif) %字符串中包含反斜杠,strcat函数直接拼接得到的结果一致

【软件测试】测试用例设计要点总结

文章目录 考试题型简答题(一) 等价类划分1.1 划分等价类1.2 设计测试用例 (二) 边界值分析2.1 列出边界值分析表2.2 设计测试用例 (三) 因果图分析3.1 确定原因和结果3.2 确定原因和结果之间的逻辑关系3.3 在因果图上使用标准的符号标明约束条件 (四) 判定表驱动4.1 将因果图转…

【轻量化网络系列(7)】EfficientNetV2论文超详细解读(翻译 +学习笔记+代码实现)

前言 今天我们要学习的是EfficientNetV2 ,该网络主要使用训练感知神经结构搜索和缩放的组合;在EfficientNetV1的基础上,引入了Fused-MBConv到搜索空间中;引入渐进式学习策略、自适应正则强度调整机制使得训练更快;进一…

深入了解 OkHttp 协议:优雅的网络请求框架

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想…

Spring Boot项目的搭建和运行

✨Spring Boot项目的搭建和运行 🍑Spring Boot概述🍊🍊传统框架技术存在的问题🍊🍊主要特点🍊🍊环境要求 🍑聚合工程/父子模块🍑第一个Spring Boot项目🍑目录…

《UNUX环境高级编程》(1)UNIX基础

1、引言 2、UNIX体系结构 操作系统 一种软件,控制计算机硬件资源,提供程序运行环境。操作系统包含了内核和一些其他软件(如shell、公用函数库、应用程序等)。例如Linux就是GNU操作系统的内核,因此也称为GNU/Linux操作…

Netty实战(十五)

UDP广播事件(一)UDP简介和示例程序 一、UDP基础1.2 UDP介绍1.2.1 UDP和TCP的区别 1.3 UDP广播1.3.1 单播模式1.3.2 UDP的传输模式 二、UDP示例程序三、消息 POJO: LogEvent 一、UDP基础 到目前为止,我们已经见过的绝大多数的例子都使用了基于…

Android系统中最重要的一个组件【Framework】

Android Framework是Android系统中最重要的一个组件,它为Android应用开发者提供了一套完整而稳定的API框架,可以方便地实现各种应用功能。Android市场对Framework的需求量非常大,尤其在当前移动互联网时代,Android应用的市场需求也…

SpringCloud Alibaba-Nacos

SpringCloud Alibaba-Nacos 1. Nacos安装1.1 Nacos概要1.2 Nacos架构1.3 Nacos安装1.3.1 单机模式 Derby安装1.3.2 单机模式 MySQL安装1.3.3 Docker 安装Nacos 2 Nacos功能应用2.1 Nacos服务注册与发现2.2 负载均衡2.3 配置中心2.3.1 配置管理2.3.2 多环境切换2.3.3 共享/扩展 …

Spark集群部署和启动与关闭

上一篇我们讲了Hadoop集群部署和启动与关闭,今天我们讲一下Spark集群部署和启动与关闭。首先我们先来了解一下Spark集群部署模式,分别有以下三种: Standalone   Standalone(独立模式)是Spark一种简单的集群部署模式&…

随着用户体验质量的不断追求,性能优化成了Android开发中的重要一方面

在移动互联网时代,Android系统的使用越来越广泛,而随着用户对体验质量的不断追求,性能优化已经成为了Android应用开发中的重要方面。以下是对Android市场对性能优化的需求量及应用广度进行详细分析的几个方面。 1. 用户需求 随着Android系统…

DataLeap的全链路智能监控报警实践(三): 系统实现

系统实现 整体架构 基线 管理模块:负责基线创建、更新、删除等操作,管理基线元信息,包括保障任务,承诺时间,余量及报警配置等); 基线 实例生成:系统每天定时触发生成基线实例&#x…

2023 年最新互联网 Java 面试八股文出炉(附大厂 P5-P8 技术栈)

为什么感觉 Java 面试变难了? 几年前,你只需要简单的 ssm 框架,就能轻松找到一份 Java 的工作,但现在不一样了,随着涌入这个行业的人越来越多,同一个岗位需要筛选掉更多人,要求自然水涨船高&am…

ubuntu 20.04 aarch64 平台交叉编译 opencv 静态库

编译环境 win10 64 位 VMware Workstation Pro 16 虚拟机 虚拟机安装 ubuntu 20.04 opencv 版本: 来自 github 当前最新 4.7 目的 交叉编译 opencv 生成静态库(.a),用于 嵌入式 aarch64 平台。 环境配置方法 参考上一篇 u…

基于Java汽车配件销售业绩管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

@vue/cli脚手架

2. vue/cli脚手架 2.1vue/cli 脚手架介绍 目标: webpack自己配置环境很麻烦, 下载vue/cli包,用vue命令创建脚手架项目 vue/cli是Vue官方提供的一个全局模块包(得到vue命令), 此包用于创建脚手架项目脚手架是为了保证各施工过程顺利进行而搭设的工作平台 2.2 vue/cli 目录和代…