vault大会のデッキタイプ別使用者数を日毎に算出してグラフ化する

R (version 4.0.3)使います。

install.packages("XML")
install.packages("dplyr")
install.packages("rvest")
library("rvest")
library("XML")
library(dplyr)
 #毎日数字変わるやつの加算用 
num.today <- as.numeric(Sys.Date())
num <- num.today - 13670
 #数値をURLに反映させて読み込み 
URL <- paste0("https://dmvault.ath.cx/duel/tournament_history.php?tournamentId=",num)
html <- read_html(URL)
 #ちゃんと読み込めそうか確認 
results <- html %>%
	html_table()
 #デッキタイプデータの抽出 
type <- html %>%
	html_nodes(css = ".fontS") %>%
	html_text()
 #グラフ化もろもろ 
type.Freq <- as.data.frame(table(type))
data <- type.Freq[order(type.Freq$Freq, decreasing = T),]
data$Freq <- as.numeric(data$Freq)
data$type <- as.character(data$type)
par(mar = c(12442))
barplot(data$Freq, names.arg = data$type, ylab= "プレイヤー数", cex.lab=0.8, las=3)




 ​これを実行すると以下が得られます。

画像1

「DMvault 大会ヒストリー」内の「過去のリザルト」において、使用デッキとして書かれている箇所をスクレイピングして集計しています。見切れているものもありますが、サイト上の表記の問題なので対処しようがないですね。


ちなみに直近10日間の勝率を出す場合は以下のコードです。

url <- ("http://dmvault.ath.cx/duel/tournament_summary.php")
read <- readHTMLTable(url, header = FALSE , stringsAsFactor = FALSE, as.data.frame = TRUE)
d <- read$result1
d1 <- d[,c(-3)]
d2 <- d1[-1,]
d3 <-  d2 %>% dplyr::rename("色"=V1,"名前"=V2,"勝利数"=V4,"敗北数"=V5,"のべ参戦数"=V6 )

d3$のべ参戦数 <- as.numeric(as.character(d3$のべ参戦数))
d3$勝利数 <- as.numeric(as.character(d3$勝利数))
d3$敗北数 <- as.numeric(as.character(d3$敗北数))

d4 <- d3[d3$のべ参戦数 > 10, ]
d5 <- mutate(d4,"試合数"=d4$勝利数+d4$敗北数)
d6 <- mutate(d5,"勝率"=d5$勝利数/d5$試合数)
d7 <- d6[d6$勝率>0.4, ]

options(digits=2)

d8 <- mutate(d7, "色/名前"= paste(!!!rlang::syms(c("色","名前")), sep="/"))
d9 <- d8[order(d8$勝率,decreasing = T),]

par(family = "HiraKakuProN-W3") 
par(mar=c(15,5,3,1))
barplot(d9$勝率,names.arg=d9$"色/名前" ,ylim=c(0,0.7),ylab= "勝率", cex.lab=0.8, las=3)

画像2

(知らないデッキばかりだな..)



これら2つのコードを

①AWS lambda(?)あたりで定時実行して

②ツイッターアカウントのAPI取得してbot化する

と良い感じになりそうですね。大会会場は日を追うごとにURLが更新されてるんですが、上記のコードはそれに対応するように調整してあります。





参考にしたもの


この記事が気に入ったらサポートをしてみませんか?