R 워드 클라우드 | [R 기초]No.8 워드클라우드 72 개의 정답

당신은 주제를 찾고 있습니까 “r 워드 클라우드 – [R 기초]NO.8 워드클라우드“? 다음 카테고리의 웹사이트 you.tfvp.org 에서 귀하의 모든 질문에 답변해 드립니다: you.tfvp.org/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 스마트인재개발원 인쌤TV 이(가) 작성한 기사에는 조회수 18,047회 및 좋아요 180개 개의 좋아요가 있습니다.

r 워드 클라우드 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 [R 기초]NO.8 워드클라우드 – r 워드 클라우드 주제에 대한 세부정보를 참조하세요

✔️빅데이터 입문자를 위한 눈높이 교육! 그것이 R고싶다!\r
✔️텍스트마이닝을 토대로 워드클라우드 해보는 시간!
✔️좋아요와 댓글은 힘이 됩니다 s2\r
\r
PPT다운로드 받기: https://bit.ly/2o7bMig\r
\r
#국비교육 #빅데이터 #IT교육 #SW교육 \r
어디서 배울까 고민하지마시고 기초부터 탄탄하게 배워서, 취업까지!\r
.\r
👉호남권 최대 IT 교육기관 스마트인재개발원에서 교육받으세요!\r
\r
#광주 #전남 #취업 #국비지원 #IT #스마트인재개발원 #꿀팁 #광주대 #호남대 #조선대 #전남대 #대학생 #취준생 #교육 #강의 #일상 #공유 #고민 #스마트 #sw #국비 #it교육추천 #스터디 #대외활동 #동아리 #R #R설치 #시각화 #프로그래밍 #프로그램설치 #오류 #변수 #벡터연산 #매트릭스 #함수 #텍스트마이닝 #워드클라우드 #프로그래밍언어 #subset함수

r 워드 클라우드 주제에 대한 자세한 내용은 여기를 참조하세요.

[R 그래픽스] 워드 클라우드(Word Cloud) 생성하기 – 세종대왕

워드 클라우드(Word Cloud)는 단어의 빈도수를 구름 형태로 표현하는 그래픽 기법입니다. 통상적으로 단어의 크기는 빈도수에 비례하여 표현합니다.

+ 여기에 더 보기

Source: zzinnam.tistory.com

Date Published: 9/17/2021

View: 4321

[R] wordcloud만들기(wordcloud package) – 네이버 블로그

1. wordcloud란? 수치데이터는 히스토그램, 산점도, 막대그래프, boxplot 등을 이용할 수 있다. 하지만 텍스트의 경우, 빈도를 나타내는 막대그래프 …

+ 여기에 보기

Source: m.blog.naver.com

Date Published: 10/3/2022

View: 842

R을 이용한 텍스트마이닝 & 워드클라우드 – 저장소

R을 이용한 한글 텍스트마이닝 & 워드클라우드 Preview 비정형 텍스트를 기반으로 의미있는 정보를 추출하는 기술을 텍스트마이닝이라고 합니다.

+ 여기에 보기

Source: kutar37.tistory.com

Date Published: 3/8/2021

View: 7226

R 워드 클라우드(word cloud) 생성해보기

R 워드 클라우드(word cloud) 생성해보기. 이수진의 블로그 2017. 12. 4. 09:28. 지난 시간에 KoNLP를 이용해서 텍스트 마이닝을 진행했습니다.

+ 여기를 클릭

Source: lsjsj92.tistory.com

Date Published: 11/14/2021

View: 6669

R 간단한 워드 클라우드 (word cloud) 만들기 – Tech notes

하지만 저처럼 R을 아직 잘 다루지 못하는 사람한테는 유용할지도 .. 그리고 이미 단어로 구성된 데이터 셋을 얻어왔기 때문에 문장에서 단어를 추출하는 …

+ 더 읽기

Source: 2srin.tistory.com

Date Published: 7/11/2021

View: 5337

R : 워드클라우드-wordcloud ( 개념 및 예제 ) – 쵸코쿠키의 연습장

텍스트 마이닝 텍스트 마이닝은 비정형 텍스트에서 의미 있는 정보를 추론하는 기술을 의미합니다. 단어를 분류하거나 문법적 구조를 분석합니다.

+ 더 읽기

Source: jjeongil.tistory.com

Date Published: 6/9/2021

View: 5938

R 에서 네이버 뉴스 검색 결과로 워드 클라우드를 만드는 방법

How to make a Word Cloud in in R · 패키지 설치 · 단어 분석하기 · 워드 클라우드 만들기.

+ 여기에 자세히 보기

Source: dr-hkim.github.io

Date Published: 4/13/2022

View: 1242

[R] 워드 클라우드 만들기 – Youkyung

[R] 워드 클라우드 만들기 · 형태소 분석 · 명사, 동사, 형용사 등 의미를 지는 품사 단어 추출 · 빈도표 만들기 · 시각화.

+ 여기에 보기

Source: 1022yk.tistory.com

Date Published: 9/21/2022

View: 6311

R KoNLP로 명사 추출, 명사로 워드클라우드 만들어보기 – gaori

R KoNLP로 명사 추출, 명사로 워드클라우드 만들어보기. bonong 2019. 2. 12. 15:21. 이전 글에서 웹크롤링으로 가져온 텍스트 데이터를 가공해보겠습니다.

+ 여기를 클릭

Source: goo-eungs.tistory.com

Date Published: 9/8/2022

View: 6803

주제와 관련된 이미지 r 워드 클라우드

주제와 관련된 더 많은 사진을 참조하십시오 [R 기초]NO.8 워드클라우드. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

[R 기초]NO.8 워드클라우드
[R 기초]NO.8 워드클라우드

주제에 대한 기사 평가 r 워드 클라우드

  • Author: 스마트인재개발원 인쌤TV
  • Views: 조회수 18,047회
  • Likes: 좋아요 180개
  • Date Published: 2019. 12. 2.
  • Video Url link: https://www.youtube.com/watch?v=6UNOktF4ToU

[R 그래픽스] 워드 클라우드(Word Cloud) 생성하기

워드 클라우드(Word Cloud)는 단어의 빈도수를 구름 형태로 표현하는 그래픽 기법입니다.

통상적으로 단어의 크기는 빈도수에 비례하여 표현합니다.

워드 클라우드를 설명하는 여러 블로그를 보면,

한글 자연어 분석 패키지인 KoNLP(Korean Natural Language Processing)에서 시작합니다.

하지만, 정작 워드 클라우드를 생성하기 위해서는 아래 2가지만 준비되면 그리기가 가능한 그래픽 기법입니다.

1. wordcloud 패키지 설치

2. wordcloud 표현을 위한 2개의 변수(단어, 빈도수)로 구성된 Data.frame

KoNLP패키지는 결국 2번의 데이터 세트를 생성하기 위해 중간 과정에서 필요한 패키지입니다.

KoNLP 패키지는 다음 포스팅에서 자세히 다루도록 하겠습니다.

그럼 실습을 통해 wordcloud를 생성해 보겠습니다.

Step 0) 우선, 아래 데이터 세트를 실습 PC에 저장합니다.

fruit_vegetable.csv 0.00MB

(예제 데이터: 인터넷에서 검색된 과일 및 야채 이름과 검색 수)

Step 1) 필요 패키지 설치 및 로딩

install.packages(“wordcloud”) # wordcloud 패키지 설치

library(“wordcloud”) # wordcloud 패키지 로딩

library(“RColorBrewer”)

