【转载】基于共现分析的Sangkm 13th研究
原文标题:Sangkm13thで遊ぶ共起ネットワーク
原作者:Ayano
原文地址:http://ayanopensp.blog.fc2.com/blog-entry-22.html
翻译及术语转化不当之处欢迎指正。
(这种活原来真的能整出来啊)

<前言>
R(统计应用软件)只在长假期间变得有趣。
尽管我是初学者,但值得庆幸的是油管上有大量的相关教学。
我在一月有很多空闲时间,所以我将学习共现分析作为我的假期作业。
简单来说,这就是一种可以较好地表达A与B之间关联的东西。
<结论>
暂时先抛开研究过程,下图展示了研究的结论。
图中连线的粗细和不透明度表示trick A→trick B的出现频率,不透明度越高、连线越粗说明出现频率越高,详细情况见图例部分说明。

下图使用箭头替换了连线(译者注:上图并不能体现trick A与trick B之间的方向性)。

<意义与展望>
综上所述,您可以直观并定量理解部分trick之间的联系。
至于展望……
(1)收集并研究不同年代的系列合片。
(2)在影片数量足够的前提下分析个体风格。
(3)定量表达一段时期内的流行趋势以及不同转笔者的个性等。
<方法>
・R
很长一段时间以来我一直在以练习为目的去尝试很多东西,这一次也是。但是限于我的水平,研究的不足之处请大家谅解。
①Sangkm系列招式变化研究

②运用ROC curve分析WT17评分模型

・术语解析
我花费了五小时,把24个人的combo用术语表示。
所有trick采用了公认的简略写法(twist = twisted sonic、sympass =symmetrical pass*等)
*symmetrical是日本术语,解释如下:

保留了Palm down、plam up的表示,但在上图结论中省略了(即便不省略也会是很有趣的结论)
无论如何,罕见招式都不会影响结果,因此对其进行了适当注释。
手指标记采用常用的12345(译者:日本是12345,我们是T1234)。
由于在稍后的研究中没有保留记号,连字符以及cont、fluent等修饰词都没有标出(译者:自行阅读PSbook第127页,第六章Japanese notation部分)。
(例)
ソニックひねり34-23 → ガンマン23-23
写成
twist3423 gunman2323
(例 KTH)
Palmdown Twist3423 Sympass2312 Sp1212 Palmup Passre2334 Twistre3445 Palmdown Pass4534 Twist3423 Palmdown Sp22 Palmup Passre2334 Halfgunmanre3423 Sympassre2334 Twist3423 Pass2312 Sympassre1223 ZCC Symsonic3424 Sympss2445 Sonic4535 Twist3523 Air2334 Sonic3423 Sympass2334 Palmdown Devilsspin3434 Twist3423 Backre2323 Sp11 Air
・n-gram(这一段是R软件相关的统计应用问题,和转笔没有关系)
这次实操我大概理解了1%。
→ABCDE〜比如这一串字符:
AB BC CD 〜分割为2-gram、ABC BCD CDE〜分割为3-gram
以上举例可应用于转笔招式的排列组合中。
这次制图使用2-gram
使用3-gram也很绘制不错的图表,但缺乏n会是一个问题(译者:此处应该是表达使用3-gram绘图会面临n的组距设置不足够小的问题)。
使用2-gram来计算频率,结果如下。绘制可得到前文的图表。
word1 word2 n
1 sympassre2334 twist3423 25
2 twist3423 pass2312 12
3 chargere1212 flre 11
4 pass4534 twist3423 11
5 pass2312 chargere1212 10
6 halfgunmanre3423 sympassre2334 8
<难点与感想>
最大的难点做到是对BD分析的统一化。例如五个人合作分析,一字之差便会让一切毫无意义。不知道开发一个只能通过点击来确定BD,以此避免术语偏差的APP效果会怎么样?
其次,随着时代的进步,大量难以描述的招式正在出现。这是我们选择Sangkm系列作为研究对象的主要原因——主要由“旧”招式组成。
如果存在一个不能用现有术语直接表示的招式,那么它将被拆分成多个具有现有术语的招式来表达,但是这样做整体的表达就会含糊不清。因此,一些习惯命名(译者:例如Haitua)显得简便而完美。
aimo术语非常重视对个别情况的描述,非常有趣且实用。
(接下来一段讲述配置日语版软件的方法,目的是邀请大家和Ayano一同研究,故此处省略)
<参考文献>
https://www.youtube.com/watch?v=tQfPK8Ay5YU
https://www.youtube.com/watch?v=ae_XVhjHd_o&t=715s
https://www.slideshare.net/kashitan/tidygraphggraph-ver-152368322
https://www.data-imaginist.com/2017/ggraph-introduction-edges/
https://rdrr.io/cran/ggraph/man/scale_edge_colour.html
<实际使用的代码>
library(tm)
library(tidytext)
library(tidyverse)
library(igraph)
library(ggraph)
text<-readLines("Sangkm.txt")
corpus <- Corpus(VectorSource(text))
corpus <- tm_map(corpus, tolower)
corpus <- tm_map(corpus, removePunctuation)
#corpus <- tm_map(corpus, removeNumbers)
corpus <- tm_map(corpus, stripWhitespace)
stopwords <- c("palmdown","palmup")
corpus <- tm_map(corpus, removeWords, stopwords)
corpus2<-data.frame(text = sapply(corpus, as.character), stringsAsFactors = FALSE)
# create bigrams (n = 2 or 3)
New_bigrams <- corpus2 %>%
unnest_tokens(bigram, text, token = "ngrams", n=2)
# count bigram frequency
New_bigrams %>%
count(bigram, sort = TRUE)
# separate bigrams and remove stop words
bigrams_separated <- New_bigrams %>%
separate(bigram, c("word1","word2"),sep=" ")
# bigram counts
bigram_counts <- bigrams_separated %>%
count(word1, word2, sort = TRUE)
bigram_graph <- bigram_counts %>%
filter(n>3) %>%
graph_from_data_frame()
set.seed(2020)
#無交グラフ
graph <- ggraph(bigram_graph, layout = "fr")+
geom_edge_link(aes(alpha = n, width = n),
color = "gray")+
scale_edge_width(range = c(2, 3))+
geom_node_point()+
geom_node_text(aes(label = name),
vjust = 1, hjust = 1, repel = TRUE)+
theme_graph()
#有交グラフ(矢印あり)
graph <- ggraph(bigram_graph, layout = "fr")+
geom_edge_link(aes(alpha = n,
start_cap = label_rect(node1.name),
end_cap = label_rect(node2.name)),
arrow = arrow(length = unit(2, 'mm')),
end_cap = circle(2, 'mm')) +
scale_edge_width(range = c(2, 3))+
geom_node_text(aes(label = name),
vjust = 1, hjust = 1, repel = TRUE)+
theme_graph()