2009/01/26
livedoorラボ「EDGE」の「EDGE Datasets」にてlivedoorクリップのデータセットが公開されているので使ってみました。提供されているCSVファイルを解析して以下の2種類の集計を取ってみます。
タグ別の出現回数を集計
例)
tag_list["hatena"] = 741 tag_list["livedoor"] = 653 tag_list["google"] = 644
タグ別のクリップURLを集計
例)
url_list["検索"] = ["http://www.google.co.jp", "http://www.yahoo.co.jp", "http://www.goo.ne.jp"] url_list["apple"] = ["http://www.apple.com/jp/", "http://www.applelinkage.com/", "http://japanese.engadget.com/"]
プログラムは以下のようになります(Ruby)。
file = "ldclip_dataset_200812.csv" tag_list = {} # タグ別カウンタ初期化 url_list = {} # タグ別URLリスト初期化 File.open(file) {|f| # ファイルオープン f.each {|line| # 1行ずつ処理 items = line.split(",") # 1行をカンマで分割 url = items[1].sub(/^\"/, "").sub(/\"$/, "") # URLを取得 # - 両端の"を除去 tags = items[3].downcase.sub(/^\"/, "").sub(/\"$/, "").split(" ") # タグをスペースで分割 # - 小文字に揃える # - 両端の"を除去 tags.each {|tag| # タグ毎処理 if tag_list["#{tag}"] == nil # タグ別カウンタが未設定なら tag_list["#{tag}"] = 0 # 0で初期化 url_list["#{tag}"] = [] # タグ別URLリスト初期化 end tag_list["#{tag}"] += 1 # タグ別カウンタインクリメント url_list["#{tag}"].push(url) # タグ別URLリストにURLを追加 } } }
上記プログラムで集計データを作成しておき、例えばタグの多い順に表示するには以下のようにすればよく、
tag_list.sort {|key, num| num[1] <=> key[1]}.each {|key, num| out = sprintf("%6d : %s", num.to_i, key) puts out }
結果)
741 : hatena 653 : livedoor 644 : google 623 : ajax 597 : javascript :
また、タグ別URL一覧を表示するには以下のようにすればOKです(重複URLは除去)。
url_list.each {|key, urls| puts "[#{key}]" urls.uniq.sort.each {|url| puts "#{url}" } puts "\n" }
結果)
[hack] http://alectrope.ddo.jp/mt/archives/2006/02/14/windows_ophcrack_livecd http://arena.nikkeibp.co.jp/tokushu/gen/20051125/114436/index.shtml http://blog.bulknews.net/mt/archives/001893.html [newspaper] http://www.asahi.com/ http://www.mainichi-msn.co.jp/ http://www.nikkansports.com/ http://www.nikkei.co.jp/ http://www.yomiuri.co.jp/ :
他にも切り口によっていろいろな目的に利用できそうです。
このような貴重なデータを公開してくださっているlivedoorさんに改めて感謝です。