2018-12-03 직무성취도 평가 예시

# 분석데이터 원본
# http://hochul.net/blog/wp-content/uploads/2018/03/Gartner_2014_18_TechTrend.txt
# 필요 Package 설치
# install.packages("KoNLP")
# install.packages("wordcloud") 
# install.packages("RColorBrewer")
# Library 로드
library("KoNLP")
## Checking user defined dictionary!
library("wordcloud")
## Loading required package: RColorBrewer
library("RColorBrewer")

useSejongDic() # 한글 세종사전
## Backup was just finished!
## 370957 words dictionary was built.
분석대상파일 <- "Target.txt";
저장파일명 <- "Save.txt";

# 파일에서 라인으로 읽어들이기
내용 <- readLines(분석대상파일); 
# length(내용);


# View(데이터 프레임) : 데이터 뷰어 호출/파일내용 확인
# View(내용) 

# 불필요한 문자 필터링, 치환 : ctrl+H
# g(global) sub(substitute) - gsub(찾을 것, 바꿀 것, 열 지정)

# 아래의 특수 문자 사용에 주의
내용 <- gsub("'","",내용);
내용 <- gsub("‘","",내용);
내용 <- gsub("","",내용);
내용 <- gsub("“","",내용);
내용 <- gsub("”","",내용);
내용 <- gsub("기술","",내용);
내용 <- gsub("가트너는","",내용);
내용 <- gsub("하게","",내용);
내용 <- gsub("10","",내용);
내용 <- gsub("들이","",내용);
내용 <- gsub("하기","",내용);
내용 <- gsub("부사장","",내용);
내용 <- gsub("가지","",내용);
내용 <- gsub("AI","인공지능",내용);

#내용;


# sapply(x, FUN) - x : vector, list 또는 data.frame, 
#                FUN : 적용하고자 하는 함수
# extractNoun : 명사를 추출하는 함수
# 각 라인마다 명사단어들만 남기기
내용명사  <- sapply(내용, extractNoun, USE.NAMES=F);
#View(내용명사);

# unlist() 함수를 통해 조작을 쉽게 리스트 자료형을 해제 
내용명사리스트 <- unlist(내용명사) 
#단어들만 출력
#View(내용명사리스트);


# 2글자 이상의 단어만 필터링
두자이상단어 <- Filter( function(x){ nchar(x)>=2 }, 내용명사리스트);

## 최종 2글자 이상의 단어들의 목록
#View(두자이상단어); 

# 결과 목록을 파일로 저장
write(두자이상단어, 저장파일명); 

내용테이블 <- read.table(저장파일명, header=FALSE);

# EOF within quoted string........에러발생
# 빅데이터의 경우 용량이 너무 클때 발생
# 옵션에서 quote="" 만 추가하면 해결됨
내용테이블 <- read.table(저장파일명, header=FALSE, quote="");
#View(내용테이블);

단어발생수 = table(내용테이블) 
# 테이블형태 변환해서 저장

#View(단어발생수) 


##Word Cloud 그리기 ## 
windows();
# 제공 색상타입 모두 보기
# display.brewer.all( ); 

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

#-------- Word Cloud 함수 호출 ----------#
wordcloud(      names(단어발생수),freq=단어발생수,     scale=c(5,0.2), 
#가장 큰(가장 작은) 빈도 단어 사이 크기
rot.per=0.1, #90도 회전해서 보일 단어 비율
min.freq=3, max.words=100, 
# 빈도 3이상, 100미만
random.order=F, # True : 랜덤배치     #False : 빈도수가 큰 단어를 중앙에 배치
random.color=T, # True : 색랜덤     #False : 빈도순
colors=brewer.pal(11, "Paired"),      #11은 색상개수, 두 번째는 색상 타입이름
family="font")

Exam —————————————————————–

본인만의 기사/블로그/소셜 취합 자료를 대상으로 작업

본인의 이름을 상위 빈도수로 추가해서 이름이 중앙에 올 수 있도록 작업

단어간 겹침없이 출력되도록 변경할 경우 가산점 부여

분석대상파일 <- "4차산업.txt";
저장파일명 <- "저장.txt";

# 파일에서 라인으로 읽어들이기
내용 <- readLines(분석대상파일); 
## Warning in readLines(분석대상파일): '4李⑥궛<U+FFFD><U+FFFD>.txt'에서 불완전한 마지막 행이
## 발견되었습니다
# length(내용);


# View(데이터 프레임) : 데이터 뷰어 호출/파일내용 확인
# View(내용) 

# 불필요한 문자 필터링, 치환 : ctrl+H
# g(global) sub(substitute) - gsub(찾을 것, 바꿀 것, 열 지정)

내용 <- gsub("'","",내용);
내용 <- gsub("‘","",내용);
내용 <- gsub("","",내용);
내용 <- gsub("“","",내용);
내용 <- gsub("”","",내용);
내용 <- gsub("기술","",내용);
내용 <- gsub("가트너는","",내용);
내용 <- gsub("하게","",내용);
내용 <- gsub("10","",내용);
내용 <- gsub("들이","",내용);
내용 <- gsub("하기","",내용);
내용 <- gsub("부사장","",내용);
내용 <- gsub("가지","",내용);
내용 <- gsub("AI","인공지능",내용);

#내용;


# sapply(x, FUN) - x : vector, list 또는 data.frame, 
#                FUN : 적용하고자 하는 함수
# extractNoun : 명사를 추출하는 함수
# 각 라인마다 명사단어들만 남기기
내용명사  <- sapply(내용, extractNoun, USE.NAMES=F);
# View(내용명사);

# unlist() 함수를 통해 조작을 쉽게 리스트 자료형을 해제 
내용명사리스트 <- unlist(내용명사) 
#단어들만 출력
#View(내용명사리스트);


# 2글자 이상의 단어만 필터링
두자이상단어 <- Filter( function(x){ nchar(x)>=2 }, 내용명사리스트);

## 최종 2글자 이상의 단어들의 목록
#View(두자이상단어); 

# 결과 목록을 파일로 저장
write(두자이상단어, 저장파일명); 

내용테이블 <- read.table(저장파일명, header=FALSE);

# EOF within quoted string........에러발생
# 빅데이터의 경우 용량이 너무 클때 발생
# 옵션에서 quote="" 만 추가하면 해결됨
내용테이블 <- read.table(저장파일명, header=FALSE, quote="");
#View(내용테이블);

단어발생수 = table(내용테이블) 
# 테이블형태 변환해서 저장

#View(단어발생수) 


##Word Cloud 그리기 ## 
windows();
# 제공 색상타입 모두 보기
# display.brewer.all( ); 

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

#-------- Word Cloud 함수 호출 ----------#
wordcloud(  names(단어발생수),freq=단어발생수,     scale=c(10,0.2), 
                #가장 큰(가장 작은) 빈도 단어 사이 크기
                rot.per=0.25, #90도 회전해서 보일 단어 비율
                min.freq=5, max.words=100, 
                # 빈도 3이상, 100미만
                random.order=F, # True : 랜덤배치     #False : 빈도수가 큰 단어를 중앙에 배치
                random.color=T, # True : 색랜덤     #False : 빈도순
                colors=brewer.pal(11, "Paired"),      #11은 색상개수, 두 번째는 색상 타입이름
                family="font")
## Warning in wordcloud(names(단어발생수), freq = 단어발생수, scale = c(10, :
## 인공지능 could not be fit on page. It will not be plotted.