分享

开学已经一个月了,老师把最近考试成绩发到了微信群里,我用 ChatGPT 简单分析一下

 汪子熙 2024-03-29 发布于上海

不知不觉开学已经一个月了。今天是星期五,班主任老师把开学一个月来四次数学考试的分数发在了班级群里:

老师发送给家长的成绩图片,是直接对着成绩单用手机拍摄的。成绩单上只有学生的学号。

为了方便汪子熙简单了解自己的成绩在班级里处于什么样的水平,我和他会坐在一起分析一下这些数据。

在 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 源代码,自己也能从中学习。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多