読者です 読者をやめる 読者になる 読者になる

kivantium活動日記

プログラムを使っていろいろやります

サンタコスが一番似合う艦娘

クリスマス特集第2弾です。今年のクリスマスに合わせてソーシャルゲーム艦隊これくしょんでは一部の艦娘がサンタのコスプレをする期間限定のイベントが行われ話題となっています。そこで提督の皆さんが気になるのは、サンタ服が一番似合う艦娘は一体誰なのかということでしょう。この難問に決着をつけるべく、ここではPixivに最もサンタコスのイラストが投稿された数が最も多い艦娘が一番似合うという基準を導入して調査を行いたいと思います。

Pixivタグデータの取得

pixivのタグ頻度から考えるラブライブのカップリングのコードなどを参考にタグの取得を行いました。

「(艦これ or 艦隊これくしょん) and (クリスマス or サンタ)」という検索の結果からタグを抽出すればサンタコスをした艦娘のイラストが出てくるはずです。検索用のURLを生成するRのコードがこちら。

# URLの取得
tag <- "(艦これ%20or%20%20艦隊これくしょん)%20and%20(クリスマス%20or%20サンタ)"
page <- 100
urls <- paste("http://spapi.pixiv.net/iphone/search.php?s_mode=s_tag&PHPSESSID=XXXXXX&p=",seq(page), "&word=", tag, sep="")
write.table(urls, "urls.txt", row.names=FALSE, col.names=FALSE, quote=FALSE)

%20は半角スペースを表しています。

PHPSESSID=XXXXXXのところには自分のアカウントでログインして取得した値を入れてください。Google Chromeをお使いの方なら、設定>詳細設定を表示>プライバシー>コンテンツの設定>すべてのCookieとテストデータを表示し、pixivで検索すればpixiv.netのところにPHPSESSIDという項目があるので、コンテンツと表示されている値を使ってください。

次に生成したURLから検索結果をダウンロードし結合したCSVファイルを作ります。

wget -i urls.txt
cat search.php* > output.csv

12/24 22:45に実行したところ、output.csvの中身は2386行ありました。これでビッグデータ()が手に入ったので分析に移ります。

サンタコスが一番似合うのは誰だ?

はじめに艦娘の名前一覧を用意します。Wikiからコピペして、改を除いた結果次のようになりました。

Bismark|ビスマルク
Prinz|プリンツ
Z1
Z3
Верный|ヴェールヌイ
あきつ丸
イオナ
タカオ
ハルナ
まるゆ
阿賀野
阿武隈
愛宕
綾波
伊168
伊19
伊401
伊58
伊8
伊勢
衣笠
磯波
磯風
卯月
浦風
雲龍
加賀
加古
霞
巻雲
鬼怒
菊月
球磨
響
暁
金剛
熊野
古鷹
五月雨
五十鈴
荒潮
高雄
黒潮
最上
皐月
三隈
三日月
山城
子日
若葉
酒匂
秋雲
秋月
春雨
初春
初雪
初霜
初風
曙
榛名
深雪
吹雪
瑞鳳
瑞鶴
清霜
青葉
赤城
雪風
千歳
千代田
川内
叢雲
早霜
蒼龍
足柄
村雨
多摩
大井
大鯨
大潮
大鳳
大淀
大和
谷風
筑摩
朝雲
朝潮
潮
長月
長波
長門
長良
鳥海
天津風
天龍
電
島風
那珂
那智
日向
如月
能代
白雪
白露
隼鷹
比叡
飛鷹
飛龍
浜風
不知火
扶桑
敷波
武蔵
舞風
文月
鳳翔
望月
北上
睦月
摩耶
妙高
霧島
名取
明石
木曾
野分
弥生
矢矧
由良
夕雲
夕張
夕立
陽炎
雷
利根
陸奥
龍田
龍鳳
龍驤
涼風
鈴谷
漣
朧
翔鶴
霰
神通
祥鳳
羽黒
時雨
時津風
満潮

