どこでも見れるメモ帳

とあるSEの備忘録。何かあれば気軽にコメントください〜

はてブの共起タグをネットワーク表示するには(個人版)

はじめに

はてブのタグについて,共起タグを取得し,ネットワーク表示する方法を簡単に記します.
環境はMacOSXFirefox, はてブ拡張アドオンインストール済とします. f:id:ni66ling:20151108220709p:plain

共起頻度が3回以上のタグ組み合わせをネットワーク表示

共起タグの取得

$ echo "tagA,tagB,freq" > cooccur.csv
$ sqlite3 -cmd \
    "select 
      T.name, 
      CT.name, 
      count(CT.name) 
    from tags T 
      left join tags CT 
        on T.bookmark_id = CT.bookmark_id 
          and T.id != CT.id 
    where T.name > CT.name 
    group by T.name, CT.name 
    having count(CT.name) >= 3
    order by T.name, CT.name;" \
    /Users/[username]/Library/Application\ Support/Firefox/Profiles/[hash].default/hatenabookmark/[hatenabookmark_id]/bookmark.sqlite </dev/null \
    | tr '|' ',' \
    >> cooccur.csv

共起ネットワークの作成

$ R
library(igraph)
csvdata <- read.csv("./cooccur.csv", head = T)
graphdata <- graph.data.frame(csvdata, directed = F)
tkplot(
  graphdata, 
  vertex.label=V(graphdata)$name, 
  canvas.width = 1200, 
  canvas.height = 700, 
  vertex.size = 0, 
  edge.width=E(graphdata)$freq/4)

結果のグラフは,上図の通り.

おまけ:タグ"Javascript"の共起タグを上位10件取得

$ sqlite3 -cmd \
    "select
      CT.name,
      count(CT.name)
    from tags T
      left join tags CT 
        on T.bookmark_id = CT.bookmark_id 
          and T.id != CT.id 
    where T.name = \"Javascript\" 
    group by CT.name 
    order by count(CT.name) desc
    limit 10;" \
    /Users/[username]/Library/Application\ Support/Firefox/Profiles/[hash].default/hatenabookmark/[hatenabookmark_id]/bookmark.sqlite </dev/null
# 例)
# node.js|28
# html5|17
# firefox|15
# jQuery|15
# tips|14
# 開発|13
# programming|12
# まとめ|12
# ajax|11
# dom|11

参考