pbj0812의 코딩 일기

[R] 크롤링 및 데이터 전처리 본문

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 크롤링

 - R split

 - R 행 제거

 - R list append

 - R 반복문

 - R if문

 - R matrix

 - R rvest

Comments