使用Pandas实现股票交易数据可视化

一、折线图:展现股价走势

1.1、简单版-股价走势图

 # 简洁版
 import pandas as pd
 import matplotlib.pyplot as plt
 # 读取CSV文件
 df = pd.read_csv('../数据集/格力电器.csv')
 data = df[['high', 'close']].plot()
 plt.show()

首先通过df[['high','close']]从df中获取最高价和收盘价这两列特征数据,其为一个DataFrame数组对象,调用该对象的plot()对象,就可以完成绘制。

plot()函数生成图形时,默认将DataFrame对象的索引传给Matplotlib绘制X轴,DataFrame对象的各列数据作为Y轴分别绘制折线等图形。使用plt.show()函数展示。

参数名称描述
x指定应用于X轴的行标签或位置,默认为None,仅对DataFrame有效
y指定应用于Y轴的行标签或位置,如果有多个,存放于list中,默认为None,仅对DataFrame有效
kindstr,指定绘制的图形类型:"line":折线图(默认)。"density":密度图。"bar":条形图。"area":面积图。"barth":横向条形图。"pie":饼图。"hist":直方图。"scatter":散点图需要指定X轴、Y轴**。"box":箱线图。"hexbin":蜂巢图,需要指定X轴、Y轴。"kde":密度图。
ax绘制图形的subplot对象,默认为当前的subplot对象
subplotsbool。是否针对不同列单独绘制子图
sharex如果ax为None,则默认为True,否则为False
shareybool。在subplots=True前提下,如果有子图,子图是否共享Y轴,默认为False
figsize元组型。(wigth,height),指定画布尺寸大小,单位为英寸
user_indexbool。是否使用索引作为X轴数据,默认为True
title标题
gridbool。是否显示网格
legendbool。是否显示网格的图例,默认为True
xticks序列。设置X轴的刻度值
yticks序列。设置Y轴的刻度值
xlim数值(最小值)、列表或元组(区间范围)。设置X轴范围
ylim数值(最小值)、列表或元组(区间范围)。设置Y轴范围
xlabel设置X轴的名称。默认使用行索引名。仅支持Pandas1.1.0及以上版本
ylabel设置Y轴的名称。仅支持Pandas1.1.0及以上版本
rotint。设置轴刻度旋转角度,默认为None
fontsizeint。设置轴刻度字体大小
colormapstring或colormap对象。设置图区域颜色
secondary_ybool或序列。是否需要在次Y轴上绘制,或者在次Y轴上绘制哪些列
stackedbool,是否创建堆积图。折线图和条形图默认为F alse,面积图默认为True

1.2、美化版-股价走势图

 import pandas as pd
 import matplotlib.pyplot as plt
 ​
 plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式
 plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
 ​
 df = pd.read_csv('../数据集/格力电器.csv')
 data = df[['high','close']].head(22)
 # x轴刻度
 x_ticks = [i for i in range(data.shape[0])]
 # 美化版
 data.plot(title='最高价和收盘价的股价走势图',
           xlabel='行索引值',    # 默认值
           ylabel='股价',
           xticks=x_ticks
           )
 plt.show()  # 展示图形

1.3、添加日期的股价走势图

 import pandas as pd
 import matplotlib.pyplot as plt
 ​
 plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式
 plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
 ​
 df = pd.read_csv('../数据集/格力电器.csv')
 # 日期转换->'2024/04/08/
 date = df['trade_date'].astype(str)
 year = date.str[:4] # 提取前4位,即年份
 month=date.str[4:6] # 提取月
 day=date.str[6:8]   # 提取日
 # 合并日期,格式为YYYY/MM/DD格式的字符串
 df['trade_date'] = year + '/' + month + '/' +day
 df.sort_values(by='trade_date',inplace=True)    # 由大到小排序
 x_ticks = [i for i in range(22)]
 ​
 df.head(22).plot(x='trade_date',
                 y=['high','close'],
                 xticks = x_ticks,   # X轴刻度值
                 rot=90, # X轴刻度值倾斜度
                 fontsize=15,    # 字体大小
                 title='最高价和收盘价的股价走势图',
                 xlabel='日期',    # 默认值
                 ylabel='股价',
                  grid=True  # 显示网格线
                  )
 plt.show()