# 주제별 맵을 위해 멋지게 보이는 색상 팔레트 생성 패키지

# 글자 색깔 표현에 필요한 패키지 로딩(별도 설치할 필요가 없는 패키지)

Step 2) Step0에서 다운로드한 실습 파일을 R data.frame으로 변환

word_cloud <- read.csv("fruit_vegetable.csv", header = T, encoding = "UTF-8") dim(word_cloud) # 105 2 head(word_cloud) wordcloud를 만들기 위한 데이터 세트의 변수명을 변경함 names(word_cloud) <- c("title", "count") Step 3) wordcloud 생성 color <- brewer.pal(8, "Dark2") # 단어를 표현할 색상 세팅 # 별도 그림 파일로 생성하기 위한 파일명, 너비, 높이 세팅 png(filename="wordcloud.png",width=1000,height=800) wordcloud(words = word_cloud$title, # 데이터 프레임에서 단어를 나타내는 변수 지정 ____________freq = word_cloud$count, # 데이터 프레임에서 빈도를 나타내는 변수 지정 ____________min.freq = 1, # 최소 단어의 빈도 세팅 ____________max.words = 105, # wordcloud에 표현할 단어 수 세팅 ____________random.order = F, # 빈도가 많은 단어를 중앙에 세팅 ____________rot.per = .1, # 90도 회전하기 위한 단어 비율 세팅 ____________scale = c(4, 0.3), # 단어 크기의 범위를 나타내는 길이가 2인 벡터 ____________colors = color) # 가장 자주 발생하는 단어부터 색상 지정 dev.off() # 그림 파일 저장 멋진 워드 클라우드가 생성되었습니다~!!!!!

[R] wordcloud만들기(wordcloud package)

1. wordcloud란?

수치데이터는 히스토그램, 산점도, 막대그래프, boxplot 등을 이용할 수 있다. 하지만 텍스트의 경우, 빈도를 나타내는 막대그래프 외에는 시각화가 어렵다. 그래서 가장 많이 사용하는 시각화 방법이 바로 wordcloud다.

wordcloud는 각 단어의 빈도에 따라 색과 크기를 다르게 하여 시각화하는 방법이다. 예를 들어, 어떤 텍스트에서 “서울”이 가장 많이 나오면 서울이란 단어가 가장 크게 나오며 빈도가 적을수록 그 크기가 줄어드는 식으로 시각화한다.

2. 텍스트 준비하기

바로 전 포스팅에서 크롤링을 통해 네이버 뉴스에 있는 부동산 관련 기사들의 제목을 크롤링했었다. 관련 포스팅은 아래의 링크를 참조해주면 좋겠다.

https://chunsa0127.blog.me/221860779314

R을 이용한 텍스트마이닝 & 워드클라우드

R을 이용한 한글 텍스트마이닝 & 워드클라우드

Preview

비정형 텍스트를 기반으로 의미있는 정보를 추출하는 기술을 텍스트마이닝이라고 합니다. 데이터마이닝과는 다른 것으로, 데이터마이닝은 구조화되고 사실적인 방대한 데이터베이스에서 관심 있는 패턴을 찾아내는 기술 분야라고 한다면 텍스트마이닝은 구조화되지 않고 자연어로 이루어진 텍스트에서 의미를 찾아내는 기술 분야입니다.

우리는 비정형 텍스트에서 텍스트마이닝을 통해 원하는 텍스트를 걸러내, R을 통한 시각화를 해 볼 겁니다.

워드클라우드는 아래의 사진과 같이 문서의 단어들을 분류하여 그 빈도를 한눈에 보기 쉽게 하는 겁니다.

(이런거)

포스팅에는 영화 박열의 네이버 리뷰를 크롤링해 .txt 파일로 저장한 것을 사용할 겁니다. 아래 첨부파일을 다운받으세요.

review.txt 1. 경로 선택과 파일 읽어오기

R studio에서 경로를 선택할때는 setwd()를 사용합니다.

다운받은 폴더 경로를 복사하세요. 주의할 것은 기존 경로를 복사해서 사용하면 \(역슬래쉬)로 복사되지만 R에서는 /(슬래쉬)로 바꿔주어야 합니다. 혹은 역슬래쉬 두개(\\)를 사용해도 무방합니다.

(역슬래쉬를 슬래쉬로 바꿔줍시다)

1 setwd( “C:/Users/kutar/Dropbox/R_Text” ) cs

아래와 같이 입력해봅시다.

list.files() : 현재 작업경로에 저장되어있는 파일목록을 불러옵니다.

1 2 > list.files() [ 1 ] “review.txt” cs

파일을 읽는 방법은 여러가지가 있으나, 크롤링한 파일이라 한줄씩 읽는 readLines()를 사용하겠습니다.

readLines()는 파일을 행단위로 읽어 벡터로 저장해주는 메서드입니다.

1 data < - readLines( "review.txt" ) cs 아마 data를 출력하면 엄청나게 긴 출력문이 나올 것입니다. 간단한 확인을 위해 head()를 이용해 처음 부분만 출력해봅시다. head()는 첫 5인덱스까지만 출력해주는 메서드이고, 파라미터로 원하는 숫자를 넣어 그 인덱스를 조절할 수 있습니다. 1 2 3 4 5 6 7 > head(data) [ 1 ] “배우의 국적을 의심하게 만듬.” [ 2 ] “” [ 3 ] “여주를 잘 알려지지 않은 배우로 캐스팅한게 정말 탁월했습니다! 진짜 일본인이 연기하는 줄 착각할 정도로 연기가 정말 좋았네요! 최희서 배우님 진짜 앞으로 더욱 기대되는 배우입니다!” [ 4 ] “” [ 5 ] “” [ 6 ] “” Colored by Color Scripter cs

2. 패키지 설치

본격적으로 들어가기 전에 설치할 패키지가 있습니다.

wordcloud : 말 그대로 워드클라우드를 위한 패키지입니다.

RColorBrewer : 여러 색을 제공해주는 팔레트 같은 패키지입니다. R의 기본 컬러는 처참할 정도로 쨍한 원색입니다. 이 패키지는 기본서에도 등장할 정도로 애용되니 설치합시다.

KoNLP : 한국어 텍스트마이닝을 위한 패키지입니다. R에서는 유일한…

install.packages(“패키지이름”)을 하면 설치가 자동으로 이루어집니다.

그리고 설치 후 library(“패키지이름”)을 하면 해당 패키지를 사용하겠다는 선언이 됩니다.

차례로 따라 타이핑해봅시다.

1 2 3 4 5 6 7 8 install.packages( “wordcloud” ) install.packages( “RColorBrewer” ) install.packages( “KoNLP” ) #import library (wordcloud) library (RColorBrewer) library (KoNLP) cs

wordcloud는 기본적으로 wordcloud(데이터, 빈도수)로 출력할 수 있습니다.

데이터의 빈도수가 클수록 글자가 크게 나타나는 것입니다.

물론 데이터는 여러개가 들어갈 수 있으며, 따라서 벡터형식 으로 들어가게 됩니다. 간단하게 시험삼아 아래와 같이 쳐봅시다.

1 2 3 word < - c( "사과" , "바나나" , "키위" , "망고" , "오렌지" , "딸기" , "파인애플" ) fre < - c( 30 , 20 , 10 , 4 , 5 , 6 , 3 ) wordcloud(word, fre) cs 각각 순서대로 매칭되어 사과가 30, 바나나가 20, 키위가 10... 이라는 의미입니다. 아마 옵션을 주지 않아 위치가 랜덤값이라 조금씩 모양은 다르겠지만 아래와 같이 이런 못생긴 워드클라우드가 등장할 것입니다. wordcloud() 의 옵션 wordcloud()안에서 여러 옵션을 줄 수 있습니다. 1 2 3 4 5 6 7 8 9 10 wordcloud() scale 가장 빈도가 큰 단어와 가장 빈도가 작은단어 폰트사이의 크기차이 scale = c( 10 , 1 ) minfreq 출력될 단어들의 최소빈도 maxwords 출력될 단어들의 최대빈도(inf:제한없음) random.order(true면 랜덤, false면 빈도수가 큰 단어를 중앙에 배치하고 작은순) random.color(true면 색 랜덤, false면 빈도순) rot.per(90도 회전된 각도로 출력되는 단어비율) colors 가장 작은빈도부터 큰 빈도까지의 단어색 family 글씨체 Colored by Color Scripter cs 간단히 사용법을 알았으니 이제 텍스트마이닝을 진행해봅시다. 시작 전 useSejongDic()으로 사전을 추가해줍시다. (대소문자 주의) 1 useSejongDic() cs 3. 명사 추출 extractNoun 으로 명사를 추출합니다. sapply() 메서드를 사용할 건데 sapply()는 인자로 sapply(data, function) 이 기본적으로 들어가며, 이 function에 extractNoun을 넣으면 됩니다. 리뷰 텍스트파일인 만큼 컬럼은 필요없으니 USE.NAMES=F 라는 옵션으로 컬럼명은 빼주기로 하겠습니다. 1 data < - sapply(data, extractNoun, USE.NAMES = F ) cs sapply는 리스트형태로 리턴이 됩니다. 분석을 위해 unlist() 를 이용해 다시 벡터로 변환해주겠습니다. 1 data_unlist < - unlist(data) cs 항상 변환후에는 확인하는 습관을 들여야 된다고 했습니다. 1 2 > head(data_unlist) [ 1 ] “배우” “국적” “의심” “” “여주를” “배우” cs

이 단어들의 빈도수를 출력하기 위해 table로 바꿔 주겠습니다.

1 wordcount < - table(data_unlist) cs table로 변경해 출력하면 아마 이런 모양이 될 것입니다. 1 2 3 4 5 > head(wordcount) data_unlist ‘그시대 ‘ 박열 ‘ ‘ 박열 ‘에 ‘ 박열 ‘은 ‘ 박열 ‘이 15001 1 2 1 1 1 cs

아직 전처리 전이니 공백 등은 신경 쓸 필요없습니다.

이 엄청난 데이터들을 워드클라우드로 뽑아내면, 컴퓨터가 멈출 정도로 끝없는 구름에 휩싸이게 됩니다.

모양이 제대로 나오지도 않음은 물론이고 그래서는 텍스트마이닝의 의미가 없습니다.

head()를 이용해 최대빈도 100개 정도면 뽑아 다른 변수에 넣어주겠습니다.

1 wordcount_top < - head(sort(wordcount, decreasing = T ), 100 ) cs sort()는 정렬메서드인데, sort()의 decreasing 옵션은 True면 내림차순, False면 오름차순으로 정렬해 줍니다. 또한 위에서 언급했지만 head()에 두번째 인자로 숫자를 넣으면 첫 5인덱스만 빼주는게 아니라 인자만큼 빼줍니다. head()에 100을 넣고, 정렬까지 내림차순으로 완료하였으면 다음과 같이 상위 100개가 출력됩니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 > wordcount_top data_unlist 영화 연기 한 배우 들 것 15001 3190 1711 1400 1161 1135 829 적 역사 지루 진짜 수 감동 생각 800 783 685 562 557 538 525 재미 코 후미 화 이제훈 일본인 감독 481 473 471 438 361 356 354 박열 분 내용 함 줄 최고 인물 351 336 333 316 304 296 280 연기력 스토리 나 듯 중간 사람 이 278 269 263 263 263 261 261 음 만 님 점 일 이준익 실화 260 246 243 236 226 223 220 감사 몰입 들이 시간 사실 최희서 평점 218 211 210 195 194 192 191 본 기대 번 해서 말 우리 재밌게 190 188 188 173 172 172 172 중 ^ㅎ 저 데 그 연출 리얼 170 169 168 164 156 155 154 가슴 ㅠ ^ㅋ 동주 잔잔 두 독립 153 148 146 146 143 142 140 때 여자 시대 박열이라는 이야기 여배우 주인공 134 134 131 130 128 127 125 웃음 장면 도 작품 한국인 추천 일본어 122 121 120 120 119 118 113 부분 기억 하나 훌륭 사랑 고증 대단 108 106 105 104 103 102 102 내 박열과 애국심 지 여주인공 매력 표현 101 101 101 101 100 99 99 눈물 대한 98 98 Colored by Color Scripter cs

보기만해도 정신사나운 데이터입니다. 가장 많은 단어가 공백이고

^ㅋ와 같은 특수문자는 물론 보조사와 명사들이 붙어 나오거나

만, 듯, 수 등 보통명사가 아닌 의존명사들이 하나의 명사로 등록되어 있습니다.

(한국어문법상 의존명사도 실질형태소이자 자립형태소로 분류하기 때문입니다.)

그래도 한번 워드클라우드에 띄워봅시다.

처음 해본 것과 같이 wordcloud() 에는 데이터와 빈도수 가 파라미터로 들어간다고 했습니다.

names()를 이용하면 table의 제목을 벡터형식으로 뽑아낼 수 있는데 이를 data로 넣고

table 내용물은 그대로 빈도수(freq)에 넣습니다.

조금 그럴듯해지지 않았나요?

등록

이제 전처리가 필요합니다.

영화리뷰를 써보거나 본 분들은 알겠지만 요즘은 신조어 등으로 제대로 된 데이터를 뽑기가 힘듭니다.

사전에 없는 단어들이고, 그것마저 사람마다 여러 형태로 변형해서 쓰며 띄어쓰기는 고사하고 오타가 너무나 빈번하기 때문입니다.

그래도 처리는 해야하기 때문에

KoLNP의 사전에 mergeUserDic() 을 사용해 우리가 수동으로 단어들을 등록해줘야만 합니다.

간단히 예를 들면 ‘꿀잼’, ‘노답’ 등등 많이 쓰이면서도 사전에는 없는 단어들을 등록해주어야 합니다.

