일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 패스트캠퍼스
- 패스트캠퍼스후기
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- 패캠챌린지
- 알버트
- 직장인자기계발
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
- albert
- AI
- 직장인인강
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- R
- SKT
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- Today
- Total
제주 탈출 일지
빅데이터 분석 - 네이버 api 활용 및 데이터 시각화(wordcloud2) 본문
오랜만에 R 관련 포스팅을 진행하는 것 같다. 하지만 이전에 했던 wordcloud 예제와 크게 다르지 않다.
이 과정을 전처리 + 시각화로 나누어 본다면, 시각화는 동일한 형태인 것이다. 그럼 시작하겠다.
아래 코드는 전체 코드이다.
library(httr)
library(stringr)
library(XML)
library(RCurl)
library(KoNLP)
library(wordcloud2)
setwd("C:\\Rwd")
client_id = "api id를 입력해주세요."
client_secret = "api secret key를 입력해주세요."
api_url = "https://openapi.naver.com/v1/search/blog.xml"
query = URLencode(iconv("이건희",to="UTF-8"))
query = str_c("?query=", query)
xml_ = xmlParse(result)
xml_
xpathSApply(xml_, "/rss/channel/item/title", xmlValue)
xpathSApply(xml_, "/rss/channel/item/link", xmlValue)
xpathSApply(xml_, "/rss/channel/item/description", xmlValue)
display = "&display=100"
#시작 위치.
start_ = "&start=1"
sort_ = "&sort=date"
result = GET(str_c(api_url,query,display,start_,sort_), add_headers("X-Naver-Client-Id" = client_id, "X-Naver-Client-Secret" = client_secret))
xml_ = xmlParse(result)
xml_
df_test<-xmlToDataFrame(getNodeSet(xml_,"//item"))
df_test
str(df_test)
df_test[,1]
df_test[,3]
txt <- xpathSApply(xml_, "/rss/channel/item/title", xmlValue)
txt
txt<-gsub('\\d+|<b>|</b>|"',"",txt)
nouns<-sapply(txt,extractNoun,USE.NAMES = F)
nouns<-unlist(nouns)
nouns2 <- Filter(function(x) {nchar(x) >= 2}, nouns)
wordcount <- table(nouns2)
wordcloud2(wordcount)
write(txt,'df2.csv')
1. 라이브러리 import 및 기본 세팅
library(httr)
library(stringr)
library(XML)
library(RCurl)
library(KoNLP)
library(wordcloud2)
setwd("C:\\Rwd")
client_id = "api id를 입력해주세요."
client_secret = "api secret key를 입력해주세요."
웹 페이지를 파싱하기 위한 httr, stringr, XML, RCurl 패키지들을 불러오고, 시각화를 위한 wordcloud2에 대한 KoNLP, wordcloud2 패키지를 불러온다.
그리고 setwd로 작업 디렉토리를 설정한다.
마지막으로 naver api의 id와 secret 키를 설정해야 하는데, 아래 포스팅을 보면 어떻게 등록하는지 잘 나와있다.
https://blog.naver.com/rnjsrldnd123/221496605706
[Node.js] 네이버 오픈 API 사용하기 (네이버 이미지 검색)
이 포스팅은 프로그래머를 위해 작성되었으며, 오픈 API 사용법을 다루고 있습니다.본인이 프로그래머가...
blog.naver.com
2. 네이버 api를 통해 데이터 받아오기.
api_url = "https://openapi.naver.com/v1/search/news.xml"
query = URLencode(iconv("이건희",to="UTF-8"))
query = str_c("?query=", query)
display = "&display=100"
start_ = "&start=1"
result = GET(str_c(api_url, query, start_),
add_headers("X-Naver-Client-Id" = client_id, "X-Naver-Client-Secret" = client_secret))
api에서 원하는 정보를 얻어오기 위해서는 해당 api의 document를 읽어보는 것을 추천한다.
document에는 다음과 같은 형태로 URL을 요청하라고 되어 있다. 이번에는 blog에서 이슈가 되었던 삼성 이건희 회장의 별세와 관련하여 정보를 얻어올 것이다. 이를 위해서 openapi.naver.com/v1/search/news.xml에 ?query=이건희를 붙여서 GET 메소드로 api 서버에 정보를 요청한다.
그리고 api 서버에 요청할 때, 등록했던 id와 secret에 대한 정보를 헤더로 붙여서 보내야 한다. 그래야 api 서버에서 정보를 돌려주기 때문.
+ display로 몇 개의 데이터를 가져올 것인가에 대한 정보도 넣어서 보내주게 된다.
+ start는 어디서 부터 시작할지에 대한 정보이다.
자세한 사항은 naver api document를 확인하자.
3. GET을 통해 받아온 데이터 중에서 필요한 데이터만 가져오기.
xml_ = xmlParse(result)
xml_
df_test<-xmlToDataFrame(getNodeSet(xml_,"//item"))
df_test
str(df_test)
df_test[,1]
df_test[,3]
txt <- xpathSApply(xml_, "/rss/channel/item/title", xmlValue)
txt
GET으로 받아온 result값을 xmlParse를 통해 xml 트리 형태로 보게 되면, 다양한 정보가 표시되는 것을 볼 수 있다. 한번 xml Tree의 구조가 어떻게 생겼는지 관찰을 해보기를 바란다.
보면 이런 <item> </item> 태그 사이에 하나의 블로그 글에 대한 정보가 나오는데, 글자가 깨지는 것을 볼 수 있다. ㅋㅋ; 어쨋든 이 xml Tree에 대해서 getNodeSet을 통해 각각의 item 태그들에 대한 정보를 DataFrame으로 변경한다. 변경할 때 xmlToDataFrame을 사용한다. 이러면 <title> , <link>, <description> 등 많은 데이터들이 데이터 프레임 형태로 정리된 것을 확인 할 수 있다. df_test의 값들을 확인해보면 된다.
여기서는 xpathSApply(xml_, "/rss/channel/item/title", xmlValue)를 통해 xml_ 에서 title 태그의 값들만을 가져와서 txt에 담는다.
4. 데이터를 시각화 하기.
txt<-gsub('\\d+|<b>|</b>|"',"",txt)
nouns<-sapply(txt,extractNoun,USE.NAMES = F)
nouns<-unlist(nouns)
nouns2 <- Filter(function(x) {nchar(x) >= 2}, nouns)
wordcount <- table(nouns2)
wordcloud2(wordcount)
write(txt,'df2.csv')
txt는 vector 형태로 title 값들을 가지고 있다. 각 값은 필요 없는 형태를 많이 포함하고 있으므로, 이전에 했던 것처럼 필요없는 단어들을 정리하고 수정한다. 그 단어들을 table(nouns2) 처럼 빈도수를 나타내는 table로 만들고 wordcloud2로시각화한다. 그러면 다음과 같은 그림이 나온다.
삼성에서의 상속, 그룹, 승진 등 변화에 대한 키워드들이 눈에 띄게 보이는 것을 확인할 수 있다.
'빅데이터 분석' 카테고리의 다른 글
빅데이터 분석 - 소셜 네트워크 분석 2(R 관련 그래프 실습) (0) | 2020.11.30 |
---|---|
빅데이터 분석 - 소셜 네트워크 분석 1(그래프 관련 정리) (0) | 2020.11.27 |
중간고사 문제 풀이 (0) | 2020.11.09 |
빅데이터 분석 - OpenAPi 활용 관련 포스팅 (0) | 2020.10.12 |
빅데이터 분석 - ggmap으로 단양군 명소 표시하기 (0) | 2020.10.07 |