作为数据科学家如何使用ChatGPT

作为数据科学家如何使用ChatGPT

全世界都听说过ChatGPT,但根据最近的一项新闻研究,只有2%的人会每天使用它。

作为数据科学家,我每天都会用它来处理很多事情。老实说,它将我的生产力提高了一倍。

在这篇文章中,我想解释一下我是如何使用ChatGPT的,不管你是不是数据科学家都希望能提供给你一些新的思路,让你更频繁地用它来提高你的工作效率。如果你想了解更多关于ChatGPT的相关内容,可以阅读以下这些文章:
人工智能裁员已经开始:Duolingo在使用ChatGPT-4后裁员数千人
在新研究的支持下,从ChatGPT获得深入响应的9种技巧
ChatGPT又蠢又没用?请提出正确的问题!
ChatGPT很累,可能正在计划度假(不是开玩笑)

我最喜欢的提示之一是“假如我5岁解释给我听”(ELI5)。它基本上让ChatGPT以非常简单的方式向我解释一个主题,往往比许多在线资源更好。

例如,如果我们运行“解释一下递归神经网络假如我5岁的话。”

ChatGPT 的示例输出

这个类比非常好,真正构建了对递归神经网络的直观理解。

然后,我们可以开始深入挖掘,更具体地询问数学、工作示例等,因为作为一名数据科学家,我需要对实现 RNN 有更实际、更深入的理解。

这里的主要价值在于,我可以将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 生成的测试的完整输出:

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生成Python代码来绘制我的图表,然后在IDE中运行它。然而,现在更容易了,因为它们有一个叫做高级分析(Advanced Analytics)的功能。你只需将数据交给它,它就会为你创建图表并将相关代码输出到屏幕上。

例如,让我们使用我从Kaggle上获得的数据,这些数据包含Netflix的电影和电视节目(CC0许可)。我所做的只是将数据拖入ChatGPT,然后我可以请它为我解释这些数据:

输入数据
ChatGPT 的输出

它还提供了用于加载数据的Python代码,这样我就可以确认它在幕后是如何运作的。然而,在这种情况下,它已经相当好地识别了数据,所以我不需要进一步深入挖掘。

现在我可以要求它使用这些数据绘制一些图表。假设我们想要一个根据拍摄地国家的show_id的柱状图。

输入以创建图表

它会为我们编写代码,然后在聊天窗口生成图表!

请注意,窗口中的绘图看起来与代码在 matplotlib 中生成的绘图不同。

我们可以看到,它非常混乱,因为它绘制了每个国家/地区的图表。假设我们想要前 10 名,其余的则放在“其他”类别中。

更新了 ChatGPT 的提示和代码输出
按国家/地区显示 ID 条形图,显示前 10 名,其余为“其他”

这看起来好多了,而且图表质量也很高!

这只是一个简单的例子,但它展示了ChatGPT在数据分析和可视化方面有多强大。你甚至不需要具备编程能力来做到这一点;编程能力固然有帮助,这很有帮助,但绝对不是必需的,这使得它真正为广大受众所接受。

有时,我写代码时很懒,代码不够简洁。结果代码可能不够美观和简洁。这可能导致 bug,并且使得理解代码变得困难(对大多数开发者来说是一场噩梦)

通常我会要求 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 提高了我在许多领域的工作效率,例如学习新事物、编写单元测试、进行分析和重构代码。我希望本文能为你提供一些在自己的工作领域的新想法。虽然我认为它不会取代我们,但它确实是一个强大的工具,你应该尝试尽可能将其集成到你的工作流程中。

感谢阅读!你还可以订阅我们的YouTube频道,观看大量大数据行业相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/

原文作者:Egor Howell
翻译作者:诗彤
美工编辑:过儿
校对审稿:Jason
原文链接:https://towardsdatascience.com/how-i-use-chatgpt-as-a-data-scientist-0730fa1e21c2