目录
一、外贸企业关系图谱的构建
说来惭愧,本科、研究生期间还没写过博客,正巧最近在写论文,想结合自己开发的项目来构思,于是就通过这篇博客记录一下使用Neo4j图数据库来做企业相似度查询的过程,方便以后参考。
这次外贸企业关系图谱的构建用到以前项目中测试库(Oracle)的数据,导入成csv格式后,再通过python的py2neo导入到neo4j中。
-----------由于数据涉及项目的私密信息,暂时就不分享出来了------------
1.从Oracle导出数据
该表在Oracle数据库中的部分结构如下:
目前数据库中的外贸企业数据约30多万条,经过两轮的数据清洗和过滤,我选出了约12万条数据导出,并保存为csv格式。
2.导入数据到Neo4j
Neo4j有自己的csv导入工具,还可以通过cypher语句导入csv格式的数据,但是这里我使用的是pyhon的py2neo库来完成数据的导入。
编写的python代码结构如下:
下面介绍每个函数的详细代码实现:
'''初始化,用于连接到Neo4j'''
def __init__(self, data):
self.data = data
self.g = Graph(
host="127.0.0.1", # neo4j 搭载服务器的ip地址
http_port=7474, # neo4j 服务器监听的端口号
user="neo4j", # 数据库user name
password="112233") # 密码
'''读取文件'''
def read_nodes(self):
# 共5类节点
enterprise = self.data['COMP_NAME_CH'] # 企业
region = set(self.data['PROVINCE_CH']) # 地区
if (np.nan in region):
region.remove(np.nan)
country = [] # 出口国家
for index, row in self.data.iterrows():
for r in row['EXPORT_COUNTRY_MXT'].split(','):
country.append(r)
# 企业类型:1-manufacture-生产型、2-trader-贸易型(贸信通)3-服务型
enterprise_type = ['生产型', '贸易型', '服务型'] # 企业类型
legal_representative = self.data['LEGAL_REPRESENTATIVE'] # 法人代表
# 构建节点实体关系
rels_region = [] # 企业-地区关系 locate
rels_country = [] # 企业-出口国家关系 export
rels_type = [] # 企业-企业类型关系 type
# rels_product = [] # 企业-产品关系 product
rels_legal = [] # 企业-法人代表关系 legal
for index, row in self.data.iterrows():
if (row['PROVINCE_CH'] is not np.nan):
rels_region.append([row['COMP_NAME_CH'], row['PROVINCE_CH']])
for r in row['EXPORT_COUNTRY_MXT'].split(','