引言
本文作为该系列的第四篇文章,也是最后一篇。主要介绍金融证券知识图谱的更新与。
- 数据获取和数据模型构建
- 数据抽取和实体对齐
- 知识图谱应用
- 知识图谱更新
全部代码已用 jupyter notebook 的形式开源在 Github 上,感兴趣的朋友可以进行复现。如果觉得有帮助,那就给个star吧~
https://github.com/kevin-meng/financial_stock_knowledge_graphgithub.com1. 前期准备
需要用到的软件:
- py2neo:4.3.0 # neo4j 的 python 库
- apoc: 3.4.03 # neo4j 工具包
公众号后台回复neo4j插件
可获取具体插件安装方法。
具体用法可参考下面的网址。 网址:https://neo4j.com/docs/labs/apoc/3.5/graph-updates/periodic-execution/
2. 更新图谱
整个更新过程大致可分为三个阶段:
- 获取最新数据
- 筛选需要更新的节点和关系数据
- 更新图数据库
2.1 获取最新数据
项目代码中这一部分相对简单,直接修改时间,重新调取 Tushare
接口即可。 获得最新数据后,按照当初建设时完成数据抽取和实体对齐等一系列工作,并最终形成,6类节点数据表和7类关系数据表,并将其写入文件中。
在实际业务中,这一环节会稍有不同。首先,获取数据通常是直接从数仓中提取。其次,抽取后的节点和关系数据 通常会写入数据库或者直接入仓。
2.2 筛选需要更新数据
主要是对比前后数据差异,只筛选出需要更新的数据。在更新图谱时如何定位到需更新的边是关键。 这里需要重点说下 董事高管与上市公司之间的关系处理,因为不同与其他节点之间只有一条关系的情况,即通过两个节点就可定位需更新的边; 而董事高管与上市公司之间往往存在多条关系。这样很好理解,因为现实中,会有下面两种常见情况
- 兼任
- 不同任期 因此,针对上面两种情况,这里通过人ID、上市公司、职位和上任时间,去筛选需要更行的边。因为涉及四个字段的拼接,为了提高速度,先将这四个字段进行md5 hash 处理作为主键。从下面是代码
import pandas as pd
import hashlib
def get_md5(string):
""" Get md5 according to the string """
byte_string = string.encode("utf-8")
md5 = hashlib.md5()
md5.update(byte_string)
result = md5.hexdigest()
return result
def data_merge(filename,path_origin,path_new):
""" 合并数据 """
data_origin = pd.read_csv(path_origin + filename,header=None,names=names,dtype=str)
data_new = pd.read_csv(path_new + filename,header=None,names=names,dtype=str)
if types &#