二、散点图:展示股价影响因素

2.1、散点图

使用plot()函数绘制散点图,将kind参数设置为"scatter"即可,

 import pandas as pd
 import matplotlib.pyplot as plt
 ​
 plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式
 plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
 # 读取数据
 df = pd.read_csv('../数据集/格力电器.csv')
 # ---------------------------#
 # 绘制图形
 df.plot(x='vol',
         y='high',
         kind='scatter',# 默认为折线图,scatter为散点图
         title='格力电器成交量和最高价之间的关系散点图',
         xlabel='成交量',
         ylabel='最高价',
         c='red',
         )
 # 展示图形
 plt.show()

2.2、散点图-子图

若还想展示成交量、成交额、收盘价、涨跌额、涨跌幅之间关系的散点图,可以作为子图放到一个大的画布中:

 import pandas as pd
 import matplotlib.pyplot as plt
 ​
 plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式
 plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
 ​
 df = pd.read_csv('../数据集/格力电器.csv') # # 读取数据
 fig,axes = plt.subplots(2,2)    # 准备画布
 # 子图1:
 df.plot(x='vol',
         y='high',
         kind='scatter',# 默认为折线图,scatter为散点图
         title='格力电器成交量和最高价之间的关系散点图',
         xlabel='成交量',
         ylabel='最高价',
         c='red',
         ax=axes[0][0]
         )
 # 子图2:
 df.plot(x='vol',
         y='close',
         kind='scatter',# 默认为折线图,scatter为散点图
         title='格力电器成交量和收盘价之间的关系散点图',
         xlabel='成交量',
         ylabel='收盘价',
         c='green',
         ax=axes[0][1]
         )
 # 子图3:
 df.plot(x='amount',
         y='high',
         kind='scatter',# 默认为折线图,scatter为散点图
         title='格力电器成交额和最高价之间的关系散点图',
         xlabel='成交额',
         ylabel='最高价',
         c='red',
         ax=axes[1][0]
         )
 # 子图4:
 df.plot(x='amount',
         y='close',
         kind='scatter',# 默认为折线图,scatter为散点图
         title='格力电器成交额和收盘价之间的关系散点图',
         xlabel='成交额',
         ylabel='收盘价',
         c='green',
         ax=axes[1][1]
         )
 plt.subplots_adjust(wspace=0.8, # 子图之间的距离
                     hspace=0.5)
 plt.show()

三、条形图:展现同比成交量

 import matplotlib.pyplot as plt
 import pandas as pd
 ​
 plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式
 plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
 # 1、读取CSV文件
 df = pd.read_csv('../数据集/格力电器.csv')
 date = df['trade_date'].astype(str)
 # 2、提取年和月
 year = date.str[:4]
 month = date.str[4:6]
 df['year'] = year
 df['month'] = month
 # 3、按照年和月分组,获取2018和2019年的每月平均成交量
 group = df[['year', 'month', 'vol']].groupby(by=['year', 'month'])  # 按照年和月分组
 g_m = group.mean()  # 获取所有字段的平均值
 m_18 = g_m['vol']['2018']   # 获取2018年每月平均成交量
 m_19 = g_m['vol']['2019']   # 获取2019年每月平均成交量
 # 4、将2018和2019年每月成交量平均值数据存储于DataFrame中
 df2 = pd.DataFrame(list(zip(m_18, m_19)), index=[str(i) + '月' for i in range(1, 13)], columns=['2018', '2019'], )
 # 5、绘制条形图
 df2.plot(kind='bar',    # 条形图
          title='2018年和2019年格力电器每月平均成交量条形图',
          xlabel='月份',
          ylabel='成交量均量'
          )
 plt.show()

若要绘制堆叠条形图,只需在plot()函数中将参数stacked设置为True即可。

若要将条形显示为横向条形图,只需将参数kind设置为barh即可。