(ncn은 형태소분석상 명사라는 뜻입니다. 자세한 형태소분석태그를 보고 싶으면: http://kkma.snu.ac.kr/documents/index.jsp?doc=postag 링크를 참조하세요.)

1 2 3 4 5 6 7 8 > mergeUserDic(data.frame(c( “노잼” ), “ncn” )) 1 words were added to dic_user.txt. Warning message: ‘mergeUserDic’ is deprecated. Use ‘buidDictionary()’ instead. See help( “Deprecated” ) cs

(밑의 경고메시지는 무시해도 됩니다.)

이렇게 한줄 한줄 단어를 어느세월에 추가할 수 있을까요?

한꺼번에 등록하기 위해서 반복문을 사용할 수 있습니다.

메모장에 한줄한줄 새로 추가할 단어를 쓰고, 반복문(for)으로 한줄씩 읽어들이면서 한꺼번에 merge시키는 것입니다.

setwd()를 이용해 경로를 새로 만든 단어집이 있는 곳으로 재설정해주는 과정을 거치거나,

현재 진행중인 코드가 있는 폴더에서 단어집을 만들어야 합니다.

1 2 3 4 5 6 setwd( “D:/R_Practice/Practice” ) add_dic < - readLines( "addNoun.txt" ) for (i in 1 :length(add_dic)){ mergeUserDic(data.frame(add_dic[i], "ncn" )) } Colored by Color Scripter cs 이런식으로 한 번에 추가하고, 1 2 3 4 1 words were added to dic_user.txt. 1 words were added to dic_user.txt. 1 words were added to dic_user.txt. There were 42 warnings (use warnings() to see them) cs 대충 이렇게 뜨면 성공입니다. (경고는 또 무시합시다) 사실 이렇게 한줄로도 됩니다. 1 mergeUserDic(data.frame(readLines( "addNoun.txt" ), "ncn" )) cs 이후, 위에서 했던 extractNoun부터 1 2 data < - sapply(data, extractNoun, USE.NAMES = F ) Colored by Color Scripter cs 차근차근 wordcount table을 빼는 곳까지 반복 하면 새로운 단어가 추가되어 정리된 것을 볼 수 있습니다. R은 인터프리터 언어라 위로 올려서 같은 코드를 블럭해 실행하면 다시 타이핑할 필요가 없으니 까먹지 말고 단어를 추가했으면 꼭 위로 올라가 반복합시다. 주의할 점은, merge 과정에서 대충 단어를 등록하면 전혀 다른 결과가 나온다는 것입니다. 요즘은 혹평받는 영화들이라도 베스트댓글 혹은 정성들여 쓴 댓글은 대부분 칭찬으로 되어 있으며, 욕하는 사람들은 대충 툭툭 던지지 굳이 댓글을 정성들여 쓰지 않습니다. head()만으로 top100 단어를 보고 노잼, 극혐, 스렉 등과 같은 단어를 무심코 넘겨버렸다고 가정합시다. 씹노잼이네요, 씹노잼입니다, 씹노잼극혐, 씹노잼임, 개노잼 등등 수천가지의 문장에 들어있는 '노잼' 하나의 단어를 놓치면 혹평으로 가득한 영화임에도 결과창에는 '연기', '감동' 등과 같은 긍정적인 단어가 가장 많이 나오는 경우가 있습니다. 5. 전처리 - filter() 필터 다음은 필터입니 다. filter() 는 내가 만든 함수를 적용시키는 메서드입니다. 1 2 data_unlist < - Filter( function (x){nchar(x) > = 2 }, data_unlist) Colored by Color Scripter cs

2글자 이상의 단어만 걸러주는 함수를 만들어 넣었습니다.

약간 복잡해 보일 수 있으나 구조는 생각보다 단순합니다.

함수의 기본구조는 function(파라미터){ 함수내용 } 으로, 위 Filter() 안에 쓰인 nchar(x )는 파라미터 x의 길이를 구해주는 메소드입니다.

즉 data_unlist 에 들어있는 우리의 데이터들이 하나씩 function() 안에 x로써 들어가고,

nchar(x)>=2 를 통해 2글자 이상인 단어만 살아남아 다시 data_unlist에 담기는 구조입니다.

이것만으로도 데 , 등, 도, 수 와 같은 수많은 의존명사들을 거를 수 있습니다. 위에서 언급했듯 한국어문법상 의존명사도 실질형태소이자 자립형태소이기 때문에 이 과정은 필수입니다.

6. 전처리 – gsup() 불용어처리 (중요)

다음은 불용어처리 인 데, gsub(찾을 단어, 바꿀 단어, 찾을 곳) 을 이용하여 바꿔줄 수 있습니다.

불용어란 주제색인어로서 의미가 없는 단어들을 의미합니다.

내가 워드클라우드를 만들고자 할 때 필요없거나 원하지 않는 단어를 제거함은 물론이요,

동사나 형용사의 활용형을 기본형으로 바꾸거나 ( ex)달리는 -> 달리다 )

같은 명사인데 다른 조사나 보조사가 붙은 것들을 모두 제거하여 하나의 단어로 통일시키는 등

빠져서는 안되는 필수적 과정입니다.

아까 봤던 테이블에서, 영화라는 단어의 빈도가 가장 많았습니다.

영화 리뷰임을 이미 알고 있는데 영화라는 단어가 워드클라우드의 메인에 자리잡는것은 원하지 않습니다.

지워버리도록 하겠습니다.

문자열은 “” 처리로 없는 것처럼 눈속임이 가능합니다.

아래와 같은 방법으로 필요없는 기본단어를 제거할 수 있습니다.

1 data_unlist < - gsub( "영화" , "" , data_unlist) cs 그러나 이 방법은 사실상 비효율적입니다. '영화'는 지워지겠지만 '영화를' 이라는 단어는 '영화'가 ""로 대체되어 '를' 이라는 단어가 됩니다. '이영화를' '그영화는' 이렇게 띄어쓰기를 하지 않아 한 단어로 분류되어버린 단어가 있었다면 '영화'가 ""로 사라졌으므로 '이를', '그는' 이라는 전혀 딴판의 단어로 바뀌어 버립니다. 여기서 정규표현식이라는 것이 필요합니다. 정규표현식은 모든 프로그래밍 언어에서 널리 쓰이므로 알아두는 것도 좋겠습니다. 아래의 링크를 참조하세요. 위키: https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D R 정규식 : https://statkclee.github.io/ds-authoring/regex-r.html 특수문자 삭제 1 data_unlist < - gsub( '[~!@#$%&*()_+=?<>]’ , ” ,data_unlist) cs

아마 저 안에 등록해도 몇몇 특수문자는 삭제가 잘 되지 않을 것입니다. 용도가 정해진 특수문자들이 있는데, R에서 그 특수문자를 걸러버리기 때문입니다. (위 링크 참조) \\를 앞에 사용하면 텍스트 그대로 인식하니 삭제하면 됩니다. 아래는 간단한 예입니다.

