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さんに改めて感謝です。
関連情報(Google検索)
