让AI给你写代码(七)- 结合语意匹配,引导AI小助手逐步完善代码,新增功能(下)案例说明

结合上一篇 让AI给你写代码(六)- 结合语意匹配,引导AI小助手逐步完善代码,新增功能(上)
我们看一个实际的通过提示引导小助手逐步集成构建代码的实例
例子很简单: 获得指定股票最近一定时间的(最)高|开(盘)|(最)低|收(盘)价格,然后画一个K线图
图例说明:
黑体是对话主体,分为
master:主人提示输入
小助手: AI小助手回复
from AI : 千问大模型给出的信息
斜体: 是执行匹配过程,可以验证语意匹配结果
【说明】: 我加的说明,不是程序显示

第一轮,给出初始需求, 获得指定股票最近一定时间的高开低收价格

master:请使用python给出例子,通过akshare接口获取指定股票最近5天的行情,如果股票代码包含“300”,请增加前缀“sz“,例如”300001”转换成“sz300001”,如果股票包含“600”,请增加前缀“sh“,例如"600029"转换成“sh600029”,请先用最新历史行情接口,按个股获取最近5天的开盘价、收盘价,最高价,最低价,返回列表,并用print方法打印数据
tensor([[0.0921, 0.0712, 0.2320, 0.2590, 0.0598]])
torch.return_types.max(
values=tensor([0.2590]),
indices=tensor([3]))

【说明:语意匹配,没有一个高于0.7,因此小助手会提交AI】

from AI:首先,你需要安装akshare库,可以通过pip进行安装:

pip install akshare

然后,你可以使用以下Python代码来实现你的需求:

import akshare as akdef transform_stock_code(stock_code):if stock_code.startswith("300"):return "sz" + stock_codeelif stock_code.startswith("600"):return "sh" + stock_codeelse:return stock_code  # 对于非300和600开头的股票代码,这里假设它们已经是正确格式def get_recent_5_days_quotes(stock_code):adjusted_stock_code = transform_stock_code(stock_code)stock_daily_df = ak.stock_zh_a_spot(symbol=adjusted_stock_code, period="5d")# 提取开盘价、收盘价、最高价、最低价quotes_data = [{"open": float(row["open"]),"close": float(row["close"]),"high": float(row["high"]),"low": float(row["low"])} for index, row in stock_daily_df.iterrows()]return quotes_data# 测试
stock_code = "300001"
quotes = get_recent_5_days_quotes(stock_code)
for quote in quotes:print(quote)stock_code = "600029"
quotes = get_recent_5_days_quotes(stock_code)
for quote in quotes:print(quote)

注意:akshare的stock_zh_a_spot接口可能无法直接获取最近5天的数据,它通常返回的是最新的交易日数据。如果你需要获取最近5个交易日的历史数据,你可能需要调用stock_zh_a_daily接口并自行处理日期范围。以上代码仅作为逻辑参考,实际获取特定日期范围内的历史行情,请查阅akshare相关文档以获得准确的接口调用方式。

【说明:请注意生成的代码,ak.stock_zh_a_spot这个接口是错的】

第二轮: 试图直接修正 ak.stock_zh_a_spot接口

master:ak.stock_zh_a_spot接口错误,请修正为akshare库获取历史行情接口,并给出代码
tensor([[0.1464, 0.0556, 0.2491, 0.2474, 0.0199]])
torch.return_types.max(
values=tensor([0.2491]),
indices=tensor([2]))

**from AI:**在 akshare 库中,获取沪深A股历史行情数据的正确接口是 stock_zh_a_daily,以下是示例代码:

import akshare as ak# 获取沪深A股历史日线行情数据
df_stock = ak.stock_zh_a_daily(symbol="600848", start_date="20200101", end_date="20201231")# 输出数据
print(df_stock)

上述代码将获取股票代码为 “600848” 的从 2020 年 1 月 1 日到 2020 年 12 月 31 日的历史日线行情数据。

请注意,你需要先通过 pip install akshare 安装 akshare 库。同时,日期格式为 “YYYYMMDD”,并且需要确保输入的日期区间在 akshare 支持的数据范围内。

【说明:大失所望,AI虽然修正了接口,但前面的内容却遗忘了,只好另起炉灶】

第三轮: 重新提出要求

