【手把手教你】股票可视化分析之Pyecharts(二)

01

引言

Pyechartss 是基于Echarts 的开源可视化库,可以制作非常精美的图表。公众号推文《【手把手教你】股票可视化分析之Pyecharts(一)》,以股票交易数据为例,为大家展示了使用 Pyehcarts 构建直角坐标系下常用的图表,包括折线图、柱状图、K线图和热力图等。本文将进一步介绍Pyecharts其他图表的构建方法,包括饼图、地图、日历图、仪表盘、关系图等等,同时分享这些常见的图表在金融量化上的应用实例。本文的pyecharts版本为1.9.1,直接使用pip install pyecharts即可。以下代码使用Jupyter notebook进行编译,相关数据在公众号后台回复“20220327”可免费获取。

02

常用图表及应用实例

#导入数据分析和量化常用库
import pandas as pd
import numpy as np
import talib as ta
import tushare as ts
#导入pyecharts
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode

01

饼图Pie

饼图调用基本函数为:(Pie()
.add(series_name='系列名称',data_pair=系列数据项,格式为 [(key1, value1), (key2, value2)], color=系列label颜色))。下面以tushare在线获取A股上市公司基本信息进行可视化。

#tushare pro 120积分(注册后修改个人信息)即可免费调取
token='输入在tushare pro上的token'
pro=ts.pro_api(token)
ts.set_token(token)
stock_basic=pro.stock_basic(list_status='L')
#stock_basic.head()
#CDR一般指中国存托凭证Chinese Depository Receipt,CDR)
#是指由存托人签发、以境外证券为基础在中国境内发行、代表境外基础证券权益的证券。
market=stock_basic.groupby('market')['market'].count()
data_pair=[list(z) for z in zip(market.index,market)]
g = (Pie().add("",data_pair,).set_global_opts(title_opts=opts.TitleOpts(title="A股各交易所上市公司数量"),legend_opts=opts.LegendOpts(is_show=False),).set_series_opts(tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{b}: {c} ({d}%)"),label_opts=opts.LabelOpts(formatter="{b}: {c}({d}%)")))
g.width = "100%"
#g.render_notebook()

4866c403647e8abebd197a838da78fbf.png

02

地图

地图基本调用方法:(Map()
.add('系列名称',data_pair=数据项,maptype='china'地图类型如'广东',))

#A股上市公司各省分布,将‘深圳’与‘广东’数据合并
areas=stock_basic.groupby('area')['ts_code'].count()
areas['广东']=areas['广东']+areas['深圳']
areas.drop(['深圳'],inplace=True)
data_pair=[list(z) for z in zip(areas.index, areas)]
g = (Map().add("", data_pair, "china",is_map_symbol_show=False).set_global_opts(title_opts=opts.TitleOpts(title="A股上市公司各省分布",pos_left='center'),visualmap_opts=opts.VisualMapOpts(max_=int(areas.max()/100+1)*100,orient = "horizontal",pos_left='center',)))
g.width = "100%"
#g.render_notebook()

7439f13fb293a7c20ef69175e7ea8f33.png

03

日历图Calendar

日历图基本调用方法:(Calendar(init_opts=opts.InitOpts()初始化参数)  

.add(series_name=系列名称,  
   yaxis_data=系列数据,  
   is_selected=True是否选中图例,
   label_opts=opts.LableOpts()标签配置,  
   calendar_opts=opts.CalendarOpts(),  
   tooltip_opts=opts.TooltipOpts()提示框配置项,  
   itemstyle_opts=opts.ItemStyleOpts()图元样式配置项)

日历坐标系组件配置项: 
opts.CalendarOpts(
   pos_left='''组件离容器左侧距离, 可填20或'20%'等数字,也可 'left', 'center', 'right';''',
   pos_top='top', 'middle', 'bottom',
   pos_right=,
   pos_bottom=,
   orient='horizontal'或 'vertical'日历坐标布局朝向,
   range_=必填,日历坐标范围:某一年 range: 2022;某个月 range: '2022-03';某个区间 range: ['2022-03-02', '2022-03-23'],
  )

#股票数据可视化分析实例
#获取A股交易数据
def get_price(code='sh',start='2000-01-01',end='2022-03-25'):df=ts.get_k_data(code,start,end)df.index=pd.to_datetime(df.date)#将成交量单位改为10000手并取整数df['volume']=(df['volume']/10000).apply(int)return df[['open','close','high','low','volume']]
#以2021年3月份以来创业板指数的日收益率数据为例
cyb=get_price('cyb',start='2021-03-01')
data0=(cyb.close/cyb.close.shift(1)-1)*100
data=[[i.strftime('%Y-%m-%d'),round(data0[i],2)] for i in data0.index]
g = (Calendar(init_opts=opts.InitOpts(width="900px", height="250px")).add("",data,#添加数据calendar_opts=opts.CalendarOpts(range_=["2021-3-1","2022-3-25"],daylabel_opts=opts.CalendarDayLabelOpts(name_map="cn"),monthlabel_opts=opts.CalendarMonthLabelOpts(name_map="cn"),),).set_global_opts(title_opts=opts.TitleOpts(title="创业板指数日收益率",pos_left='center'),visualmap_opts=opts.VisualMapOpts(is_show=False,max_=5.5,min_=-5,orient="horizontal",is_piecewise=False,)))
#g.render_notebook()

908c72525f355febea01e94a0b14e1f2.png

04

漏斗图Funnel

调用方式和相关参数:(Funnel(opts.InitOpts = opts.InitOpts()初始配置项)  
.add(series_name='系列名称',data_pair=系列塑化剂项,格式为[(key1, value1), (key2, value2)],color=颜色,sort_='descending'或'ascending'数据排序),label_opts=opts.LabelOpts()标签配置)

codes=['sh','sz','cyb','zxb','hs300']
names=['上证指数','深证综指','创业板指','中小板指','沪深300']
name_code=dict(zip(names,codes))
index_data=pd.DataFrame({name:get_price(code).close for name,code in name_code.items()}).dropna()
#index_data.head()
#2010年6月2日至2022年3月24日各指数累计收益率
rets=(index_data/index_data.iloc[0]-1).iloc[-1]*100
from pyecharts.faker import Faker
g = (Funnel().add("",[list(z) for z in zip(rets.index,rets.round(2))],label_opts=opts.LabelOpts(position="inside"),).set_global_opts(title_opts=opts.TitleOpts(title="指数累计收益率(%)",subtitle='2010.06-2022.03')))
#g.render_notebook()

375128d39c041ee3795340ed9e02933b.png

05

仪表盘Gauge

调用方式和常用参数配置:
Gauge(初始化配置项init_opts: opts.InitOpts = opts.InitOpts()  
.add(series_name=''系列名称,data_pair=系列数据项,格式为 [(key1, value1), (key2, value2)],is_selected=True或False是否选中图例,min_= 0最小数据值,max_: Numeric = 100最大数据值,split_number= 10 #仪表盘平均分割段数, radius= "75%"仪表盘半径,start_angle= 225# 仪表盘起始角度。圆心 正右手侧为0度,正上方为 90 度,正左手侧为 180 度,end_angle = -45# 仪表盘结束角度,is_clock_wise= True仪表盘刻度是否是顺时针增长, title_label_opts= opts.GaugeTitleOpts()轮盘内标题文本项标签配置项, detail_label_opts= opts.GaugeDetailOpts(formatter="{value}%")轮盘内数据项标签配置项, pointer= opts.GaugePointerOpts()仪表盘指针配置项目,))

g = (Gauge().add('', [['上涨占比', 75]],title_label_opts=opts.LabelOpts(font_size=20, color="blue", font_family="Microsoft YaHei"),detail_label_opts=opts.GaugeDetailOpts(formatter='{value}%',offset_center=[0,80])))
#g.render_notebook()

02a380ca85066cce2ba106711025fd22.png

06

关系图Graph

关系图基本调用方法:(Graph(init_opts: opts.InitOpts = opts.InitOpts())  
.add(series_name='',nodes=关系图节点数据项列表,links=关系图节点间关系数据项列表,categories=关系图节点分类的类目列表,layout="force"图的布局,可选:'none' 不采用任何布局,使用节点中提供的 x, y 作为节点的位置;'circular' 采用环形布局;'force' 采用力引导布局,symbol='circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'关系图节点标记的图形,symbol_size=10关系图节点标记的大小, edge_length=50边的两个节点之间的距离,gravity=0.2# 节点受到的向中心的引力因子,))

#模拟连接
links=[{'source':'股票'+str(np.random.randint(1,21)),'target':'股票'+str(np.random.randint(1,21))} for i in range(20*18)]
l=[]
for i in links:l.extend(list(i.values()))
d={}
for w in l:d[w]=l.count(w)
#节点连接边数越多,节点size越大
nodes=[{'name':k,'symbolSize':v} for k,v in d.items()]g = (Graph().add("", nodes, links, repulsion=8000).set_global_opts(title_opts=opts.TitleOpts(title="模拟股票关系图")))
g.width = "100%"
g.render_notebook()

dad0b0831cc0d1a71b724b9cc9b9deec.png

pyecharts上的关系图还可以展示更复杂的模型,比如微博转发关系图,案例数据来自pyecharts官网。

with open("weibo.json", "r", encoding="utf-8") as f:    j = json.load(f)nodes, links, categories, cont, mid, userl = j
g = (Graph().add("",nodes,links,categories,repulsion=50,linestyle_opts=opts.LineStyleOpts(curve=0.2),label_opts=opts.LabelOpts(is_show=False),).set_global_opts(legend_opts=opts.LegendOpts(is_show=False),title_opts=opts.TitleOpts(title="微博转发关系图"),))
g.width = "100%"
g.render_notebook()

e21d8fb64021f658c11dca18aa8286f6.png

07

水球图Liquid

水球图基本调用方法:(Liquid()
.add('序列名称',data=系列数据[value1, value2, ….],shape=水球外形,有' circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow' 可选,color=波浪颜色, is_animation=True,是否显示波浪动画,is_outline_show= True是否显示边框 ))

l1 = (Liquid().add("今日涨停封板率", [0.65],center=["25%", "50%"]).set_global_opts(opts.TitleOpts(title="涨停板封板率",pos_left='center')))
l2 = (Liquid().add("昨日涨停封板率", [0.69],center=["70%", "50%"],is_outline_show=False))
grid = (Grid().add(l1, grid_opts=opts.GridOpts()).add(l2, grid_opts=opts.GridOpts()))
grid.render_notebook()

6f998b6f76265fa5e3ef9747e949a240.png

08

词云图

词云图基本调用方法和参数:(WordCloud()
.add(series_name='系列名称',data_pair=系列数据项,shape=有 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star' 可选,mask_image= 自定义的图片(支持jpg, jpeg, png, ico 的格式)支持本地文件路径,如果使用了 mask_image 之后第一次渲染会出现空白的情况,再刷新一次就可以了,word_gap=20单词间隔,word_size_range=# 单词字体大小范围,rotate_step=45旋转单词角度,width=词云图的宽度,height=词云图的高度)

#使用tushare获取新闻数据
import tushare as ts 
import jieba
import jieba.analyse
import re
token='输入在tushare pro上的token'
pro=ts.pro_api(token)
df=pro.news(src='sina', start_date='2022-03-27 09:00:00', end_date='2022-03-27 18:50:00')
#df.to_csv('20220327news.csv')
#df=pd.read_csv('20220327news.csv',index_col=0)
stopwords = [i.strip() for i in open('stopwords.txt').readlines()]def cut_word(sentence):text = jieba.lcut(''.join(re.findall('[\u4e00-\u9fa5]', sentence)), cut_all = False)for i in range(len(text)-1, -1, -1):if text[i] in stopwords:del text[i]return textnews_list = list(df.content.values)
word_list = [" ".join(cut_word(sentence)) for sentence in news_list]
new_text = ' '.join(word_list)
tags=jieba.analyse.extract_tags(new_text,topK=200,withWeight=True)
tf=dict((a[0],a[1]) for a in tags)
data=[[k,v] for k,v in tf.items()]
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\tkfy9\AppData\Local\Temp\jieba.cache
Loading model cost 0.573 seconds.
Prefix dict has been built successfully.
c = (WordCloud().add(series_name="热点分析", data_pair=data, word_size_range=[6, 66]).set_global_opts(title_opts=opts.TitleOpts(title="热点分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)),tooltip_opts=opts.TooltipOpts(is_show=True),))c.width = "100%"
c.render_notebook()

4b78fdfe16fee515d07082e04138161e.png

03

结语

可视化分析是数据解读和传达信息的重要窗口,是掌握金融量化不可或缺的基本技能。本文简要介绍了如何使用pyecharts构建饼图、日历图、仪表盘、地图、关系图、词云图等,并分享了这些图表在股票可视化分析上的应用实例。读者可根据自己的应用场景,在上述可视化模板的基础上进行拓展和深化。

参考资料:Pyechart官网(https://pyecharts.org/)

https://pywebio-charts.pywebio.online/?app=pyecharts

af91019dd44227bc85d437330e179b1f.png

关于Python金融量化

47983a481cfb80374b5f2e2e6ee1ff69.png

专注于分享Python在金融量化领域的应用。加入知识星球,可以免费获取30多g的量化投资视频资料、量化金融相关PDF资料、公众号文章Python完整源码、量化投资前沿分析框架,与博主直接交流、结识圈内朋友等。添加博主微信(sky2blue2)可咨询相关优惠信息。

6d8897a9220c852ca7e702613fd7b1b9.png

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

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

相关文章

python数据分析及可视化(十四)数据分析可视化练习-上市公司可视化数据分析、黑色星期五案例分析

上市公司数据分析 从中商情报网下载的数据,表格中会存在很多的问题,查看数据的信息有无缺失,然后做数据的清晰,有无重复值,异常数据,省份和城市的列名称和数据是不对照的,删除掉一些不需要的数…

一款开源的数据可视化分析平台,提供多种大屏模板,非常炫酷

点击关注公众号,实用技术文章及时了解 DataGear是一款开源的数据可视化分析平台,可自由制作任何您想要的数据可视化看板,支持接入SQL、CSV、Excel、HTTP接口、JSON等多种数据源。系统主要功能包括:数据管理、SQL工作台、数据导入/…

大数据可视化,可视化大屏,可视化报表,报表工具,BI - Rocket

大数据可视化,可视化大屏,可视化报表,报表工具,BI - Rocket ROCKET 零代码玩转数据可视化 Rocket 致力于使数据友好并且充满活力。 简单!简单!简单! 重要的事情说三遍。 图形化操作,布局灵活,所见即所得。 通过拖、…

【手把手教你】股票可视化分析之Pyecharts(一)

Pyecharts简介 Echarts 是百度基于JavaScript 开源的可视化图表库,而 Pyecharts 相当于是 Pythonecharts,即使用 Python 语言调用 echarts 的开源库,可以制作非常精美的图表。实际上 Python 可视化库有很多,包括 Matplotlib、Seab…

4.5k star,一款开源的数据可视化分析平台,提供多种大屏模板,非常炫酷

点击关注公众号,实用技术文章及时了解 DataGear是一款开源的数据可视化分析平台,可自由制作任何您想要的数据可视化看板,支持接入SQL、CSV、Excel、HTTP接口、JSON等多种数据源。系统主要功能包括:数据管理、SQL工作台、数据导入/…

干货: 如何避免让人一眼就看出来你的内容是ChatGPT写的?

人们对chatGPT的众多抱怨之一是它无法为每个用户提供想要内容。主要体现在其回答的内容乏味、机械,以至于如何让人很容易就看出来这是由ChaGPT写的。 试试这种方式解决这个问题吧(下文【】内文字需要自己根据自己想要生成的内容,找到合适的自…

《聊天机器人观后感》

第七章 人工智能 智力是一种适应变化的能力 ---------史蒂芬 霍金 什么是人工智能(AI) 但是我不予苟同,我想说的是:一句名言解释什么是人工智能。 指测试者与被测试者(一个人和一台机器)隔开的情况下&a…

这几十部电影,我看以后都写了观后感

没有对比就没有伤害,发现近3年来的观影频率出现了较大的波动。2016年忙得昏天暗地,竟然还抽空看了11部电影。如果片子还可以,我一般都会写篇影评。2017年影评写得少了,而且发现影评越来越难写了,一方面是自己有一个心理…

“硅谷之父”传奇:拯救斯坦福大学、培养大批高科技人才、指导创立惠普

作者 | 年素清 责编 | 王晓曼 出品 | 程序人生 (ID:coder _life) 有人说,当今硅谷之中99%的电子工业都与一个叫做弗雷德•特曼(Frederick Emmons Terman)有关。 弗雷德•特曼曾担任美国斯坦福大学校长&…

专栏 | 香侬科技独家对话斯坦福大学计算机学院教授Dan Jurafsky

专栏介绍:《香侬说》为香侬科技打造的一款以机器学习与自然语言处理为专题的访谈节目。由斯坦福大学,麻省理工学院, 卡耐基梅隆大学,剑桥大学等知名大学计算机系博士生组成的“香侬智囊”撰写问题,采访顶尖科研机构(斯…

chatgpt赋能python:Python强解WiFi密码:一种简单而有效的方式

Python强解WiFi密码:一种简单而有效的方式 无线网络连接是我们生活中的常见需求,但是忘记WiFi密码是一个让人感到很困扰的问题。幸运的是,Python可以让我们更容易地找回WiFi密码。本文将介绍如何使用Python强解WiFi密码。 什么是Python&…

有主题的图文内容创作 | AIGC实践

话说,昨天我发布了第一篇,内容由ChatGPT和Midjourney协助完成的文章:胡同与侏罗纪公园的时空交错 | 胡同幻想 在这篇文章中,大约70%图文内容由ChatGPT和Midjourney输出。我个人参与的部分,主要是提出指令(P…

【文本分析】基于粤港澳大湾区博物馆访客评价的文本分析

此文是2021年初在深圳大学文化产业研究院黄老师的指导下,与吴同学合作完成的,且于2021年4月发表于《文化深圳》杂志第一期。 文章目录 1 背景2 研究思路3 数据来源4 数据基本情况4.1 粤港澳大湾区的博物馆数据统计4.2 粤港澳大湾区各城市博物馆的平均得分…

维达东南亚新总部正式投入运营;西门子能源在粤港澳大湾区持续深化务实合作 | 美通企业日报...

美通社要闻摘要: 维达东南亚新总部正式投入运营。西门子能源在粤港澳大湾区持续深化务实合作。三星电子首款12纳米级DDR5 DRAM开发成功。日赛谷丽思卡尔顿隐世酒店将在2023年第二季度于四川九寨沟启幕。苏州AC酒店正式启幕。2023年君澜预计开业20家酒店。阿迪达斯和…

洲际酒店集团加码粤港澳大湾区和海南自贸港,三亚逸衡酒店、金普顿酒店将面世...

上海2021年7月29日 /美通社/ -- 作为最早进驻中国市场的国际酒店管理集团之一,洲际酒店集团在华37年来紧跟国家战略和区域政策发展,始终秉承践行“在中国为中国”的承诺。近年来,洲际酒店集团更是持续聚焦施力于包括粤港澳大湾区、海南自贸港…

开源网安亮相粤港澳大湾区CIO高峰论坛,保障企业数字化安全转型

近日,由深圳市工业化与信息化局、深圳市科学技术协会指导,深圳市CIO协会主办的“2023中国(深圳)数字化转型大会暨粤港澳大湾区CIO高峰论坛”圆满完成。开源网安作为拥有软件安全领域全链条产品的厂商,携多年来打造的国产化软件安全替代方案&a…

《区块链助力粤港澳大湾区一体化发展报告(2022)》发布

7月19日,中国(深圳)综合开发研究院主办的《数“链”大湾区——区块链助力粤港澳大湾区一体化发展报告(2022)》发布会在深圳举行。 报告提出,以区块链为代表的数字技术在破解粤港澳大湾区制度差异坚冰、支撑…

重磅!首届粤港澳大湾区新能源智能汽车大数据创新竞赛启动

赛事介绍 为推动汽车电动化、智能化、网联化、共享化发展,聚力建设“智车之城”、“超充之都”和新能源智能汽车解决方案的策源地、生产地,促进科技成果转化、高层次人才的引进与培养、培育,壮大新产业、新业态、新模式,基于广州市…

数字引领未来,第七届粤港澳大湾区跨界融合产业创新交流会圆满举行

据《中国数字经济发展报告(2022年)》显示,2021年,我国数字经济规模达到45.5万亿元,占GDP比重达到39.8%,数字经济在国民经济中的地位更加稳固、支撑作用更加明显,产业数字化转型对国家经济和企业…

我为什么鼓励你读博士?

点击上方“码农突围”,马上关注 这里是码农充电第一站,回复“666”,获取一份专属大礼包 真爱,请设置“星标”或点个“在看” 看过《水浒传》的朋友都知道,梁山的一百单八将因为各种理由加入了水寨,走上了劫…