手把手教学构建证券知识图谱/知识库(含码源):网页获取信息、设计图谱、Cypher查询、Neo4j关系可视化展示

简介: 手把手教学构建证券知识图谱/知识库(含码源):网页获取信息、设计图谱、Cypher查询、Neo4j关系可视化展示

手把手教学构建证券知识图谱/知识库(含码源):网页获取信息、设计图谱、Cypher查询、Neo4j关系可视化展示

demo展示:

  • 代码结构
stock-knowledge-graph/
├── __init__.py
├── extract.py  # extract html pages for executives information
├── stock.py  # get stock industry and concept information
├── build_csv.py  # build csv files that can import neo4j
├── import.sh
├── data
│   ├── stockpage.zip
│   ├── executive_prep.csv
│   ├── stock_industry_prep.csv
│   ├── stock_concept_prep.csv
│   └── import  # import directory
│       ├── concept.csv
│       ├── executive.csv
│       ├── executive_stock.csv
│       ├── industry.csv
│       ├── stock.csv
│       ├── stock_concept.csv
│       └── stock_industry.csv
├── design.png
├── result.txt
├── img
│   ├── executive.png
│   └── executive_detail.png
├── import.report
├── README.md
└── requirements.txt

码源下载见文末跳转

码源下载见文末跳转

1.数据源

本项目需要用到两种数据源:一种是公司董事信息,另一种是股票的行业以及概念信息。

  • 公司董事信息

    这部分数据包含在data目录下的stockpage压缩文件中,⾥面的每一个文件是以XXXXXX.html命名,其中XXXXXX是股票代码。这部分数据是由同花顺个股的⽹页爬取而来的,执行解压缩命令unzip stockpage.zip即可获取。比如对于600007.html,这部分内容来自于http://stockpage.10jqka.com.cn/600007/company/#manager

  • 股票行业以及概念信息

    这部分信息也可以通过⽹上公开的信息得到。在这里,我们使用Tushare工具来获得,详细细节见之后具体的任务部分。

2.从⽹页中抽取董事会的信息

在我们给定的html文件中,需要对每一个股票/公司抽取董事会成员的信息,这部分信息包括董事会成员“姓名”、“职务”、“性别”、“年龄”共四个字段。首先,姓名和职务的字段来自于:

在这里总共有12位董事成员的信息,都需要抽取出来。另外,性别和年龄字段也可以从下附图里抽取出来:

最后,生成一个 executive_prep.csv文件,格式如下:

高管姓名 性别 年龄 股票代码 职位
朴明志 51 600007 董事⻓/董事
高燕 60 600007 执⾏董事
刘永政 50 600008 董事⻓/董事
··· ··· ··· ··· ···

注:建议表头最好用相应的英文表示。

3.获取股票行业和概念的信息

分类数据_提供股票的分类信息数据,从股票类型的不同角度进行数据分类,在一些统计套利方法的应用中,时常会以股票的分类来做切入,比如对某些行业或概念进行阶段统计来决定近期的交易策略等。TuShare 提供的分类数据主要包括以下类别:

  • 行业分类
  • 概念分类
  • 地域分类
  • 中小板分类
  • 创业板分类
  • 风险警示板分类
  • 沪深 300 成份股及权重
  • 上证 50 成份股
  • 中证 500 成份股
  • 终止上市股票列表
  • 暂停上市股票列表

  • 行业分类

在现实交易中,经常会按行业统计股票的涨跌幅或资金进出,本接口按照 sina 财经对沪深股票进行的行业分类,返回所有股票所属行业的信息。考虑到是一次性在线获取数据,调用接口时会有一定的延时,请在数据返回后自行将数据进行及时存储。sina 财经提供的行业分类信息大致如下图所示:

返回值说明:

  • code:股票代码
  • name:股票名称
  • c_name:行业名称

对于这部分信息,我们可以利⽤工具Tushare来获取,官网为http://tushare.org/ ,使用pip命令进行安装即可。下载完之后,在python里即可调用股票行业和概念信息。参考链接:http://tushare.org/classifying.html#id2

通过以下的代码即可获得股票行业信息,并把返回的信息直接存储在stock_industry_prep.csv文件里。

import tushare as ts
df = ts.get_industry_classified()
# TODO 保存到"stock_industry_prep.csv"

类似的,可以通过以下代码即可获得股票概念信息,并把它们存储在stock_concept_prep.csv文件里。

