码农饭碗不保——ChatGPT正在取代Coder

news2024/12/25 15:51:26

码农饭碗不保——ChatGPT正在取代Coder

最近被OpenAI的ChatGPT刷屏了。我猜你已经读了很多关于ChatGPT的文章,不需要再介绍了。假如碰巧您还不太了解ChatGPT是什么,可以先看一下这篇文章,然后再回来继续。

与ChatGPT对话很有趣,甚至很有启发性。我们的内容创作部门已经将ChatGPT用于文案生成。那么对研发部门,ChatGPT是否有用呢?我在算法团队做了一个测试,让ChatGPT来完成算法研究中频繁要做的数据清洗和处理问题,结果让人非常满意。我甚至愿意聘请ChatGPT做算法团队的数据工程师。

在这里插入图片描述

文章目录

    • 简单数据处理
      • 任务目标
      • 输出结果
      • 分析
    • 重构代码
      • 任务目标
      • 输出结果
      • 分析
    • 扩展代码
      • 任务目标
      • 输出结果
      • 分析
    • 总结

简单数据处理

我们首先从简单的任务入手,让ChatGPT完成数据加载和简单的清洗工作。

任务目标

  1. 加载数据集;
  2. 确保数据集中所有值均为数值类型,如果不是则尝试将其转换为数值类型;
  3. 检查缺失值;
  4. 数据集分成训练集和测试集。

上面这4个任务是算法执行前必须要做的常规工作。我们看一下ChatGPT的表现

输出结果

在这里插入图片描述

import pandas as pd
import numpy as np

def load_csv_data(file_path):
    # Load the csv file into a pandas DataFrame
    df = pd.read_csv(file_path)
    
    # Convert string type data to numeric type and save the mapping in a dictionary
    conversion_map = {}
    for column in df.columns:
        if df[column].dtype == 'O':
            unique_values = df[column].unique()
            conversion_map[column] = {unique_values[i]: i for i in range(len(unique_values))}
            df[column] = df[column].map(conversion_map[column])
    
    # Check for missing values
    missing_value_counts = df.isnull().sum()
    for column, missing_count in missing_value_counts.items():
        if missing_count > 1:
            df.drop(df[df[column].isnull()].index, inplace=True)
        elif missing_count == 1:
            df[column].fillna(df[column].mean(), inplace=True)
    
    # Split the dataset into training and validation sets
    train_df = df.sample(frac=0.8, random_state=0)
    val_df = df.drop(train_df.index)
    
    return train_df, val_df, conversion_map

分析

上面代码可以完美完成目标任务,从csv文件中加载数据集,并以80/20的比例将数据集拆分为测试集和训练集,关键逻辑还加上了注释,ChatGPT甚至贴心的给出了函数使用方法。

ChatGPT生成上面代码总共用时116秒,同时我们的数据工程师编写同样功能的代码用时225秒。二者的代码差异不大,但是我们的数据工程师没写注释。

上面的任务是数据工程师几乎天天都要写的代码,他们很熟练。我又找了一个大学刚毕业还在实习期的数据助理来写,居然半个小时才完成,由于对接口不熟悉,大量时间花在了百度上[捂脸]。

第一轮比试,从各个维度上,都是ChatGPT胜。

重构代码

在上一轮的比试中,我发现我们的数据工程师有“偷鸡”行为——由于平时经常需要完成上面工作,他将很多功能封装成了独立的函数,用的时候直接引入或拷贝。使用函数按照逻辑组织代码,不仅能够促进代码复用,还有利于代码维护。所以我们接下来试着让ChatGPT重构一下自己的代码。

任务目标

将上面的代码按照功能合理地拆分成若干函数。

输出结果

在这里插入图片描述

import pandas as pd
import numpy as np

def load_csv(file_path):
    return pd.read_csv(file_path)

def convert_strings_to_numeric(df):
    conversion_map = {}
    for column in df.columns:
        if df[column].dtype == 'O':
            unique_values = df[column].unique()
            conversion_map[column] = {unique_values[i]: i for i in range(len(unique_values))}
            df[column] = df[column].map(conversion_map[column])
    return df, conversion_map

