基于Neo4j和Tushare数据构建小型金融知识图谱

   

2019.10.4-2019.10.6  

感兴趣的童鞋抓紧哦!


作者简介:合肥工业大学经济学院学生

640?wx_fmt=png
640?wx_fmt=png

前言

看到米哥和Libra的关于知识图谱的文章,又在近期完成证券分析的课设,想到了关联方分析能不能用知识图谱进行可视化操作,就运用neo4j进行了小型金融知识图谱尝试,基于tushare数据实现股票与行业、股东、概念股、高管信息的知识图谱。

 本项目主要实现逻辑:

2. 配置neo4j

数据获取

Libra获取的关联数据主要是行业信息,我这次做的全一点,主要采用的API接口有:stock_basic、top10_holders、concept、concept_detail。同时我还对东方财富中的高管信息进行爬取了,这个就不详述了,用requests包或者其他进行爬取(刚学习不会scrapy框架,代码差轻喷)。

640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png

获取数据代码如下,将获取的数据储存到csv文件中,neo4j支持csv格式:

import tushare as ts
import csv
import time
import pandas as pd

pro = ts.pro_api('1dbda79ce58d052196b7ddec1663d53e4ea20571195a1a6055aab0c7')

# 获取stock_basic
stock_basic = pro.stock_basic(list_status='L', fields='ts_code, symbol, name, industry')
# 重命名行,便于后面导入neo4j
basic_rename = {'ts_code': 'TS代码', 'symbol': '股票代码', 'name': '股票名称', 'industry': '行业'}
stock_basic.rename(columns=basic_rename, inplace=True)
# 保存为stock.csv
stock_basic.to_csv('stock.csv', encoding='gbk')

# 获取top10_holders
holders = pd.DataFrame(columns=('ts_code', 'ann_date', 'end_date', 'holder_name', 'hold_amount', 'hold_ratio'))
# 获取一年内所有上市股票股东信息(可以获取一个报告期的)
for i in range(3610):
    code = stock_basic['TS代码'].values[i]
    top10_holders = pro.top10_holders(ts_code=code, start_date='20180101', end_date='20181231')
    holders = holders.append(top10_holders)
    time.sleep(0.3)# 数据接口限制
# 保存为holders.csv
holders.to_csv('holders.csv', encoding='gbk')

# 获取concept,并查看概念分类数量
concept = pro.concept()
concept.to_csv('concept_num.csv', encoding='gbk')

# 获取concept_detail
concept_details = pd.DataFrame(columns=('id', 'concept_name', 'ts_code', 'name'))
for i in range(358):
    id = 'TS' + str(i)
    concept_detail = pro.concept_detail(id=id)
    concept_details = concept_details.append(concept_detail)
    time.sleep(0.3)
# 保存为concept_detail.csv
concept_details.to_csv('concept.csv', encoding='gbk')

获取所有concept_detail和holders用了一个蠢办法,本人自学学艺不精,望谅解,整个代码运行速度非常慢,大概10多分钟才结束,请教大佬如何优化代码。

配置Neo4j

因为没有深入学习过,就简单介绍一下neo4j。neo4j是一个高性能的,NOSQL图形数据库。比传统的关系型数据库快1000倍,neo4j将关系分为节点(nodes)和关系(relationships)两部分,节点和关系均可以有不同的属性。

1

下载Ne4j

官网:https://neo4j.com

2

配置Ne4j

 配置系统环境变量

NEO4J_HOME = C:\download\Neo4j\neo4j-community-3.5.5-windows\neo4j-community-3.5.5

Path = %NEO4J_HOME%\bin;

640?wx_fmt=png

3

运行Ne4j

以管理员身份在cmd运行neo4j.bat console

640?wx_fmt=png

4

访问Ne4j

neo4j是在网址查看数据库的,所以在浏览器使用http://localhost:7474/browser/网址查看即可。第一次启动会出现修改账号密码,默认账号密码均为neo4j。

640?wx_fmt=png

5

注册Ne4j服务

以管理员身份在cmd运行 neo4j install-serivce

数据处理

完成数据爬取和neo4j配置,neo4j对数据有一定要求,需要对数据进行处理才能导入neo4j。

640?wx_fmt=png

stock.csv文件

640?wx_fmt=png

executive.csv文件

640?wx_fmt=png

industry.csv文件

640?wx_fmt=png

holders.csv文件

640?wx_fmt=png

concep.csv文件

关系数据文件有execustive_stock.csv, holders_stock.csv, stock_concept.csv, stock_industry.csv等四个文件。(这里都差不多就展示两个文件)

 注意:开始和结束代表方向,需要注意一下。

640?wx_fmt=png

640?wx_fmt=png

 holders_stock.csv

=REPT(0,6-LEN(需要补充的单元格))&(需要补充的单元格),股票代码格式统一,防止导入生成图谱不对应

5. 在holders.csv文件中可以只有一个报告期的,不然做出来的图会出现4条线关系

导入Ne4j

1

导入数据

neo4j导入有两种方式,可以在浏览器中输入命令手动导入,也可以通过cmd运行neo4j-admin import进行导入,本文采用第二种方式。

neo4j-admin import --mode=csv --database=stock.db --nodes import/executive.csv --nodes import/stock.csv --nodes import/concept.csv --nodes import/industry.csv --relationships import/executive_stock.csv --relationships import/stock_industry.csv --relationships import/stock_concept.csv

其中--mode=csv代表导入数据类型,--database=stock.db代表导入数据库名称,--nodes代表导入节点,--relationships代表导入关系。

640?wx_fmt=png

数据库文件在\neo4j-community-3.5.5\data\databases

640?wx_fmt=png

2

连接数据库

参考文章:https://blog.csdn.net/swy520/article/details/79078422

640?wx_fmt=png

对标红代码进行修改,去掉前面#,修改后面数据库文件,之后cmd重启neo4j服务器即可连接成功。

查找关联信息

如果你的网页已经能显示如下页面说明你已经成功了,最后进行数据的查看,记得检查数据库名称。

640?wx_fmt=png

查看所有数据(勿试,会卡)

 match(n) return n

 match(n{股票代码:'601369'}) return n

640?wx_fmt=png

就会这两句,然后就是点点点的事情了,查询代码还需要具体学一下。

640?wx_fmt=png

640?wx_fmt=png
640?wx_fmt=png

小结

至此,所有工作都完成了,除了对股票高管、行业、投资方进行关联分析,还可以将公司新闻、增持股变化加入其中,但数据爬取困难程度也随之提高,本文主要对自己学习的一个总结,同时希望哪位大佬教教我怎么基于时间做知识图谱。

对源代码和本文数据文件有需要的小伙伴,请在本公众号私信回复“金融知识图谱”获得打包下载链接。

本文需要用到tushare Pro权限,如果需要 请点击“阅读原文”注册Tushare Pro账号获得。

推荐阅读



2019年10月4日-6日,杭州 

咨询请加微信,记得备注”工作坊”

1

640?wx_fmt=jpeg

欢迎扫码咨询!!



  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值