master:请使用python给出例子,通过akshare接口获取指定股票最近5天的行情,如果股票代码包含“300”,请增加前缀“sz“,例如”300001”转换成“sz300001”,如果股票包含“600”,请增加前缀“sh“,例如"600029"转换成“sh600029”,请先用最新历史行情接口,按个股获取最近5天的开盘价、收盘价,最高价,最低价,返回列表,并用print方法打印数据
【说明: copy+paste 第一轮…】
tensor([[0.0921, 0.0712, 0.2320, 0.2590, 0.0598]])
torch.return_types.max(
values=tensor([0.2590]),
indices=tensor([3]))
from AI:首先,确保你已经安装了akshare库。如果没有,可以通过pip进行安装:

pip install akshare

以下是一个示例代码片段,它将获取指定股票最近5天的行情数据并按照要求添加股票代码前缀:

import akshare as ak# 输入股票代码
stock_code = "300001"  # 或 "600029"# 根据股票代码添加前缀
if "300" in stock_code:stock_code = "sz" + stock_code
elif "600" in stock_code:stock_code = "sh" + stock_code# 获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust="qfq", start_date=(ak.get_today_date() - "5d"))# 提取开盘价、收盘价,最高价,最低价
data_list = stock_df[["open", "close", "high", "low"]].values.tolist()# 打印数据
for day_data in data_list:print(day_data)

注意:akshare的stock_zh_a_daily接口默认获取的是最近一个交易日的数据,但是目前不支持直接获取最近N天的数据,你需要自己处理日期范围。上述代码中 (ak.get_today_date() - "5d") 是尝试获取五天前的日期,但实际使用时可能需要根据akshare接口的实际情况调整日期获取方式。

另外,akshare库在获取历史数据时,通常是从其数据库中获取,可能无法获取到实时的最近5个交易日数据。如果你需要实时获取最近5个交易日的数据,可能需要寻找其他API或服务。

【说明:这次主要接口终于正确,像那么回事了,但很显然start_date=(ak.get_today_date() - “5d”) 这是胡说八道,但是如果要AI修改,怎么避免重蹈覆辙呢? 】

第四轮: 先保存代码,再打开代码,然后再和修改的需求一起提交

master:请保存代码
tensor([[0.3954, 0.5478, 0.8770, 0.7324, 0.3002]])
torch.return_types.max(
values=tensor([0.8770]),
indices=tensor([2]))
【说明,匹配“保存代码“”成功】
小助手:保存成功

master:麻烦打开文件 pyTest_2024-03-27_10:53:33_57.py
tensor([[0.9382, 0.5697, 0.3258, 0.3463, 0.3775]])
torch.return_types.max(
values=tensor([0.9382]),
indices=tensor([0]))
Error: [Errno 2] No such file or directory: ‘/home/cfets/gitea/pyWebTest1/example/server/麻烦打开文件 pyTest_2024-03-27_10:53:33_57.py’
小助手:打开文件失败: [Errno 2] No such file or directory: ‘/home/cfets/gitea/pyWebTest1/example/server/麻烦打开文件 pyTest_2024-03-27_10:53:33_57.py’ ,请重新输入
【说明,匹配“打开文件“”成功,但文件名忘记加/】

master:麻烦打开文件 /pyTest_2024-03-27_10:53:33_57.py
tensor([[0.9382, 0.5697, 0.3258, 0.3463, 0.3775]])
torch.return_types.max(
values=tensor([0.9382]),
indices=tensor([0]))
小助手: 【说明:反显打开的文件】
import akshare as ak

#输入股票代码
stock_code = “300001” # 或 “600029”

#根据股票代码添加前缀
if “300” in stock_code:
stock_code = “sz” + stock_code
elif “600” in stock_code:
stock_code = “sh” + stock_code

#获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust=“qfq”, start_date=(ak.get_today_date() - “5d”))

#提取开盘价、收盘价,最高价,最低价
data_list = stock_df[[“open”, “close”, “high”, “low”]].values.tolist()

#打印数据
for day_data in data_list:
print(day_data)

master:请修改 ak.get_today_date()接口不存在,请替换成正确的接口,并给出代码
【说明: 要求AI替换接口】
tensor([[0.1946, 0.0094, 0.3125, 0.3662, 0.1470]])
torch.return_types.max(
values=tensor([0.3662]),
indices=tensor([3]))
from AI:首先,ak.get_today_date() 并不是 akshare 库中的一个有效接口。我们可以使用 Python 自带的 datetime 模块来获取今天的日期。然后,根据 akshare 库文档,我们需要在调用 stock_zh_a_daily 接口时传入具体的日期格式而非字符串计算。以下是修改后的代码:

import akshare as ak
from datetime import datetime, timedelta# 输入股票代码
stock_code = "300001"  # 或 "600029"# 根据股票代码添加前缀
if "300" in stock_code:stock_code = "sz" + stock_code
elif "600" in stock_code:stock_code = "sh" + stock_code# 获取当前日期并推算最近5天的日期
today = datetime.today()
start_date = (today - timedelta(days=5)).strftime("%Y%m%d")# 获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust="qfq", start_date=start_date)# 提取开盘价、收盘价,最高价,最低价
data_list = stock_df[["open", "close", "high", "low"]].values.tolist()# 打印数据
for day_data in data_list:print(day_data)

这样就可以正确获取并使用最近5天的日期来获取历史行情数据了。
【说明: 这会至少看上去对了,试验一下】

第五轮: 试验一下
master:请执行代码
tensor([[0.4540, 0.2975, 0.6759, 0.9279, 0.3049]])
torch.return_types.max(
values=tensor([0.9279]),
indices=tensor([3]))
[19.97, 19.85, 20.14, 19.7]
[19.79, 19.52, 19.97, 19.49]
[19.51, 19.65, 20.0, 19.44]
【说明: 执行结果】

小助手:执行成功

master:请保存代码
tensor([[0.3954, 0.5478, 0.8770, 0.7324, 0.3002]])
torch.return_types.max(
values=tensor([0.8770]),
indices=tensor([2]))
小助手:保存成功
【说明: 还记得初始需求么? 获得指定股票最近一定时间的高开低收价格—— 现在他做完了,看看保存的文件,并执行一下】
在这里插入图片描述

第六轮: 增加一个功能,画K线图,老办法,先打开文件,再新增提示一起喂给AI

master:请打开 /pyTest_2024-03-27_10:56:40_62.py
tensor([[0.7642, 0.3032, 0.2531, 0.3085, 0.4983]])
torch.return_types.max(
values=tensor([0.7642]),
indices=tensor([0]))
小助手:

import akshare as ak
from datetime import datetime, timedelta

#输入股票代码
stock_code = “300001” # 或 “600029”

#根据股票代码添加前缀
if “300” in stock_code:
stock_code = “sz” + stock_code
elif “600” in stock_code:
stock_code = “sh” + stock_code

#获取当前日期并推算最近5天的日期
today = datetime.today()
start_date = (today - timedelta(days=5)).strftime(“%Y%m%d”)

#获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust=“qfq”, start_date=start_date)

#提取开盘价、收盘价,最高价,最低价
data_list = stock_df[[“open”, “close”, “high”, “low”]].values.tolist()

#打印数据
for day_data in data_list:
print(day_data)

master:请在上述程序中增加一个功能,根据data_list 绘制K线图,给出python
【说明: 给出画K线图的需求】
tensor([[0.2303, 0.1861, 0.3891, 0.4901, 0.0989]])
torch.return_types.max(
values=tensor([0.4901]),
indices=tensor([3]))
from AI:为了实现绘制K线图的功能,你需要使用matplotlib和pandas库。这里是一个示例,将上述代码修改并添加绘制K线图的部分:

import akshare as ak
import pandas as pd
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
import mplfinance as mpf# 输入股票代码
stock_code = "300001"  # 或 "600029"# 根据股票代码添加前缀
if "300" in stock_code:stock_code = "sz" + stock_code
elif "600" in stock_code:stock_code = "sh" + stock_code# 获取当前日期并推算最近5天的日期
today = datetime.today()
start_date = (today - timedelta(days=5)).strftime("%Y%m%d")# 获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust="qfq", start_date=start_date)# 提取开盘价、收盘价,最高价,最低价
data_list = stock_df[["date", "open", "close", "high", "low"]].values.tolist()# 将数据转换为DataFrame以供mplfinance使用
df = pd.DataFrame(data_list, columns=["date", "open", "close", "high", "low"])
df['date'] = pd.to_datetime(df['date'])# 绘制K线图
mpf.plot(df.set_index('date'), type='candle', volume=False, figsize=(10, 6))# 显示图形
plt.show()

这段代码首先导入了所需的库,并在获取数据后,将日期列与其他价格列一起处理以便于mplfinance库进行绘图。最后,我们使用mplfinance的plot函数绘制K线图并显示结果。

【说明: 一气呵成,果然不错,试一下…】

第七轮: 试一下
master:请保存文件
tensor([[0.5802, 0.8098, 0.5561, 0.2771, 0.3232]])
torch.return_types.max(
values=tensor([0.8098]),
indices=tensor([1]))
小助手:保存成功