def handle_missing_values(df):
    missing_value_counts = df.isnull().sum()
    for column, missing_count in missing_value_counts.items():
        if missing_count > 1:
            df.drop(df[df[column].isnull()].index, inplace=True)
        elif missing_count == 1:
            df[column].fillna(df[column].mean(), inplace=True)
    return df

def split_data(df):
    train_df = df.sample(frac=0.8, random_state=0)
    val_df = df.drop(train_df.index)
    return train_df, val_df

def prepare_data(file_path):
    df = load_csv(file_path)
    df, conversion_map = convert_strings_to_numeric(df)
    df = handle_missing_values(df)
    train_df, val_df = split_data(df)
    return train_df, val_df, conversion_map

分析

ChatGPT拆分出5个函数:

  • load_csv(file_path) 负责从csv文件中加载数据集,返回DataFrame;
  • convert_strings_to_numeric(df) 负责将DataFrame中的非数值类型数据转换为数值类型,并记录转换映射表;
  • handle_missing_values(df) 负责处理缺失值;
  • split_data(df) 负责将数据集拆分为训练集和测试集;
  • prepare_data(file_path) 将上面4给函数串起来,构成一个pipeline。

不得不说,ChatGPT有一次完美地完成了任务!并且函数名起得非常好,看函数名就能知道函数的功能,比很多中国程序员用拼音或缩写命名函数友好多了。

扩展代码

重构后的代码结构已经非常清晰了,但是还是有缺陷,那就是不够灵活,很多规则都是写死的。为了让代码更灵活、可扩展性更强,我们一般会将变量以参数的形式传入。

任务目标

重构上面的代码,以参数的形式从命令行传入以下内容:

  • csv格式数据集的路径
  • 拆分训练集和验证集的大小
  • 阈值,缺失值大于此阈值则删除记录,小于等于此阈值则处理缺失值

输出结果

在这里插入图片描述

import pandas as pd
import numpy as np
import argparse

def load_csv(file_path):
    return pd.read_csv(file_path)

def convert_strings_to_numeric(df):
    conversion_map = {}
    for column in df.columns:
        if df[column].dtype == 'O':
            unique_values = df[column].unique()
            conversion_map[column] = {unique_values[i]: i for i in range(len(unique_values))}
            df[column] = df[column].map(conversion_map[column])
    return df, conversion_map

def handle_missing_values(df, threshold):
    missing_value_counts = df.isnull().sum()
    for column, missing_count in missing_value_counts.items():
        if missing_count > threshold:
            df.drop(df[df[column].isnull()].index, inplace=True)
        elif missing_count <= threshold:
            df[column].fillna(df[column].mean(), inplace=True)
    return df

def split_data(df, split_ratio):
    train_df = df.sample(frac=split_ratio, random_state=0)
    val_df = df.drop(train_df.index)
    return train_df, val_df

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Prepare data for machine learning.')
    parser.add_argument('file_path', help='Path to the csv file.')
    parser.add_argument('--split-ratio', type=float, default=0.8, help='Ratio of the training set size.')
    parser.add_argument('--threshold', type=int, default=1, help='Threshold for handling missing values.')
    args = parser.parse_args()

    df = load_csv(args.file_path)
    df, conversion_map = convert_strings_to_numeric(df)
    df = handle_missing_values(df, args.threshold)
    train_df, val_df = split_data(df, args.split_ratio)

分析

ChatGPT很好地理解了我们的意图,引入了argparse模块来管理和解析命令行参数,关键是参数名起的也非常合理,参数说明也非常准确(尽管是英文的)。参数都正确地传入了所属的函数,又一次完美的完成了任务。

总结

ChatGPT根据我们提供的规范,在创建、重构、扩展一个简单的数据预处理Python脚本方面做得非常出色,每一步的结果都符合要求。虽然这不是一个复杂任务,确实日常工作中最常见的基本工作。ChatGPT的表现确实惊艳了众人,预示着它朝着成为真正有用的编程助手迈出重要的一步。

最终我们从如下几个方面将ChatGPT和我们的数据工程师做了对比:

ChatGPT人类程序员
正确性
速度
编码规范
文档注释

可见ChatGPT在编码速度和编码习惯上都完胜人类工程师。这让我不得不开始担心程序员未来的饭碗。是的,你没有看错!程序员这个曾经被认为是最不可能被AI取代的职业,如今将面临来自ChatGPT的巨大挑战。根据测试,ChatGPT已经通过Google L3级工程师测试,这意味着大部分基础coding的工作可以由ChatGPT完成。尽管ChatGPT在涉及业务的任务上表现不佳,但未来更可能的工作方式是架构师或设计师于ChatGPT协同完成工作,不再需要编码的码农。

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

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

