[R lang 크롤링] (R) 종목토론실 텍스트마이닝하여 시각화하기

(R) 종목토론실 텍스트마이닝하여 시각화하기

 
프로필

2018. 8. 19. 0:45

 

저번에 네이버금융에서 삼성전자 종목토론실의 텍스트 데이터들을 R로 크롤링하는 방법을 보여드렸습니다.
이번에는 저번에 크롤링한 데이터를 R로 텍스트마이닝하여 워드클라우드로 시각화하는 방법을 포스팅하겠습니다.
 

지난번에 포스팅한 자료(dda.txt)와 조금 다른데 상관없습니다

지난 시간에 크롤링하여 txt파일로 저장한 문서입니다.

1. 텍스트데이터 불러오기

라이브러리는 KoNLP와 wordcloud를 사용합니다. KoNLP는 코딩을 할 때 한글문서를 분석하기 위해 필요한 패키지이며, wordcloud는 시각화를 하는데 필요한 패키지입니다. useSejongDic()은 한글 텍스트를 단어별로 추출할 때 사용하는 한글 단어 사전입니다.
readLine함수를 이용해 'dda.txt'파일의 텍스트를 한 줄씩 불러와서 data1에 저장합니다.


2. 단어 추출하기

head(데이터, 출력할 숫자)를 입력하시면 가장 첫 머리부터 30개의 텍스트파일이 불러와집니다.
이를 통해 텍스트파일이 잘 불러와졌는지 확인할 수 있습니다.

sapply함수는 여러건의 데이터를 한꺼번에 저장하는 함수입니다.
extractNoun 함수는 문장을 단어로 만든 후 명사만 추출하는 함수입니다. USE.NAMES 는 추출된 명사와 원 문장이 함께 출력되게 할 것인지 나타냅니다. 원 문장은 출력될 필요가 없기 떄문에 USE.NAMES=F(FALSE)로 표시합니다.
이렇게 추출된 명사들을 unlist함수로 다시 저장합니다. unlist함수는 리스트 타입의 변수를 벡터로 변환시켜주는 함수입니다.
다음 Filter라는 함수를 사용하는데, function(x){nchar(x)>=2)라는 함수를 Filter의 조건으로 설정합니다. 이 작업은 단어의 길이가 2이상인 단어만 필터링 하는 과정입니다.
한 자리 수의 단어는 제 목적에서 별로 의미가 없기 때문에 임의로 제외한 것입니다. 각자 텍스트 마이닝의 목적을 생각해서 설정해주면 됩니다.

3. 데이터 전처리하기

다음은 불러온 단어를 전처리하는 과정입니다.
gsub함수를 사용하면 gsub(1,2,3)에서 1번째 인자는 바꾸고자하는 단어, 2번째 인자는 1번째 인자를 바꾸고 난 후, 3번째 인자는 해당 데이터변수입니다. 즉 data4 <- gsub('a','b',data3)에서는 data3의 'a'라는 단어를 'b'로 바꾼뒤에 이를 data4에 저장하겠다는 의미입니다.
'\d+'는 정규식의 한 종류입니다. 정규식은 데이터 전처리를 하는 과정에서 노가다를 줄이기 위해 특정 양식의 데이터를 빠르게 변환시키기 위해 만들어졌습니다.
기본인 정규식을 알려드리자면, \d = 모든 숫자, \D = 숫자가 아닌 것, [ab] = a또는 b, [^ab] = a와 b를 제외한 모든 문자, [0-9] = 모든 숫자, [A-Z] = 영어 대문자, [ㄱ-ㅎ] = 한글, [:alnum:] = 문자와 숫자가 나오는 경우, [:alpha:] = 문자가 나오는 경우 등이 있습니다. 자세한 정규식은 다음에 따로 정리해드리겠습니다.
가장 첫 번째에 나오는 data3 <- gsub('\d','',data3)는 data3의 모든 숫자들을 공백으로 바꾼다는 의미인데, ''를 아무 것도 없는 상태로 인식하기 때문에 ''를 사용했습니다. ""와도 같은 의미입니다.
두 번째에 나오는 식은 공백이 존재하는 경우로 이 또한 하나의 단어로 인식하게 됩니다. 그래서 역시 ''로 바꿔줍니다.
세 번째에 나오는 식은 -라는 문자의 경우로 역시 ''로 바꿔줍니다.
이 방법은 제가 임의로 한 과정이기 때문에 각자 필요없는 단어를 선정해서 제거해주면 됩니다. 이 과정을 반복하다보면 코드가 길어져서 보기 싫어지기 때문에 다음과 같이 for문을 사용해 간략화시킵니다.

