install.packages("shiny") # 인스톨
library(shiny) # 라이브러리 등록
ui <- fluidPage("사용자 인터페이스") # 구성 1: ui
server <- function(input, output, session){} # 구성 2: server
shinyApp(ui, server) # 구성 3: 실행
runExample() # 샘플 보여주기
runExample("01_hello") # 샘플 실행하기
faithful <- faithful
head(faithful, 2)
ui <- fluidPage( # 사용자 인터페이스 시작: fluidPage 정의
titlePanel("샤이니 1번 샘플"), # 타이틀 입력
#---# 레이아웃 구성: 사이드바 패널 + 메인패널
sidebarLayout(
sidebarPanel( # 사이드바 패널 시작
#--- 입력값: input$bins 저장
sliderInput(inputId = "bins", # 입력 아이디
label = "막대(bin)갯수:", # 텍스트 라벨
min = 1, max = 50, # 선택 범위(1-50)
value = 30)), # 기본 선택 값 30
mainPanel( # 메인패널 시작
#---# 출력값: output$distPlot 저장
plotOutput(outputId = "distPlot")) # 차트 출력
))
server <- function(input, output, session){
#---# 랜더링한 플롯을 output 인자의 distPlot에 저장
output$distPlot <- renderPlot({
x <- faithful$waiting # 분출대기시간 정보 저장
#---# input$bins을 플롯으로 랜더링
bins <- seq(min(x), max(x), length.out = input$bins + 1)
#---# 히스토그램 그리기 (맥 사용자 폰트 추가 필요)
hist(x, breaks = bins, col = "#75AADB", border = "white",
xlab = "다음 분출때까지 대기시간(분)",
main = "대기시간 히스토그램")
})
}
# 실행
shinyApp(ui, server)
rm(list = ls()) # 메모리 정리하기
# [1단계: 데이터 불러오기]
setwd(dirname(rstudioapi::getSourceEditorContext()$path))
load("./04_preprocess/04_preprocess.rdata") # 주소 불러오기
load("./05_geocoding/05_juso_geocoding.rdata") # 좌표 불러오기
# [2단계: 주소 + 좌표 결합]
library(dplyr) # install.packages('dplyr')
apt_price <- left_join(apt_price, juso_geocoding,
by = c("juso_jibun" = "apt_juso")) # 결합
apt_price <- na.omit(apt_price) # 결측치 제거
# [1단계: 지오데이터프레임 생성]
library(sp) # install.packages('sp')
coordinates(apt_price) <- ~coord_x + coord_y # 좌표값 할당
proj4string(apt_price) <- "+proj=longlat +datum=WGS84 +no_defs" # 좌표계(CRS) 정의
library(sf) # install.packages('sf')
apt_price <- st_as_sf(apt_price) # sp형 => sf형 변환
# [2단계: 지오데이터프레임 시각화]
plot(apt_price$geometry, axes = T, pch = 1) # 플롯 그리기
library(leaflet) # install.packages('leaflet') # 지도 그리기
leaflet() %>%
addTiles() %>%
addCircleMarkers(data=apt_price[1:1000,], label=~apt_nm) # 일부분(1000개)만 그리기
# [3단계: 지오 데이터프레임 저장] -> 기존 방식과 동일
df <- structure(
list(longitude = c(128.6979, 153.0046, 104.3261, 124.9019,
126.7328, 153.2439, 142.8673, 152.689),
latitude = c(-7.4197, -4.7089, -6.7541, 4.7817,
2.1643, -5.65, 23.3882, -5.571)),
.Names = c("coord_x", "coord_y"), class = "data.frame", row.names = c(NA, -8L))
head(df)
# 2) 지오데이터프레임으로 변환
library(sp)
coordinates(df) <- ~coord_x + coord_y # 좌표값 할당(sp형)
proj4string(df) <- "+proj=longlat +datum=WGS84 +no_defs" # 좌표계(CRS) 정의(sp형)
library(sf) # install.packages('sf')
df <- st_as_sf(df) # sp형 => sf형 변환
head(df)
# 3) 지도 시각화
library(leaflet)
leaflet() %>%
addTiles() %>%
addCircleMarkers(data=df)
- 2가지 단계를 시행필요
1. 컬럼 추출
apt_price <- apt_price %>% select(ymd, ym, year, code, addr_1, apt_nm,
juso_jibun, price, con_year, area, floor, py, cnt) # 컬럼 추출
head(apt_price, 2) # 자료 확인
- select() 함수는 데이터에서 필요한 변수만 추출하고 싶을 때 사용한다.
2. 전처리 데이터 저장
setwd(dirname(rstudioapi::getSourceEditorContext()$path))
dir.create("./04_pre_process") # 새로운 폴더 생성
save(apt_price, file = "./04_pre_process/04_pre_process.rdata") # 저장
write.csv(apt_price, "./04_pre_process/04_pre_process.csv")
카카오 로컬 API 키
- 카카오 개발자 사이트
→ https://developers.kakao.com
자료 수집을 위한 크롤러 제작 단계 : 1단계에 -> 5단계
for (i in 1:length(url_list)) { # 요청 목록(url_list) 반복
raw_data[[i]] <- xmlTreeParse(url_list[i], useInternalNodes = TRUE,
encoding = "utf-8") # 결과 저장
root_Node[[i]] <- xmlRoot(raw_data[[i]]) # URL로 저장 후 XML로 파일을 추출
추출 데이터 확인 -> 응답 내역 저장 -> 자료 통합
컴파일 시 이미 실행된 행동(폴더생성, 데이터 생성)에 대한 처리 추가
if(!file.exists(path))
if(!dir.exists(path))
크롤링 문제 발생
트래픽 횟수 1000번 제한으로 1번 접속 시 마다 횟수 차감 (컴파일 시 300회 차감)
25회로 조정 필요
빈 공백을 없애주는 작업이 포함되어 있다.
paste("A","B","C",seq="") -> "ABC"
= paste("A","B","C") -> "ABC"
"?" 로 조건절을 만든 후 각 조건에 해당하는 파라미터 삽입 후 url_list[]에 값을 넣어준다.
for(i in 1:nrow(loc)){
for(j in 1:length(datelist)){
cnt <- cnt + 1
url_list[cnt] <- paste0("https://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade?",
"LAWD_CD=", loc[i,1],
"&DEAL_YMD=", datelist[j],
"&numOfRows=", 100,
"&serviceKey=", service_key)
}
Sys.sleep(0.1)
msg <- paste0("[", i,"/",nrow(loc), "] ", loc[i,3], " 의 크롤링 목록이 생성됨 => 총 [", cnt,"] 건")
cat(msg, "\n\n")
}
-> 기존 for문에 대한 처리가 완료된 후 작업을 하기 위하여 사용
-> 크롤링을 하며 무한히 웹에 접속하게되어 해당 서버가 해킹으로 감지할 우려를 방지
참고 소스를 이용하여 크롤링
데이터 인코딩 변경
중첩반복문을 이용한 csv 파일 생성
개인 인증키(encoder) 사용 및 Get 방식 조건 전달
텍스트 마이닝 워드 클라우드
install.packages("wordcloud") library(wordcloud)
R스튜디오 인코딩 UTF-8 로 수정 (git에서 한글깨져서 수정)
R언어 기초 내용