api 란?
api는 네이버 혹은 구글, 공공기관 같은 곳에서 자신들이 가지고 있는 정보를
일정한 형식으로 일반 사람, 기관간의 정보 공유 등 정보를 공개를 해서
그 정보를 이용하여 사용하거나, 프로그램을 만들때 쓰는 것입니다.
1. open api
위의 설명대로 공개된 api 입니다.
일반사람이나 누구도 확인 할 수 있는 api를 말합니다.
2. 공공기간 open api
위에 있는 open api중에서 공공기관에서 공개하는것을 말하는 겁니다.
예로 기상청에서 날씨를 api로서 공개를 하고 있고 이 외에도
버스, 지하철 노선 및 위치 정보 등을 공공기관에서 공개하여,
일반인, 앱제작 회사에서 이를 이용하여 앱 등을 만들어서 ^^ 일반인들이 사용하고 있는것입니다.
2번의 예로
경기도 버스정보시스템 - http://www.gbis.go.kr/
경기도 버스정보시스템 공유 - http://openapi.gbis.go.kr/manual2/jsp/main.jsp
NAVER OPEN API
install.packages("httr")
install.packages("wordcloud2")
#패키지 로드
library(wordcloud2)
library(httr)
library(KoNLP)
#######################################
#네이버 OPenApi 연결 및 데이터 가져오기
#네이버 소스 출러
#https://developers.naver.com/docs/serviceapi/search/news/news.md#%EB%89%B4%EC%8A%A4
#1. 기본 URL 뉴스
urlStr <- "https://openapi.naver.com/v1/search/news.xml?"
#2. 검색어 설정 및 UTF-8 URL 인코딩
searchString <- "query=트럼프"
#UTF-8 인코딩
searchString <- iconv(searchString, to="UTF-8")
#URL 인코딩
searchString <- URLencode(searchString)
#인코딩된 내역 확인
print(searchString)
#3. 나머지 요청변수 설정 (각 요청변수는 &로 연결)
#조회 개수 50개, 시작 페이지1, 유사도순 정렬
etcString <- "&display=50&start=1&sort=sim"
#4.URL 조립
reqUrl <- paste(urlStr, searchString, etcString, sep="")
#5. 조립된 URL확인
reqUrl
#NAVER OPEN API KEY
client_id = "PIKKM1p_iFKvlrgZdyk3"
client_secret = "scxKeSJYib"
#Get 함수 호출(인증정보는 add_headers에 담아 함께 전송)
naverResult <- GET(reqUrl,
add_headers("X-Naver-Client-Id"=client_id,
"X-Naver-Client-Secret"=client_secret))
#호출 결과 조회 (응답코드 Status가 200이면 정상)
naverResult
#Open Api의 결과 구조 확인
class(naverResult)
str(naverResult)
#raw형을 문자로 변환
result <- rawToChar(naverResult$content)
#변환 결과 확인
Encoding(result) <- "UTF-8"
#결과 출력
result
#################################################################
#가져온 데이터 전처리 불필요한 문자제거
#검색 결과를 변수에 저장
refinedStr <- result
#XML 태그를 공란으로 치환
refinedStr <- gsub("<(\\/?)(\\w +)*([^<>]*)>", " ", refinedStr)
#단락을 표현하는 불필요한 문자를 공란으로 치환
refinedStr <- gsub("[[:punct:]]"," ", refinedStr)
#영어 소문자를 공란으로 치환
refinedStr <- gsub("[a-z]"," ",refinedStr)
#숫자를 공란으로 치환
refinedStr <- gsub("[0-9]", " ", refinedStr)
#여러 공란은 한 개의 공란으로 변경
refinedStr <- gsub(" +", " ",refinedStr)
#변경 후 검색 결과
refinedStr
##############################################
#데이터 전처리
#검색 문장 내 단어 추출
nouns <- extractNoun(refinedStr)
#단어 추출 결과 확인
str(nouns)
#추출된 단어 중 일부를 확인 (앞에서 부터 30개)
nouns[1:30]
#길이가 1인 문자를 제외
nouns <- nouns[nchar(nouns) > 1]
#제외할 특정 단어를 정의
excluNouns <- c('트럼프','미국')
#특정 단어를 제외
nouns <- nouns[!nouns %in% excluNouns]
#추출된 단어 중 일부를 확인 (앞에서 부터 30개)
nouns[1:30]
#모든 단어를 워드 클라우드에 표현할 수 없기에 빈도수 기준으로 상위 50개 단어를 별도로 추출해보자
#빈도수(table)를 기준으로 내림차순 (decreasing=T) 정렬(sort) -> 상위 50개만 추출 ([1:50])
wordT <- sort(table(nouns), decreasing =T)[1:50]
#추출 결과 확인
wordT
#wordcloud2(data, size, shape)
#data : 단어와 빈도수 정보가 표함된 데이터프레임 또는 테이블
#size : 글자 크기
#shape : 워드 클라우드의 전체 모양(circle(기본값), cardioid, diamond, triangle, star 등)
#워드 클라우드 그리기
wordcloud2(wordT, size = 3, shape = 'diamond')
날씨 open api
##패키지 설치
##https://openweathermap.org/api
##################################
install.packages("ROpenWeatherMap")
library(ROpenWeatherMap)
## 설치 확인
search()
#문제 있으면
#remove.packages("ROpenWeatherMap") 사용
#----------------------------------------------
#api_key 키값 저장 및 확인
# 강사가 제공--> openweathermap.org 회원 가입하면 줌
### 부분 유료
api_key <- "b2185facbdadc1b91b4d5ba45cfc4b1d"
ls()
#-----------------------------
##https://openweathermap.org/api 도시 이름과 id
##id: 52490 --> Moscow
##id: 703448 -->Kiev
##id: 2643743 --> London
##id: 1835848 --> Seoul
#---------한 도시 데이터만 가져오기 list형
data = get_current_weather(api_key, city="Seoul" )
str(data)
data$coord #리스트에서 특정 요소 가져오기
data$coord$lon
data$name
data$weather
df <- data$weather
class(df)
#-------------------------------------------------
data2 = get_current_weather(api_key, cityID=2643743 )
str(data2)
#----여러 도시 데이터 가져오기 list 형
# 데이터 프레임만 추출
data3 = get_multiple_cities(api_key,cityIDs =c(524901,703448,2643743))
class(data3)
str(data3)
df2 <- data3$list
#-------데이터 재 조합후 그래프 그리기
#데이터 프레임 안의 데이터 프레임
df2$name
df2$main$temp
barplot(df2$main$temp, names.arg=df2$name)
'인공지능 > R' 카테고리의 다른 글
R - 내장 함수 (0) | 2021.06.10 |
---|---|
R - 마크다운 (0) | 2021.06.10 |
R - 감성분석 (0) | 2021.06.09 |
R - 통계적 가설검정 (0) | 2021.06.09 |
R - 텍스트마이닝 (0) | 2021.06.08 |