最初の方の「Bismark|ビスマルク」という表記は正規表現で、Bismark, ビスマルクのどちらでもよいことを表しています。Rのgrep関数は変数内の正規表現をそのまま展開しているようなのでこういう書き方ができます。

ではそれぞれの艦娘名がついた画像がいくつあるか調べてみます。

#名前一覧の読み込み
name_csv <- read.csv("kanmusu.csv",header=FALSE)
names <- name_csv$V1
#タグ情報の読み込み(APIの出力はCSV形式で14行目がタグになっている)
data <- read.csv("output.csv",header=FALSE)
conbined_tag <- strsplit(as.character(unique(data$V14)), " ")
#タグの分離(元データでは複数タグがスペース区切りで一つのデータになっている)
tags <- unlist(conbined_tag)
#結果を入れる行列の作成
result <- NULL
#それぞれの艦娘名に対してタグがいくつあるか調べる
n <- length(names)
for(i in 1:n){
    result = rbind(result, c(as.character(names[i]),length(grep(names[i], tags))))
}
#タグが多い順にソート
result[order(as.integer(result[,2]),decreasing=TRUE),]

出力結果がこちら。

       [,1]                        [,2] 
  [1,] "那珂"                      "114"
  [2,] "雷"                        "112"
  [3,] "電"                        "90" 
  [4,] "時雨"                      "80" 
  [5,] "島風"                      "69" 
  [6,] "龍驤"                      "62" 
  [7,] "響"                        "60" 
  [8,] "暁"                        "57" 
  [9,] "漣"                        "55" 
 [10,] "天龍"                      "50" 
 [11,] "金剛"                      "49" 
 [12,] "潮"                        "43" 
 [13,] "長門"                      "43" 
 [14,] "Prinz|プリンツ"            "38" 
 [15,] "夕立"                      "37" 
 [16,] "陸奥"                      "36" 
 [17,] "榛名"                      "34" 
 [18,] "愛宕"                      "33" 
 [19,] "加賀"                      "31" 
 [20,] "瑞鶴"                      "28" 
 [21,] "川内"                      "26" 
 [22,] "赤城"                      "23" 
 [23,] "北上"                      "23" 
 [24,] "龍田"                      "23" 
 [25,] "Верный|ヴェールヌイ" "22" 
 [26,] "足柄"                      "21" 
 [27,] "五月雨"                    "20" 
 [28,] "高雄"                      "20" 
 [29,] "叢雲"                      "20" 
 [30,] "瑞鳳"                      "19" 
 [31,] "木曾"                      "19" 
 [32,] "鈴谷"                      "19" 
 [33,] "夕張"                      "18" 
 [34,] "翔鶴"                      "18" 
 [35,] "雪風"                      "17" 
 [36,] "鳳翔"                      "17" 
 [37,] "羽黒"                      "17" 
 [38,] "球磨"                      "16" 
 [39,] "浜風"                      "16" 
 [40,] "大鯨"                      "15" 
 [41,] "神通"                      "15" 
 [42,] "曙"                        "14" 
 [43,] "蒼龍"                      "14" 
 [44,] "吹雪"                      "13" 
 [45,] "青葉"                      "13" 
 [46,] "大井"                      "12" 
 [47,] "扶桑"                      "12" 
 [48,] "初雪"                      "11" 
 [49,] "天津風"                    "11" 
 [50,] "隼鷹"                      "11" 
 [51,] "比叡"                      "11" 
 [52,] "不知火"                    "11" 
 [53,] "古鷹"                      "10" 
 [54,] "朝潮"                      "10" 
 [55,] "摩耶"                      "10" 
 [56,] "妙高"                      "10" 
 [57,] "皐月"                      "9"  
 [58,] "三日月"                    "9"  
 [59,] "春雨"                      "9"  
 [60,] "大鳳"                      "9"  
 [61,] "白露"                      "9"  
 [62,] "霧島"                      "9"  
 [63,] "弥生"                      "9"  
 [64,] "阿賀野"                    "8"  
 [65,] "伊19"                      "8"  
 [66,] "菊月"                      "8"  
 [67,] "大淀"                      "8"  
 [68,] "大和"                      "8"  
 [69,] "敷波"                      "8"  
 [70,] "明石"                      "8"  
 [71,] "夕雲"                      "8"  
 [72,] "Bismark|ビスマルク"        "7"  
 [73,] "衣笠"                      "7"  
 [74,] "卯月"                      "7"  
 [75,] "熊野"                      "7"  
 [76,] "山城"                      "7"  
 [77,] "長月"                      "7"  
 [78,] "日向"                      "7"  
 [79,] "時津風"                    "7"  
 [80,] "最上"                      "6"  
 [81,] "初春"                      "6"  
 [82,] "深雪"                      "6"  
 [83,] "村雨"                      "6"  
 [84,] "多摩"                      "6"  
 [85,] "白雪"                      "6"  
 [86,] "利根"                      "6"  
 [87,] "朧"                        "6"  
 [88,] "阿武隈"                    "5"  
 [89,] "伊58"                      "5"  
 [90,] "雲龍"                      "5"  
 [91,] "加古"                      "5"  
 [92,] "五十鈴"                    "5"  
 [93,] "秋月"                      "5"  
 [94,] "那智"                      "5"  
 [95,] "如月"                      "5"  
 [96,] "武蔵"                      "5"  
 [97,] "文月"                      "5"  
 [98,] "睦月"                      "5"  
 [99,] "矢矧"                      "5"  