master:请执行代码
tensor([[0.4540, 0.2975, 0.6759, 0.9279, 0.3049]])
torch.return_types.max(
values=tensor([0.9279]),
indices=tensor([3]))
小助手:执行失败: serWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown
plt.show(block=config[‘block’]).
UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown
plt.show(): .
【说明: 不给面子啊… 按保存的文件执行,也是这个错,查了一下,貌似和mpl的交互模式有关,但很遗憾没有解决… 只好另外想办法 】

第八轮: 改用Pecharts画K线,先打开,后修改,然后一起喂给AI

master:请打开/pyTest_2024-03-27_11:03:05_70.py
tensor([[0.7642, 0.3032, 0.2531, 0.3085, 0.4983]])
torch.return_types.max(
values=tensor([0.7642]),
indices=tensor([0]))
小助手:
import akshare as ak
import pandas as pd
from datetime import datetime, timedelta
import matplotlib.pyplot as plt
import mplfinance as mpf

#输入股票代码
stock_code = “300001” # 或 “600029”

#根据股票代码添加前缀
if “300” in stock_code:
stock_code = “sz” + stock_code
elif “600” in stock_code:
stock_code = “sh” + stock_code

#获取当前日期并推算最近5天的日期
today = datetime.today()
start_date = (today - timedelta(days=5)).strftime(“%Y%m%d”)

#获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust=“qfq”, start_date=start_date)

#提取开盘价、收盘价,最高价,最低价
data_list = stock_df[[“date”, “open”, “close”, “high”, “low”]].values.tolist()

#将数据转换为DataFrame以供mplfinance使用
df = pd.DataFrame(data_list, columns=[“date”, “open”, “close”, “high”, “low”])
df[‘date’] = pd.to_datetime(df[‘date’])

#绘制K线图
mpf.plot(df.set_index(‘date’), type=‘candle’, volume=False, figsize=(10, 6))

#显示图形
plt.show()