1 data_unlist < - gsub( "\\[" , "" ,data_unlist) cs 자음 삭제(ㅋㅋ,ㅎㅎ,ㅇㅇ 등) 1 data_unlist < - gsub( '[ㄱ-ㅎ]' , '' ,data_unlist) cs ㅜㅜ나 ㅠㅠ 등 삭제 1 data_unlist < - gsub( '(ㅜ|ㅠ)' , '' ,data_unlist) cs 숫자 삭제 1 data_unlist < - gsub( "\\d+" , "" ,data_unlist) cs 이렇게 여러 불용어처리 후에는, 위의 필터를 이용해 한번 더 2글자 미만 단어를 걸러줘야 합니다. "" 눈속임으로 빈 칸이 되어버리고 붙어있던 특수문자나 숫자, 자모가 없어지면서 2글자 미만 단어가 많이 생겼을 것이기 때문입니다. 여기까지 했으면 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 data_unlist 박열 연기 재밌 스토 이준 이제훈 최희 405 358 333 269 223 209 193 영화 한국 박열이라 여배 주인 애국 우리 182 174 130 128 128 123 105 여주인 독립 운동 최희서 아나키스 여주 박열이 101 88 88 87 67 62 60 조선 재밌어 한국영 잘봤습니 후미 인물 캐릭 57 51 50 49 49 48 48 감사 일제 다시한 봤습 사람 일제강점 추천 47 46 45 43 41 41 41 독립투 재밌었 캐스 분위 이영화 이준익감 일본사 40 39 39 37 37 37 37 좋았습 연출 임팩 재밋 이준익감독 영화였습 시간 36 35 35 35 33 32 31 실존 포스 최희서라 박열보 재밌었어 지루 한국사 30 30 29 28 28 28 28 쓰레 아쉬 재판 재미 긴장 로맨 이런영화 27 27 27 26 25 24 24 이준익 재밌습니 민족 평론 개연 한마 10 24 23 22 22 21 21 20 OO 좋은영 최고 시대 명연 역사 주연 20 20 20 19 18 18 18 감동 꼭보세 소소 관동대지 다큐멘터 인상깊 잘봤습 17 17 17 16 16 16 16 집중 감정 같습 국뽕 잘봤 잘봤습니다 재발 16 15 15 15 15 15 15 쪽바 한국배 스타 잘봤어 재밌다 친일 류승범 15 15 14 14 14 14 13 메시 무언 13 13 Colored by Color Scripter cs 아직도 이렇게 어이없는 데이터가 나오게 됩니다. 불용어처리가 덜 되었기 때문입니다. 마찬가지로 따로 텍스트파일을 저장해서 쓸모없는 단어들을 교체하거나 지우는 과정을 거치도록 합시다. 조사와 어미 등이 어간에 붙어버리면 이걸 구별할 방법이 R에서는 사실상 없고 띄어쓰기가 잘 안 된 문장도 형태소분석이 거의 불가합니다. 노가다 하세요. 예를 들어 1. '아버지가방에들어가신다'를 KoNLP로 분석하면 '아버지가방에들어가신'이 명사로, '다'가 어미로 분류됩니다. 띄어쓰기가 되어있지 않으면 거의 분석이 불가한 수준임을 알 수 있습니다. 2. ' 구경꾼'이라는 단어를 분석하면 '구경'과 '꾼'으로 나눠버립니다. 구경꾼은 구경이라는 명사에 명사파생접미사 -꾼이 붙어 구경꾼이라는 하나의 명사가 된 것입니다. '꾼'이라는 단어가 있기는 하지만 이건 띄어쓰기가 되어있지 않음에도 나눠집니다. 마찬가지로 고급스럽다, 평화롭다 등등 파생접미사가 붙은 단어들은 거의 분류하지 못한다고 봐도 좋습니다. 3. 2.와 연관되어 있는데 '잠을 잠'을 분석하면 잠, 잠으로 나눠집니다. 앞의 잠은 '자-'의 어간에 명사파생접미사 -ㅁ이 붙은 명사지만 뒤의 잠은 명사형 어미 -ㅁ이 붙은 동사입니다. 어떤 알고리즘인지 모르겠으나 그냥 사전에 명사로 등록되어 있는 단어가 있으면 전부 명사로 인식해버리는 것이 아닌가 싶습니다. 4. '재밌다' 를 분석하면 '재밌'을 명사로 뱉어냅니다. '재밌다'는 '재미있다'라는 형용사의 준말이고 이것은 재미있- 이라는 어간과 어미 -다가 붙은 것입니다. 어떻게 보아도 어간인 '재밌-'이 명사로 나오는 것은 이해할 수 없습니다. 아예 나오지 않으면 모를까.. 마찬가지로 '재미있다'를 분석해도 어간 '재미있-'이 명사로 튀어나옵니다. 알고리즘상 어미와 조사 몇개만을 정해놓고 앞에 붙은 것은 명사로 도매처리하는 것인가 싶습니다. 이렇게 추측하는 이유는 파생접미사 '-하'와 어미 '-다'가 붙은 꼴인 기본 형용사 '순수하다', '정직하다' 등에서는 명사를 잘 빼오지만 '정직하였다'와 같이 선어말어미 하나로 조금만 변화를 줘도 전혀 분석하지 못하기 때문입니다. ㅎㅎ; 자바의 형태소분석기 라이브러리들은 조금 더 똑똑하게 분류하는 것 같으니 텍스트마이닝만 따로 하고 싶다면 참고합시다. 하지만 이게 귀찮다고 대충 하면 위에서 말했듯 정반대의 결과가 나올 가능성이 있으니.. 가장 좋은 방법은 head()를 뽑아보지 말고 전체 wordcount 를 확인해서 가장 밑에서부터 차근차근 gsup()해주는 것입니다. ^오^ 정규식을 이용하면 이 귀찮음을 조금은 덜 수 있으니 꼭 활용합시다 . 단어들을 보다 보면 띄어쓰기가 되지 않아 단어로 인식하지 못한 것들을 찾을 수 있습니다. 멍청하게도 단어를 사전에 추가했지만 인식하지 못하는 경우들이 있는 것입니다. '박열이라는사람이', '박열이이렇게나' '박열에게꼭' ... 과 같은 경우입니다. 보통 이런 경우 '박열'이라는 명사를 제외한 뒤의 어미나 조사 등등의 형식형태소들은 필요없게 됩니다. 이 gsup의 바꿀 단어 안에 정규식을 이용합시다. 1 data_unlist = gsub( "박열\\S*" , "박열" , data_unlist) cs \S 라는 말은 박열 뒤에 붙은 공백,탭,개행을 제외한 모든 문자라는 말이고, 뒤의 *는 뒤에 몇글자가 오든 상관없다는 뜻입니다 . 즉 "박열\\S*"의 뜻은 '박열이라는 단어 뒤에 뭐가 얼마나 붙었는지간에' 라는 의미입니다. (참조) * : 적어도 0 번 매칭한다. : 적어도 0 번 매칭한다. + : 적어도 1 번 매칭한다. : 적어도 1 번 매칭한다. ? : 많아아 1 번 매칭한다. : 많아아 1 번 매칭한다. {n} : 정확히 n 번 매칭한다. : 정확히 n 번 매칭한다. {n,} : 적어도 n 번 매칭한다. : 적어도 n 번 매칭한다. {n,m} : n 번에서 m 번 매칭한다. 이렇게 하면 박열로 시작하고 뒤에 뭐가 붙었든 전부 선택해서 박열로 바꿔버리게 됩니다. 상기 언급한 바와 같이 어떤 단어에 접두사와 접미사(혹은 보조사나 조사) 등이 모두 붙어버렸으면 단순 gsup()으로는 전혀 다른 단어를 만들어버릴 수 있기 때문에 추천하지 않습니다. 정규식을 활용해 각자 열심히 전처리를 해 봅시다. 그리고 gsup()도 mergeUserDic()과 마찬가지로, 메모장에 단어들을 등록해놓고 한꺼번에 불용어처리 할 수 있습니다. 다 해보셨다고 가정하고 이제 결과를 낼 시간입니다. 100개만 추려서 대충 처리했습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 data_unlist 박열 최희서 이준익 연기 스토리 이제훈 793 358 346 339 262 209 여주 한국 잘봤어요 여배우 주인 애국 179 172 137 129 126 119 좋았어 우리 후미코 재밌어 독립 운동 112 102 102 100 84 83 아나키스트 조선 다시 캐릭터 한국영화 인물 69 54 53 49 49 48 인상 일제 캐스팅 감사 사람 일제강점기 47 46 45 44 43 41 독립투사 국뽕 일본사 추천 분위기 임팩트 39 38 38 38 37 37 역사 좋은 연출 노잼 실존 감동 36 35 34 33 30 28 관동대지진 시간 쓰레기 오글 지루 한국사 28 28 28 28 28 28 로맨스 아쉬 재판 포스 재미 긴장 27 27 27 27 26 24 다큐 꼭보세요 민족 개연 시대 좋은영화 23 22 22 21 20 20 최고 평론 남주 자극 명연기 주연 20 20 19 19 18 18 쪽바리 한마디 소소 오랜만 집중 가네코후미코 18 18 17 16 16 15 감정 재발 몰랐어 스타 마케팅 메시 15 15 14 14 13 13 무언 상업 전개 트랜스 당시 류승범 13 13 13 13 12 12 빨갱이 생각 스크린 이미지 재조명 존경 12 12 12 12 12 12 친일 코미 201 강점 기대 무정부주의 12 12 11 11 11 11 시나리 시사 실화 11 11 11 cs (재밌다, 좋았다 류는 명사가 아니지만 평점류 의견에서 무시하기 힘들다고 생각하여 '-어' 형태로 통일했습니다.) 7. 출력 wordcloud에 옵션을 주는건 포스팅 첫 부분의 옵션을 참고해 1 2 wordcloud(names(wordcount_top), wordcount_top, scale = c( 5 , 0. 5 ),random.order = FALSE , random.color = TRUE , colors = color, family = "font" ) Colored by Color Scripter cs 이런식으로 한땀한땀 주면 됩니다. colors 에 들어있는 변수 color는 아까 사용하겠다고 선언한 패키지인 RColorBrewer를 이용한 것입니다. RColorBrewer 전체 제공하는 색깔을 보기 위해서는 이렇게 타이핑해 봅시다. 1 display.brewer.all() cs 실행하면 오른쪽 창에 팔레트가 뜹니다. 색깔세트의 이름과 개수가 보일 텐데, 이걸 1 color < - brewer.pal( 12 , "Set3" ) cs 이런 식으로 변수에 담아 사용하면 됩니다. 첫번째 매개변수는 내가 활용할 색깔 개수고(팔레트의 최대치를 넘을 수 없습니다), 두번째 매개변수는 색 세트의 이름입니다. Font 1 windowsFonts(font = windowsFont( "a한글사랑L" )) cs 폰트는 위 코드와 같이 가져올 수 있습니다. font 변수에 a한글사랑L 폰트를 담은 겁니다. wordcloud family 속성에 위 변수를 담아주면 됩니다. 결과 그럴듯한 워드클라우드를 완성했습니다. 폰트들에 보면 기본적으로 Bold(굵게) 옵션이 주어진 것들이 있습니다. 단어의 개수를 많이 늘리고(응 전처리~), 폰트만 잘 골라주면 처음 올렸던 사진과 비슷한 워드클라우드가 완성될 것입니다.

