首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cascalog将共现计数转换为共现概率

使用cascalog将共现计数转换为共现概率
EN

Stack Overflow用户
提问于 2013-05-19 04:57:36
回答 1查看 420关注 0票数 3

我有一个存储在s3上的同现计数表(其中每一行都是key-a,key-b,count),我想从它产生同现概率矩阵。

为此,我需要计算每个key-a的计数和,然后将每一行除以它的key-a的和。

如果我“手工”做这件事,我会对数据进行一次遍历,生成一个从键到总数的哈希表(以leveldb或类似的形式),然后对数据进行第二次遍历以进行除法。这听起来不像是一种非常cascalog-y的方式。

有没有什么方法可以通过执行等同于自连接的操作来获得一行的总和?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-19 06:12:30

示例数据:

代码语言:javascript
复制
(def coocurrences
  [["foo" "bar" 3]
   ["bar" "foo" 3]
   ["foo" "quux" 6]
   ["quux" "foo" 6]
   ["bar" "quux" 2]
   ["quux" "bar" 2]])

查询:

代码语言:javascript
复制
(require '[cascalog.api :refer :all] '[cascalog.ops :as c])

(let [total (<- [?key-a ?sum]
              (coocurrences ?key-a _ ?c)
              (c/sum ?c :> ?sum))]
  (?<- (stdout) [?key-a ?key-b ?prob]
    (div ?c ?sum :> ?prob)
    (coocurrences ?key-a ?key-b ?c)
    (total ?key-a ?sum)))

输出:

代码语言:javascript
复制
RESULTS
-----------------------
bar     foo     0.6
bar     quux    0.4
foo     bar     0.3333333333333333
foo     quux    0.6666666666666666
quux    foo     0.75
quux    bar     0.25
-----------------------
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16628870

复制
相关文章

相似问题

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