python将csv数据导入neo4j

参考链接:https://github.com/jm199504/Financial-Knowledge-Graphs/tree/master

python 复制代码
from pandas import DataFrame
from py2neo import Graph,Node,Relationship,NodeMatcher
import pandas as pd
import numpy as np
import os
# 连接Neo4j数据库
from py2neo import Graph, Node, Relationship, walk, NodeMatcher, RelationshipMatcher
import pandas as pd
import json
# 连接数据库 输入地址、用户名、密码
from py2neo import Graph

# 使用包含用户名和密码的 URI 连接到数据库
uri = "http://neo4j:neo4j@localhost:7474"
graph = Graph(uri)
python 复制代码
a = Node('Person',name='Tom')
graph.create(a)
b = Node('Person',name='Bob')
graph.create(b)

# 创建关系例子
r = Relationship(a,'KNOWS',b)
graph.create(r)

# 读取节点信息
node = DataFrame(graph.run('MATCH (n:`Person`) RETURN n LIMIT 25'))
# print(node)

# 读取关系信息
relation = DataFrame(graph.run('MATCH (n:`Person`)-[r]->(m:`Person`) return n,m,type(r)'))
# print(relation)

# 删除所有节点
graph.run('MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r')

(No data)

python 复制代码
# 读取数据
stock = pd.read_csv('stock_basic.csv',encoding="gbk")
holder = pd.read_csv('stock_holders.csv',encoding="gbk")
concept_num = pd.read_csv('concept.csv',encoding="gbk")
concept = pd.read_csv('stock_concept.csv',encoding="gbk")
sh = pd.read_csv('sh.csv')
sz = pd.read_csv('sz.csv')
corr = pd.read_csv('corr.csv')
python 复制代码
stock.head()

| | Unnamed: 0 | TS代码 | 股票代码 | 股票名称 | 行业 |
| 0 | 0 | 000001.SZ | 1 | 平安银行 | 银行 |
| 1 | 1 | 000002.SZ | 2 | 万科A | 全国地产 |
| 2 | 2 | 000004.SZ | 4 | 国华网安 | 互联网 |
| 3 | 3 | 000005.SZ | 5 | 世纪星源 | 环境保护 |

4 4 000006.SZ 6 深振业A 区域地产
python 复制代码
holder.head()

| | Unnamed: 0 | ts_code | ann_date | end_date | holder_name | hold_amount | hold_ratio |
| 0 | 0 | 000001.SZ | 20190307 | 20181231 | 新华人寿保险股份有限公司-分红-个人分红-018L-FH002深 | 4.960350e+07 | 0.29 |
| 1 | 1 | 000001.SZ | 20190307 | 20181231 | 中国平安保险(集团)股份有限公司-集团本级-自有资金 | 8.510493e+09 | 49.56 |
| 2 | 2 | 000001.SZ | 20190307 | 20181231 | 中国平安人寿保险股份有限公司-自有资金 | 1.049463e+09 | 6.11 |
| 3 | 3 | 000001.SZ | 20190307 | 20181231 | 香港中央结算有限公司(陆股通) | 4.307515e+08 | 2.51 |

4 4 000001.SZ 20190307 20181231 中国证券金融股份有限公司 4.292327e+08 2.50
python 复制代码
concept_num.head()

| | Unnamed: 0 | code | name | src |
| 0 | 0 | TS0 | 密集调研 | ts |
| 1 | 1 | TS1 | 南北船合并 | ts |
| 2 | 2 | TS2 | 5G | ts |
| 3 | 3 | TS3 | 机场 | ts |

4 4 TS4 高价股 ts
python 复制代码
concept.head()

| | Unnamed: 0 | id | concept_name | ts_code | name |
| 0 | 0 | TS0 | 密集调研 | 000301.SZ | 东方盛虹 |
| 1 | 1 | TS0 | 密集调研 | 000401.SZ | 冀东水泥 |
| 2 | 2 | TS0 | 密集调研 | 000932.SZ | 华菱钢铁 |
| 3 | 3 | TS0 | 密集调研 | 002013.SZ | 中航机电 |

4 4 TS0 密集调研 002106.SZ 莱宝高科
python 复制代码
sh.head()

| | ts_code | hs_type | in_date | out_date | is_new |
| 0 | 601628.SH | SH | 20141117 | NaN | 1 |
| 1 | 601099.SH | SH | 20141117 | NaN | 1 |
| 2 | 601808.SH | SH | 20141117 | NaN | 1 |
| 3 | 601107.SH | SH | 20141117 | NaN | 1 |

