首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >neo4j指所有朋友的财产

neo4j指所有朋友的财产
EN

Stack Overflow用户
提问于 2017-11-29 15:28:04
回答 1查看 50关注 0票数 1

有一个图形,如:

代码语言:javascript
复制
CREATE (Alice:Person {id:'a', fraud:1})
    CREATE (Bob:Person {id:'b', fraud:0})
    CREATE (Charlie:Person {id:'c', fraud:0})
    CREATE (David:Person {id:'d', fraud:0})
    CREATE (Esther:Person {id:'e', fraud:0})
    CREATE (Fanny:Person {id:'f', fraud:0})
    CREATE (Gabby:Person {id:'g', fraud:0})
    CREATE (Fraudster:Person {id:'h', fraud:1})


CREATE
  (Alice)-[:CALL]->(Bob),
  (Bob)-[:SMS]->(Charlie),
  (Charlie)-[:SMS]->(Bob),
  (Fanny)-[:SMS]->(Charlie),
  (Esther)-[:SMS]->(Fanny),
  (Esther)-[:CALL]->(David),
  (David)-[:CALL]->(Alice),
  (David)-[:SMS]->(Esther),
  (Alice)-[:CALL]->(Esther),
  (Alice)-[:CALL]->(Fanny),
  (Fanny)-[:CALL]->(Fraudster)

当尝试查询时,例如:

代码语言:javascript
复制
MATCH (a)-->(b)
WHERE b.fraud = 1
RETURN (count() / ( MATCH (a) -->(b) RETURN count() ) * 100)

我想计算一个用户的欺诈性,该用户(欺诈只定义为0或1被定义为所有连接节点欺诈级别的平均值):

代码语言:javascript
复制
MATCH ()--(f)
RETURN f.id, f.fraud, COUNT(*), COLLECT(f) AS fs

返回正确数量的朋友,但无法访问这些,即在收集语句中只访问节点本身:

代码语言:javascript
复制
╒══════╤═════════╤══════════════╤══════════╤══════════════════════════════════════════════════════════════════════╕
│"f.id"│"f.fraud"│"avg(f.fraud)"│"COUNT(*)"│"fs"                                                                  │
╞══════╪═════════╪══════════════╪══════════╪══════════════════════════════════════════════════════════════════════╡
│"h"   │1        │1             │1         │[{"fraud":1,"id":"h"}]                                                │
├──────┼─────────┼──────────────┼──────────┼──────────────────────────────────────────────────────────────────────┤
│"f"   │0        │0             │4         │[{"fraud":0,"id":"f"},{"fraud":0,"id":"f"},{"fraud":0,"id":"f"},{"frau│
│      │         │              │          │d":0,"id":"f"}]                                                       │
....

也就是天真地计算平均值

代码语言:javascript
复制
MATCH ()--(f)
RETURN f.id, avg(f.fraud)

只考虑这个节点,而不考虑网络。如何考虑节点的社交网络而不是(达到定义的深度,即这里的1)来改进neo4j percentage of attribute for social network的原始答案

编辑

代码语言:javascript
复制
MATCH p = ()--()
UNWIND nodes(p) AS f
RETURN f.id, f.fraud, COUNT(*), COLLECT({id: f.id, fraud: f.fraud}) AS fs

将只返回列表中原始节点的副本,而不返回连接的节点:

代码语言:javascript
复制
│"f.id"│"f.fraud"│"COUNT(*)"│"fs"                                                                  │
╞══════╪═════════╪══════════╪══════════════════════════════════════════════════════════════════════╡
│"h"   │1        │2         │[{"id":"h","fraud":1},{"id":"h","fraud":1}]                           │
├──────┼─────────┼──────────┼──────────────────────────────────────────────────────────────────────┤
│"f"   │0        │8         │[{"id":"f","fraud":0},{"id":"f","fraud":0},{"id":"f","fraud":0},{"id":│
│      │         │          │"f","fraud":0},{"id":"f","fraud":0},{"id":"f","fraud":0},{"id":"f","fr│
│      │         │          │aud":0},{"id":"f","fraud":0}]                                         │

编辑2

代码语言:javascript
复制
MATCH p = (source)--(destination)
RETURN source.id, source.fraud, COUNT(*), COLLECT({id: destination.id, fraud: destination.fraud}) AS neighbors

已经很接近了,但是缺少avg功能

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-29 16:26:03

代码语言:javascript
复制
MATCH p = (source)-[*..3]-(destination)
RETURN source.id, source.fraud, COUNT(*), avg(destination.fraud), COLLECT({id: destination.id, fraud: destination.fraud}) AS neighbors

包括定义为平均数的欺诈行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47556306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档