当前位置:   article > 正文

Python绘制动态股价曲线图并保存视频_股价动态视频怎么做出来的

股价动态视频怎么做出来的

用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)

根据大模型给出的代码,排除错误后结果如下:

  1. import akshare as ak
  2. import matplotlib.pyplot as plt
  3. import matplotlib.dates as mdates
  4. import pandas as pd
  5. import os
  6. from matplotlib.animation import FuncAnimation, FFMpegWriter
  7. import matplotlib
  8. matplotlib.rcParams['animation.ffmpeg_path'] = r'D:\Shotcut\ffmpeg.exe'
  9. # 设置matplotlib默认字体为'SimHei'
  10. plt.rcParams['font.sans-serif'] = ['SimHei']
  11. plt.rcParams['axes.unicode_minus'] = False
  12. # 获取英伟达股票数据
  13. def get_stock_data():
  14. print("正在获取英伟达股票数据...")
  15. stock_data = ak.stock_us_hist(symbol='105.NVDA', period="daily", start_date="20140619", end_date="20240619", adjust="hfq")
  16. print("数据获取完成。")
  17. return stock_data
  18. # 转换日期格式
  19. def convert_date_format(stock_data):
  20. print("正在转换日期格式...")
  21. stock_data['日期'] = pd.to_datetime(stock_data['日期'], format='%Y-%m-%d')
  22. print("日期格式转换完成。")
  23. return stock_data
  24. # 创建动态股价曲线图
  25. def create_animation(stock_data):
  26. print("正在创建动态股价曲线图...")
  27. fig, ax = plt.subplots(figsize=(19.2, 10.8))
  28. ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
  29. ax.xaxis.set_major_locator(mdates.YearLocator())
  30. line, = ax.plot([], [], lw=2)
  31. def init():
  32. ax.set_xlim(stock_data['日期'].iloc[0], stock_data['日期'].iloc[-1])
  33. ax.set_ylim(stock_data['收盘'].min(), stock_data['收盘'].max())
  34. return line,
  35. def update(frame):
  36. line.set_data(stock_data['日期'].iloc[:frame], stock_data['收盘'].iloc[:frame])
  37. ax.relim()
  38. ax.autoscale_view()
  39. return line,
  40. ani = FuncAnimation(fig, update, frames=len(stock_data), init_func=init, blit=True)
  41. print("动态股价曲线图创建完成。")
  42. return ani
  43. # 保存视频
  44. def save_video(ani):
  45. print("正在保存视频...")
  46. if not os.path.exists(r'E:\aivideo'):
  47. os.makedirs(r'E:\aivideo')
  48. writer = FFMpegWriter(fps=30, metadata=dict(artist='Me'), bitrate=10000)
  49. ani.save(r'E:\aivideo\nvidia_stock_price.mp4', writer=writer)
  50. print("视频保存完成。")
  51. # 主函数
  52. def main():
  53. stock_data = get_stock_data()
  54. stock_data = convert_date_format(stock_data)
  55. ani = create_animation(stock_data)
  56. save_video(ani)
  57. if __name__ == "__main__":
  58. main()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/979468
推荐阅读
相关标签
  

闽ICP备14008679号