4 601880.SH SH 20141117 NaN 1
python 复制代码
sz.head()

| | ts_code | hs_type | in_date | out_date | is_new |
| 0 | 002910.SZ | SZ | 20171114 | NaN | 1 |
| 1 | 000016.SZ | SZ | 20180102 | NaN | 1 |
| 2 | 001872.SZ | SZ | 20180102 | NaN | 1 |
| 3 | 000040.SZ | SZ | 20180102 | NaN | 1 |

4 000401.SZ SZ 20180102 NaN 1
python 复制代码
corr.head()

| | Unnamed: 0 | s1 | s2 | corr |
| 0 | 0 | 000001.SZ. | 000001.SZ. | 1.000000 |
| 1 | 1 | 000001.SZ. | 000002.SZ. | 0.648945 |
| 2 | 2 | 000001.SZ. | 000005.SZ. | 0.342920 |
| 3 | 3 | 000001.SZ. | 000009.SZ. | 0.297213 |

4 4 000001.SZ. 000010.SZ. 0.186165
python 复制代码
# 数据预处理
stock['行业'] = stock['行业'].fillna('未知')
holder = holder.drop_duplicates(subset=None, keep='first', inplace=False)
python 复制代码
# 创建实体(概念、股票、股东、股通)

sz = Node('深股通',名字='深股通')
graph.create(sz)  
 
sh = Node('沪股通',名字='沪股通')
graph.create(sh)  

for i in concept_num.values:
    a = Node('概念',概念代码=i[1],概念名称=i[2])
    # print('概念代码:'+str(i[1]),'概念名称:'+str(i[2]))
    graph.create(a)

for i in stock.values:
    a = Node('股票',TS代码=i[1],股票名称=i[3],行业=i[4])
    # print('TS代码:'+str(i[1]),'股票名称:'+str(i[3]),'行业:'+str(i[4]))
    graph.create(a)

for i in holder.values:
    a = Node('股东',TS代码=i[0],股东名称=i[1],持股数量=i[2],持股比例=i[3])
    # print('TS代码:'+str(i[0]),'股东名称:'+str(i[1]),'持股数量:'+str(i[2]))
    graph.create(a)
python 复制代码
# 创建关系(股票-股东、股票-概念、股票-公告、股票-股通)

matcher = NodeMatcher(graph) 
for i in holder.values:    
    a = matcher.match("股票",TS代码=i[0]).first()
    b = matcher.match("股东",TS代码=i[0])
    for j in b:
        r = Relationship(j,'参股',a)
        graph.create(r)
        print('TS',str(i[0]))
            
for i in concept.values:
    a = matcher.match("股票",TS代码=i[3]).first()
    b = matcher.match("概念",概念代码=i[1]).first()
    if a == None or b == None:
        continue
    r = Relationship(a,'概念属于',b)
    graph.create(r) 
python 复制代码
相关推荐
火白学安全8 分钟前
《Python红队攻防脚本零基础编写:入门篇(一)》
python·安全·web安全·网络安全·系统安全
梦想的初衷~39 分钟前
Python驱动的无人机多光谱-点云融合技术在生态三维建模与碳储量、生物量、LULC估算中的全流程实战
python·无人机·遥感·多光谱
一晌小贪欢1 小时前
Python爬虫第3课:BeautifulSoup解析HTML与数据提取
爬虫·python·网络爬虫·beautifulsoup·python爬虫·python3·requests
好家伙VCC1 小时前
**发散创新:渗透测试方法的深度探索与实践**随着网络安全形势日益严峻,渗透测试作为评估系统安全的
java·python·安全·web安全·系统安全
机器学习之心1 小时前
一个基于无干扰增量容量(IC)和差分电压(DV)分析的锂离子电池健康状态(SOH)与剩余寿命(RUL)预测的Python实现
python
Bellafu6667 小时前
selenium常用的等待有哪些?
python·selenium·测试工具
小白学大数据8 小时前
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
爬虫·python·ajax
2401_841495649 小时前
【计算机视觉】基于复杂环境下的车牌识别
人工智能·python·算法·计算机视觉·去噪·车牌识别·字符识别
Adorable老犀牛9 小时前
阿里云-ECS实例信息统计并发送统计报告到企业微信
python·阿里云·云计算·企业微信
倔强青铜三10 小时前
苦练Python第66天:文件操作终极武器!shutil模块完全指南
人工智能·python·面试