深A所有2667只股票的相关性分析


说明

将深A所有2667只股票进行相关性分析,选取相关系数超过0.5的股票并作图。

预览



可以清晰看出几个酒类股票的关联

需求

  • numpy
  • requests
  • pyecharts
  • json

运行

下载深A所有股票历史信息爬取——共2667支、6217863条信息。 下载本项目,运行data_load.py。

代码

import json
import numpy as np
import requests
from pyecharts import options as opts
from pyecharts.charts import Graph

hd = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                    'Chrome/99.0.4844.82 Safari/537.36'}
url = 'https://xuanguapi.eastmoney.com/Stock/JS.aspx?type=xgq&sty=xgq&token=eastmoney&c=[gf2]&p=1&jn=kuAPFImR&ps=500&s=stockcode&st=1&r=1659237663728'
response = requests.get(url, headers=hd)
info = response.text
info = info[13:len(info)]
info = json.loads(info)
SA_list = {}
for i in info['Results']:
    SA_list[i[2:8]] = i[9:len(i) - 2]
all_lines = []
data = []
for i in range(1, 18):
    temp = []
    with open('data' + str(i) + '.json', 'r') as read_file:
        temp = json.load(read_file)
    for k in range(len(temp)):
        data.append(temp[k])
c_data = []

for i in range(len(data)):
    temp = []
    for j in range(i + 1, len(data)):
        b=[]
        c=[]
        if len(data[i][1]) >= len(data[j][1]):
            for k in range(len(data[j][1])):
                if data[i][1][k][0] == data[j][1][k][0]:
                    b.append(float(data[i][1][k][3]))
                    c.append(float(data[j][1][k][3]))
                if len(b)>500:
                    break
        else:
            for k in range(len(data[i][1])):
                if data[i][1][k][0] == data[j][1][k][0]:
                    b.append(float(data[i][1][k][3]))
                    c.append(float(data[j][1][k][3]))
                if len(b)>500:
                    break
        if len(b)>50:
            ab=np.array(b)
            ac=np.array(c)
            res = np.corrcoef(ab, ac)
            temp.append([res[0, 1],data[i][0],data[j][0]])
    c_data.append(temp)

target_items = []
for i in range(len(c_data)):
    for j in range(len(c_data[i])):
        if c_data[i][j][0] >= 0.5:
            target_items.append(c_data[i][j])

for i in range(len(target_items)):
    target_items[i][1] = SA_list[target_items[i][1]]
    target_items[i][2] = SA_list[target_items[i][2]]

SA_list_demo = set()

for i in range(len(target_items)):
    SA_list_demo.add(target_items[i][1])
    SA_list_demo.add(target_items[i][2])
SA_list_demo = list(SA_list_demo)

nodes = []
for i in range(len(SA_list_demo)):
    nodes.append(opts.GraphNode(name=SA_list_demo[i], symbol_size=10))
links = []
for i in range(len(target_items)):
    links.append(opts.GraphLink(source=target_items[i][1], target=target_items[i][2]))
c = (
    Graph()
    .add(
        "",
        nodes,
        links,
        repulsion=400,
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Graph-GraphNode-GraphLink-WithEdgeLabel")
    )
    .render("graph_with_edge_options.html")
)
Social media & sharing icons powered by UltimatelySocial