四、饼图:展现成交量占比关系

 import pandas as pd
 import matplotlib.pyplot as plt
 ​
 plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文格式
 plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
 #1、读取CSV文件
 df = pd.read_csv('../数据集/格力电器.csv')
 #2、提取年和月
 date = df['trade_date'].astype(str)
 year = date.str[:4] # 提取前4位,即年份
 month = date.str[4:6] # 提取月份
 df['year'] = year   # 将年份插入到数据集中
 df['month'] = month # 将月份插入到数据集中
 ​
 #3、按照年和月分组,获取2018年每月总成交量
 group = df[['year','month','vol']].groupby(by=['year','month']) # 按年和月分组
 g_s = group.sum()   # 获取所有字段总和
 s_18 = g_s['vol']['2018']   # 获取2018年每月总成交量
 s_18.index= [str(i) + '月' for i in range(1,13)]
 ​
 #4、绘制图形
 s_18.plot(kind='pie',
           title='2018年格力电器每月成交量占比',
           autopct='%.2f%%', # 百分比
           )
 plt.show()

五、K线图:展现股价走势

5.1、mplfinance的安装与下载

 pip install mplfinance

5.2、绘制K线图

 import mplfinance as mpf
 import pandas as pd
 ​
 data = pd.read_csv('../数据集/格力电器.csv')
 data.sort_values(by=['trade_date'], inplace=True)
 date = data['trade_date'].astype(str)
 ​
 year = date.str[:4]
 month = date.str[4:6]
 day = date.str[6:8]
 data['trade_date'] = year + '/' + month + '/' + day
 data.index = pd.DatetimeIndex(data['trade_date'])
 ​
 data = data[['open', 'close', 'high', 'low', 'vol']]
 data.columns = ['Open', 'Close', 'High', 'Low', 'Volume']
 ​
 mpf.plot(data.head(70), # 绘制图形的数据(选取前70条)
          type='candle', # 设置图像类型
          volume=True,   # 是否显示成交量
          style='charles')# 设置图表样式为"charles"

mplfinance的plot()函数的常用参数

参数描述
type设置绘制的 图像类型,有'ohlc'、'candle'、'line'、'renko'类型
volume是否显示成交量,默认不显示
style设置的图表样式,可以通过mpf.available_style()方法获取mplfinance提供的样式名称,有'binance','blueskies','brasil'....。可以自定义样式
title设置标题
ylabel设置主图Y轴标题
ylabel_lower设置次图的Y轴标题
mav设置均线,如2日均线,5日均线,10日均线等
savefig保存图片

下面通过自定义图表样式来美化K线图:

import mplfinance as mpf
import pandas as pd

data = pd.read_csv('../数据集/格力电器.csv')
data.sort_values(by=['trade_date'], inplace=True)
date = data['trade_date'].astype(str)

year = date.str[:4]
month = date.str[4:6]
day = date.str[6:8]
data['trade_date'] = year + '/' + month + '/' + day
data.index = pd.DatetimeIndex(data['trade_date'])

data = data[['open', 'close', 'high', 'low', 'vol']]
data.columns = ['Open', 'Close', 'High', 'Low', 'Volume']

# 设置K线颜色
my_color = mpf.make_marketcolors(up='red',  # 设置阳线柱填充颜色
                                 down='green',  # 设置阴线柱填充颜色
                                 edge='i',  # 设置蜡烛线边缘颜色
                                 wick='black',  # 设置蜡烛上下影线的颜色
                                 volume={'up': 'red', 'down': 'green'}  # 设置成交量颜色
                                 )

# 设置图表样式
my_style = mpf.make_mpf_style(marketcolors=my_color,
                              gridaxis='both',  # 设置网格线位置,both双向
                              gridstyle='-.',  # 设置网格线类型
                              base_mpf_style='charles',
                              rc={'font.family': 'SimHei'}  # 设置字体为黑体
                              )

# 绘制K线图
mpf.plot(data.head(70),
         type='candle',  # 设置图像类型'ohlc'/'candle'/'line/renko'
         mav=(2, 5, 10),  # 绘制2日均线、5日均线和10日均线
         volume=True,  # 显示成交量
         style=my_style,  # 自定义图表样式
         title='格力电器2018年K线图',  # 设置标题
         ylabel='价格',  # 设置主图Y轴标题
         ylabel_lower='成交量'  # 设置次图Y轴标题
         )

mplfinance的make_mpf_style()函数的常用参数:

参数描述
base_mpf_style使用mplfinance中的系统样式,可以在make_marketcolors方法中使用,也可以在make_mpf_style中使用
base_mpl_style使用mplfinance中的系统样式,比如:base_mpl_style='seaborn'
marketcolors使用自定义样式
mavcolors设置nav均线颜色,必须使用列表传递参数
facecolor设置前景色
edgecolor设置边缘线颜色
figcolor设置填充色
gridcolor设置网格线颜色
gridaxis设置网格线方向,'both'、'horizontal'、'vertical‘
gridstyle设置网格线线型。'-'[或solid]、’-’[或dashed]、'-.'[或dashdot]、':'[或dotted]、None
y_on_right设置Y轴位置是否在左右
rc使用rcParams的dict设置样式,如果内容与上面自定义的设置相同,那么自定义设置覆盖rcParams设置

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【一招鲜】-阿里云服务器安全更新 RHSA-2021:3889: java-1.8.0-openjdk 安全和BUG修复更新

形似这种: RHSA-2021:3889: java-1.8.0-openjdk 安全和BUG修复更新 #1 查看可更新的软件java yum list updates |grep java #2 如果有可更新软件,则进行更新 yum -y update java-1.8.0-openjdk.x86_64 形似这种: RHSA-2021:4782: openssh …

你的系统是如何跟MySQL打交道的

1、Java 工程师眼中的数据库是什么东西? 从今天开始,我们将要开始一个MySQL的专栏,一起来研究MySQL数据库的底层原理和各种实践案例,以及互联网公司的技术方案。 现在我们先来看看,在一个Java工程师眼中的数据库是什么东西? 平时…

mp3怎样才能转换成wav格式?音频互相转换的方法

一,什么是WAV WAV,全称为波形音频文件(Waveform Audio File Format),是一种由微软公司和IBM公司联合开发的音频文件格式。自1991年问世以来,WAV格式因其无损的音频质量和广泛的兼容性,成为了多…

【C++】1390-请从键盘读入一个四位整数,求这个四位整数各个位的和是多少?

问题:1390-请从键盘读入一个四位整数,求这个四位整数各个位的和是多少? 类型:基础问题 题目描述: 请从键盘读入一个四位整数,求这个四位整数各个位的和是多少? 输入: 一个四位整…

thinkphp6入门(23)-- 如何导入excel

1. 安装phpexcel composer require phpoffice/phpexcel composer update 2. 前端 <form class"forms-sample" action"../../xxxx/xxxx/do_import_users" method"post" enctype"multipart/form-data"><div class"cont…

再写-全景拼接

全景拼接 1. 将读取进行灰度转化&#xff0c;并且输出图像&#xff0c;关键点和计算描述 import cv2 import numpy as np# 将读取进行灰度转化&#xff0c;并且输出图像&#xff0c;关键点和计算描述 image_left cv2.imread("C:\\Users\\HONOR\\Desktop\\image\\pinjie…

Day19-【Java SE进阶】网络编程

一、网络编程 1.概述 可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。java.net,*包下提供了网络编程的解决方案! 基本的通信架构 基本的通信架构有2种形式:CS架构(Client客户端/Server服务端)、BS架构(Browser浏览器/Server服务端)。 网络通信的…

轮腿机器人-五连杆正运动学解算

轮腿机器人-五连杆与VMC 1.五连杆正运动学分析2.参考文献 1.五连杆正运动学分析 如图所示为五连杆结构图&#xff0c;其中A&#xff0c;E为机器人腿部控制的两个电机&#xff0c;θ1,θ4可以通过电机的编码器测得。五连杆控制任务主要关注机构末端C点位置&#xff0c;其位置用直…

【Unity】常见性能优化

1 前言 本文将介绍下常用的Unity自带的常用优化工具&#xff0c;并介绍部分常用优化方法。都是比较基础的内容。 2 界面 2.1 Statistics窗口 可以简单查看Unity运行时的统计数据&#xff0c;当前一帧的性能数据。 2.1.1 Audio 音频相关内容。 Level&#xff1a;音量大小&a…

物联网云组态平台

TopStack 物联网云组态平台&#xff0c;提供从边缘感知及设备到云的数据采集、分析、可视化软件服务&#xff0c;提供完善的平台开发环境&#xff0c;协助客户完善垂直领域的业务应用开发。与伙伴共同打造多元产业物联网解决方案。 产品采用微前端、微服务架构进行设计&#x…

