【问题标题】:Analyzing RDF Graph: average number of certain relation分析RDF图:某个关系的平均数
【发布时间】:2015-10-13 12:02:32
【问题描述】:

我是 SPARQL 的新手。

我正在尝试找到一种方法来普遍分析和 RDF 图,例如一个主题的某个关系的平均数。 所以如果我们有数据

[Alice         likes     Money]
[Bob           has       Money]
[Bob           likes     Diving] 
[Bob           likes     Skiing]

每个节点的平均“喜欢”数是多少(此处:1.5)。

我的第一个尝试是简单地编写一个脚本来迭代所有不同的对象并查询每个对象的喜欢关系的计数。

有没有办法直接在 SPARQL 中执行此操作?

【问题讨论】:

    标签: graph rdf sparql


    【解决方案1】:

    是的,您可以使用GROUP BY 和聚合来处理这类事情。请参阅规范中的Aggregates 了解此内容的概述。

    如果您想获得每个节点的点赞数,您可以这样做:

    PREFIX : <http://example.org/ns#>
    
    SELECT ?node (COUNT(*) AS ?likes)
    WHERE
    {
      ?s :likes ?node
    }
    GROUP BY ?node
    

    在这里,我们按?node 分组并执行COUNT(*),它只是计算组中解决方案的数量。这为我们提供了单个查询中每个不同的 ?node 值的点赞数。

    如果我们想找到每个节点的平均点赞数,我们也可以使用聚合来做到这一点:

    PREFIX : <http://example.org/ns#>
    
    SELECT 
     (COUNT(*) AS ?likeCount) 
     (COUNT(DISTINCT ?node) AS ?nodeCount) 
     (?likeCount / ?nodeCount AS ?avgLikesPerNode)
    WHERE
    {
      ?s :likes ?node .
    }
    

    这里我们再次使用COUNT(*) 来获得总点赞数,然后我们使用COUNT(DISTINCT ?node) 计算?node 的不同值,然后我们可以简单地将?likeCount 除以?nodeCount 得到给我们每个节点的平均点赞数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多