a라는 임의의 변수에 내가 지우고 싶은 단어들을 입력해 저장한 뒤 for문을 통해서 실행시키는 코드입니다.
length함수는 해당 데이터의 길이를 알려주고, 이를 for문에 사용하면, a의 1번 인덱싱 값부터 마지막 인덱싱값까지 도출할 수 있습니다.

전처리한 데이터들의 길이를 확인해보려면 length함수를 사용하면 됩니다.
data3의 길이가 6752개가 나왔네요. 즉 6752개의 단어들이 전처리되어 저장되어 있다는 의미입니다. 혹시 이 값이 일치하지 않는다고 걱정안하셔도 됩니다. 직전 크롤링 과정에서 제가 100페이지까지만 가져왔기 때문입니다. ㅎㅎ
이 data3를 'dda1.txt'라는 텍스트파일로 저장시켰습니다. 저장하실때는 unlist함수로 벡터화시켜 저장하면, 단어들이 줄세워져 저장됩니다. 이렇게 전처리한 단어를 txt파일로 다시 저장해주는 이유는 아래와 같습니다.

앞에서 한 전처리 과정에서 gsub함수를 통해 제거하고자 하는 단어를 ""로 바꾸는 작업을 했습니다. 그래서 data3를 확인해보니 제거된 자리에 ""가 그대로 남아있는 것을 볼 수 있네요. 이대로 작업하면 ""자체를 하나의 변수로 생각하기 때문에 제거해야만 합니다. 이것을 없애려면 새로 txt파일을 만든 뒤, read.table 함수로 불러오면 말끔히 사라집니다.

dda1.txt를 read.table로 읽어와 data4로 저장합니다. 그러고 다시 첫 머리에서 200개의 데이터를 불러와 확인해보면 공백히 말끔히 사라진 것을 확인할 수 있습니다. data4의 class(자료형)은 data.frame으로 되어있습니다. 이를 table의 형태로 바꾸어 wordcount에 저장합니다. table형태로 바꿔주면 각각 단어의 빈도 수를 확인할 수 있습니다. 이를 다시 head(sort(wordcount, decreasing=T),100)으로 다시 바꿔서 저장합니다.
head(sort(wordcount,decreasing=T),100)의 의미는 wordcount의 단어 빈도수를 decreasig=T를 하면 내림차순으로 정렬합니다. 즉 가장 빈도가 많은 단어부터 차례대로 보여주는데, head와 100은 첫 머리에서부터 100개를 의미하는 것이죠.

'dda1.txt'를 read.table로 불러온 뒤 첫 머리에서 200개의 단어를 출력한 모습. 문제가 되었던 ""가 사라졌다.

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

단어 빈도수를 기준으로 내림차순 정렬한 뒤 100개를 도출한 모습

wordcount를 출력한 모습입니다. 확인해보니 쓸모없는 단어들이 보이네요. 이제 이러한 단어들을 다시 제거하는 전처리를 하도록 하겠습니다.

전처리는 data4와 wordcount를 제외하고 data3에서 합니다. 마찬가지로 새로 생성된 삭제할 단어 집단을 저장한 뒤 for문을 돌려 제거하고 'dda1.txt'에 저장해준 뒤에 불러와서 wordcount를 만들어 줍니다. 반복작업이 가끔은 필요할 때도 있습니다.

^ㅋ^ㅋ^ㅋ와 ... 등은 제거하려고 했는데 제거가 안되서 그냥 뒀습니다. 이제 어느정도 데이터가 완성이 된 듯 합니다. 그러면 이 데이터를 시각화해보겠습니다.

4. 데이터 시각화하기

