图数据转换为DataFrame

2022-09-02 10:05:30 浏览数 (1)

@TOC[1] Here's the table of contents:

•一、DataFrame•二、指定字段转换为DataFrame •2.1 CYPHER语句 •2.2 Python转换代码•三、将一个图转换为DataFrame •3.1 CYPHER语句 •3.2 Python转换代码

图数据转换为DataFrame

数据分析师都喜欢使用python进行数据分析,因为python的主要优点在于科学计算并且有很多成熟的工具包可以使用。在分析图数据时,分析师都需要进行一系列的数据转换操作,例如需要将图数据转换为DataFrame。在本文中,使用python调用图数据库的HTTP接口,将返回值转换为DataFrame。

一、DataFrame

DataFrame是一种表格型数据结构,它含有一组有序的列,每列可以是不同的值。DataFrame既有行索引,也有列索引,它可以看作是由Series组成的字典,不过这些Series公用一个索引。 DataFrame的创建有多种方式,不过最重要的还是根据dict进行创建,以及读取csv或者txt文件来创建。下面介绍了使用Python调用HTTP接口的方法。

•使用Python调用HTTP接口方法-无用户密码验证

代码语言:javascript复制
#coding:utf8
import requests
import json
# 调用无用户名密码验证的HTTP接口
def test1():
 company = "腾讯"
 data = {"query": "{n  horgByName(name: "%s") {n    namen    hcoden  }n}n" % company, "variables": None}
 res = requests.post(url="http://localhost:9200/ongdb/graphql", data=data)
 result = json.loads(res.content)
 print(result)
if __name__ == '__main__':
 test1()

•使用Python调用HTTP接口方法-需要用户密码验证

代码语言:javascript复制
import requests
import json
# 调用需要用户名密码验证的HTTP接口
def test2():
 cypher = "MATCH p=(n)--() RETURN p LIMIT 10"
 data = {"statements":[{"statement": f"{cypher}" ,"resultDataContents": ["graph"]}]}
 res = requests.post(url="http://localhost/db/data/transaction/commit", json=data, headers={'Content-Type': "application/json"}, auth=('user','pass'))
 # import pdb; pdb.set_trace()
 # print(res.text)
 result = json.loads(res.content)
 print(result)
if __name__ == '__main__':
 test2()

二、指定字段转换为DataFrame

2.1 CYPHER语句

代码语言:javascript复制
 MATCH (n)-[r]->(m) RETURN n.name,TYPE(r) AS type,m.name LIMIT 10

2.2 Python转换代码

代码语言:javascript复制
import requests
import json
import pandas as pd
# 返回的table转为DataFrame
cypher = "MATCH (n)-[r]->(m) RETURN n.name,TYPE(r) AS type,m.name LIMIT 10"
data = {"statements":[{"statement": f"{cypher}" ,"resultDataContents": ["rest"]}]}
res = requests.post(url="http://localhost/db/data/transaction/commit", json=data, headers={'Content-Type': "application/json"}, auth=('ongdb','datalab%pro'))
result = json.loads(res.content)
pd.DataFrame(data = [u['rest'] for u in result['results'][0]['data']], columns = result['results'][0]['columns'])

三、将一个图转换为DataFrame

在下面的案例中,是基于时间序列建模的担保网络,其中guarantee_detail字段是存储在关系属性中的JSON字符串,olab.result.transfer函数支持将图数据转换为标准的table格式。

3.1 CYPHER语句

代码语言:javascript复制
MATCH (:HORGGuaranteeV003)-[r]->(:HORGGuaranteeV003) WITH r LIMIT 10
WITH olab.result.transfer(r,null,'guarantee_detail',null) AS mapList
UNWIND mapList AS map
RETURN map.r_type AS r_type

•数据模型

•执行结果

3.2 Python转换代码

代码语言:javascript复制
import requests
import json
import pandas as pd
# 返回的table转为DataFrame
cypher = "MATCH (:HORGGuaranteeV003)-[r]->(:HORGGuaranteeV003) WITH r LIMIT 10 WITH olab.result.transfer(r,null,'guarantee_detail',null) AS mapList UNWIND mapList AS map RETURN map.r_type AS r_type"
data = {"statements":[{"statement": f"{cypher}" ,"resultDataContents": ["rest"]}]}
res = requests.post(url="http://10.20.13.200/db/data/transaction/commit", json=data, headers={'Content-Type': "application/json"}, auth=('ongdb','datalab%pro'))
result = json.loads(res.content)
pd.DataFrame(data = [u['rest'] for u in result['results'][0]['data']], columns = result['results'][0]['columns'])

References

[1] TOC: 图数据转换为DataFrame

0 人点赞