안녕하세요 병통입니다.
이번 프로젝트는 UIPATH와 R을 활용하여
워드클라우드를 제작해보고
그 결과로 감정분석을 해보는 프로젝트를 진행하보았습니다.
전체적인 과정을 요약하자면
두 가지의 분석 과정을 진행했습니다.
첫번째로는 UIPATH를 활용하여 유튜브 댓글을 크롤링하고
크롤링 한 댓글을 워드클라우드로 만든 뒤,
워드 클라우드를 바탕으로 감정분석을 해보았으며,
두번쨰로는 R을 활용하여 뉴스 기사 내용을 크롤링하고
크롤링 된 뉴스 기사를 워드 클라우드로 만든 뒤,
워드 클라우드를 바탕으로 감정분석을 해보았습니다.
주제는 2021년 가장 핫한 주제 중 하나였던
부동산
을 선택하여 진행하였습니다.
정치적인 이야기를 하고자하는 것이 아닌,
국민들의 대부분의 정서를 파악하고
20대의 입장에서 생각해 본 앞으로의 방향성에 대해서 이야기 해보려 합니다.
첫번쨰
유튜브 댓글 크롤링 및 워드 클라우드 입니다.
유튜브에 "부동산"을 검색한 후
검색 조건을 조회수로 검색하여
조회수가 가장 높은 게시글 2개를 선정하여 댓글 크롤링을 진행했습니다.
UIPATH 자동화 시스템으로 크롤링을 진행했습니다.
유튜브 댓글 특성상,
페이지 제일 밑부분으로 내려가야만
그 다음 댓글이 새로 로딩되기에
page down 버튼을 계속해서 눌러줌으로써
댓글을 새롭게 갱신해주는 자동화 시스템을 구축하였습니다.
그 결과,
댓글을 모두 추출하지 못했지만
꾸준한 크롤링으로
약 2500개의 댓글을 크롤링을 했습니다.
크롤링 된 텍스트 파일을 바탕으로
워드 클라우드를 제작해봤습니다.
워드 클라우드는 R을 사용하였습니다.
# 필요한 라이브러리 설치
install.packages("rvest")
install.packages("dplyr")
install.packages(“stringr")
install.packages("KoNLP")
install.packages("wordcloud2")
library(rvest) #크롤링을 위한 라이브러리
library(dplyr) #데이터 전처리를 위한 라이브러리
library(stringr) #전처리 과정 중 글자 수 추출 및 문자열 조작을 위한 라이브러리
library(KoNLP) #워드클라우드로 표현하기위해 명사제거 등의 과정을 사용하기 위한 라이브러리library(wordcloud2) #실제 워드 클라우드 제작을 위한 라이브러리
library(devtools) #워드클라우드 형태 변형을 위한 라이브러리
텍스트 파일 전처리입니다.
텍스트 파일에서 필요 없는 불용어를 제거하기위해 거쳐가는 것이며
숫자, 점 등 워드 클라우드에 나올 필요가 없는 단어를 제거하기 위함입니다.
#텍스트 파일 전처리
useNIADic() #사전 다운로드, 약1213109개의 단어 다운로드
useSejongDic() #사전 다운로드, 약 370957개의 단어 다운로드
options(encoding = "UTF-8") #한글이 깨지는걸 방지
getwd() #현재 파일 위치를 알려주는 명령어. #텍스트 파일을 동일한 위치로 옮겨준다.
Youtube <- readLines(“youtube.txt”) #텍스트 파일을 youtube 변수에 저장
Youtube
Youtube <- gsub("\\d+","",youtube) # 숫자제거
youtube <- gsub("\\.","",youtube) # 점 제거
youtube <- gsub("ㅋ","",youtube) #’ㅋ’ 제거
youtube <- extractNoun(youtube) #명사 제거
youtube <- table(unlist(youtube)) #벡터형으로 변환한 후 테이블 형식으로 변환
youtube <- as.data.frame(youtube, stringsAsFactors = F) #youtube를 data Frame 형태로 변환
youtube <- filter(youtube,nchar(Var1) >= 2) #2글자 미만인 문자를 삭제
Youtube <- filter(youtube,nchar(Var1) <= 5) #5글자 이상인 문자를 삭제
youtube <- youtube %>% #youtube 변수를
arrange(desc(Freq)) %>% #내림 차순으로 정렬하여
head(200) #상위 200개만 추출
wordcloud2(youtube, #youtube 변수를 사용하여
size = 0.5) #글자 크기가 0.5인 워드 클라우드 제작
wordcloud2(data=youtube, #youtube 변수를 사용
size = 1.0 글자 크기 1
fontFamily = '나눔바른고딕’) #폰트 유형은 나눔 바른 고딕으로 제작
텍스트 파일을 활용한 데이터 전처리는 그리 어렵지 않기에
코드와 주석을 대신하여 설명을 넣어놓았습니다.
두번째
뉴스 기사 내용 크롤링 및 워드 클라우드 입니다.
필요한 라이브러리는
상단의 라이브러리와 동일하기에 생략하겠습니다.
바로 크롤링으로 들어가보겠습니다.
먼저 뉴스 기사를 선정함에 있어 언론사를 3개 선정하여 진행하였습니다.
연합뉴스, 동아일보, 전자신문를 선택하여 진행했고
각 언론사 마다 페이지의 개발자 도구를 보면 구조가 상이했기에
하나하나 분석하며 진행해 나갔습니다.
3개 중 하나만 진행해 볼 예정이며
지금은 전자 신문 언론사에 나온
부동산 내용을 검색하기 위해 진행했던 크롤링입니다.
(이 부분부터 이해가 어려우시면
제 게시글 중 웹 크롤링 게시글을 참고해주세요.
-> https://byeongtong.tistory.com/18 )
웹 크롤링
웹 크롤링 기초 과정입니다. 제가 제일 처음 배웠던 웹 크롤링으로써 처음 체험하는데 가장 좋은 예시가 될 수 있을 것 같아 글을 적게 되었습니다. 파란색으로 남긴 글이 코드이기에 본 게시글
byeongtong.tistory.com
#기본 주소 설정
#basic_url은 우리가 크롤링을 시작하는 첫 페이지
urls <- NULL #첫 페이지부터 추출하고자 하는 페이지까지 크롤링한 내용을 담아줄 변수 설정
#기본 주소에 paste를 사용하여 반복할 페이지 설정
cnt <- 0
for(i in 1:10){
cnt = cnt+1
urls[cnt] <- paste0(basic_url, i,"&DA=PGD") #basic_url과 i를 이어붙임
}
urls
-> i 부분이 뭘 의미하는지 이해하시고 가는게 좋을 것 같습니다. <-
#xpath에서 a태그의 href 링크를 반복하여 저장
links <- NULL
for(url in urls){
html <- read_html(url)
html2 <- html_nodes(html, xpath = '//*[@id="newsColl"]/div[3]') #소스코드를 추출함
html3 <- html_nodes(html2, 'a') #html2에서 a태그 추출하여 html3에 저장
links <- c(links, html_attr(html3, 'href')) #html3에서 href 속성 추출하여 links에 추가
links <- unique(links) #중복된 링크 제거
}
links
length(links)
기사가 보이는 부분의 xpath를 추출하고
Url이 적힌 부분만 뽑아 내기위해
A태그를 한번, href 태그를 한번 추출해서 다시 한번 변수에 저장해주고
중복된 뉴스 기사 url이 있을 경우를 대비하여 유니크 명령어로 중복을 삭제하였습니다.
length(links)로 수집된 url의 갯수를 확인해보세요 !
#링크 안의 div클래스 부분의 텍스트를 추출
txts <- NULL
for(link in links){
html <- read_html(link)
txts <- c(txts,html
%>% html_nodes('p')
%>% html_text())
}
txts
length(txts)
그리고 전자 신문 언론사 내에
뉴스 내용이 적혀 있는 p 태그 부분만 추출한 뒤
텍스트만 추출하여
txts에 중첩하여 저장하면
뉴스 내용 크롤링이 완료 된답니다.
뉴스 내용 수집이 완료됬다면
전처리를 통해 불용어를 제거해야합니다.
전처리 방식도 동일한 방식으로 진행되며
코드와 주석을 첨부하는 것으로 간단하게 넘어가보겠습니다.
#데이터 전처리 작업
txts <- gsub("\\d+","",txts) #숫자 제거
txts <- gsub("\\.","",txts) #점 제거
txts <- extractNoun(txts) #명사만 추출
txts
txts <- table(unlist(txts)) #벡터형 테이블 생성
txts
txts <- as.data.frame(txts, stringsAsFactors = F) #데이터 프레임으로 제작
txts
txts <- filter(txts,nchar(Var1) >= 2 & nchar(Var1) <= 4) #2글자 이상 4글자 이하 단어만 추출
txts
txts <- txts %>%
arrange(desc(Freq)) %>% #빈도수 내림차순 정렬 후
head(200) # 상위 200개만 추출
txts
워드 클라우드 생성에 있어 차별점을 구성하였습니다.
뉴스 크롤링을 시작한때 언급 했던 내용 처럼
이번 프로젝트에서
연합 뉴스 동아 일보 전자 신문을 크롤링했습니다.
결과물을 좀 더 뚜렷하게 나타내면서
우리의 주제를 좀 더 명확히 표현해보기위해
연합 뉴스는 워드 클라우드로 '부'
동아 일보는 워드 클라우드로 '동'
전자 신문는 워드 클라우드로 '산' 의 모양으로 제작해보았습니다.
# 워드클라우드 생성
wordcloud2(txts,
size = 0.5)
wordcloud2(data=txts,
fontFamily = '나눔바른고딕')
wordcloud2(txts,
color = "random-light",
backgroundColor = "grey",
fontFamily = "나눔바른고딕")
letterCloud(data = txts,
word = 'R',
wordSize = 1)
letterCloud(data = txts,
word='부',
wordSize=0.3,
fontFamily='나눔바른고딕
letterCloud(data = txts,
word='동',
wordSize=0.3,
fontFamily='나눔바른고딕
letterCloud(data = txts,
word='산',
wordSize=0.3,
fontFamily='나눔바른고딕
각 언론사 별 부동산과 관련된 기사 내용 크롤링으로 만든 워드 클라우드 입니다.
결과를 살펴보면 각기 다른 모습을 보이면서도
비슷한 모습을 보이고 있습니다.
대부분의 부정적 모습을 확인할 수 있지만
20대로써 바라보는 이러한 상황은 아직 참 어렵습니다.
워드 클라우드를 바탕으로 부동산 감정 분석 결과입니다.
집값은 물가상승에 비례하여 무조건 상승하지만,
단시간에 오른 집값 상승이 문제가 아닐까 라고 결론을 내렸습니다.
이는 누군가에게 행운을,
누군가에게 불행을 안겨주었으며
아직 집이 없는 젊은 세대와 전월세를 살고 있는 중장년층에게
절망감을 안겨준 것은 분명한 사실입니다.
돈이 많은 사람이 비싼 집을 사는것이 당연하지만,
소득의 차별이 아닌 차이를 인정하면서
집값의 가파른 상승세를 완화할 수 있는 방향의 어떠한 정책으로 개선이 필요함을
절실히 느꼈습니다.
그리고 가장 고질적인 문제인
부정적인 사회 분위기를 개선하려는 노력이 필요하다고 생각합니다.
부동산, 집값이라는 단어만으로도 논쟁의 시작이 되버린 지금,
우리가 언제까지 부정적인 인식을 가지고 나아갈 수는 없기에
부정적 분위기를 타파함은 물론
향후 긍정적인 반응을 이끌어 낼 수 있는 방향이 필요함을 느꼈습니다.
.
.
.
분석 내용을 통한 감정 분석은
분석가의 주관적 의견이 포함되는 것이기에
조금 더 철저히 조사해 보고픈 마음이 아주 많이 들었던 분석이였으며
추후에도 이런 과정을 많이 해나감으로써
나중에 누군가에게 꼭 도움이 되는 분석을 해보고 싶은 마음이 들었던,
저에게는 많은 의미를 부여해주었던 분석이였습니다.
오늘의 주제였던.
부동산과 관련된 국민들의 의견 수집 및 분석을 통해 도출한 감정 분석 및 추후 부동산 정책 예측
디테일한 정책을 제시하지는 못했지지만
정책의 방향을 한번 생각해볼 수 있는 분석이지 않았을까 라는 생각을 해보며
이번 게시글 마치겠습니다.
감사합니다.
'진행한 프로젝트' 카테고리의 다른 글
UIPATH를 활용한 주식 정보 알아보기. (2) | 2021.07.01 |
---|---|
소셜 데이터로 보는 저출산 (2) | 2021.04.09 |