在本教程中,您将学习如何使用 Python 和 OpenAI API 对数据执行数据挖掘和分析。
手动分析数据集以提取有用的数据,甚至使用简单的程序来执行相同的操作,通常会变得复杂且耗时。幸运的是,借助 OpenAI API 和 Python,可以系统地分析数据集以获取有趣的信息,而无需过度设计代码并浪费时间。这可以用作数据分析的通用解决方案,无需使用不同的方法、库和 API 来分析数据集中不同类型的数据和数据点。
让我们从如何设置开始,逐步了解使用 OpenAI API 和 Python 分析数据的步骤。
设置 {#setup}
要使用 OpenAI API 通过 Python 挖掘和分析数据,请安装openai
和pandas
库:
pip3 install openai pandas
完成后,创建一个新文件夹并在新文件夹中创建一个空的 Python 文件。
分析文本文件 {#analyzingtextfiles}
在本教程中,我认为让 Python 分析 Nvidia 最新的财报电话会议会很有趣。
下载我从The Motley Fool获得的最新 Nvidia 财报电话会议记录,并将其移至您的项目文件夹中。
然后打开空的 Python 文件并添加此代码。
该代码读取您下载的 Nvidia 收益记录并将其extract_info
作为transcript
变量传递给函数。
该extract_info
函数将提示和记录作为用户输入传递,以及temperature=0.3
和model="gpt-3.5-turbo-16k"
。它使用"gpt-3.5-turbo-16k"模型的原因是它可以处理大型文本,例如此文字记录。该代码使用端点获取响应openai.ChatCompletion.create
,并将提示和脚本变量作为用户输入传递:
completions = openai.ChatCompletion.create(
model="gpt-3.5-turbo-16k",
messages=[
{"role": "user", "content": prompt+"\n\n"+text}
],
temperature=0.3,
)
完整的输入将如下所示:
Extract the following information from the text:
Nvidia's revenue
What Nvidia did this quarter
Remarks about AI
Nvidia earnings transcript goes here
现在,如果我们将输入传递到端点openai.ChatCompletion.create
,完整的输出将如下所示:
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "Actual response",
"role": "assistant"
}
}
],
"created": 1693336390,
"id": "request-id",
"model": "gpt-3.5-turbo-16k-0613",
"object": "chat.completion",
"usage": {
"completion_tokens": 579,
"prompt_tokens": 3615,
"total_tokens": 4194
}
}
正如您所看到的,它返回文本响应以及请求的令牌使用情况,如果您正在跟踪费用并优化成本,这会很有用。但由于我们只对响应文本感兴趣,因此我们通过指定completions.choices[0].message.content
响应路径来获取它。
如果运行代码,您应该会得到与下面引用的类似的输出:
从文本中,我们可以提取出以下信息:
英伟达营收:2024财年第二季度,英伟达公布第二季度营收创历史新高,达到135.1亿美元,环比增长88%,同比增长101%。
英伟达本季度的表现:英伟达在各个领域都经历了非凡的增长。他们的数据中心业务收入创历史新高,环比增长 141%,同比增长 171%。他们的游戏业务也实现了增长,收入环比增长 11%,同比增长 22%。此外,他们的专业可视化部门的收入环比增长了 28%。他们还宣布与 Snowflake、ServiceNow、埃森哲、Hugging Face、VMware 和 SoftBank 等公司建立合作伙伴关系。
关于人工智能的评论:英伟达强调了对其人工智能平台和加速计算解决方案的强劲需求。他们提到了主要云服务提供商和消费互联网公司部署他们的 HGX 系统。他们还讨论了生成式人工智能在营销、媒体和娱乐等各个行业的应用。英伟达强调了生成式人工智能在创造新市场机会和提高不同领域生产力方面的潜力。
正如您所看到的,代码提取了提示中指定的信息(Nvidia 的收入、Nvidia 本季度的业绩以及有关 AI 的评论)并将其打印出来。
分析 CSV 文件 {#analyzingcsvfiles}
分析财报电话会议记录和文本文件很酷,但要系统地分析大量数据,您需要使用 CSV 文件。
作为一个工作示例,下载此 Medium 文章 CSV 数据集并将其粘贴到您的项目文件中。
如果您查看 CSV 文件,您会发现它具有"作者"、"拍手"、"阅读时间"、"链接"、"标题"和"文本"列。要使用 OpenAI 分析媒体文章,您只需要"标题"和"文本"列。
在项目文件夹中创建一个新的 Python 文件并粘贴此代码。
这段代码与我们用来分析文本文件的代码有点不同。它逐一读取 CSV 行,提取指定的信息,并将它们添加到新列中。
在本教程中,我选择了 Medium 文章的 CSV 数据集,该数据集是从Kaggle 上的HSANKESARA获得的。此 CSV 分析代码将使用 CSV 文件的"标题"和"文章"列找到每篇文章的整体基调和主要内容/要点。由于我总是在 Medium 上遇到点击诱饵文章,我还认为告诉它通过给每一篇文章一个从 0 到 3 的"点击诱饵分数"来找出每篇文章的"点击诱饵分数"会很有趣,其中 0 表示没有点击诱饵,3 表示没有点击诱饵是极端的点击诱饵。
在解释代码之前,分析整个 CSV 文件会花费太长时间并且花费太多 API 积分,因此在本教程中,我使用df = df[:5]
.
您可能对以下部分代码感到困惑,所以让我解释一下:
for di in range(len(df)):
title = titles[di]
abstract = articles[di]
additional_params = extract_info('Title: '+str(title) + '\n\n' + 'Text: ' + str(abstract))
try:
result = additional_params.split("\n\n")
except:
result = {}
此代码迭代 CSV 文件中的所有文章(行),并且每次迭代都会获取每篇文章的标题和正文,并将其传递给extract_info
我们之前看到的函数。然后,它将函数的响应转换extract_info
为列表,以使用以下代码分隔不同的信息:
try:
result = additional_params.split("\n\n")
except:
result = {}
接下来,它将每条信息添加到列表中,如果出现错误(如果没有值),则会将"无结果"添加到列表中:
try:
apa1.append(result[0])except Exception as e:
apa1.append('No result')try:
apa2.append(result[1])except Exception as e:
apa2.append('No result')try:
apa3.append(result[2])except Exception as e:
apa3.append('No result')
最后,for
循环完成后,包含提取信息的列表将插入到 CSV 文件中的新列中:
df = df.assign(Tone=apa1)
df = df.assign(Main_lesson_or_point=apa2)
df = df.assign(Clickbait_score=apa3)
如您所见,它将列表添加到名为"Tone"、"Main_lesson_or_point"和"Clickbait_score"的新 CSV 列中。
然后将它们附加到 CSV 文件中index=False
:
df.to_csv("data.csv", index=False)
必须指定的原因index=False
是为了避免每次将新列附加到 CSV 文件时都创建新的索引列。
现在,如果您运行 Python 文件,等待它完成并在 CSV 文件查看器中检查我们的 CSV 文件,您将看到新列,如下图所示。
如果多次运行代码,您会注意到生成的答案略有不同。这是因为代码temperature=0.3
在其答案中添加了一些创造力,这对于标题诱饵等主观主题很有用。
处理多个文件 {#workingwithmultiplefiles}
如果你想自动分析多个文件,你需要先将它们放在一个文件夹中,并确保该文件夹只包含你感兴趣的文件,以防止你的Python代码读取不相关的文件。然后,glob
使用安装该库pip3 install glob
并将其导入到您的 Python 文件中import glob
。
在您的 Python 文件中,使用以下代码获取数据文件夹中所有文件的列表:
data_files = glob.glob("data_folder/*")
然后将进行分析的代码放入循环中for
:
for i in range(len(data_files)):
在for
循环内,读取每个文件的内容,对于文本文件如下所示:
f = open(f"data_folder/{data_files[i]}", "r")
txt_data = f.read()
对于 CSV 文件也如此:
df = pd.read_csv(f"data_folder/{data_files[i]}")
此外,请确保使用如下所示将每个文件分析的输出保存到单独的文件中:
df.to_csv(f"output_folder/data{i}.csv", index=False)
结论 {#conclusion}
请记住尝试您的温度参数并根据您的使用情况进行调整。如果你想让人工智能做出更有创意的答案,那就提高你的温度,如果你想让人工智能做出更事实的答案,一定要降低温度。
除了文章和财报电话会议记录分析之外,OpenAI 和 Python 数据分析的结合还有许多应用。示例包括新闻分析、书籍分析、客户评论分析等等!也就是说,在大型数据集上测试 Python 代码时,请确保仅在完整数据集的一小部分上进行测试,以节省 API 积分和时间。