相关文章

【尊享版】如何从零到一掌控习惯?

超友们&#xff0c;早上好&#xff5e; 今天为你带来的分享是《如何从零到一掌控习惯&#xff1f;》&#xff0c;主要分为八个部分&#xff1a; 一、【为什么要培养习惯&#xff1f;】 二、【养成新习惯为什么很难&#xff1f;】 三、【习惯养成的原理是什么&#xff1f;】 …

D3.js绘图流程

简介 D3.js是由javaScript语言编写绘图库&#xff0c;其原理是&#xff1a;通过调用一系列内置函数&#xff0c;生成SVG&#xff0c;并在网页渲染。 本文以频率分布直方图案例为例&#xff0c;介绍使用D3.js的流程 流程 第一步 引用D3.js库 建立一个html文件&#xff0c;在…

【Flutter】入门Dart语言:初步了解内建类型

文章目录一、概述1.为什么叫内建类型&#xff1f;2.Dart的内建类型有哪些&#xff1f;二、内建类型详解1.num2.int3.double4.String5.bool6.List7.Map8.Function三、总结一、概述 "The greatest glory in living lies not in never falling, but in rising every time we…

分享111个HTML体育竞技模板,总有一款适合您

分享111个HTML体育竞技模板&#xff0c;总有一款适合您 111个HTML体育竞技模板下载链接&#xff1a;https://pan.baidu.com/s/1JmjlNVApPLVWnSEN5VlILQ?pwd5kzl 提取码&#xff1a;5kzl Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 响应式户外攀岩运动宣传…

【亲测有效】错误代码0x904,远程桌面连接异常终端问题

【亲测有效】错误代码0x904&#xff0c;远程桌面连接异常终端问题一、问题情况二、解决办法1.打开防火墙&#xff0c;如图&#xff0c;点击“允许应用或功能通过Windows”2.点击“允许其他应用”3.点击“浏览”4.在如下目录找到“mstsc.exe”添加5.点击“添加”6.勾选“专用”和…

[软件工程导论(第六版)]第5章 总体设计(课后习题详解)

文章目录1. 为每种类型的模块耦合举一个具体例子。2. 为每种类型的模块内聚举一个具体例子。3. 用面向数据流的方法设计下列系统的软件结构。4. 美国某大学共有200名教师&#xff0c;校方与教师工会刚刚签订一项协议。按照协议&#xff0c;所有年工资超过$26000&#xff08;含$…

电商搜索和推荐场景下的MLOps实践

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2023年1月份热门报告合集ChatGPT的发展历程、原理、技术架构及未来方向《ChatGPT&#xff1a;真格基金分享.pdf》2023年AIGC发展趋势报告&#xff1a;人工智能的下一时代2023年…

图的基本概念和性质

目录一、图的引入1.引言2.不同类型的图3.无序对和无序积4.什么是图二、图的表示1.图的表示2.邻接矩阵3.邻接点与邻接边4.一些简单的特殊图三、图的分类1.按边有无方向分类2.按有无平行边分类3.按有无权值分类4.综合分类方法四、子图和补图1.各类子图2.完全图3.补图4.补图的邻接…

WSL(ubuntu2204)xfce4安装中文环境和fcitx5框架及中文输入法

安装中文语言包 sudo apt install language-pack-zh-hans 配置中文显示 首先运行如下命令配置 locale $ sudo vi /etc/locale.gen 找到 *zh_CN.UTF-8 UTF-8* 并取消注释&#xff0c;然后保存并退出。 locale.gen... # zh_CN.GBK GBK zh_CN.UTF-8 UTF-8 # zh_HK BIG5-HKS…

【C语言刷题】倒置字符串

解题思路与过程&#x1f4fd;️解题思路&#x1f4fd;️解题过程&#x1f527;1.输入&#x1f527;2.设计逆序函数&#x1f527;3.逆序整个字符串&#x1f527;4.逆序每个单词&#x1f4fd;️源码&#x1f4f7;先来看题&#x1f447;&#x1f4fd;️解题思路 &#x1f534; 首先…