[100,] "あきつ丸"                  "4"  
[101,] "綾波"                      "4"  
[102,] "伊8"                       "4"  
[103,] "荒潮"                      "4"  
[104,] "千歳"                      "4"  
[105,] "千代田"                    "4"  
[106,] "鳥海"                      "4"  
[107,] "能代"                      "4"  
[108,] "飛鷹"                      "4"  
[109,] "飛龍"                      "4"  
[110,] "舞風"                      "4"  
[111,] "陽炎"                      "4"  
[112,] "涼風"                      "4"  
[113,] "Z1"                        "3"  
[114,] "Z3"                        "3"  
[115,] "まるゆ"                    "3"  
[116,] "伊168"                     "3"  
[117,] "伊401"                     "3"  
[118,] "伊勢"                      "3"  
[119,] "浦風"                      "3"  
[120,] "霞"                        "3"  
[121,] "若葉"                      "3"  
[122,] "秋雲"                      "3"  
[123,] "長良"                      "3"  
[124,] "望月"                      "3"  
[125,] "祥鳳"                      "3"  
[126,] "磯波"                      "2"  
[127,] "磯風"                      "2"  
[128,] "巻雲"                      "2"  
[129,] "鬼怒"                      "2"  
[130,] "初霜"                      "2"  
[131,] "初風"                      "2"  
[132,] "早霜"                      "2"  
[133,] "筑摩"                      "2"  
[134,] "名取"                      "2"  
[135,] "野分"                      "2"  
[136,] "霰"                        "2"  
[137,] "満潮"                      "2"  
[138,] "イオナ"                    "1"  
[139,] "ハルナ"                    "1"  
[140,] "黒潮"                      "1"  
[141,] "三隈"                      "1"  
[142,] "子日"                      "1"  
[143,] "酒匂"                      "1"  
[144,] "清霜"                      "1"  
[145,] "大潮"                      "1"  
[146,] "朝雲"                      "1"  
[147,] "タカオ"                    "0"  
[148,] "谷風"                      "0"  
[149,] "長波"                      "0"  
[150,] "由良"                      "0"  
[151,] "龍鳳"                      "0"

栄えある1位に輝いたのは艦隊のアイドル那珂ちゃんでした。おめでとうございます!!