꿈 많은 사람의 이야기

지난 시간에 KoNLP를 이용해서 텍스트 마이닝을 진행했습니다

이번 포스팅은 지난 시간에 진행한 텍스트 마이닝으로 워드클라우드(word cloud)를 진행해볼게요

워드 클라우드는 많이 익숙한 자료입니다

단어들이 마치 그림처럼 색깔별로, 빈도수 별로 크기도 다르게 나오죠

지난 포스팅 자료는 아래와 같습니다

http://lsjsj92.tistory.com/216

자 이제 워드클라우드에 필요한 패키지를 설치하죠

install.packages()를 통해 wordcloud를 설치합니다

wordcloud를 설치하면 자동적으로 RColorBrewer도 설치됩니다

글자 색깔을 표현하기 위해서요

이제 색깔먼저 입힐게요

pal이라는 변수에 brewer.pal()을 이용해서 색깔을 입힙니다. Dark2 계열에 색깔을 입힐게요

그리고 wordcloud는 함수를 실행할 때마다 매번 다른 모양의 워드 클라우드를 만들어주는데요

이걸 고정시키기 위해 난수를 고정합니다

set.seed( )를 이용해요

자 이제 워드클라우드를 만들어보죠

wordcloud( ) 함수를 이용해요

words에는 사용할 단어를 이용하고요

빈도는 freq 에 넣습니다

최소 단어빈도는 min.freq입니다

표현 단어 수 는 max.words 입니다

이렇게 하면요!

아래 사진처럼 워드 클라우드가 생성됩니다

반응형

그리드형

R 간단한 워드 클라우드 (word cloud) 만들기

반응형

준비한 재료

이전 포스팅에서 추출한 플레이리스트로 워드 클라우드를 만들겁니다.

스포티파이에서 제가 2020년 한해 동안 자주 들은 음악 100개를 선정해준 건데,

어떤 가수의 노래를 많이 들었는지 시각화 하고 싶더라고요.

순전히 호기심에서 출발해서 주먹구구식으로 완성해나가기 때문에 좀 엉성할 수 있습니다.

하지만 저처럼 R을 아직 잘 다루지 못하는 사람한테는 유용할지도 .. 그리고 이미 단어로 구성된 데이터 셋을 얻어왔기 때문에 문장에서 단어를 추출하는 전처리 과정에 대해서는 글 아래의 Reference를 참고하는 편이 나을겁니다.

실행 코드

🌊필요한 패키지들

– wordcloud : 워드 클라우드 만드는 거

– RColorBrewer : 워드 클라우드에 색상 적용

– extrafont : 원하는 폰트 적용

🌊 폰트 세팅

– font_import() : 저는 이거 불러오는데 시간 엄청 걸리더라고요; 콘솔에서 fonts() 입력하면 폰트 리스트 볼 수 있습니다. 폰트는 나중에 함수 안에서 family 속성으로 적용합니다.

🌊 색상 적용

– brewer.pal(적용할 색상수, “팔레트 이름”)

팔레트 종류는 여기 아래에서 고르면 됩니다.

🌊 워드 클라우드 만들기

– par(bg=”black”) : 흰 배경에선 밝은 글씨가 잘 안보여서 배경을 검은색으로 설정했습니다.

– c(3.5, 0.25) : 글자가 자꾸 잘려서 scale 설정을 이렇게 하라는 조언을 보고 적용함

– max.words : 최대 단어 수

– min.freq : 최소 빈도 수. 예를 들어 빈도수가 1인 건 거르고 싶다 하면 2나 3부터 해도 됩니다. 저는 단어 수가 적어서 그냥 1부터 했습니다.

결과 및 오류들..

글자 잘리는 오류 때문에 몇번이고 재시도 하다가

그럭저럭 마음에 들게 완성했습니다.

R 기초 수업때 이런 걸 할 수 있다고 얘기만 들었고 직접 해보는 건 처음이네요.

#install.packages(“devtools”)

#library(devtools)

#devtools::install_github(“lchiffon/wordcloud2”)

#library(wordcloud2)

이거는 wordcloud2 패키지 설치하는 법인데 저는 계속 에러가 뜨더라고요;

그래서 하는 수 없이 그냥 wordcloud로 만들었다는 이야기..

📚 Reference

– [R] wordcloud 그리기 (글씨체 바꾸기)

– 데이터 프레임에서 특정 열 추출

– R을 이용한 텍스트마이닝 & 워드 클라우드

– How to use your favorite fonts in R charts

반응형

R : 워드클라우드-wordcloud ( 개념 및 예제 )

반응형

텍스트 마이닝

텍스트 마이닝은 비정형 텍스트에서 의미 있는 정보를 추론하는 기술을 의미합니다. 단어를 분류하거나 문법적 구조를 분석합니다. 이러한 자연 언어 처리 기반의 기술입니다. 문서들을 분류하고 문서들을 군집화합니다. 그리고 정보를 추출하고 문서를 요약할 때 주로 활용합니다. 문서내에서 자주 활용되는 단어일 수록 폰트의 크기를 크게 배치하여 강조합니다. 아래 그림을 참고하세요.

