股票数据相关性分析

导入相关包

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
import akshare as ak
from sklearn import cluster, covariance, manifold
%matplotlib inline #Jupyter Notebook显示图形专用
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

获取指数成分

dd=ak.index_stock_cons_sina('000300')
dd

获取相关股票价格数据

def get_50_code():#获取上证50成分股代码#dd=pro.index_weight(index_code='000016.SH')dd=ak.index_stock_cons_sina('000300')#dd=dd[dd.trade_date=='20211217']codes=dd.symbol.values#获取全市场股票基本信息#df = pro.stock_basic(exchange='', list_status='L')#df = df[df.ts_code.isin(codes50)]names=dd.name.valuesstocks=dict(zip(codes,names))#print(stocks)return stocksdef get_data(code,start='20191210',end='20220207'):df=ak.stock_zh_a_daily(symbol=code)df.index=pd.to_datetime(df.date)df=df.sort_index()#print(df)return df#将股票数据横向拼接 
codes, names = np.array(sorted(get_50_code().items())).T
data=pd.DataFrame({name:(get_data(code).close-get_data(code).open) for code,name in zip(codes,names)})
variation=data.dropna().values
#data.head()

codes, names = np.array(sorted(get_50_code().items())).T
data=pd.DataFrame({name:(get_data(code).close-get_data(code).open) 
                   for code,name in zip(codes,names)})
variation=data.dropna().values

根据相关系数进行分组

# 相关系数
edge_model = covariance.GraphicalLassoCV()
X = variation.copy()
X /= X.std(axis=0)
edge_model.fit(X)
_, labels = cluster.affinity_propagation(edge_model.covariance_)
n_labels = labels.max()for i in range(n_labels + 1):print('Cluster %i: %s' % ((i + 1), ', '.join(names[labels == i])))

可视化

# 数据可视化
# 为了将上述聚类分析进行可视化,需要在一个2D画布上布置不同的股票。为此,需要使用“流形”技术来检索二维嵌入。模型的输出组合成一个二维图,其中节点代表股票名称,边表示:
# 集群标签用于定义节点的颜色使用稀疏协方差模型来显示边缘的强度二维嵌入用于在平面中定位节点
node_position_model = manifold.LocallyLinearEmbedding(n_components=2, eigen_solver='dense', n_neighbors=6)embedding = node_position_model.fit_transform(X.T).T# 可视化
plt.figure(1, facecolor='w', figsize=(10, 8))
plt.clf()
ax = plt.axes([0., 0., 1., 1.])
plt.axis('off')# 计算偏相关系数
partial_correlations = edge_model.precision_.copy()
d = 1 / np.sqrt(np.diag(partial_correlations))
partial_correlations *= d
partial_correlations *= d[:, np.newaxis]
non_zero = (np.abs(np.triu(partial_correlations, k=1)) > 0.02)# 使用嵌入的坐标绘制节点
plt.scatter(embedding[0], embedding[1], s=100 * d ** 2, c=labels,cmap=plt.cm.nipy_spectral)# 画相互关联的边
start_idx, end_idx = np.where(non_zero)
segments = [[embedding[:, start], embedding[:, stop]]for start, stop in zip(start_idx, end_idx)]
values = np.abs(partial_correlations[non_zero])
lc = LineCollection(segments,zorder=0, cmap=plt.cm.hot_r,norm=plt.Normalize(0, .7 * values.max()))
lc.set_array(values)
lc.set_linewidths(15 * values)
ax.add_collection(lc)#向每个节点添加一个标签,难点在于定位标签,以避免与其他标签重叠
for index, (name, label, (x, y)) in enumerate(zip(names, labels, embedding.T)):dx = x - embedding[0]dx[index] = 1dy = y - embedding[1]dy[index] = 1this_dx = dx[np.argmin(np.abs(dy))]this_dy = dy[np.argmin(np.abs(dx))]if this_dx > 0:horizontalalignment = 'left'x = x + .002else:horizontalalignment = 'right'x = x - .002if this_dy > 0:verticalalignment = 'bottom'y = y + .002else:verticalalignment = 'top'y = y - .002plt.text(x, y, name, size=10,horizontalalignment=horizontalalignment,verticalalignment=verticalalignment,bbox=dict(facecolor='w',edgecolor=plt.cm.nipy_spectral(label / float(n_labels)),alpha=.6))plt.xlim(embedding[0].min() - .15 * embedding[0].ptp(),embedding[0].max() + .10 * embedding[0].ptp(),)
plt.ylim(embedding[1].min() - .03 * embedding[1].ptp(),embedding[1].max() + .03 * embedding[1].ptp())plt.show()

效果图

 

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

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

相关文章

分享一个辅助分析内存泄漏的脚本

最近给系统做了一点优化,前几天去查看系统监控,想看看上线前后cpu使用率曲线变化情况。查看的时候意外发现上线前后内存占用相差不少,20%以上。 本来我没怎么在意这个问题,因为我们系统会在运行过程中缓存部分数据内容。但客户觉得…

专访刘伟:软件开发人员的内功修炼之道

摘要:数学修养对软件开发之路起着什么作用?码农如何修炼自己的内功并成长为优秀的软件开发员?带着相关思考,社区之星第10期采访了中南大学副教授——刘伟。他对数学修养、设计模式、软件架构和重构方面的独特见解,相信…

地址解析协议 (ARP) 是什么

