用 Python 进行金融数据可视化

2023-05-16

用 Python 进行金融数据可视化

 

Python量化的关键是金融数据可视化,无论是传统的K线图,还是现在的策略分析,都需要大量的可视化图表。具体到编程代码,就是使用Python绘图模块库绘图,比如传统的Python绘图模块库有Matplotlib,Seaborn等。

对于股票和财经的金融数据源,可以使用Tushare库来获取和分析股票财经数据,我们获得财经数据源后,就可以使用Pandas对金融数据的各种指标进行定制化的分析了,最后让数据可视化,可以使用Matplotlib来绘制出美观大方的金融图形,为企业的决策提供便利。金融绘图的主要步骤如下:

 

 

获得股票数据源

Tushare是一个免费、开源的Python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工到数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Python 的Pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分的数据格式都是Pandas的 DataFrame类型,非常便于用Pandas,NumPy和Matplotlib进行数据分析和可视化。

Tushare的官网地址

http://tushare.org

在Tushare中使用的股票代码,可以参考东方财富网提供的股票代码查询页面,如图7-63所示

http://quote.eastmoney.com/stocklist.html

图763股票代码查询页面

使用pip安装Tushare。安装Tushare之前,需要使用pip命令先安装好lxml,requests和bs4模块。

pip install tushare

 

 

显示股票历史数据

TuShare里的 get_hist_data()函数用于获取到目前为止3年的历史数据。获取个股历史交易数据(包括均线数据),可以通过参数设置获取日k线、周k线、月k线,以及5分钟、15分钟、30分钟和60分钟k线数据。本接口只能获取近3年的日线数据,适合搭配均线数据进行选股和分析。

参数说明:

  • code:股票代码,即6位数字代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板)

  • start:开始日期,格式YYYY-MM-DD

  • end:结束日期,格式YYYY-MM-DD

  • ktype:数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D

  • retry_count:当网络异常后重试次数,默认为3

  • pause:重试时停顿秒数,默认为0

返回值说明:

  • date:日期

  • open:开盘价

  • high:最高价

  • close:收盘价

  • low:最低价

  • volume:成交量

  • price_change:价格变动

  • p_change:涨跌幅

  • ma5:5日均价

  • ma10:10日均价

  • ma20:20日均价

  • v_ma5:5日均量

  • v_ma10:10日均量

  • v_ma20:20日均量

  • turnover:换手率[注:指数无此项]

查看编号为600848的股票代码在2018年3月的历史数据,使用Tushare的get_hist_data()返回的是Pandas的DataFrame对象,这个DataFrame对象的columns比较多,在控制台显示不全,所以使用Pandas的to_csv()函数保存到hist_data.csv文件中。

import tushare as ts
data = ts.get_hist_data('600848',start='2018-03-01',end='2018-03-31')
data.to_csv('hist_data.csv' )

运行脚本,已记事本打开hist_data.csv文件。

我们查看hist_data.csv文件会发现,编号为600848的股票代码在2018年3月的历史交易数据是按照交易日期降序排列的。但展示在折线图上的的日期一般要按升序排列。所以还要对DataFrame对象的index属性进行排序。使用Pandas的DataFrame对象的sort_index()函数,使交易日期按照从小到到大的升序排列。这样画出的折线图就符合人们查看历史交易数据的正常习惯了,完整代码如下。

import tushare as ts

data = ts.get_hist_data('600848',start='2018-03-01',end='2018-03-31')
# 对交易时间进行降序排列
data = data.sort_index()
data.to_csv('hist_data.csv' )

获得编号为600848的股票代码在2018年3月的历史交易数据后,就可以使用Maplotlib画出股票历史数据的折线图,折线图的横坐标是股票历史数据的交易日期,纵坐标是股票交易数据的开盘价(open)。

import tushare as ts
import matplotlib.pyplot as plt
from datetime import datetime

data = ts.get_hist_data('600848',start='2018-03-01',end='2018-03-31')
# 对时间进行降序排列
data = data.sort_index()