필요한 패키지는 총 3가지입니다. wordcloud, KoNLP, RColorBrewer를 설치해주세요. wordcloud는 워드클라우드를 작성할 때 활용합니다. 또 KoNLP는 한국어를 처리할 때 사용합니다. 마지막으로 RColorBrewer는 단어의 색을 처리할 때 사용합니다.

KoNLP 오류 해결

먼저 java se를 다운로드 합니다. 구글에 표시된 곳을 눌러 해당 사이트로 이동합니다.

동의 후에 본인 운영체제에 맞추어 다운로드 후 설치를 진행해주세요.

설치를 하시면 다음과 같은 경로에 확인할 수 있습니다. 아래와 같은 명령어를 입력합니다. R에 환경변수 값을 설정해 패키지를 활용할 수 있습니다. 버전이 다를 시 버전을 맞춰 주세요.

Sys.setenv(JAVA_HOME=’C:/Program Files /Java/jre1.8.0_201′)

대통령 연설문 분석

인터넷에서 노무현, 이명박, 박근혜 대통령의 연설문을 검색합니다. 취임사 내용 전체를 마우스로 선택하여 복사합니다. 그리고 “취임사_노무현.txt”과 같은 형태로 저장해주세요.

Sys.setenv ( JAVA_HOME = ‘ C:/Program Files /Java/jre1.8.0_201 ‘ ) library ( KoNLP ) # 라이브러리 등록 library ( wordcloud ) # 라이브러리 등록 library ( RColorBrewer ) # 라이브러리 등록

#useSejongDic() # 세종 한글사전 로딩 buildDictionary ( ext_dic = ” woorimalsam ” ) # 사전 로딩 pal2 <- brewer.pal ( 8 , " Dark2 " ) # 팔레트 생성 text <- readLines ( file.choose ()) # 파일읽기 noun <- sapply ( text , extractNoun , USE.NAMES = F ) # 단어 집합 noun 환경 변수를 등록하고 라이브러리를 등록합니다. 그 다음 사전을 로딩합니다. 다음으로 이전에 저장해둔 취임사를 로딩합니다. 그 후 파일을 잘읽어오면 결과가 위처럼 나옵니다. noun2 <- unlist ( noun ) # 명사를 합쳐 색출 wordcount <- table ( noun2 ) # 단어 출현 수 계산 temp <- sort ( wordcount , decreasing = T ) [ 1 : 10 ] # 단어 정렬 temp # 확인 temp <- temp [- 1 ] # 공백단어 제거 barplot ( temp , las = 2 , names.arg = names ( temp ), # 그래프 출력 col = " lightblue " , main = " Most frequent words " , # 축, 제목 입력 ylab = " Word frequencies " ) # 축 입력 명사들을 합쳐 색출을 합니다. 그리고 각 명사들의 출현된 수를 카운트합니다. 그 다음 정렬을 해줍니다. 공백 단어들은 제거해주고 나머지 값들을 그래프로 표현하면 위 처럼 나타납니다. wordcloud ( names ( wordcount ) , # 단어들 freq = wordcount , # 단어들의 빈도 scale = c ( 6 , 0.7 ), # 단어의 폰트 크기 min.freq = 3 , # 단어의 최소빈도 random.order = F , # 단어의 출력위치 rot.per = .1 , # 90도회전 단어 비율 colors = pal2 ) # 단어색 이제 그 값들을 통해 워드 클라우드로 표현해봅니다. 그 결과는 위와 같습니다. 뭔가 되게 아쉽지 않나요? 그림에 불필요한 단어도 있습니다. 또한 사전에 없는 단어는 빠져있습니다. 이러한 값들을 조정해주어야 합니다. 아래 옵션들을 활용해 봅시다. wordcloud 옵션 Parameter 설명(explanation) word 단어(Word) freq 단어들의 빈도(frequency of words) size 가장빈도가 큰 단어와 빈도가 가장 작은 단어 폰트 사이의 크기 차이(Size difference between the word with the largest frequency and the word font with the smallest frequency.) min.freq 출력될 단어의 최소 빈도(Minimum frequency of words to be printed) max.word 출력될 단어들의 최대개수(Maximum number of words to be printed) random.order TRUE 이면 램덤으로 단어출력, FALSE 이면 빈도수가 큰 단어일수록 중앙에 배치(Print words with TRUE-beneath rammed, and center for words with greater frequency behind FALSE) random.color TRUE 이면 단어색은 랜덤순으로 정해지고, FALSE이면 빈도순으로 정해짐(The color of words behind TRUE is set in random order, and if FALSE is, they are set in frequency order.) rot.per 90도로 회전된 각도로 출력되는 단어의 비율(The percentage of words that are output at a rotated angle of 90 degrees.) colors 가장 작은 빈도부터 큰 빈도까지의 단어색(Word color from smallest frequency to largest frequency) # 빈도수 높은데 워드클라우드에 없으면 사용자 사전에 추가 buildDictionary ( ext_dic = " woorimalsam " , # 기존 사전 user_dic = data.frame ( " 정치 " , " ncn " ) , # 없는 단어 replace_usr_dic = T ) # 추가하기 noun <- sapply ( text , extractNoun , USE.NAMES = F ) # 다시 추출하기 noun2 <- unlist ( noun ) # 색출한 명사를 모으기 # 무의미 단어 제거 noun2 <- noun2 [ nchar ( noun2 ) > 1 ] # 1글자짜리 삭제 noun2 <- gsub ( " 국민 " , "" , noun2 ) # 국민 삭제 noun2 <- gsub ( " 여러분 " , "" , noun2 ) # 여러분 삭제 wordcount <- table ( noun2 ) # 출현 단어 카운트 wordcloud ( names ( wordcount ) , # 워드클라우드 freq = wordcount , # 빈도 scale = c ( 3 , 0.3 ), # 글자 크기 min.freq = 3 , # 출력될 단어 최소 빈도 random.order = F , # 빈도가 클수록 중앙에 배치 rot.per = .1 , # 90도 회전된 단어 확률 colors = pal2 ) # 빈도마다 단어색 아래 옵션들을 통해 의미 없는 단어들은 제외하였습니다. 또 필요한 단어들은 추가하였습니다. 따라서 다양한 옵션들을 활용해 유의미한 결과를 얻을 수 있었습니다. 연설문 뿐만 아니라 다른 글로도 충분히 가능합니다. 한번씩 실습해보세요. 반응형

[R] 워드 클라우드 만들기

반응형

텍스트 마이닝이란? (Text mining)

install.packages(“rJava”) #r에서 Java를 사용한 패키지 사용 install.packages(“memoise”) #koNLP패키지가 사용하는 패키지 install.packages(“KoNLP”) #한국어 자연어 처리 install.packages(“stringr”) #문자열을 처리하는 여러가지 함수를 가지고 있는 패키지 install.packages(“wordcloud”) #워드클라우드를 그려주는 패키지

– 문자로 된 데이터에서 가치 있는 정보를 얻어 내는 분석 기법

– 분석절차

형태소 분석 명사, 동사, 형용사 등 의미를 지는 품사 단어 추출 빈도표 만들기 시각화

텍스트 마이닝 준비하기

Java 다운로드 및 설치

자바 다운로드 : https://www.java.com/ko/download/manual.jsp

자바 환경변수 설정

시스템 > 고급시스템 설정 > 환경변수 > 시스템 변수> path 값 확인

자바 프로그램 설치 확인

윈도우+R > cmd > 명령어 입력

워드 클라우드에 필요한 R 패키지 로드