df = ts.get_concept_classified()
# TODO 保存到“stock_concept_prep.csv”

4.设计知识图谱

设计一个这样的图谱:

  • 创建“人”实体,这个人拥有姓名、性别、年龄

  • 创建“公司”实体,除了股票代码,还有股票名称

  • 创建“概念”实体,每个概念都有概念名

  • 创建“行业”实体,每个行业都有⾏业名

  • 给“公司”实体添加“ST”的标记,这个由LABEL来实现

  • 创建“人”和“公司”的关系,这个关系有董事长、执行董事等等

  • 创建“公司”和“概念”的关系

  • 创建“公司”和“行业”的关系

设计结果如下:

注:实体名字和关系名字需要易懂,对于上述的要求,并不一定存在唯一的设计,只要能够覆盖上面这些要求即可。“ST”标记是⽤用来刻画⼀个股票严重亏损的状态,这个可以从给定的股票名字前缀来判断,背景知识可参考百科ST股票,“ST”股票对应列表为['*ST', 'ST', 'S*ST', 'SST']。

ST 股票,意即“特别处理”的股票。该政策针对的对象是出现财务状况或其他状况异常的。1998年4月22日,沪深交易所宣布,将对财务状况或其它状况出现异常的上市公司股票交易进行特别处理(Special Treatment),由于“特别处理”,在简称前冠以 ST,因此这类股票称为 ST 股。

5.创建可以导⼊Neo4j的csv文件

在前两个任务里,我们已经分别生成了 executive_prep.csv, stock_industry_prep.csv, stock_concept_prep.csv,但这些文件不能直接导入到Neo4j数据库。所以需要做⼀些处理,并生成能够直接导入Neo4j的csv格式。
我们需要生成这⼏个文件:executive.csv, stock.csv, concept.csv, industry.csv, executive_stock.csv,
stock_industry.csv, stock_concept.csv。对于格式的要求,请参考:https://neo4j.com/docs/operations-manual/current/tutorial/import-tool/

6.利用上面的csv文件生成数据库

neo4j_home$ bin/neo4j-admin import --id-type=STRING --nodes executive.csv --nodes stock.csv --nodes concept.csv --nodes industry.csv --relationships executive_stock.csv --relationships stock_industry.csv --relationships stock_concept.csv

这个命令会把所有的数据导入到Neo4j中,数据默认存放在 graph.db 文件夹里。如果graph.db文件夹之前已经有数据存在,则可以选择先删除再执行命令。

把Neo4j服务重启之后,就可以通过localhost:7474观察到知识图谱了。

注意:这些csv要放到~/.config/Neo4j Desktop/Application/neo4jDatabases/database-xxxx/installation-4.0.4下,即与bin文件夹同级,否则需要绝对路径

简单查询命令

# 查询node
MATCH (n:Concept) RETURN n LIMIT 25
# 查询relationship
MATCH p=()-[r:industry_of]->() RETURN p LIMIT 100

7.基于构建好的知识图谱,通过编写Cypher语句回答如下问题

(1) 有多少个公司目前是属于 “ST”类型的?

match (n:ST) return count(distinct(n))
104

(2) “600519”公司的所有独立董事人员中,有多少人同时也担任别的公司的独立董事职位?

MATCH (m:Company{code:'600519'})<-[:employ_of{jobs:'独立董事'}]-(n:Person)-[:employ_of{jobs:'独立董事'}]->(q:Company)
RETURN count(distinct(n))
3

(3) 有多少公司既属于环保行业,又有外资背景?

MATCH (:Concept{name:'外资背景'})<-[:concept_of]-(m:Company)-[:industry_of]-(:Industry{name:'环保行业'})
RETURN count(distinct(m))
0

(4) 对于有锂电池概念的所有公司,独立董事中女性人员比例是多少?

MATCH (m:Concept{name:'锂电池'})<-[:concept_of]-(n:Company)<-[:employ_of{jobs:'独立董事'}]-(p:Person{gender:'女'})
MATCH (m:Concept{name:'锂电池'})<-[:concept_of]-(n:Company)<-[:employ_of{jobs:'独立董事'}]-(p2:Person)
RETURN count(distinct(p))*1.0/count(distinct(p2))
0.3541666666666667

8.构建人的实体时,重名问题具体怎么解决?

(1) 最好的方式是用身份证或者其他唯一能确定人的方式去关联。
(2) 在本例中,我用 姓名、年龄、性别3个字段做唯一的,将这3个字段做md5。

码源下载见文末跳转

码源下载见文末跳转

更多优质内容请关注公号&知乎:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。

相关文章
|
10天前
|
存储 人工智能 自然语言处理
基于LLamaIndex构建企业级私有知识库:RAG Workflow工作流详解
【11月更文挑战第12天】随着生成式AI的快速发展,企业对智能化信息检索和生成的需求日益增加。传统的知识库系统往往局限于静态的数据存储和查询,难以满足复杂多变的业务需求。而检索增强生成(RAG, Retrieval-Augmented Generation)技术的出现,为企业级私有知识库的建设提供了新的解决方案。LLamaIndex作为专为LLMs(大型语言模型)设计的私有知识索引工具,结合RAG Workflow工作流,能够构建高效、智能的企业级私有知识库,满足企业对于知识管理和智能问答的多样化需求。
36 4
|
1月前
|
存储 人工智能 算法
精通RAG架构:从0到1,基于LLM+RAG构建生产级企业知识库
为了帮助更多人掌握大模型技术,尼恩和他的团队编写了《LLM大模型学习圣经》系列文档,包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构,基于LLM+RAG构建生产级企业知识库》和《从0到1吃透大模型的顶级架构》。这些文档不仅系统地讲解了大模型的核心技术,还提供了实战案例和配套视频,帮助读者快速上手。
精通RAG架构:从0到1,基于LLM+RAG构建生产级企业知识库
Nyx
|
30天前
|
算法
文档智能和检索增强生成构建知识库
本文介绍了文档智能(Document Mind)与检索增强生成(RAG)结合使用的原理及其优势。文档智能负责解析和结构化文档内容,RAG则利用这些数据提供准确的问答服务。部署过程中,清晰的步骤指导和详细的文档帮助快速解决问题。方案适用于企业知识库、客户支持系统等场景,但在处理大文档和复杂格式时需进一步优化。
Nyx
50 0
|
1月前
|
机器学习/深度学习 自然语言处理 自动驾驶
深度学习之常识知识库构建
基于深度学习的常识知识库构建是一项旨在自动化获取和组织广泛的常识性信息的技术,它通过深度学习模型从文本、图像、语音等多种数据源中提取出隐含的常识知识,并构建一个可以被机器理解和应用的知识库。
44 4
|
26天前
|
机器学习/深度学习 数据采集 人工智能
文档智能和检索增强生成(RAG)——构建LLM知识库
本次体验活动聚焦于文档智能与检索增强生成(RAG)结合构建的LLM知识库,重点测试了文档内容清洗、向量化、问答召回及Prompt提供上下文信息的能力。结果显示,系统在自动化处理、处理效率和准确性方面表现出色,但在特定行业术语识别、自定义向量化选项、复杂问题处理和Prompt模板丰富度等方面仍有提升空间。
65 0
|
1月前
|
机器学习/深度学习 数据采集 人工智能
大模型体验报告:阿里云文档智能 & RAG结合构建LLM知识库
大模型体验报告:阿里云文档智能 & RAG结合构建LLM知识库
|
4月前
|
自然语言处理 安全 开发者
在构建知识库时,如何有效管理领域术语和同义词信息
在构建知识库时,如何有效管理领域术语和同义词信息
|
6月前
|
机器学习/深度学习 存储 数据可视化
构建个人知识库:Notion vs Roam Research
【5月更文挑战第12天】Notion和Roam Research是两款知名的知识库工具。Notion以其丰富的文本编辑、灵活的笔记组织和强大的集成能力脱颖而出,适合需要多平台同步和精美排版的用户。Roam Research则以双向链接和块概念为核心,构建知识网络,便于发现信息间的关联,适合深度学习和探索性思考。选择取决于个人需求和偏好。
|
6月前
|
自然语言处理 API 数据安全/隐私保护
通过阿里云Milvus和通义千问快速构建基于专属知识库的问答系统
本文展示了如何使用阿里云向量检索 Milvus 版和灵积(Dashscope)提供的通用千问大模型能力,快速构建一个基于专属知识库的问答系统。在示例中,我们通过接入灵积的通义千问 API 及文本嵌入(Embedding)API 来实现 LLM 大模型的相关功能。
通过阿里云Milvus和通义千问快速构建基于专属知识库的问答系统
|
6月前
|
存储 弹性计算 运维
自动化客服响应与知识库查询
【4月更文挑战第30天】
78 0

热门文章

最新文章