xs = [datetime.strptime(d, '%Y-%m-%d').toordinal() for d in data.index ]
plt.plot_date( xs , data['open'] , 'b-')
plt.gcf().autofmt_xdate()  # 自动旋转日期标记
plt.show()

运行脚本输出以下图形。

 

以上代码的核心代码如下,使用Tushare的get_hist_data()函数返回股票交易代码的股票历史数据,也就是Pandas的DataFrame对象data,data.index索引值是日期型字符串,使用Matplotlib的plot_date()画图函数,需要转换成函数可以识别的Gregoian Calendar类型数据。

xs = [datetime.strptime(d, '%Y-%m-%d').toordinal() for d in data.index ]

以上表达式语句等同于以下语句。

xs = []
for date in data.index:
    print( date )
    transDate = datetime.strptime( date , '%Y-%m-%d')
    xs.append( transDate.toordinal())

绘制折线图的X 轴的日期也可以使用matplotlib.dates.strpdate2num()函数进行转换,完整代码如下。

import tushare as ts
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

data = ts.get_hist_data('600848',start='2018-03-01',end='2018-03-31')
# 对时间进行降序排列
data = data.sort_index()

xs = [mdates.strpdate2num('%Y-%m-%d')(d ) for d in data.index ]

plt.plot_date( xs , data['open'] , 'b-')
plt.gcf().autofmt_xdate()  # 自动旋转日期标记
plt.show()

运行脚本输出以下图形。

 

获取60分钟k线数据。

import tushare as ts
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

data = ts.get_hist_data('600848', ktype='60')
xs = [mdates.strpdate2num('%Y-%m-%d %H:%M:%S')(d ) for d in data.index ]

#设置时间标签显示格式
ax = plt.gca()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S'))

plt.plot_date(xs, data['open'],'-' , label='open')
plt.legend(loc=0  )

plt.gcf().autofmt_xdate()
plt.show()

运行脚本输出以下图形。

图768编号为600848的股票代码的60分钟内的k线图

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用 Python 进行金融数据可视化 的相关文章

  • 使用 psycopg2 在 python 中执行查询时出现“编程错误:语法错误位于或附近”

    我正在运行 Python v 2 7 和 psycopg2 v 2 5 我有一个 postgresql 数据库函数 它将 SQL 查询作为文本字段返回 我使用以下代码来调用该函数并从文本字段中提取查询 cur2 execute SELECT
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di

随机推荐

  • grep 搜索不包含关键字的行

    核心内容 grep v down v 是不显示匹配上的内容 xff0c 显示不包含down的内容 需求引入 做主机扫描的时候 方便查看在线的主机 dotheright span class hljs variable 64 dotherig
  • 打开一个网页,需要用到多少协议?

    系统环境 xff1a OS xff1a Linux ubuntu 2 6 32 46 generic 105 Ubuntu SMP Fri Mar 1 00 08 49 UTC 2013 i686 GNU Linux 抓包软件 xff1a
  • git从远程仓库中拉取指定分支

    若本地分支不存在的情况 git checkout span class hljs attribute b span 本地分支名称 origin span class hljs subst span 远程分支名称 使用该方式会在本地新建分x
  • linux下 find 文件内容

    功能描述 xff1a 从当前目录里面找到 CUDA VERSION相关信息 第一种实现方法 xff1a find 43 exec 43 grep find span class hljs built in span span class h
  • vim删除包含特定字符串的行

    命令如下 xff1a g str d xff1a 表示后面输入的是vim命令参数 g 表示范围是全局 str 是匹配上的字符串 d delete 表示删除
  • centOS7系统盘扩容

    使用centos7 4 1708 iso安装的virtualbox虚拟机 xff0c 设置的硬盘空间是1T xff0c 安装完成之后 xff0c df h 看到 系统文件容量挂载点 dev mapper centos root50G dev
  • git http-backend基于centos7 httpd

    需要用户名密码的访问 网上已经有人分享了 如果想看 需要用户名密码的访问请出门右转 https www cnblogs com badwood316 p 6398616 html 这里的配置是一种不需要用户名密码 同时可以glone的方式
  • 【ZABBIX】zabbix监控软件5.0版本的安装和使用

    文章目录 一 关闭selinux和防火墙二 下载并安装Zabbix三 测试验证四 添加监控主机 xff08 实例 xff1a crond 43 出图 xff09 警告 微信 钉钉 前言 xff1a zabbix服务器需关闭SELinux 开
  • Mariadb(MySql)开启SSL简明教程

    1 生成CA root 64 www genrsa 2048 gt ca key pem root 64 www openssl req new x509 nodes days 365000 key ca key pem out ca ce
  • Katex、Latex语法手册

    莱斯Rice大学的一个语法手册 xff0c 手册链接 网盘地址 xff1a 链接 xff1a https pan baidu com s 1baoNr XBP oGEfbbqcEPA 提取码 xff1a ob47
  • 工单管理系统otrs

    CentOS7 4安装配置ORTS工单系统 环境 IP 系统 服务 数据库 账户 密码 172 20 17 95 Centos7 4 ORTS root root WEB地址 xff1a 172 20 17 95 otrs index pl
  • 画图工具汇集

    技术传播的价值 xff0c 不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径 加速业务的上线速率 xff0c 也体现在优秀工程师的工作效率提升 产品性能优化和用户体验改善等经验方面的分享 xff0c 以提高我们的专业能力 接下来
  • 常见数据库版本

    SQL Server安装包 考虑到好些新手同学不知道怎么下载自己所需的数据库软件安装包 xff0c 特分享一些我收藏的安装包 现分享SQL Server的一些安装包给大家 根据自身需求下载 xff0c 新手朋友建议下载SQL Server
  • 思维导图工具集

    浏览所有国外资源时使用可以实时网页翻译的浏览器 例如Google Chrome QQ浏览器 360浏览器 Firefox浏览器等 xmind 功能 XMind 一个功能齐全的思维导图和头脑风暴工具 旨在产生想法 激发创造力 提高工作和生活的
  • 自动化运维一体化

    运维一体化中的平台一体化 xff0c 指的是运维一体化与平台一体化 xff0c 其中运维一体化是数据中心在运维方面的运营体系 xff0c 它包括三方面 xff1a 人员组织一体化 流程一体化 平台一体化 一 转型 xff1a 和目前大部从运
  • 技术文档写作

    科技文排版技巧 目录 一 段落格式的设定 2 二 设置标题 3 三 利用 导航 选项 xff0c 对论文进行快速定位 xff08 建立在3的基础上 xff09 4 四 插入 分页符 和 分节符 5 五 页码的设置 6 六自动目录生成 xff
  • 资料目录三

    需要更多资料请添加微信 xff1a Stestack 毕设项目 美食美刻网站制作 视频http yun itheima com course 253 html 资料链接 xff1a http pan baidu com s 1dFkYBXv
  • VMware虚拟机ubuntu显示屏幕太小解决办法

    1 安装VMware Tool需要用到虚拟光驱 xff0c 加载一个ISO文件 2 从 media 中复制到 opt下 3 击ubuntu左侧列表里的DVD图标 xff0c 就会出现VMware Tools的安装文件VMwareTools
  • 面向edas开发的规范

    前言 概述 本文档 主要介绍了 服务开发者基于Aliware做项目开发时 xff0c 从项目环境搭建 xff0c 项目开发 xff0c 项目上线及Aliware 服务功能相关的使用 说明 xff0c 操作步骤及代码示例 应用范围 服务开发者
  • 用 Python 进行金融数据可视化

    用 Python 进行金融数据可视化 Python量化的关键是金融数据可视化 xff0c 无论是传统的K线图 xff0c 还是现在的策略分析 xff0c 都需要大量的可视化图表 具体到编程代码 xff0c 就是使用Python绘图模块库绘图