LoginSignup
7
7

More than 5 years have passed since last update.

Rubyで前処理。Pixivのタグ検索結果からクロス集計データを作る

Posted at

概要

Pixivタグ間の共起関係を見てみる事にした。
その為に、Pixivタグ検索結果(A)からクロス集計データ(B)を出力するRubyコードを書いた。

(A)
X Y Z
X
Y Z

(B)
,X,Y,Z
X,3,1,1
Y,1,3,2
Z,1,2,3

データ

-> Pixiv検索結果をCSVダウンロードするHTMLファイルを用意した

コード

pxcsv2tagsummap.rb
# coding: UTF-8

=begin
pxcsv2tagsummap.rb
Copyright (c) 2014 nezuq
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
=end

require 'csv'

#Rで読み込む形式にするフラグ
IS_FORRLANG = ARGV[0] || '0' #コマンドライン第1引数で1が指定された場合、Rで読み込む形式になる
#入力ファイル名
INPUT_CSV = ARGV[1] || 'INPUT.csv'
#出力ファイル名
OUTPUT_CSV = ARGV[2] || 'OUTPUT.csv'
#しきい値(出現頻度が指定範囲外のタグのカラムは出力しない)
MAX_FREQUENCY = ARGV[3] ? ARGV[3].to_f : 1.000
MIN_FREQUENCY = ARGV[4] ? ARGV[4].to_f : 0.100
=begin
#しきい値(出現回数が指定範囲外のタグのカラムは出力しない)
MAX_COUNT = 100
MIN_COUNT = 10
=end
#表示しないタグのパターン
UNDISP_KEYPATTERN = Regexp.new (ARGV[5] || ".+00users入り|R-18|漫画|落書き")

h = {}
nrow = 0
CSV.foreach(INPUT_CSV, encoding: "UTF-8") do |row|
    nrow += 1
    tags = (row[13] ? row[13].split(' ') : [])
    tags_all = h.keys | tags
    (tags_all).each do |key|
        (tags_all).each do |key_in|
            if !(h[key]) then
                h[key] = {}
                h[key].default = 0
            end
            h[key][key_in] += (tags.include?(key) && tags.include?(key_in)) ? 1 : 0
        end
    end
end

lst = h.delete_if {|key, hsh|
        (key =~ UNDISP_KEYPATTERN) || !((hsh[key]*1.000/nrow).between?(MIN_FREQUENCY, MAX_FREQUENCY))
#       (key =~ UNDISP_KEYPATTERN) || !((hsh[key]).between?(MIN_COUNT, MAX_COUNT))
    }.sort_by{
        |key, hsh| -hsh[key]
    }

CSV.open(OUTPUT_CSV, "w") do |csv|
    hdr = []
    hdr.push(nil) if IS_FORRLANG != '1'
    for i in 0..(lst.length - 1) do
        hdr.push(lst[i][0])
    end
    csv << hdr
    for i in 0..(lst.length - 1) do
        row = [lst[i][0]]
        for j in 0..(lst.length - 1) do
            row.push(lst[i][1][lst[j][0]])
        end
        csv << row
    end
end

puts "end!"

出力イメージ

OUTPUT.csv
,艦隊これくしょん,百合,艦これ,加賀,赤城,赤賀
艦隊これくしょん,98,93,79,13,12,12
百合,93,94,76,13,12,12
艦これ,79,76,81,12,11,11
加賀,13,13,12,13,11,10
赤城,12,12,11,11,12,10
赤賀,12,12,11,10,10,12
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7