不知不觉开学已经一个月了。今天是星期五,班主任老师把开学一个月来四次数学考试的分数发在了班级群里:
老师发送给家长的成绩图片,是直接对着成绩单用手机拍摄的。成绩单上只有学生的学号。
为了方便汪子熙简单了解自己的成绩在班级里处于什么样的水平,我和他会坐在一起分析一下这些数据。
在 ChatGPT 出现之前,数据分析无非就是用 OCR 工具,把这些图片里包含的数字信息,提取出来,然后粘贴到 Excel 里,在 Excel 里进行各种操作,比如计算总分,按照总分降序排列,按照某一周的分数降序排列,打印总分排列在指定某位同学之前的所有同学的分数等等。
按照我过去的记忆,这些操作做完,再怎么快也要半小时左右——我并不擅长 Excel 操作。比如老师提供的原始图片里,只包含学号,不包含姓名,因此把姓名补充到数据集里,并完成总分求和等操作,需要编辑一些简单的公式。这些公式我很少用,所以老是记不住,每次要用的时候,都要去搜索引擎里查找语法。
有了 ChatGPT 之后,省事多了,从此彻底告别了 Excel,直接用自然语言,向 ChatGPT 发布指令就行了。
以下操作在 ChatGPT 4 中完成。
指令如下:
我给你上传一个图片文件,里面是一个表格,包含五列数据。第一列是班级学生的学号,第二列到第五列,分别是学生第一周到第四周的数学考试分数。请你把这些数字信息从图片中提取出来,保存到 maths.txt 文件中,要求输出的文件里,每一行的学号和分数之间,用一个空格符进行间隔。
ChatGPT 就会自动编写 Python 代码完成这个任务。
点击 Analyzing 的下拉箭头,可以看到它书写的 Python 源代码。我也贴在这里了,感兴趣的朋友可以看一下:
import cv2
import pytesseract
from pytesseract import Output
Load the image from file
image_path = '/mnt/data/数学成绩1.jpg'
image = cv2.imread(image_path)
Convert the image to gray scale
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Use Tesseract to do OCR on the image
custom_config = r'--oem 3 --psm 6'
data = pytesseract.image_to_data(gray_image, config=custom_config, output_type=Output.DICT)
Extract text information
num_items = len(data['text'])
extracted_text = []
for i in range(num_items):
# Extract text if confidence is above a certain threshold to avoid garbage
if int(data['conf'][i]) > 50:
extracted_text.append((data['left'][i], data['top'][i], data['text'][i]))
Sort the extracted text based on their vertical (top) position and then by their horizontal (left) position
This should roughly correspond to the ordering of the text in the table.
extracted_text.sort(key=lambda x: (x[1], x[0]))
Output the sorted text
sorted_text = [text[2] for text in extracted_text]
sorted_text
很快 ChatGPT 完成了任务,点击超链接,就可以把包含了四周考试成绩的 text 文件,下载到本地:
maths.txt 文件打开后是这样的:
接下来让 ChatGPT 对这四周的成绩进行求和,然后按照总分从高到低进行排序。指令如下:
我给你上传两个 text 文件,其中 maths.txt 包含了学生的学号,和第一,第二,第三,第四周考试成绩。学号和成绩之间用空格符号分隔。list.txt 文件第一列包含了学生的学号,第二列包含了学生的姓名。学号和姓名之间用空格符号分隔。
现在我把 maths.txt 文件内的数据称为数据集 A,list.txt 文件内的数据称为数据集 B。请你根据数据集 A 和 B 中共有的学生学号值,将两个数据集连接起来,生成一个新的数据集 C,这个数据集 C 增添一个新的列,列值为学生四周的成绩的总和。最后的数据集 C,按照成绩总和从高到低的顺序排序。
很快 ChatGPT 就给出了我想要的数据。班上总分排名第一的一位同学,四次考试总共只丢了 12 分,妥妥的学霸!
对于 ABAP 开发人员来说,上述操作类似使用 OPEN SQL 操作数据库表,不过同 OPEN SQL 有区别的是,我使用的是自然语言,向 ChatGPT 描述我要的结果,它具体如何完成我不关心。ChatGPT 帮我生成了包含学生学号,姓名和总分的新的数据集 C,这个数据集 C 好比 ABAP 里一个新生成的结果内表,我可以继续对其发布指令,任意查看我感兴趣的数据,比如查看总分排名前 20 的名单:
查看最后一次考试也就是前天考试成绩的排名:
实际完成这些分析,总共也就花了五分钟左右,绝大部分时间花在编写指令上,粘贴到 ChatGPT 的指令输入字段,敲回车后,就切换到其他窗口做其他事情了。
而且这个数据分析的需求本身很简单。ChatGPT 的魅力就在于,数据分析的需求越复杂,它能节省的人力就越多。比如要是让我用 Excel 统计,列出这四次考试,分数逐周上升,和分数逐周下降的同学名单,我就不知道怎么完成了。但用自然语言给 ChatGPT 发布指令,就能轻松完成:
并且能够查看到 ChatGPT 实现这个任务使用的 Python 源代码,自己也能从中学习。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。