Testng测试框架(7)--测试运行

忽略测试 TestNG可以让你忽略类、特殊包、包及其子中的所有Test方法。 当在测试方法级别使用Ignore 注解&#xff0c;在功能上与Test(enabledfalse).一样。 以下例子将忽略类中所有tests。 import org.testng.annotations.Ignore; import org.testng.annotations.Test; Ign…

day9 | 栈与队列 part-1 (Go) | 232 用栈实现队列、225 用队列实现栈

今日任务 栈与队列的理论基础 (介绍:代码随想录)232 用栈实现队列(题目: . - 力扣&#xff08;LeetCode&#xff09;)225 用队列实现栈 (题目: . - 力扣&#xff08;LeetCode&#xff09; ) 栈与队列的理论基础 栈 : 先进后出 队列: 后进先出 老师给的讲解:代码随想录 …

left join limit offset 分页查询问题

1. LEFT JOIN 简介 在开始讨论LEFT JOIN的使用方法之前&#xff0c;让我们先简要回顾一下LEFT JOIN的概念。 LEFT JOIN是一种用于将左表和右表连接起来的操作。它会返回左表中的所有记录&#xff0c;并且对于每条左表记录&#xff0c;如果在右表中找到符合条件的记录&#xf…

js+网络摄像头实现人体肢体关键点动作捕获

最近有一个项目&#xff0c;客户需要用户人体姿势识别&#xff0c;进行表演考核用途&#xff0c;或者康复中心用户恢复护理考核&#xff0c;需要用摄像头进行人体四肢进行肢体关键点对比考核&#xff0c;资料还是太少了。只有个别大佬发了部分技术指导。感觉写的不错。 阿里云…

算法第四十一天-排除排序链表中的重复元素Ⅱ

排除排序链表中的重复元素Ⅱ 题目要求 解题思路 题意&#xff1a;在一个有序链表中&#xff0c;如果一个节点的值出现不止一次&#xff0c;那么把这个节点删除掉 重点&#xff1a;有序链表&#xff0c;所以&#xff0c;一个节点的值出现不止一次&#xff0c;那么他们必相邻。…

CMC学习系列 (7):β 范围 EEG-EMG 相干性与皮质光谱功率有关

CMC学习系列:β 范围 EEG-EMG 相干性与皮质光谱功率有关 0. 引言1. 主要贡献2. 方法2.1 目标2.2 实验范式2.3 数据处理和分析 3. 结果4. 讨论5. 总结欢迎来稿 论文地址&#xff1a;https://www.sciencedirect.com/science/article/abs/pii/S1053811907001760 论文题目&#xff…

一、接口自动化之pytest 运行参数

1、在跟目录下创建一个配置项pytest.ini [pytest] testpaths./testcases markersp0:高于优先级test:测试环境pro:生成环境2、打标签 3、运行命名pytest -m "p0"

单链表详解(无哨兵位),实现增删改查

1.顺序表对比单链表的缺点 中间或头部插入时&#xff0c;需要移动数据再插入&#xff0c;如果数据庞大会导致效率降低每次增容就需要申请空间&#xff0c;而且需要拷贝数据&#xff0c;释放旧空间增容造成浪费&#xff0c;因为一般都是以2倍增容 2.链表的基础知识 链表也是线…

蓝桥杯 — — 数数

数数 友情链接&#xff1a;数数 题目&#xff1a; 思路&#xff1a; 这道题目主要用到了埃氏筛法&#xff08;Sieve of Eratosthenes&#xff09;来快速求解质数的方法&#xff0c;思路很巧妙&#xff0c;并且用到了动态规划的思想。 我们首先定义两个数组mk和p&#xff0c…

LPA3399Pro搭建Qt开发环境

将以前的开发文档在此做一个记录。 一、介绍 Qt是一个跨平台的应用程序开发框架&#xff0c;支持多种操作系统和硬件架构&#xff0c;包括ARM架构的Linux。 RK3399Pro是一款基于ARM架构的处理器&#xff0c;用于嵌入式系统。可以在RK3399上搭建Qt开发环境&#xff0c;进行项目…