ChatGPT在数据科学方面非常有用,但你必须仔细检查它的所有输出。对于某些任务来说,它非常出色,可以快速且准确地完成。对于其他一些任务,它的表现还算可以,你需要多次提示它。
你可以将你的数据集附加到ChatGPT消息中,通过给出几个简单的指令,ChatGPT就可以为你探索数据。
例如,我可以从这个数据项目中获取一个数据集。我给出的指令是:
“使用附带的数据进行描述性统计分析。包括以下内容:
它返回的摘要如下所示。它对每个变量都进行相同的计算。
年龄:
数据集没有发现缺失值。
如果你还需要这些计算的Python代码,你可以要求它写出来。
要加载数据集,请使用以下代码。
aerofit_data = pd.read_csv(file_path)
对于基本统计信息,它给出了这个。
basic_stats = aerofit_data.describe()
你还可以用这段代码检查缺失值。
missing_values = aerofit_data.isnull().sum()
进一步地,我可以要求ChatGPT可视化关键变量的分布,并检测潜在的离群值和异常值。
它为关键变量:年龄、收入和里程数创建了直方图和箱线图。它发现了收入和里程数分布中可能的离群值。
它还解释了这些可视化图表。因此,它注意到收入的分布是右偏的,这表明大多数客户的收入处于较低端,而较少的客户有显著更高的收入。箱线图表明高端有一些离群值。
对于里程数分布也有相同的解释:右偏且高端有离群值。
考虑到数据的性质,它建议这些离群值不一定是错误,而是代表特定的客户群体。关于偏态分布,它建议进行转换(例如,对数转换)以使数据正态化。
当然,你也可以要求它编写这些可视化的Python代码。
我可以使用相同的数据并询问ChatGPT它是否适用于逻辑回归。如果不适合,我应该如何转换它使其合适?
它回答说我的数据主要适用于连续数据的叙述性和推论性分析。
以下是为逻辑回归转换数据的建议方法。
创建二元结果:通过基于Usage变量的中位数分割,将客户分类为“高使用量”或“低使用量”。此外,二元结果可以是“购买跑步机”与“不购买跑步机”。
检查多重共线性:使用相关矩阵或方差膨胀因子(VIF)来检查多重共线性。如果有多重共线性,可以移除或合并相关的变量。
特征缩放:虽然对于逻辑回归模型拟合来说,特征缩放不是必需的,但它对收敛有益。特别是对于规模显著不同的特征尤其如此。
处理非线性:对于不满足线性假设的变量,可以使用诸如对数或平方根之类的转换。
样本大小:数据集必须足够大,以适应预测变量的数量。
数据预处理:建议处理离群值和分类变量(通过独热编码或标签编码)。另外,它还建议处理缺失值,但这对我的数据不适用,因为没有缺失值。
ChatGPT实际上在数据科学项目的每个阶段都很有帮助。你可以提示它编写一个网络爬虫代码。你可以指导它探索和准备你的数据,以适用于机器学习算法。它还可以为你提供选择正确算法、数据集分割、A/B测试和性能提升算法的代码。最后,你还可以要求ChatGPT编写模型部署的代码。
尽管ChatGPT能做所有这些,但很可能你不会立即得到一个完全符合你需求的代码。因此,你必须理解你想要实现的目标并检查代码。你可能不得不提示ChatGPT进行代码修正,并提供更多关于要更改什么的指令。
ChatGPT可以帮助那些仍在学习新编程语言的用户。想象一下,你是一个SQL大师,解决这个面试问题上没有问题。然而,你想将Python添加到你的技能中。ChatGPT可以在这方面帮助你。你可以复制SQL代码并要求ChatGPT将其转换为Python。
所以,SQL代码是这样的。
SELECT
company,
profit
FROM
(
SELECT
*,
rank() OVER (
ORDER BY
profit DESC
) as rank
FROM
(
SELECT
company,
sum(profits) AS profit
FROM
forbes_global_2010_2014
GROUP BY
company
) sq
) sq2
WHERE
rank <= 3;
ChatGPT根据上面的SQL代码编写了Python代码,但它运行不正确。所以我批评ChatGPT没有写出正确的代码。我要求它再试一次,因为输出与SQL代码的结果不同。它再次尝试并返回了正确的结果。
import pandas as pd
# Assuming 'forbes_global_2010_2014' is a pandas DataFrame with columns 'company' and 'profits'
# Since we don't have the actual data, this code assumes that the DataFrame is already loaded
# Step 1: Group by company and sum the profits
company_profits_sum = forbes_global_2010_2014.groupby('company')['profits'].sum().reset_index()
# Step 2: Rank the companies by profit in descending order
company_profits_sum['rank'] = company_profits_sum['profits'].rank(ascending=False, method='max')
# Step 3: Filter the top 3 companies
top_companies = company_profits_sum[company_profits_sum['rank'] <= 3]
# Final selection of columns
result = top_companies[['company', 'profits']].sort_values('profits', ascending=False)
result # This will display the top 3 companies by profit
正如你所见,你得到了一个带有注释的好代码,每个代码块之前都有注释。为了提高你的学习效果,你可以要求它解释这段代码。这样,你将更深入地了解每一行代码的作用及其运作方式。
当我说差劲时,我指的是非常差劲!它甚至使用正确的公式和插入正确的值,但不知怎地,即使是很简单的计算也搞得一团糟。
看看这个。我要求它解决这个问题:“假设你公平地掷一个六面骰子10次。掷出两个1、三个2、一个3、零个4、三个5和一个6的概率是多少?”
它以这种方式计算概率。
当计算阶乘时,它就会出错。
当我要求它无需进一步解释就纠正计算时,它再次计算并得出了概率为0.0001389。我简直不敢相信自己的眼睛!它可以使用完全相同的公式和值,但得出了仍然错误的不同的结果!
我又让它纠正计算,它终于给出了正确的结果:0.0008336。
必须承认的是,这些错误是由ChatGPT 3.5犯下的。我问ChatGPT 4同样的问题,它第一次就给出了正确的计算结果。你也可以使用一些数学插件来确保安全。
从以上这些中得出的主要教训是,ChatGPT可以是一位非常好的仆人。它可以在编写代码、调试、分析和可视化数据方面提供帮助。然而,永远不要完全信任它,也不要未经仔细审查就接受它所写的东西。
检查它编写的代码和计算。毕竟,你是一名数据科学家,而ChatGPT不是!你可能无法在第一次尝试时从ChatGPT那里获得所需的结果。但是,给它更精确的指示并尝试多次可能会得到所需的结果。