R/R machine learning

[Quanteda] keyword analysis visualization

시키테이 2020. 6. 10. 12:16
반응형

요즘 많이 쓰이고 있는 quanteda library를 통해서 Natural Language Processing을 해보려고 합니다. 이번에 할 작업은, 각 사고 원인별로 따라 그 원인을 설명하는 특정 단어들이, "다른 원인들에 비해", 더 많이 나오는가 적게 나오는가를 그래픽화해보려고 합니다. 자세한 설명은 생략하고 핵심 명령어로 바로 들어가죠. 

 

우선 원 자료는 accident_data_copy.csv라는 파일이고 여기서 NARRATIVE 칼럼을 핵심 단어 분석을 하려고 합니다. 우선 library를 불러오구요. 

require(quanteda)
require(readtext)
require(quanteda.corpora)
require(ggplot2)

필요없는 리스트들 먼저 지워버리구요. 

rm(list=ls())

이제 원본 데이터 가져옵니다. 그리고 NARRATIVE 칼럼을 분석 대상으로 삼습니다. 이 분석을 CAUSE별로 할 거구요. 나중에 룹을 씌우기 위해 각 CAUSE 내용을 다 포괄하는 벡터(causes)를 하나 만들어줍니다. 

dat_narra <- readtext("./accident_data_copy.csv", text_field = "NARRATIVE")
names(dat_narra)
dat_narra <- dat_narra[c("doc_id","CAUSE","text")]
dat_narra$CAUSE <- as.factor(dat_narra$CAUSE)
causes <- levels(dat_narra$CAUSE)

readtext로 읽고 나면 NARRATIVE 칼럼이 text라는 칼럼으로 이름이 바뀌게 되구요. 여기서 필요한 칼럼 3개 (doc_id, CAUSE, text)만 뽑아줍니다. readtext를 쓰게 되면 각 doc_id가 각 고유 열 이름으로 할당됩니다. 아래와 같이..

 

이어서  corpus를 token을 만들어줍니다. 이어서 document-feature matrix (DFM)를 a tokens object부터 만듭니다. 

# Create Corpus
corp_narra <- corpus(dat_narra)
summary(corp_narra, 5)

# Tokens
toks_narra <- tokens(corp_narra,remove_punct = T)
dfmat_narra <- dfm(toks_narra)

분석하기에 앞서 우선 시각화한 자료를 다운로드할 pdf파일을 같은 폴더에 만들어줍니다. 

pdf_path = "./comparisons.pdf"
pdf(file=pdf_path)  

이제 여기서 나올 핵심 명령어가 textplot_keyness입니다. 각 원인과 그 원인 이외의 원인들을 비교하면서 특정 원인들이 얼마나 더 많은 특정 키워드를 사용했는지를 그림으로 한 번 그려서 pdf 저장해봅시다~

 

for (cause in causes){
  tstat_key <- textstat_keyness(dfmat_narra, 
                                target = docvars(dfmat_narra, 'CAUSE') == cause)

  print(textplot_keyness(tstat_key) + 
    ggtitle(paste(cause,"v.s. The remaining"))+
    theme(plot.title = element_text(hjust = 0.5)))
}

dev.off() 

이렇게 하면 다음과 같은 그래프 자료를 만들어 줍니다. 아래 자료는 전체가 아니라 자료 중 일부입니다. 

 

반응형

'R > R machine learning' 카테고리의 다른 글

[R machine learning] Decision Tree/Random Forest  (0) 2020.04.29