master:请修改,绘制K线图的部分换成 pyecharts 绘制
tensor([[0.2846, 0.2497, 0.2852, 0.2464, 0.2667]])
torch.return_types.max(
values=tensor([0.2852]),
indices=tensor([2]))
from AI:```python
import akshare as ak
import pandas as pd
from datetime import datetime, timedelta
import pyecharts.options as opts
from pyecharts.charts import Kline

#输入股票代码
stock_code = “300001” # 或 “600029”

#根据股票代码添加前缀
if “300” in stock_code:
stock_code = “sz” + stock_code
elif “600” in stock_code:
stock_code = “sh” + stock_code

#获取当前日期并推算最近5天的日期
today = datetime.today()
start_date = (today - timedelta(days=5)).strftime(“%Y%m%d”)

#获取最近5天的历史行情数据
stock_df = ak.stock_zh_a_daily(symbol=stock_code, adjust=“qfq”, start_date=start_date)

#提取开盘价、收盘价,最高价,最低价
data_list = stock_df[[“date”, “open”, “close”, “high”, “low”]].values.tolist()

#转换日期格式
stock_df[‘date’] = pd.to_datetime(stock_df[‘date’])
data_list = [
[d.strftime(“%Y-%m-%d”), o, c, h, l]
for d, o, c, h, l in data_list
]

#使用pyecharts绘制K线图
kline = (
Kline()
.add_xaxis(xaxis_data=[item[0] for item in data_list])
.add_yaxis(
series_name=“Stock Data”,
y_axis=[item[1:] for item in data_list],
itemstyle_opts=opts.ItemStyleOpts(color=“#ef232a”),
)
.set_global_opts(title_opts=opts.TitleOpts(title=f"{stock_code} K线图"))
)

#渲染图表
kline.render()
‘’’

上述代码首先导入了pyecharts库,并用其Kline类绘制K线图。将原始数据处理成pyecharts所需的格式后,配置图表的标题等信息,并最后渲染显示图表。注意,pyecharts并不会在Jupyter notebook中直接显示图表,而是生成HTML文件,你需要通过浏览器打开这个HTML文件查看图表。在非Jupyter环境或者配合jupyterlab_pyecharts扩展时可以直接在notebook中显示图表。

master:请执行代码
tensor([[0.4540, 0.2975, 0.6759, 0.9279, 0.3049]])
torch.return_types.max(
values=tensor([0.9279]),
indices=tensor([3]))
小助手:执行成功

master:请保存代码
tensor([[0.3954, 0.5478, 0.8770, 0.7324, 0.3002]])
torch.return_types.max(
values=tensor([0.8770]),
indices=tensor([2]))
小助手:保存成功

**master:**结束对话
tensor([[0.3998, 0.2404, 0.2743, 0.3043, 1.0000]])
torch.return_types.max(
values=tensor([1.0000]),
indices=tensor([4]))
小助手:好的,再见
Process finished with exit code 0

【说明: 图呢? 别急,在这儿 render.html,代码也集成保存】

在这里插入图片描述
在这里插入图片描述

圆满成功…

后续,还会继续改进…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/571888.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GNU Radio之OFDM Carrier Allocator底层C++实现

文章目录 前言一、OFDM Carrier Allocator 简介二、底层 C 实现1、make 函数2、ofdm_carrier_allocator_cvc_impl 函数3、calculate_output_stream_length 函数4、work 函数5、~ofdm_carrier_allocator_cvc_impl 函数 三、OFDM 数据格式 前言 OFDM Carrier Allocator 是 OFDM …

Docker进阶:Docker Swarm —弹性伸缩调整服务的副本数量

Docker进阶:Docker Swarm —弹性伸缩调整服务的副本数量 1、 创建一个Nginx服务(Manager节点)2、查看服务状态(Manager节点)3、测试访问(Worker节点)4、查看服务日志(Manager节点&am…

mysql 高阶语句 与视图

目录 一 前言 二 msql 高阶语句使用方法 (一) 查询并排序(order by) 1,排序方式 2,查询指定列 并排序 3, 条件判断(过滤指定行) 再查询指定列 并排序 4,查…

IDEA的Scala环境搭建

目录 前言 Scala的概述 Scala环境的搭建 一、配置Windows的JAVA环境 二、配置Windows的Scala环境 编写一个Scala程序 前言 学习Scala最好先掌握Java基础及高级部分知识,文章正文中会提到Scala与Java的联系,简单来讲Scala好比是Java的加强版&#x…

IDEA2023版本创建spring boot项目时,Java版本无法选择Java8问题解决

先简单说下出现本问题的原因: spring boot3.0发布时提到未来Java17将会成为主流版本,所有的Java EE Api都需要迁移到Jakarta EE上来。而spring boot3.0及以上版本已经不支持Java8了,支持Java17及以上版本。同时官方支持项目初始化的 Spring B…

智慧公厕的全域感知、全网协同、全业务融合和全场景智慧赋能

公共厕所是城市的重要组成部分,为市民提供基本的生活服务。然而,传统的公厕管理模式存在诸多问题,如排队等候时间长、卫生状况差、空气质量差等,严重影响市民的出行和生活质量。为了解决这些问题,智慧公厕应运而生&…

以智慧公厕建设助推城市的高质量发展

近年来,随着城市化进程的加快,城市基础设施建设日益完善,其中智慧公厕的建设成为了城市高质量发展的重要组成部分。智慧公厕以其智能化管理、数字化使用和信息化运行的特点,将公共厕所的管理水平提升到了一个全新的高度&#xff0…

YOLOv9改进策略:IoU优化 | Wasserstein Distance Loss,助力小目标涨点

💡💡💡本文独家改进:基于Wasserstein距离的小目标检测评估方法 Wasserstein Distance Loss | 亲测在多个数据集能够实现涨点,对小目标、遮挡物性能提升明显 💡💡💡MS COCO和PASC…

element-ui实现各种证件照上传预览下载组件封装,图片上传回显及长宽自定义功能单个图片上传功能附带源码

element-ui实现证件照上传预览下载组件封装 效果: 参数说明 我只写了两个参数,后续有需求再对其组件进行丰富~ 参数说明fileListProp用来存储上传后后端返回的图片UR了uploadUrl图片上传返回的URL后端接口地址widthProp图片上传框的宽度heightProp图片…

Bash and a Tough Math Puzzle 线段树维护区间gcd

还是一道很不错的题目&#xff0c;很容易想到用一棵线段树来维护区间gcd 注意用倍数来剪枝就好了&#xff0c;很是一到很好的题目的 #include<iostream> #include<vector> using namespace std; const int N 5e510; int n,q; struct Segment{int l,r;int d; }tr[…

智慧体育场馆的优势都有哪些?

体育场馆作为体育产业和事业发展的重要载体&#xff0c;全民对健康和运动的需求越来越大&#xff0c;体育馆的需求也更大。而以前的体育场馆管理不仅人工成本高&#xff0c;人民的使用和消费也不方便。因此智慧体育馆的出现大大降低了运营人力成本及现金管理风险&#xff0c;大…

20240320-2-线性回归+逻辑回归

线性回归于逻辑回归面试题 1. 简单介绍一下线性回归。 **线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。**这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简…