Advertisement

python 金融知识图谱_从零搭建金融证券知识图谱-Part1

阅读量:

引言

几年前,在不经意间接触到了 Python 中的金融数据包 TUSHARE 的时候,他便激发了想要构建一个金融证券图谱的想法。

在疫情期间居家期间,凭借一股干劲将其彻底完成。为求篇幅不过于冗长,计划分四个文章梳理建设过程中的方法与经验。本文作为该系列的第一篇文章。数据收集与数据分析建模工作

数据抽取和实体对齐

图谱存储和图谱应用

图谱更新

我将在GitHub上发布所有代码,并以Jupyter Notebook的形式供感兴趣的人复制学习。方便他们一步步复现和学习相关内容。如果觉得这份知识对您有所帮助,请考虑给个Star表示感谢和支持!](https://github.com/kevin-meng/financial_stock_knowledge_graph)

1. 数据获取

TS Hushare offers a variety of financial data platforms at no cost, and it also provides corresponding Python data interfaces. The data it offers is also very comprehensive. One reason for choosing it is that the platform's data is quite extensive and easy to obtain. Additionally, since the platform cleans and standardizes its data, it significantly reduces the time needed for data cleaning and shortens the process of building a network chart.

目前来说,在使用最新版本的数据接口时会遇到针对不同类型的数据显示问题,并需要满足一定的积分门槛。在处理相关数据后发现现有账户的可用积分不足以完成此次操作无奈只能进行额外支付以获取激活码或游戏内虚拟货币。按照Tushare官方提供的接口文档进行筛选与提取所需的相关数据信息。

上市公司基本信息

上市公司管理层

公募基金列表

公募基金公司

公募基金持仓数据

具体代码如下:

import tushare as ts

import pandas as pd

import time

若 token 失效,可在公众号 知行并重 后台回复 tushare 获得最新 token

data_path = './stock_graph/'

ts.set_token('b6113c6733fb23cc9ee1249f5a61b0c0df033b1280d97cb770378df5')

pro = ts.pro_api()

1.1 股票列表

字段 = 'ts_code、symbol、name等字段以及area、industry等信息'

total_stocks = pro.stock_basic(fields = columns)

total_stocks.to_csv(data_path + 'company_lsit_all.csv')

1.2 上市公司基本信息

这部分数据与上面的上市公司名录互补,提取所在省份和城市。

df_szse = pro.stock_company(exchange = "SZSE")

df_sse = pro.stock_company(exchange = "SSE")

合并 深交所 和 上交所 股票

df_company_detail = pd.concat([df_szse,df_sse])

df_company_detail.to_csv('./stock_graph/company_detail_all.csv',index=False)

1.3 上市公司管理层

用户需要2000积分才可以调取,并且有访问频次限制。这里写个函数去循环。

def get_data(share_list,func,data_path='./stock_graph/',filename='temp.csv'):

for i,comp in enumerate(share_list):

df = func(ts_code=comp)

if i == 0:

df.to_csv(data_path + filename,index=False, mode='a')

else:

df.to_csv(data_path + filename,index=False, mode='a', header=None)

if i % 50 ==0:

print(comp,'num:',i)

抱歉,您每分钟最多访问该接口80次

time.sleep(1)

share_list = list(set(df_company_detail['ts_code']))

Retrieve the data using the specified share list and parameters.

1.4 公募基金列表

描述:收集公募基金的数据清单(涵盖境内与境外基金管理产品);积分要求方面显示:调用该功能需支付1500积分;共有10859个基金

df_e = pro.fund_basic(market='E') # 交易市场: E场内 O场外(默认E)

df_o = pro.fund_basic(market='O') # 交易市场: E场内 O场外(默认E)

df_all = pd.concat([df_e,df_o])

保存数据

df_all.to_csv('./stock_graph/fund_basic.csv',index=False)

1.5 公募基金公司

df = pro.fund_company()

df.to_csv('./stock_graph/fund_company.csv', index=False)

1.6 公募基金持仓数据

获取公募基金持仓数据,季度更新 积分:用户需要至少1000积分才可以调取,

fund_list = list(set(df_all.ts_code))

执行数据获取操作 data_get(fund_list, func=pro._fund_port, data_path=data_path, filename=f'data/fund_portfolio.csv')

2. 构建数据模型

如果你不熟悉金融市场, 不妨先记下这样的关联: 在证券市场, 有众多种类繁多的股票与基金. 股票是由公司上市发行而来;而基金则将募集的资金用于投资于不同的上市公司. 当然实际情况会更加复杂.

在整理过程中,在收集到的数据基础上进行了系统性的整理,在识别关键节点的同时也明确了各类型节点之间的相互关联情况。

实体(节点)方面省份

城市

公司(上市公司 \ 基金管理公司 \ 基金托管公司)

人(上市公司管理层)

基金 包括场内和场外基金

行业

关系方面城市 - [IN_PROVINCE] - > 省份

公司(上市公司\基金管理公司\ 基金托管公司) - [IN_CITY] - > 城市

公司(上市公司) - [HAS_MANGER] - > 人(上市公司管理层) [6类]

公司(上市公司) - [IN_INDUSTRY] - > 行业

基金 - [HAS_MANAGEMNET] - > 公司(基金管理公司)

基金 - [HAS_CUSTODIAN] - > 公司(基金托管公司)

基金 - [IN_PORTFOLIO] -> 公司(上市公司)

初步确定数据模型如下。

总结

基于前面所述的两个步骤进行操作后, 我们完成了数据清洗以及数据分析模型的构建流程, 并对收集到的数据进行了初步筛选与整理, 最终确定了用于后续分析的关键指标以及个人特别关注的数据项

在进行数据分析模型构建的过程中, 我们去除了大量不必要的字段, 并专注于保留那些关键指标以及个人特别关注的数据项

这与图谱化建设所遵循的原则一致

这不仅有助于提高查询效率, 同时也能有效降低处理更新时带来的复杂性

如果业务需求确实涉及一些非核心但重要的信息源, 则可能采用关系型数据库来进行存储处理

特别注明:以下是我这个公众号"知行并重"诚邀关注。我将在这里带来关于金融风控、图挖掘以及知识图谱的深度解析与共同探讨。

全部评论 (0)

还没有任何评论哟~