RcolorBrewer라는 패키지를 불러옵니다.
이 패키지는 R에서 색상들이 필요할 때 쓰는 패키지인듯 합니다. brew.pal함수를 사용해 palete에 색상을 저장합니다. 9는 9가지 색상을 의미하며, 'Set1'은 색상 set를 의미합니다. 'Set2', 'Set3'도 있지만 색깔이 조금씩 다르다는것 말고는 차이를 잘 모르겠습니다.
그 다음 wordcloud함수를 사용해 시각화를 합니다. names와 freq에는 wordcount로 지정한 데이터를 입력하면 되며, scale에서 가장빈도가 많은 글자의 크기를 앞에 적고, 적은 글자의 크기를 뒤에 입력합니다. 이 크기를 조절하면 내가 원하는 모양으로 출력할 수도 있습니다. rot.per는 글자가 출력될 때 랜덤으로 90도로 회전되서 출력되게 지정할 수 있는데, 이때 90도로 회전될 확률을 입력합니다. 1로 입력하면 모든 값들이 90도로 회전되어 출력되며, 0으로 입력하면 모든 값들이 그대로 출력됩니다. min.freq는 최소 비도 출력값을 의미합니다. 1개보다 적으면 출력하지 않겠다는 의미입니다.
legend함수는 출력된 시각화 데이터에 제목을 기입하고 싶을 때 사용합니다.  0.3,0.9는 x축 값과 y축 값을 의미하며, cex는 제목의 크기를 입력합니다. 이거는 숫자를 바꿔가면서 입력해본뒤 출력물을 확인하면 감이 올 것입니다. bg는 배경의 색깔을 말하며, text.col은 글자색, text.font는 글자 폰트, box.col은 박스의 테두리색을 지정할 수 있습니다.

마무리로 도출된 결과입니다. 만약 wordcloud함수에서 scale을 조정한다면 조금 다르게 출력될 수도 있습니다. 친일과 빨갱이는 무시하세요

sclae(5,1)로 입력했을 때, 조금 더 네모로 출력된다.
scale(5,0)으로 입력했을 떄, 둥글게 출력된다.

자신이 마음에 드는 모양으로 출력하려면 scale값을 조정해주시면 됩니다.

마지막으로 전체 코드입니다.

 

[출처] https://m.blog.naver.com/jk940/221341500841

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86134
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78635
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95360
27 [DB modeling, DB 모델링] [DB] DB 설계 과정 file 졸리운_곰 2025.03.10 1540
26 [DB modeling, DB 모델링] [DATABASE] 기본키(PK), 외래키(FK) file 졸리운_곰 2025.01.29 1903
25 [DB modeling, DB 모델링] 바쁜 데이터 전문가를 위한 7가지 무료 데이터베이스 다이어그래밍 도구 : 7 free database diagramming tools for busy data folks file 졸리운_곰 2025.01.19 1034
24 [DB modeling, DB 모델링] ERD 다이어그램 그리는 방법 file 졸리운_곰 2024.10.29 1405
23 [데이터베이스 모델링] 정규화와 응집도에 대한 고찰 file 졸리운_곰 2024.08.10 1732
22 [데이터베이스 모델링] [SQL] 데이터베이스 관계(Relationship) 기본 (1:1, 1:N, N:N 테이블 생성 예시 포함) file 졸리운_곰 2024.07.12 2101
21 [데이터베이스 모델링] 테이블정의양식 file 졸리운_곰 2024.02.23 1228
20 [데이터베이스 모델링] DAsP - 물리 데이터 모델링 [논리-물리 모델 변환] file 졸리운_곰 2022.05.07 1897
19 [데이터베이스 모델링] 관계형 데이터 모델링 하향식과 상향식 졸리운_곰 2022.05.07 1787
18 [데이터베이스 모델링] 모델링 IE 표기법 (까치발, 까마귀발, crow-feet) file 졸리운_곰 2022.04.26 2158
17 설문 조사를위한 데이터베이스 설계 file 졸리운_곰 2020.09.05 5721
16 [dbguide] 프로세스모델링 작성 절차 (데이터베이스 시스템분석설계 프로세스 모델링) file 졸리운_곰 2020.07.27 1773
15 [dbguide] 데이터모델링 작성 절차 (데이터베이스 모델링 절차) file 졸리운_곰 2020.07.27 1778
14 데이터 품질진단 절차 및 기법 file 졸리운_곰 2020.07.26 2054
13 [번역] 데이터 구조와 설계 — 튜토리얼 file 졸리운_곰 2020.07.26 1806
12 EA( Enterprise Architecture) 전사 아키텍처 file 졸리운_곰 2020.07.25 1783
11 데이터품질관리지침Ver[1].2.1.pdf file 졸리운_곰 2020.07.25 1846
10 테이블 설계의 기초 졸리운_곰 2020.07.25 2122
9 데이터베이스 디자인의 기초 file 졸리운_곰 2020.07.25 1681
8 Enterprise Data Model for Logistics file 졸리운_곰 2019.06.16 1265
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED