계약관련 스크립트 참조

Study Info

계약관련 스크립트 참조

HR분석 0 52 2019.12.12 13:09


ip <- read.csv("C:/data/kdn_raw2.csv")


ip$추정금액 <- gsub(",","",ip$추정금액)

ip$추정금액 <- as.numeric(ip$추정금액)



summary(ip$추정금액)


ip$type[ip$추정금액 >= 1990 ] = 'A'

ip$type[ip$추정금액 >= 1340 & ip$추정금액 < 1990 ] = 'B'

ip$type[ip$추정금액 >= 669 & ip$추정금액 < 1340 ] = 'C'

ip$type[ip$추정금액 < 669 ] = 'D'

ip$type <- as.factor(ip$type)


ip_s <- as.data.frame(ip$공고명)

ip_a <- subset(ip,ip$type=="A")

ip_b <- subset(ip,ip$type=="B")


ip_a1 <-as.data.frame(ip_a[,7])


#===================================

library(stringr)


library(rJava)


.jinit()


.jaddClassPath('C:/Program Files/R/R-3.6.1/library/KoNLP/java/korean-text-3.0.jar')


.jaddClassPath('C:/Program Files/R/R-3.6.1/library/KoNLP/java/scala-library-2.11.8.jar')


.jaddClassPath('C:/Program Files/R/R-3.6.1/library/KoNLP/java/twitter-text-1.11.1.jar')


twitterObj <- .jnew('com.twitter.penguin.korean.TwitterKoreanProcessorJava$Builder')


twitterObj <- .jrcall(twitterObj, 'build')




# 트위트 형태소 함수 설정====================================


twi.extractNoun <- function(strings){

  res = .jrcall(twitterObj, 'tokenize', strings)

  res = .jstrVal(res)

  

  res = str_match_all(res, "([가-힣]+)\\(Noun")[[1]][,2]

  res= res[nchar(res)>=2]

  res

}




word <- apply(ip_S,1,twi.extractNoun)


twitter_sentence <- sapply(word, function(x) { paste0(as.character(unlist(x)), collapse=" ") })



library(tm)

cps <- Corpus(VectorSource(twitter_sentence)) 

tdm <- TermDocumentMatrix(cps,

                          control=list(tokenize=twi.extractNoun,

                                       wordLengths=c(2, 10)))



tdm2 <- removeSparseTerms(tdm, sparse = 0.98)

m2 <- as.matrix(tdm2)

distMatrix <- dist(scale(m2))

fit <- hclust(distMatrix, method = "ward.D2")

par(mfrow=c(1,1)) 

plot(fit)

rect.hclust(fit, k = 10)



word_freq <- table(unlist(word)) # 추출된 단어의 숯수출현 카운트수

aa <- sort(word_freq,decreasing=T)   # 출현빈도수가 높은 순으로 내림차순

bb <- head(aa,20)   # 상위 20개 단어만 추출


barplot(bb,las=2,col="steelblue")  # 상위 20개 단어에 대한 막대그래프 그리기



########### 워드 클라우드2


library(wordcloud2)

windowsFonts(malgun=windowsFont("맑은 고딕"))

wordcloud2(data=aa, minSize = 15, minRotation = 0, maxRotation = 0, rotateRatio = 1, fontFamily='맑은 고딕',size=0.8)




#######  토픽분석


### 빈출 단어만 간추리기

#install.packages("slam")

library(slam)

word.count = as.array(rollup(tdm,2))#매트릭스 행별 합계 구하기

word.order = order(word.count, decreasing = T)[1:200]# 많이 쓰인 단어 순서정리(단어번호)


freq.word = word.order[1:200] # 상위 1000개 단어만 재할당(단어번호)

tword <- row.names(tdm[freq.word,]) # 해당단어번호 단어 확인

tword <- gsub("\n","",tword)






#### LDA에 input data 만들기(DTM만든 후 다시 dtm2ldaformat함수로 변환)

dtm = as.DocumentTermMatrix(tdm[freq.word,]) # 상위 단어 1000개만 뽑아서 DTM으로 변환

dtm


#install.packages("topicmodels")

library(topicmodels)


ldaform = dtm2ldaformat(dtm,omit_empty=T) # dtm을 LDA 돌릴 수 잇는 형식의 데이터로 변환


str(ldaform)



#### LDA 분석

#install.packages("lda")

library(lda)


K<-5

set.seed(1004)  

num.iterations <- 1000



result.lda = lda.collapsed.gibbs.sampler(ldaform$documents, K, ldaform$vocab, 

                                         num.iterations, 0.1, 0.1, compute.log.likelihood = TRUE) # 파라미터 세팅 : 한 토픽내에 단어들의 확율분포/



### 분석 결과 확인

top.words <- top.topic.words(result.lda$topics, 15, by.score = TRUE)

top.words <- gsub("\n","",top.words)

print(top.words)


top.words <- as.data.frame(top.words)


#write.csv(top.words,"N:work/ds/news_topic14B.csv",row.names=F)



[이 게시물은 HR분석님에 의해 2020-01-26 18:51:02 교육자료에서 복사 됨]

Comments

Study Info

상담 문의


010.9417.2025 hrd04@naver.com