用akshare库获取英伟达(股票代码:105.NVDA) 在2014年6月19日到2024年6月19日期间的股票的收盘价数据(用后复权的收盘价);
基于后复权的收盘价数据,做一个动态股价曲线图,逐日显示英伟达股价的动态变化情况, 以mp4视频文件输出,保存到文件夹:E:\aivideo;
在大模型中使用如下提示词:
你是一个Python编程专家,要完成一个编写Python脚本的任务,具体步骤如下:
用akshare库获取英伟达(股票代码:105.NVDA) 在2014年6月19日到2024年6月19日期间的股票的收盘价数据(用后复权的收盘价);
基于后复权的收盘价数据,做一个动态股价曲线图,逐日显示英伟达股价的动态变化情况, 以mp4视频文件输出,保存到文件夹:E:\aivideo;
注意:
每一步都要输出信息到屏幕上
日期格式是YYYYMMDD
设置matplotlib默认字体为'SimHei',文件路径为:C:\Windows\Fonts\simhei.ttf
mp4视频的分辨率1080p,码率10Mbps以内,视频时长控制在5分钟以内,格式为MP4格式;
stock_data['日期'] 列的数据类型是字符串,而不是日期时间类型。我们需要先将这一列转换为日期时间类型,然后再进行操作
历史行情数据-东财
接口: stock_us_hist
目标地址: https://quote.eastmoney.com/us/ENTX.html#fullScreenChart
描述: 东方财富网-行情-美股-每日行情
限量: 单次返回指定上市公司的指定 adjust 后的所有历史行情数据
输入参数
名称类型描述
symbolstr美股代码, 可以通过 ak.stock_us_spot_em() 函数返回所有的 pandas.DataFrame 里面的 代码 字段获取
periodstrperiod='daily'; choice of {'daily', 'weekly', 'monthly'}
start_datestrstart_date="20210101"
end_datestrend_date="20210601"
adjuststr默认 adjust="", 则返回未复权的数据; adjust="qfq" 则返回前复权的数据, adjust="hfq" 则返回后复权的数据
输出参数
名称类型描述
日期object-
开盘float64注意单位: 美元
收盘float64注意单位: 美元
最高float64注意单位: 美元
最低float64注意单位: 美元
成交量int32注意单位: 股
成交额float64注意单位: 美元
振幅float64注意单位: %
涨跌幅float64注意单位: %
涨跌额float64注意单位: 美元
换手率float64注意单位: %
接口示例
import akshare as ak
stock_us_hist_df = ak.stock_us_hist(symbol='106.TTE', period="daily", start_date="20200101", end_date="20240214", adjust="qfq")
print(stock_us_hist_df)
根据大模型给出的代码,排除错误后结果如下:
import akshare as ak
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd
import os
from matplotlib.animation import FuncAnimation, FFMpegWriter
import matplotlib
matplotlib.rcParams['animation.ffmpeg_path'] = r'D:\Shotcut\ffmpeg.exe'
# 设置matplotlib默认字体为'SimHei'
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 获取英伟达股票数据
def get_stock_data():
print("正在获取英伟达股票数据...")
stock_data = ak.stock_us_hist(symbol='105.NVDA', period="daily", start_date="20140619", end_date="20240619", adjust="hfq")
print("数据获取完成。")
return stock_data
# 转换日期格式
def convert_date_format(stock_data):
print("正在转换日期格式...")
stock_data['日期'] = pd.to_datetime(stock_data['日期'], format='%Y-%m-%d')
print("日期格式转换完成。")
return stock_data
# 创建动态股价曲线图
def create_animation(stock_data):
print("正在创建动态股价曲线图...")
fig, ax = plt.subplots(figsize=(19.2, 10.8))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
ax.xaxis.set_major_locator(mdates.YearLocator())
line, = ax.plot([], [], lw=2)
def init():
ax.set_xlim(stock_data['日期'].iloc[0], stock_data['日期'].iloc[-1])
ax.set_ylim(stock_data['收盘'].min(), stock_data['收盘'].max())
return line,
def update(frame):
line.set_data(stock_data['日期'].iloc[:frame], stock_data['收盘'].iloc[:frame])
ax.relim()
ax.autoscale_view()
return line,
ani = FuncAnimation(fig, update, frames=len(stock_data), init_func=init, blit=True)
print("动态股价曲线图创建完成。")
return ani
# 保存视频
def save_video(ani):
print("正在保存视频...")
if not os.path.exists(r'E:\aivideo'):
os.makedirs(r'E:\aivideo')
writer = FFMpegWriter(fps=30, metadata=dict(artist='Me'), bitrate=10000)
ani.save(r'E:\aivideo\nvidia_stock_price.mp4', writer=writer)
print("视频保存完成。")
# 主函数
def main():
stock_data = get_stock_data()
stock_data = convert_date_format(stock_data)
ani = create_animation(stock_data)
save_video(ani)
if __name__ == "__main__":
main()