地址解析协议 (ARP) 是通过解析网路层地址来找寻数据链路层地址的一个在网络协议包中极其重要的网络传输协议。 ARP是通过网络地址(例:IPv4)来定位MAC地址 (也称为乙太地址)。 ARP已经在很多网路层和数据链接层之间得以实现,包括IPv4,Chaosn…

04.React事件 方法、 React定义方法的几种方式 获取数据 改变数据 执行方法传值...

2019独角兽企业重金招聘Python工程师标准>>> 一.基本用法 在以类继承的方式定义的组件中,为了能方便地调用当前组件的其他成员方法或属性(如:this.state),通常需要将事件处理函数运行时的 this 指向当前组件…

代码之美——Doom3源代码赏析

摘要:Dyad作者、资深C工程师Shawn McGrathz在空闲时翻看了Doom3的源代码,发出了这样的惊叹:“这是我见过的最整洁、最优美的代码!”“Doom 3的源代码让我对那些优秀的程序员刮目相看。”因此有了本文。 背景介绍: Doom…

文件基本处理

1 打开文件,将文件句柄赋值给一个变量 2 拿句柄对文件进行操作 3 关闭文件 将一个文件第一行写道另外一个文件 f open("test","r",encoding"utf-8") # open找的是系统的编码 x f.readlines() f.close() f1 open("test1"…

代码审查:程序员内炼之道

摘要:“关注并弄清楚桥梁修建细节,否则你建起来的桥梁有可能坍塌。”代码审查更重要的是一种技术分享或者代码共享。程序员如何提升自我修炼之道,欢迎来支招。 代码审查更重要的是一种技术分享或者代码共享。在审查过程中,通过被…

排序代码(python,c++) 及 基本算法复杂度

0.导语 本节为手撕代码系列之第一弹,主要来手撕排序算法,主要包括以下几大排序算法: 直接插入排序 冒泡排序 选择排序 快速排序 希尔排序 堆排序 归并排序 1.直接插入排序 【算法思想】 每一步将一个待排序的记录,插入到前面…

TCP/IP四层模型与OSI参考模型

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 TCP/IP四层模型: 1.链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算…

还驾驭不了4核? 别人已模拟出百万核心上的并行

摘要:不管是台式机还是笔记本,四核双核都已经不是新鲜的事了。计算机领域的你可能已经认识到了给电脑选配4核的处理器完全是一种浪费,因为大多数的程序都不支持多核心的并行处理。然而斯坦福的计算机科学家最近公布,他们已经模拟出…

Django内置权限扩展案例

当Django的内置权限无法满足需求的时候就自己扩展吧~ 背景介绍 overmind项目使用了Django内置的权限系统,Django内置权限系统基于model层做控制,新的model创建后会默认新建三个权限,分别为:add、change、delete,如果给…

Flutter Mac iOS 环境配置

官方文档:flutter.io/docs/get-st… 1.需要的命令行工具 bash curl git 2.x mkdir rm unzip which 2.SDK下载地址 flutter_macos_v1.0.0-stable.zip storage.googleapis.com/flutter_inf… 3.解压Flutter SDK cd ~/Flutter/SDK $ unzip ~/Downloads/flutter_macos_v…

IntelliJ IDEA中新建JAVA WEB项目、maven项目

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 在IntelliJ IDEA 中新建一个Web应用项目。 1、 在主界面顶部菜单栏依次“File”-"New"-"Project..." 2、在对话框中…

S/4HANA业务角色概览之订单到收款篇

2019独角兽企业重金招聘Python工程师标准>>> 大家好我叫Sean Zhang,中文名张正永。目前在S/4HANA产品研发部门任职产品经理,而这一阶段要从2017年算起,而在那之前接触更多还是技术类的,比如做过iOS、HANA、ABAP、UI5等…

ItelliJ IDEA开发工具使用—创建一个web项目

转自:https://blog.csdn.net/wangyang1354/article/details/50452806概念需要明确一下IDEA中的项目(project)与eclipse中的项目(project)是不同的概念,IDEA的project 相当于之前eclipse的workspace,IDEA的M…

极客无极限 一行HTML5代码引发的创意大爆炸

摘要:一行HTML5代码能做什么?国外开发者Jose Jesus Perez Aguinaga写了一行HTML5代码的文本编辑器。这件事在分享到Code Wall、Hacker News之后,引起了众多开发者的注意,纷纷发表了自己的创意。 这是最初的HTML5代码,它…

DOCKER windows 7 详细安装教程

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 DOCKER windows安装 DOCKER windows安装 1.下载程序包2. 设置环境变量3. 启动DOCKERT4. 分析start.sh5. 利用SSH工具管理6. 下载镜像 6.1…

芝麻信用免押金成趋势 报告称租赁经济有望突破10万亿元

中新网1月16日电 “很多物品都是租来的,但生活不是。”如今,越来越多的年轻人选择了“租”生活,从房子到车子,从服饰到电脑,甚至玩具、婴儿车,全都可以租用,租赁已成为当下年轻人追求品质生活的…

开发者成功学:扔掉你那些很sexy的想法

摘要:在开发者的世界里,开发iPhone应用并不像表面那么光鲜,收支不成正比是常有之事,劳心劳力开发的应用无人问津更是屡见不鲜。走出了开发的一小步却难以迈出销售推广上的一大步,究竟如何才能将应用卖出去并获取利润&a…

html-body相关标签

一 字体标签 字体标签包含&#xff1a;h1~h6、<font>、<u>、<b>、<strong><em>、<sup>、<sub> 标题 标题使用<h1>至<h6>标签进行定义。<h1>定义最大的标题&#xff0c;<h6>定义最小的标题。具有align属性&a…