[문자열 길이 nchar, 문자열 붙이기 paste, 문자열 자르기 substr ] 공공데이터 R 프로그램 기초 아파트

  

 시스템에서 일반적으로 데이터를 받으면 항상 겪는 문제가 있다.  일자,  월을 받는 것인데, 일자나 월은 1자리수도 있고 2자리수도 있다.    이것을 데이터로 묶어서,  년월일을 8자리로 바꾸거나  아니면  2021-05-10 처음 년월일 사이에  "-" 하이픈을 넣은 다음 Date 형태로 데이터 유형을 바꾸는 경우가 있다. 

   년월일 8자리로 묶었을 때의 장점은 데이터 소팅이 가능 하다는 것이다.  기본적으로 데이터 소팅은  자리수가 같아야 할 수 있다.   자리수가 다를 경우 아래와 같이 소팅이 잘못 될 수도 있다. 

   2015년 1월 11일과 2015년 2월 2일의 소팅 값이 바뀌었고,  눈으로 식별 하기가 어렵다.  

      >  a <-   c(2015111, 201522, 20151001)

      >  sort(a)

          201522 2015111 20151001

지금 까지 친 소스코드를 파이프연산자 %>%를 활용 해서, 간단하게 정리 하였고, 계약일자의 자리수가 문제가 있다.

# 라이브러리 불러오기 
  library(rio)  
  library(dplyr)
library(readxl)
library(httr)

# 파일을 불러오는 path를 url 변수로 정의      
url = "https://drive.google.com/u/0/uc?id=1PT_0-xJvM9KGp5zzx1jjcPAaS25epx4l&export=download"
GET(url, write_disk(tf <- tempfile(fileext = ".xlsx")))
apt <- read_excel(tf, 1L)  # 1L은 sheet 1을 이야기 하는 것이다.


# 아파트 데이터  전처리        
  apt <- apt %>% 
          rename(전용면적_m3 = '전용면적(㎡)') %>% 
          rename(거래금액_만원 = '거래금액(만원)') %>% 
          mutate(건축년도 = as.integer(건축년도),
                        층 = as.integer(층)) %>% 
          mutate(전용면적_m3 = as.double(전용면적_m3)) %>%
          mutate(거래금액_만원 = as.integer(gsub(",", "", 거래금액_만원)))
  
  glimpse(apt %>%  select(계약년월, 계약일))   
## Rows: 296,656
## Columns: 2
## $ 계약년월 <chr> "202103", "202103", "202103", "202103", "202103", "202103", "2021…
## $ 계약일   <chr> "31", "11", "15", "26", "31", "2", "9", "27", "9", "10", "2", "1…
계약일 데이터를 묶어서 활용하기가 매우 어렵다. 따라서 계약일을 문자열 길이를 체크 한 다음 이를 2자리로 바꾸어서 처리 하여야 한다.
 # 문자열을 카운트 한 다음 앞에 0일 붙임    
   apt <-  apt %>% 
       mutate(계약일 = ifelse(nchar(계약일) ==1, 
                              paste( "0", 계약일, sep = ""),
                              계약일 ))
   apt$계약일[1:10] 
##  [1] "31" "11" "15" "26" "31" "02" "09" "27" "09" "10"

자리수가 바뀌었다. 자리수가 바뀌었다고 모두 끝나는 것이 아니다. 계약일자로 8자리 charactor로 만들어야 한다.

# 일자 자릿수를 8자리를 만든다.    
   apt <- apt %>% 
       mutate(계약일자 = paste0(계약년월, 계약일))

   apt$계약일자[1:10]   
##  [1] "20210331" "20210311" "20210315" "20210326" "20210331" "20210302"
##  [7] "20210309" "20210327" "20210309" "20210310"
 여기 까지 이야기한 함수를 설명하면 아래와 같다.

문자열 길이
nchar(변수)

데이터 붙이기
paste(a, b , sep ="") , sep는 간격임 또는
paste0(a, b), a와 b 문자열을 붙임

  여기에서 데이터 관리의 노하우가 나오는데,  예를 들면,  아파트 거래시 같은 일자에 여러번 계약되는 경우가 있다.   이를 경우에는 데이터를 그룹화 하여 평당 가격을 평균으로 구한다. 

# 강남구 논현동 계약일자별 평당 가격
   apt %>% 
       filter(시군구 == "서울특별시 강남구 논현동") %>% 
       mutate(평당가격 =  거래금액_만원 / (전용면적_m3/3.3)  ) %>% 
       group_by(시군구,계약일자) %>% 
       summarise(평당가격_일별= mean(평당가격))
## # A tibble: 485 x 3
## # Groups:   시군구 [1]
##    시군구                   계약일자 평당가격_일별
##    <chr>                    <chr>            <dbl>
##  1 서울특별시 강남구 논현동 20170701         3292.
##  2 서울특별시 강남구 논현동 20170703         3213.
##  3 서울특별시 강남구 논현동 20170704         1994.
##  4 서울특별시 강남구 논현동 20170707         2853.
##  5 서울특별시 강남구 논현동 20170710         3720.
##  6 서울특별시 강남구 논현동 20170711         2689.
##  7 서울특별시 강남구 논현동 20170712         4430.
##  8 서울특별시 강남구 논현동 20170713         5819.
##  9 서울특별시 강남구 논현동 20170714         3510.
## 10 서울특별시 강남구 논현동 20170715         3479.
## # … with 475 more rows
 위와 같이 데이터를 보니,  데이터 분석이 쉬워 보이지 않는다.   논현동 내에서도,  건축년도, 아파트 브렌드, 위치, 층, 입지조건 등의 사유로  평당 가격이 다르기 때문이다.    


댓글 없음:

댓글 쓰기

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...