【验证码的识别】—— 图形验证码的识别

前言 &#xff08;结尾有彩蛋欧&#xff09; 目前&#xff0c;许多网站采取各种各样的措施来反爬虫&#xff0c;其中一个措施便是使用验证码。随着技术的发展&#xff0c;验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码&#xff0c;后来加入了英文字母和混…

RK356x U-Boot研究所(命令篇)3.6 fdt命令的用法

平台U-Boot 版本Linux SDK 版本RK356x2017.09v1.2.3文章目录 一、fdt命令的配置二、fdt命令的定义三、fdt命令的用法3.1 fdt list3.2 fdt rm3.3 fdt set一、fdt命令的配置 .config配置文件需要有以下配置: rk3568_defconfig默认已使能。 二、fdt命令的定义 usb命令定义在cm…

169、【动态规划】leetcode ——123. 买卖股票的最佳时机 III:二维数组+一维数组 (C++版本)

题目描述 原题链接&#xff1a;123. 买卖股票的最佳时机 III 解题思路 &#xff08;1&#xff09;二维dp数组 动态规划五步曲&#xff1a; &#xff08;1&#xff09;dp数组含义&#xff1a; dp[i][0]&#xff0c;表示无操作。主要由四个状态来表示四种操作。dp[i][1]&…

博客系统web自动化测试

目录 一、项目简介 二、测试用例 三、测试过程 3.1 环境搭建 3.2 编写代码 3.2.1 博客登陆页面测试 3.2.2 博客列表页面测试 3.2.3 博客详情页面测试 3.2.4 博客编辑页面测试 四、测试评估 一、项目简介 本项目是一个简易的个人博客系统&#xff0c;用户可以在登陆后…

W800开发板|SDK| HLK-W800-KIT-PRO|工具链|本地命令行编译|Windows11|WSL|(5)、海凌科W800开发板命令行编译指南

概况 海凌科W800开发板&#xff08;HLK-W800-KIT&#xff09;是海凌科电子面向开发者针对联盛德W800 芯片推出的一款多功能开发板。全功能版本与联盛德W800开发板相比&#xff0c;增加了温湿度传感器、RGB 灯以及音频解码器、功放可以直接在开发版验证功能。联盛德W800的csdk也…

java虚拟机内存分布

java虚拟机内存分布 Java虚拟机在执行java程序的过程中会把它所管理的内存划分为如下若干个不同的数据区域。 1.程序计数器 程序计数器是线程私有的&#xff0c;它占用的空间相对较小&#xff0c;用来记录当前线程字节码执行到哪一步。字节码解释器通过改变这个计数器的值来获…

Portraiture2023最新版人像图像后期处理软件

2023全新发布Portraiture 4是专注于图像后期处理软件研发的 Imagenomic, LLC产品之一&#xff0c;在摄影爱好者中有点影响力。Portraiture可以将繁琐复杂的人像磨皮操作极致简化&#xff0c;不论是普通爱好者或专业后期处理人员&#xff0c;均能一键完成。凭借优秀的AI算法和多…

uniapp 悬浮窗(应用内、无需授权) Ba-FloatWindow2

简介&#xff08;下载地址&#xff09; Ba-FloatWindow2 是一款应用内并且无需授权的悬浮窗插件。支持多种拖动&#xff1b;自定义位置、大小&#xff1b;支持动态修改。 支持自动定义起始位置支持自定义悬浮窗大小支持贴边显示支持多种拖动方效果&#xff1a;不可拖动、任意…

python--matplotlib(1)

前言 Matplotlib画图工具的官网地址是 http://matplotlib.org/ Python环境下实现Matlab制图功能的第三方库&#xff0c;需要numpy库的支持&#xff0c;支持用户方便设计出二维、三维数据的图形显示。 正文 1.arange函数 arange函数需要三个参数&#xff0c;分别为起始点、终止…

MyBatisPlus ---- 多数据源

MyBatisPlus ---- 多数据源1. 创建数据库及表2. 引入依赖3. 配置多数据源4. 创建用户service5. 创建商品service6. 测试适用于多种场景&#xff1a;纯粹多库、读写分离、一主多从、混合模式等 目前我们就来模拟一个纯粹多库的一个场景&#xff0c;其他场景类似 场景说明&#x…