ComputerLanguage_Program/R
[R] 크롤링 및 데이터 전처리
pbj0812
2020. 6. 24. 01:31
0. 목표
- R을 통한 크롤링
1. 코드작성
1) 라이브러리 설치 및 호출
install.packages('rvest')
library(rvest)
library(stringr)
library(data.table)
2) 파싱
- css가 전혀 없고 구분할 수 있는 부분이 pre 밖에 없기에 아래와 같이 작성
url <- "페이지 소스"
data <- read_html(url) %>% html_nodes("pre")
3) 텍스트화
- 원하는 데이터가 1에 있기에 1을 선택하고, html_text를 통한 텍스트화
data2 <- data[1]
data3 <- html_text(data2)
4) 엔터(\n) 제거
- 테이블화가 전혀 되어 있지 않고 \n을 통해 분류해 놓은 데이터라 str_split을 사용한 강제 변환
data4 <- str_split(data3, "\n")
- 결과
5) 필요없는 라인 제거
- 자동적으로 맨 마지막 라인을 제거하기 위하여 전체 list의 전체 길이를 구한 다음 제거
- 데이터 제외하고 다 제거
data5 <- data4[[1]]
data5 <- data5[-length(data5)]
data5 <- data5[-c(5, 4, 3, 2, 1)]
- 결과
6) 테이블화를 위한 전처리
(1) result 라는 변수를 생성
(2) data5의 데이터를 한 줄 씩 불러와 띄워쓰기를 통한 분류를 하고 그 결과의 길이가 12이면 저장, 아니면 제외
result <- list()
for(i in 1:length(data5)){
a <- strsplit(data5[i], "\\s+")[[1]]
if(length(a)==12){
result <- append(result, a)
} else {
print('')
}
}
- 결과(1 * 1008의 형태)
7) 데이터 프레임화
(1) matrix를 사용하여 1줄이 아닌 x행 12열로 변환
(2) data.frame을 통한 데이터 프레임화
(3) 공란인 첫번째 열 삭제
(4) 열이름 채워주기
result2 <- matrix(result, byrow=T, ncol=12)
result3 <- data.frame(result2)
result3 <- subset(result3, select = -1 )
names(result3) <- c("PRES", "HGHT", "TEMP", "DWPT", "RELH", "MIXR", "DRCT", "SKNT", "THTA", "THTE", "THTV")
- 결과
8) 플롯
plot(result3$PRES, result3$TEMP)
- 결과
2. 참고
- R 열 제거
- R 크롤링
- R split
- R 행 제거
- R 반복문
- R if문
- R matrix
- R rvest