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

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


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

我每天作为数据科学家用它做很多事情。它确实在某些方面提高了我的生产力 2 倍。

在这篇文章中,我想解释我是如何使用 ChatGPT 的,并希望它能给你一些新的想法,无论你是否是数据科学家,都能更经常地使用它来提高你的输出。

YouTube 视频链接

学习与学习

我最喜欢的一个提示是“像对我 5 岁孩子解释”(ELI5)。它基本上让 ChatGPT 用一种非常简单的方式向我解释一个主题,通常比许多在线资源都要好。

例如,如果我们运行“像对我 5 岁孩子解释循环神经网络”。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/a87d04ddcbe7586744c5991283bfed20.png

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 中,要求它为我们函数编写单元测试:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e290ab46f9406a18c478c71f24f1cc35.png

请 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 中运行后确认这可行。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c171dcac69c4378fd6ae543d2889b8ce.png

PyCharm 终端输出。

我无法告诉你这为我节省了多少时间。仅设置测试本身就需要相当一部分时间。这种方法让我可以专注于关键部分:找到可能破坏我函数的边缘情况。

如果你想了解更多关于单元测试的信息,请查看我之前的帖子。

Pytest 教程:单元测试简介

创建可视化

创建图表通常相当耗时,尤其是如果你正在添加多行和标签,并试图使图表看起来整体上更美观。我曾经花费数小时猛敲键盘,试图让 Matplotlib 给我想要的结果。这并不有趣,我不推荐这样做。

在 GPT-4 和 GPT-4o 之前,我会使用 ChatGPT-3.5 在 IDE 中运行来生成 Python 代码,以绘制我的图表。然而,现在这更加简单,因为它们有一种叫做高级分析的东西。你只需将数据交给它,它就会为你创建图表,并将相关的代码输出到屏幕上。

例如,让我们使用我从 Kaggle 获得的数据,其中包含Netflix 电影和电视节目(CC0 许可)。我所做的就是将其拖入 ChatGPT,并要求它为我解释数据:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/80d9ee7045a6e6aba33f018afedfc1bb.png

输入数据

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4c23ab286516d44ec70141e237a860e3.png

ChatGPT 的输出。

它还提供了它用来加载数据的 Python 代码,这样我可以确认它在幕后做了什么。然而,在这种情况下,它已经很好地识别了数据,所以我不需要进一步挖掘。

我现在可以要求它使用这些数据绘制一些东西。比如说,我们想要一个按拍摄国家划分的show_id条形图。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9e7669e684681b3745b8974bd48dff19.png

创建图表的输入。

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

注意,窗口中的图表将不同于代码在 matplotlib 中生成的图表。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/cc3f1f50baef0758dfb25cd26c7ad13f.png

ChatGPT 按国家显示的条形图。

如我们所见,它相当混乱,因为它绘制了每个国家。让我们假设我们只想看前 10 个,其余的放在某个“其他”类别中。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/886189786795d1d41ffcb97daa45a7d0.png

ChatGPT 更新的提示和代码输出。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/36c62149ec93c74edb3d3abb40515503.png

按国家显示 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 确实有一些合适的格式化工具,如isortblack,但我发现 GPT 通常能更快、更好地完成任务。

如果你想了解更多关于代码质量的信息,请查看我之前的帖子。

数据科学家提高 Python 代码质量的指南

摘要及进一步思考

使用 ChatGPT 提高了我在许多方面的生产力,例如学习新事物、编写单元测试、进行分析和重构代码。我希望这篇文章能给你一些在你自己的工作领域尝试的想法。虽然我认为它不会取代我们,但它是一个强大的工具,你应该尽可能将其集成到你的工作流程中。

另一件事!

我提供一对一的辅导通话,我们可以讨论你需要的一切——无论是项目、职业建议,还是只是确定你的下一步。我在这里帮助你前进!

[与 Egor Howell 的一对一辅导通话]

职业指导、工作建议、项目帮助、简历审查topmate.io](https://topmate.io/egorhowell/1203300)

与我联系

内容概要:本文是一份针对2025年中国企业品牌传播环境撰写的《全网媒体发稿白皮书》,聚焦企业媒体发稿的策略制定、渠道选择与效果评估难题。通过分析当前企业面临的资源分散、内容同质、效果难量化等核心痛点,系统性地介绍了新闻媒体、央媒、地方官媒和自媒体四大渠道的特点与适用场景,并深度融合“传声港”AI驱动的新媒体平台能力,提出“策略+工具+落地”的一体化解决方案。白皮书详细阐述了传声港在资源整合、AI智能匹配、舆情监测、合规审核及全链路效果追踪方面的技术优势,构建了涵盖曝光、互动、转化与品牌影响力的多维评估体系,并通过快消、科技、零售等行业的实战案例验证其有效性。最后,提出了按企业发展阶段和营销节点定制的媒体组合策略,强调本土化传播与政府关系协同的重要性,助力企业实现品牌声量与实际转化的双重增长。; 适合人群:企业市场部负责人、品牌方管理者、公关传播从业者及从事数字营销的相关人员,尤其适用于初创期至成熟期不同发展阶段的企业决策者。; 使用场景及目标:①帮助企业科学制定媒体发稿策略,优化预算分配;②解决渠道对接繁琐、投放不精准、效果不可衡量等问题;③指导企业在重大营销节点(如春节、双11)开展高效传播;④提升品牌权威性、区域渗透力与危机应对能力; 阅读建议:建议结合自身企业所处阶段和发展目标,参考文中提供的“传声港服务组合”与“预算分配建议”进行策略匹配,同时重视AI工具在投放、监测与优化中的实际应用,定期复盘数据以实现持续迭代。
先展示下效果 https://pan.quark.cn/s/987bb7a43dd9 VeighNa - By Traders, For Traders, AI-Powered. Want to read this in english ? Go here VeighNa是一套基于Python的开源量化交易系统开发框架,在开源社区持续不断的贡献下一步步成长为多功能量化交易平台,自发布以来已经积累了众多来自金融机构或相关领域的用户,包括私募基金、证券公司、期货公司等。 在使用VeighNa进行二次开发(策略、模块等)的过程中有任何疑问,请查看VeighNa项目文档,如果无法解决请前往官方社区论坛的【提问求助】板块寻求帮助,也欢迎在【经验分享】板块分享你的使用心得! 想要获取更多关于VeighNa的资讯信息? 请扫描下方二维码添加小助手加入【VeighNa社区交流微信群】: AI-Powered VeighNa发布十周年之际正式推出4.0版本,重磅新增面向AI量化策略的vnpy.alpha模块,为专业量化交易员提供一站式多因子机器学习(ML)策略开发、投研和实盘交易解决方案: :bar_chart: dataset:因子特征工程 * 专为ML算法训练优化设计,支持高效批量特征计算与处理 * 内置丰富的因子特征表达式计算引擎,实现快速一键生成训练数据 * Alpha 158:源于微软Qlib项目的股票市场特征集合,涵盖K线形态、价格趋势、时序波动等多维度量化因子 :bulb: model:预测模型训练 * 提供标准化的ML模型开发模板,大幅简化模型构建与训练流程 * 统一API接口设计,支持无缝切换不同算法进行性能对比测试 * 集成多种主流机器学习算法: * Lass...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值