install.packages(“rJava”) #r에서 Java를 사용한 패키지 사용 install.packages(“memoise”) #koNLP패키지가 사용하는 패키지 install.packages(“KoNLP”) #한국어 자연어 처리 install.packages(“stringr”) #문자열을 처리하는 여러가지 함수를 가지고 있는 패키지 install.packages(“wordcloud”) #워드클라우드를 그려주는 패키지 #패키지 라이브러리에 올리기 library(KoNLP) library(stringr) library(wordcloud) search()

워드클라우드 데이터 전처리

#한국어 분석에 사용할 사전을 로드 useSejongDic() #텍스트 파일(*.txt)에서 한줄씩 문자열들을 읽음 txt <-readLines("data/hiphop.txt") str(txt) head(txt) # 특수문자 제거 # 정규 표현식 (regular expression) 문자열의 패턴 txt <-str_replace_all(txt,"\\W"," ") txt[1:10] #각 문장에서 명사들만 추출 nouns <- extractNoun(txt) str(nouns) # 명사들로 이루어진 리스트를 돗수분포표 형태로 변환 word_count <-table(unlist(nouns)) word_count head(word_count) # 돗수분포표를 데이터 프레임으로 변환 # stringsAsFactors -> 문자열을 범주형 데이터로 취급하지 않겠다. df <- as.data.frame(word_count, stringsAsFactors = F) df head(df) tail(df) df<- rename(df,word=Var1,freq=Freq) tail(df) str(df) # 한 글자의 경우 명사가 아닌 경우가 많음으로, 제외 df <-filter(df,nchar(word) >=2) str(df) tail(df)

각 문장에서 명사들만 추출한 결과

워드 클라우드 그리기

library(RColorBrewer) pal <- brewer.pal(8,"Dark1") #word cloud는 생성할 때마다 랜덤하게 만들어 지는데, set.seed(1234) wordcloud(words = df$word, # 단어 freq = df$freq, # 빈도 min.freq = 2, # 최소 단어 빈도 max.words = 200, # 표현 단어 수 random.order = F, # 고빈도 단어 중앙 배치 rot.per = .1, # 회전 단어 비율 scale = c(4, 0.3), # 단어 크기 범위 colors = pal) # 색깔 목록

R KoNLP로 명사 추출, 명사로 워드클라우드 만들어보기

이전 글에서 웹크롤링으로 가져온 텍스트 데이터를 가공해보겠습니다

그 전에 텍스트 데이터가 필요하니 이전 R 기본으로 크롤러 만들기 글을 보고 따라하면 됩니다

먼저

파일이 잘 있는지 확인을 합니당

패키지 준비

이제 R 으로 가서 필요한 library를 넣어줍니다

1 2 3 4 5 library(KoNLP) library(dplyr) library(stringr) library(RColorBrewer) library(wordcloud) cs

없다면 install.package로 다운받고 넣어줍니다

이어서 KoNLP의 사전불러오는 함수인

1 useSejongDic() cs

입력하면 몇초 후 다운로드가 됩니다

1 setwd(“C:/원하는 폴더”) cs

원하는 폴더를 지정해 놓아야

아래서 파일을 불러오기 쉽습니다

데이터 가공

먼저 데이터를 준비해야 합니다 1 txt<-readLines("movie_review_Ext_J.txt") cs 준비한 데이터를 txt변수에다 입력합니다 1 2 3 4 5 6 7 8 9 txt<-str_replace_all(txt,"\\W"," ") txt<-gsub("\\d+","",txt) txt<-gsub("\ +","",txt) txt<-gsub("[A-z]","",txt) txt<-gsub("[[:cntrl:]]","",txt) txt<-gsub("관람객","",txt) txt<-gsub("진짜","",txt) txt<-gsub("영화","",txt) cs 리뷰가 들어있는 변수 txt를 가공 합니다 특수문자를 제거하고 필요없는 단어들을 제거합니다 필요에 따라 아래 관람객, 진짜, 영화는 바뀌어도 무방합니다 KoNLP의 명사 추출함수인 extractNoun을 사용하면 명사가 추출됩니다 > ttt=”아무 생각없이 보기에 너무 좋음 ㅋㅋ 재미짐.. 유쾌한 영화!! 역시 믿고 보는 류승룡~~ 공명 너무 귀여움ㅠㅠ” > extractNoun(ttt) [1] “재미” “짐” “유쾌” “한” “영화” “류승룡~~” “공명” “귀여움ㅠ” “ㅠ”

예시로 하나를 해보면 이런식으로 사전을 기반으로 명사를 추출합니다

1 nouns<-extractNoun(txt) cs 가공한 전체 리뷰 txt를 명사로 추출하여 nouns변수에 넣습니다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #추출한 명사 list를 문자열 벡터로 변환, 단어별 빈도표 생성 wordcount<-table(unlist(nouns)) # 데이터 프레임으로 변환 re_word <- as.data.frame(wordcount, stringsAsFactors = F) #변수명 수정 re_word<-rename(re_word,word=Var1,freq=Freq) #두 글자 이상 단어 추출 re_word<-filter(re_word,nchar(word)>=2) #빈도수가 많은 순으로 20개만 top_20<-re_word %>% arrange(desc(freq)) %>% head(20) Colored by Color Scripter cs

top_20을 출력하면 아래처럼 확인할 수 있습니다

> top_20 word freq 1 ^ㅋ 369 2 연기 142 3 웃음 138 4 코미디 125 5 ^ㅎ 122 6 배우 119 7 기대 103 8 오랜만 94 9 간만 83 10 재밌게 83 11 예고편 82 12 재미 81 13 액션 78 14 시간 75 15 극한 74 16 치킨 72 17 생각 71 18 ^ㅋ^ㅋ^ㅋ 66 19 직업 66 20 완전 64

워드클라우드

이제 가공한 데이터를 가지고 워드클라우드를 만들겠습니다

워드클라우드는 단어와 단어의 빈도수나 중요도 인기도등을 고려해서 시각적으로 표현한 것입니다

이런 형식으로 만드려고합니다

1 2 3 4 5 6 7 8 9 10 pal <- brewer.pal(8,"Dark2") #색깔지정 wordcloud(words = top_20$word, # 단어 freq = top_20$freq, # 빈도 min.freq = 2, # 최소 단어 빈도 max.words = 200, # 표현 단어 수 random.order = F, # 고빈도 단어 중앙 배치 rot.per = .1, # 회전 단어 비율 scale = c(4, 0.3), # 단어 크기 범위 colors = pal) # 색깔 목록 Colored by Color Scripter cs 단어와 빈도에 워드클라우드 결과물 스크린샷 단어와 빈도에 top_20이 아닌 모든 명사로 만든 워드클라우드 top 30으로 만든 워드클라우드 top 20으로 만든 워드클라우드 모든 단어로 만든 워드클라우드는 투머치한 느낌 있고, top30 으로 만든 워드클라우드가 적당한 느낌이네요 ^ㅋ 는 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 같이 ㅋ만 있는 단어들입니다 코미디영화라 ㅋ가 많은 것을 알 수 있습니다 다음은 KoNLP로 데이터를 가공하는것 대신 단어의 감성을 점수로 매겨 만든 감성사전으로 감성분석을 해보겠습니다.

키워드에 대한 정보 r 워드 클라우드

다음은 Bing에서 r 워드 클라우드 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 [R 기초]NO.8 워드클라우드

  • 동영상
  • 공유
  • 카메라폰
  • 동영상폰
  • 무료
  • 올리기
[R #기초]NO.8 #워드클라우드


YouTube에서 r 워드 클라우드 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 [R 기초]NO.8 워드클라우드 | r 워드 클라우드, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment