각 문서마다 20개의 토픽이 들어있는 비율. Term-Document matrix
load("data/smpl_lda_df.RData")
df <- smpl_lda_df
head(df)
## Topic_1 Topic_2 Topic_3 Topic_4 Topic_5 Topic_6 Topic_7 Topic_8
## Doc_1 0 0.0000000 0 0 0 0 0 1.0000000
## Doc_2 0 0.0000000 0 0 0 0 0 0.0000000
## Doc_3 0 0.0000000 0 0 0 0 0 0.0000000
## Doc_4 0 0.0000000 0 0 0 0 0 0.3333333
## Doc_5 0 0.0000000 0 0 0 0 0 0.0000000
## Doc_6 0 0.6666667 0 0 0 0 0 0.0000000
## Topic_9 Topic_10 Topic_11 Topic_12 Topic_13 Topic_14 Topic_15
## Doc_1 0 0.0000000 0 0.0000000 0 0 0
## Doc_2 0 0.0000000 0 0.0000000 0 1 0
## Doc_3 1 0.0000000 0 0.0000000 0 0 0
## Doc_4 0 0.3333333 0 0.0000000 0 0 0
## Doc_5 1 0.0000000 0 0.0000000 0 0 0
## Doc_6 0 0.0000000 0 0.3333333 0 0 0
## Topic_16 Topic_17 Topic_18 Topic_19 Topic_20
## Doc_1 0 0 0 0.0000000 0
## Doc_2 0 0 0 0.0000000 0
## Doc_3 0 0 0 0.0000000 0
## Doc_4 0 0 0 0.3333333 0
## Doc_5 0 0 0 0.0000000 0
## Doc_6 0 0 0 0.0000000 0
dim(df)
## [1] 143 20
# 1. 확률이 0 보다 큰 토픽의 갯수 리턴
fCountTopic <- function(x) {
tPositions <- which(x>0) # 확률이 0 이상인 컬럼의 위치
return( length(tPositions) ) # position 갯수 리턴
}
# 2. 확률이 0 보다 큰 토픽의 토픽명 리턴
fTopicNames <- function(x) {
tPositions <- which(x>0) # 확률이 0 이상인 컬럼의 위치
tNames <- rownames(as.matrix(tPositions)) # 해당 postion의 데이터를 matrix로 변환 후 rowname(토픽명) 확인
return( paste(tNames, collapse=" ") ) # 토픽명 여러개인 경우 합치기
}
# 각 문서별 토픽의 갯수와 해당 토픽명 표시.
df$Ntopic <- apply(df[,1:20], 1, fCountTopic)
df$Tname <- apply(df[,1:20], 1, fTopicNames)
answer <- df[21:22]
head(answer)
## Ntopic Tname
## Doc_1 1 Topic_8
## Doc_2 1 Topic_14
## Doc_3 1 Topic_9
## Doc_4 3 Topic_8 Topic_10 Topic_19
## Doc_5 1 Topic_9
## Doc_6 2 Topic_2 Topic_12
# write.csv(answer, file = "Quiz09.csv", row.names = T)