整个世界都听说过 ChatGPT,但根据最近的一条新闻 研究,只有 2%的人每天使用它。
我每天作为数据科学家用它做很多事情。它确实在某些方面提高了我的生产力 2 倍。
在这篇文章中,我想解释我是如何使用 ChatGPT 的,并希望它能给你一些新的想法,无论你是否是数据科学家,都能更经常地使用它来提高你的输出。
学习与学习
我最喜欢的一个提示是“像对我 5 岁孩子解释”(ELI5)。它基本上让 ChatGPT 用一种非常简单的方式向我解释一个主题,通常比许多在线资源都要好。
例如,如果我们运行“像对我 5 岁孩子解释循环神经网络”。
ChatGPT 的示例输出。
这个类比非常出色,并且真正地构建了循环神经网络背后的直觉。
然后,我们可以开始深入挖掘,并更具体地询问关于数学、工作示例等,因为我需要更实际和深入地了解作为数据科学家实现循环神经网络。
这里的主要价值在于,我像使用一个可以以多种不同方式向我解释事物的私人导师一样使用 ChatGPT。这真的非常强大,可能会节省你大量时间在网上寻找那个对你有启发的解释。试试看,并告诉我你的进展如何!
单元测试
没有人不知道大多数技术专业人士不喜欢编写单元测试。虽然它们非常繁琐,但它们是必须完成的,因为它们确保你的代码是健壮的,并在部署到生产环境中时建立信心。
ChatGPT 可以通过提供你可以调整以测试代码边缘情况的测试模板来极大地加快这个过程。
让我们考虑一个计算斐波那契数列的函数:
def fibonacci_sequence(n):
if n <= 0:
return []
elif n == 1:
return [0]
elif n == 2:
return [0, 1]
sequence = [0, 1]
for i in range(2, n):
next_fibonacci_number = sequence[-1] + sequence[-2]
sequence.append(next_fibonacci_number)
return sequence
让我们将这个输入到 ChatGPT 中,要求它为我们函数编写单元测试:
请 ChatGPT 为我们编写单元测试。
这是 ChatGPT 生成的测试的完整输出:
import unittest
def fibonacci_sequence(n):
if n <= 0:
return []
elif n == 1:
return [0]
elif n == 2:
return [0, 1]
sequence = [0, 1]
for i in range(2, n):
next_fibonacci_number = sequence[-1] + sequence[-2]
sequence.append(next_fibonacci_number)
return sequence
class TestFibonacciSequence(unittest.TestCase):
def test_negative_input(self):
self.assertEqual(fibonacci_sequence(-1), [])
def test_zero_input(self):
self.assertEqual(fibonacci_sequence(0), [])
def test_one_input(self):
self.assertEqual(fibonacci_sequence(1), [0])
def test_two_input(self):
self.assertEqual(fibonacci_sequence(2), [0, 1])
def test_five_input(self):
self.assertEqual(fibonacci_sequence(5), [0, 1, 1, 2, 3])
def test_ten_input(self):
self.assertEqual(fibonacci_sequence(10), [0, 1, 1, 2, 3, 5, 8, 13, 21, 34])
if __name__ == '__main__':
unittest.main()
我在我的 PyCharm IDE 中运行后确认这可行。
PyCharm 终端输出。
我无法告诉你这为我节省了多少时间。仅设置测试本身就需要相当一部分时间。这种方法让我可以专注于关键部分:找到可能破坏我函数的边缘情况。
如果你想了解更多关于单元测试的信息,请查看我之前的帖子。
创建可视化
创建图表通常相当耗时,尤其是如果你正在添加多行和标签,并试图使图表看起来整体上更美观。我曾经花费数小时猛敲键盘,试图让 Matplotlib 给我想要的结果。这并不有趣,我不推荐这样做。
在 GPT-4 和 GPT-4o 之前,我会使用 ChatGPT-3.5 在 IDE 中运行来生成 Python 代码,以绘制我的图表。然而,现在这更加简单,因为它们有一种叫做高级分析的东西。你只需将数据交给它,它就会为你创建图表,并将相关的代码输出到屏幕上。
例如,让我们使用我从 Kaggle 获得的数据,其中包含Netflix 电影和电视节目(CC0 许可)。我所做的就是将其拖入 ChatGPT,并要求它为我解释数据:
输入数据
ChatGPT 的输出。
它还提供了它用来加载数据的 Python 代码,这样我可以确认它在幕后做了什么。然而,在这种情况下,它已经很好地识别了数据,所以我不需要进一步挖掘。
我现在可以要求它使用这些数据绘制一些东西。比如说,我们想要一个按拍摄国家划分的show_id条形图。
创建图表的输入。
它为我们编写了代码,然后在聊天窗口中生成图表!
注意,窗口中的图表将不同于代码在 matplotlib 中生成的图表。
ChatGPT 按国家显示的条形图。
如我们所见,它相当混乱,因为它绘制了每个国家。让我们假设我们只想看前 10 个,其余的放在某个“其他”类别中。
ChatGPT 更新的提示和代码输出。
按国家显示 Show_id 的条形图,显示前 10 名和其余部分在“其他”中。
这看起来好多了,而且图表质量也很高!
这是一个简单的例子,但它展示了 ChatGPT 在数据分析与可视化方面的强大功能。你甚至不需要会编码就能做到这一点;这当然有帮助,但并非必要条件,这使得它对广大受众来说非常易于接触。
重构代码
有时候,我在写代码时会偷懒,代码并不像它本可以那样优雅和简洁。这可能会导致错误,并使理解正在发生的事情变得困难(对大多数开发者来说是个噩梦)。
我通常会让 ChatGPT 将我的代码调整为“生产标准”,这是一个我发现能有效清理并使其看起来更专业、整体更美观的提示。
例如,考虑我在之前帖子中写的这段代码,它使一个时间序列平稳:
# Import packages
import plotly.express as px
import pandas as pd
import os
import numpy as np
# Read in the data
data = pd.read_csv('../../Software Engineering /make-example/AirPassengers.csv')
def plotting(title, data, x, y, save_file_path, x_label, y_label):
"""General function to plot the passenger data."""
fig = px.line(data, x=data[x], y=data[y], labels={x: x_label, y: y_label})
fig.update_layout(template="simple_white", font=dict(size=18),
title_text=title, width=650,
title_x=0.5, height=400)
if not os.path.exists("../images"):
os.mkdir("../images")
fig.write_image("../images/" + str(save_file_path))
fig.show()
# Plot the airline passenger data
plotting(title='Airline Passengers', data=data, save_file_path='passengers.png', x='Month',
y='#Passengers', x_label='Date', y_label='Passengers')
# Take the difference and plot it
data["Passenger_Diff"] = data["#Passengers"].diff()
plotting(title='Airline Passengers', data=data,
save_file_path='passengers_one_difference.png', x='Month', y='Passenger_Diff',
x_label='Date', y_label='Passengers<br>Difference Transform')
# Take the log and plot it
data["Passenger_Log"] = np.log(data["#Passengers"])
plotting(title='Airline Passengers', data=data,
save_file_path='passenger_log.png', x='Month',
y='Passenger_Log', x_label='Date', y_label='Passenger<br>Log Transform')
# Take the difference and log and plot it
data["Passenger_Diff_Log"] = data["Passenger_Log"].diff()
plotting(title='Airline Passengers', data=data,
save_file_path='passenger_difference_and_log.png', x='Month',
y='Passenger_Diff_Log', x_label='Date', y_label='Passenger<br>Log and Difference')
让我们将其输入 ChatGPT,并要求它将其调整为“生产标准”和“更整洁”。
它生成的代码看起来像这样:
# Import packages
import plotly.express as px
import pandas as pd
import os
import numpy as np
# Read in the data
data = pd.read_csv('../../Software Engineering /make-example/AirPassengers.csv')
def plot_data(title, data, x, y, save_file_path, x_label, y_label):
"""
General function to plot the passenger data.
Parameters:
- title: Title of the plot
- data: DataFrame containing the data
- x: Column name for the x-axis
- y: Column name for the y-axis
- save_file_path: File path to save the image
- x_label: Label for the x-axis
- y_label: Label for the y-axis
"""
fig = px.line(data, x=x, y=y, labels={x: x_label, y: y_label})
fig.update_layout(
template="simple_white",
font=dict(size=18),
title_text=title,
width=650,
title_x=0.5,
height=400
)
output_dir = "../images"
os.makedirs(output_dir, exist_ok=True)
fig.write_image(os.path.join(output_dir, save_file_path))
fig.show()
# Plot the airline passenger data
plot_data(
title='Airline Passengers',
data=data,
x='Month',
y='#Passengers',
save_file_path='passengers.png',
x_label='Date',
y_label='Passengers'
)
# Create transformed columns and plot
transforms = [
("Passenger_Diff", data["#Passengers"].diff(), 'passengers_one_difference.png', 'Passengers<br>Difference Transform'),
("Passenger_Log", np.log(data["#Passengers"]), 'passenger_log.png', 'Passenger<br>Log Transform'),
("Passenger_Diff_Log", np.log(data["#Passengers"]).diff(), 'passenger_difference_and_log.png', 'Passenger<br>Log and Difference')
]
for col_name, transform, file_name, y_label in transforms:
data[col_name] = transform
plot_data(
title='Airline Passengers',
data=data,
x='Month',
y=col_name,
save_file_path=file_name,
x_label='Date',
y_label=y_label
)
如你所见,格式与 Pep8 指南一致,我们有文档字符串,并且它创建了一个遵循DRY原则的重复代码块的功能。总体来说,做得不错!
Python 确实有一些合适的格式化工具,如isort和black,但我发现 GPT 通常能更快、更好地完成任务。
如果你想了解更多关于代码质量的信息,请查看我之前的帖子。
摘要及进一步思考
使用 ChatGPT 提高了我在许多方面的生产力,例如学习新事物、编写单元测试、进行分析和重构代码。我希望这篇文章能给你一些在你自己的工作领域尝试的想法。虽然我认为它不会取代我们,但它是一个强大的工具,你应该尽可能将其集成到你的工作流程中。
另一件事!
我提供一对一的辅导通话,我们可以讨论你需要的一切——无论是项目、职业建议,还是只是确定你的下一步。我在这里帮助你前进!
[与 Egor Howell 的一对一辅导通话]
职业指导、工作建议、项目帮助、简历审查topmate.io](https://topmate.io/egorhowell/1203300)
1323

被折叠的 条评论
为什么被折叠?



