dplyr %>% 파이프 연산자 부분 집합 및 필터 filter 는 데이터 셋 가져오면 가장 많이 사용하는 기능 이다. 부동산의 데이터면 내가 궁금해 하던 지역의 아파트 가격을 알 수가 있다. 어찌 보면 dplyr 에서 가장 많이 쓰는 기능 중에 하나 이다.
dplyr 설치 및 설정은 아래와 같은 페이지를 보면 알 수 있다.
https://rdmkyg.blogspot.com/2021/12/dplyr-tidyr-ubuntu-r-41.html
앞에서와 같이 데이터는 아래의 소스코드로 가져온다.
library(readxl)
library(httr)
# 파일을 불러오는 path를 url 변수로 정의
url = "https://drive.google.com/u/0/uc?id=1OA7ZEx5TKpllZk70DQ7hWGN9quJIEK_q&export=download"
GET(url, write_disk(tf <- tempfile(fileext = ".xlsx")))
## Response [https://doc-0g-58-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/flr9h6veb5adviiq832mclcict5vftmf/1638677400000/07297316292192978319/*/1OA7ZEx5TKpllZk70DQ7hWGN9quJIEK_q?e=download]
## Date: 2021-12-05 04:11
## Status: 200
## Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
## Size: 8.5 MB
## <ON DISK> /tmp/RtmpLrkGL4/file3bf84471e7d8.xlsx
system.time(df <- read_excel(tf, 1L))
## 사용자 시스템 elapsed
## 1.280 0.164 1.443
데이터 부분 관찰 (Subset Observation : Rows )
Data filter
필터는 데이터을 받으면 가장 많이 제일 먼저 사용하는 것은 앞에서 본 것 같이 데이터 유형이나 데이터 요약 등이고, 그 다음에 사용을 많이 하는 것은 filter 이다.
기본적으로 필터는 아래와 같이 사용한다.
filter(df,시군구 == "서울특별시 강남구 대치동" )
## # A tibble: 24 × 15
## 시군구 번지 본번 부번 단지명 `전용면적(㎡)` 계약년월 계약일
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 서울특별시 강… 503 0503 0000 개포우성1 84.81 202111 2
## 2 서울특별시 강… 974 0974 0000 대치현대 101.6 202111 16
## 3 서울특별시 강… 1027 1027 0000 래미안대치팰… 94.49 202111 12
## 4 서울특별시 강… 891-6 0891 0006 테헤란로대우… 33.11 202111 6
## 5 서울특별시 강… 511 0511 0000 한보미도맨션1 128.01 202111 8
## 6 서울특별시 강… 891-… 0891 0023 대우아이빌명… 34.2 202011 25
## 7 서울특별시 강… 1014… 1014 0003 대치삼성 97.35 202011 10
## 8 서울특별시 강… 1014… 1014 0003 대치삼성 59.88 202011 19
## 9 서울특별시 강… 888 0888 0000 대치아이파크 119.58 202011 10
## 10 서울특별시 강… 670 0670 0000 동부센트레빌 145.83 202011 12
## # … with 14 more rows, and 7 more variables: 거래금액(만원) <chr>, 층 <chr>,
## # 건축년도 <chr>, 도로명 <chr>, 해제사유발생일 <chr>, 거래유형 <chr>,
## # 중개사소재지 <chr>
하지만, %>% 파이프 연산자를 이용하면, dplyr의 select 기능을 연결하여 쓸 수 있다는 장점이 있다. 이것이 있기 때문에 R 코드가 많이 간단해 졌다.
# 데이터를 필터 한다. 참고로 아래의 데이터는 서울 강남구 대치동으로 한다.
# 참고로 select는 데이터를 보기 편하게 하기 위하여 한다.
df %>%
filter(시군구 == "서울특별시 강남구 대치동") %>%
select(시군구, 단지명, `전용면적(㎡)` , `거래금액(만원)`, 층,계약년월 )
## # A tibble: 24 × 6
## 시군구 단지명 `전용면적(㎡)` `거래금액(만원)` 층 계약년월
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 서울특별시 강남… 개포우성1 84.81 311,500 12 202111
## 2 서울특별시 강남… 대치현대 101.6 270,000 11 202111
## 3 서울특별시 강남… 래미안대치팰… 94.49 385,000 15 202111
## 4 서울특별시 강남… 테헤란로대우… 33.11 37,500 10 202111
## 5 서울특별시 강남… 한보미도맨션1 128.01 414,000 10 202111
## 6 서울특별시 강남… 대우아이빌명… 34.2 33,000 11 202011
## 7 서울특별시 강남… 대치삼성 97.35 246,000 6 202011
## 8 서울특별시 강남… 대치삼성 59.88 179,000 2 202011
## 9 서울특별시 강남… 대치아이파크 119.58 329,500 16 202011
## 10 서울특별시 강남… 동부센트레빌 145.83 390,000 18 202011
## # … with 14 more rows
서울특별시 강남구 대치동을 전체를 보면 알 수 없다. 이 데이터 셋은 2011년 11월 데이터와 2012년 11월 데이터 셋을 비교한 것이다. 그런데 아래와 같이 필터를 하면 가격은 분석이 안되는데 최소한 거래량은 알 수 있다.
# 202011월 기준으로 데이터를 본다
df %>%
filter(시군구 == "서울특별시 강남구 대치동") %>%
filter(계약년월 == "202011") %>%
select(시군구, 단지명, `전용면적(㎡)` , `거래금액(만원)`, 층,계약년월 )
## # A tibble: 19 × 6
## 시군구 단지명 `전용면적(㎡)` `거래금액(만원)` 층 계약년월
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 서울특별시 강남… 대우아이빌명… 34.2 33,000 11 202011
## 2 서울특별시 강남… 대치삼성 97.35 246,000 6 202011
## 3 서울특별시 강남… 대치삼성 59.88 179,000 2 202011
## 4 서울특별시 강남… 대치아이파크 119.58 329,500 16 202011
## 5 서울특별시 강남… 동부센트레빌 145.83 390,000 18 202011
## 6 서울특별시 강남… 선경1차(1동-7… 136.68 350,000 7 202011
## 7 서울특별시 강남… 선경2차(8동-1… 127.75 332,500 8 202011
## 8 서울특별시 강남… 선릉역대우아… 28.34 29,700 14 202011
## 9 서울특별시 강남… 쌍용대치2 84.49 190,000 3 202011
## 10 서울특별시 강남… 은마 84.43 220,000 4 202011
## 11 서울특별시 강남… 은마 76.79 196,000 6 202011
## 12 서울특별시 강남… 테헤란로대우… 59.83 78,000 14 202011
## 13 서울특별시 강남… 테헤란로대우… 59.83 78,500 26 202011
## 14 서울특별시 강남… 테헤란로대우… 30.46 35,800 6 202011
## 15 서울특별시 강남… 테헤란로대우… 59.83 78,500 18 202011
## 16 서울특별시 강남… 테헤란로대우… 30.46 37,000 22 202011
## 17 서울특별시 강남… 풍림아이원4차… 111.54 210,000 9 202011
## 18 서울특별시 강남… 한보미도맨션2 84.96 241,000 6 202011
## 19 서울특별시 강남… 한보미도맨션2 115.05 297,000 5 202011
# 202111월 기준으로 데이터를 본다.
df %>%
filter(시군구 == "서울특별시 강남구 대치동") %>%
filter(계약년월 == "202111") %>%
select(시군구, 단지명, `전용면적(㎡)` , `거래금액(만원)`, 층,계약년월 )
## # A tibble: 5 × 6
## 시군구 단지명 `전용면적(㎡)` `거래금액(만원)` 층 계약년월
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 서울특별시 강남구 대치동 개포… 84.81 311,500 12 202111
## 2 서울특별시 강남구 대치동 대치… 101.6 270,000 11 202111
## 3 서울특별시 강남구 대치동 래미… 94.49 385,000 15 202111
## 4 서울특별시 강남구 대치동 테헤… 33.11 37,500 10 202111
## 5 서울특별시 강남구 대치동 한보… 128.01 414,000 10 202111
2020년 보다는 2021년이 34평 아파트 거래가 약 10억 이상 올라간 것처럼 보인다. 물론 아파트 가격이 오른 만큼 거래량도 3분의 1로 줄어 들었다. 거래량은 줄었지만 항상 신고가는 갱신한다.
하지만, 거래량이 적은 만큼 언제 가격조정이 있을 지 모른다. 항상 거래량이 줄어든 이후로 가격 안정화가 되었기 때문이다.
데이터 필터의 여러가지 연산 기능이 있다. and 연산자를 이용해서 데이터를 볼 수가 있다. 이러한 경우는 데이터의 갯수가 매우 많을 경우 사용 할 수 있다.
#201111월 기준으로 and 연산자 "&"를 이용해서 볼수 있다.
df %>%
filter(시군구 == "서울특별시 강남구 대치동" & 계약년월 == "202111" ) %>%
select(시군구, 단지명, `전용면적(㎡)` , `거래금액(만원)`, 층,계약년월 )
## # A tibble: 5 × 6
## 시군구 단지명 `전용면적(㎡)` `거래금액(만원)` 층 계약년월
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 서울특별시 강남구 대치동 개포… 84.81 311,500 12 202111
## 2 서울특별시 강남구 대치동 대치… 101.6 270,000 11 202111
## 3 서울특별시 강남구 대치동 래미… 94.49 385,000 15 202111
## 4 서울특별시 강남구 대치동 테헤… 33.11 37,500 10 202111
## 5 서울특별시 강남구 대치동 한보… 128.01 414,000 10 202111
and 연산자로 30억 이상 거래된 아파트를 filter 해서 볼 수 있다.
# 30억이상 거래된 아파트 뽐기
df %>%
filter(시군구 == "서울특별시 강남구 대치동" & `거래금액(만원)` >= "300,000" )
## # A tibble: 14 × 15
## 시군구 번지 본번 부번 단지명 `전용면적(㎡)` 계약년월 계약일
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 서울특별시 강… 503 0503 0000 개포우성1 84.81 202111 2
## 2 서울특별시 강… 1027 1027 0000 래미안대치팰… 94.49 202111 12
## 3 서울특별시 강… 891-6 0891 0006 테헤란로대우… 33.11 202111 6
## 4 서울특별시 강… 511 0511 0000 한보미도맨션1 128.01 202111 8
## 5 서울특별시 강… 891-… 0891 0023 대우아이빌명… 34.2 202011 25
## 6 서울특별시 강… 888 0888 0000 대치아이파크 119.58 202011 10
## 7 서울특별시 강… 670 0670 0000 동부센트레빌 145.83 202011 12
## 8 서울특별시 강… 506 0506 0000 선경1차(1동-… 136.68 202011 17
## 9 서울특별시 강… 506 0506 0000 선경2차(8동-… 127.75 202011 2
## 10 서울특별시 강… 891-6 0891 0006 테헤란로대우… 59.83 202011 12
## 11 서울특별시 강… 891-6 0891 0006 테헤란로대우… 59.83 202011 17
## 12 서울특별시 강… 891-6 0891 0006 테헤란로대우… 30.46 202011 23
## 13 서울특별시 강… 891-6 0891 0006 테헤란로대우… 59.83 202011 28
## 14 서울특별시 강… 891-6 0891 0006 테헤란로대우… 30.46 202011 28
## # … with 7 more variables: 거래금액(만원) <chr>, 층 <chr>, 건축년도 <chr>,
## # 도로명 <chr>, 해제사유발생일 <chr>, 거래유형 <chr>, 중개사소재지 <chr>
and 연산자로서 between 아래와 같이 할 수 있다. 그러니까? 이것은 1990년대 부터 2020년까지 데이터를 보는 것이다.
# 30억 이상 거래된 아파트에서 건축년도가 1990년대와 2020년대 까지 건축된 아파트 보기
df %>%
filter(시군구 == "서울특별시 강남구 대치동") %>%
filter( 건축년도 > 1990 & 건축년도 < 2020 ) %>%
select(시군구, 단지명, `전용면적(㎡)` , `거래금액(만원)`, 층,계약년월, 건축년도 )
## # A tibble: 15 × 7
## 시군구 단지명 `전용면적(㎡)` `거래금액(만원)` 층 계약년월 건축년도
## <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 서울특별시 … 대치현대 101.6 270,000 11 202111 1999
## 2 서울특별시 … 래미안대… 94.49 385,000 15 202111 2015
## 3 서울특별시 … 테헤란로… 33.11 37,500 10 202111 2004
## 4 서울특별시 … 대우아이… 34.2 33,000 11 202011 2004
## 5 서울특별시 … 대치삼성 97.35 246,000 6 202011 2000
## 6 서울특별시 … 대치삼성 59.88 179,000 2 202011 2000
## 7 서울특별시 … 대치아이… 119.58 329,500 16 202011 2008
## 8 서울특별시 … 동부센트… 145.83 390,000 18 202011 2005
## 9 서울특별시 … 선릉역대… 28.34 29,700 14 202011 2004
## 10 서울특별시 … 테헤란로… 59.83 78,000 14 202011 2004
## 11 서울특별시 … 테헤란로… 59.83 78,500 26 202011 2004
## 12 서울특별시 … 테헤란로… 30.46 35,800 6 202011 2004
## 13 서울특별시 … 테헤란로… 59.83 78,500 18 202011 2004
## 14 서울특별시 … 테헤란로… 30.46 37,000 22 202011 2004
## 15 서울특별시 … 풍림아이… 111.54 210,000 9 202011 2004
강남구 대치동과 경상남도 거제시 아주동과 비교할때는 or를 사용한다. 어찌 되었든 지방과 거제의 아파트 가격 격차가 엄청 크다. 거제시 아주동이 거래가 많기 때문에 데이터 10개만 뽑아서 봐야 한다. dplyr의 sample_n의 함수를 사용하면 된다.
# 강남구 대치동, 경남 거제시 아주동과 비교을 하기 위해 or 연산자를 사용한다.
df %>%
filter(시군구 == "서울특별시 강남구 대치동" | 시군구 == "경상남도 거제시 아주동") %>%
sample_n( 10, replace = FALSE) %>%
select(시군구, 단지명, `전용면적(㎡)` , `거래금액(만원)`, 층,계약년월, 건축년도 )
## # A tibble: 10 × 7
## 시군구 단지명 `전용면적(㎡)` `거래금액(만원)` 층 계약년월 건축년도
## <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 경상남도 … 거제아주… 59.8228 20,000 7 202111 2018
## 2 경상남도 … 광우보람… 59.92 5,500 10 202111 1997
## 3 경상남도 … 덕산아내… 84.7023 19,850 6 202011 2013
## 4 경상남도 … 아주e편… 59.9725 17,550 5 202111 2014
## 5 경상남도 … 덕산아내… 84.7023 25,100 14 202111 2013
## 6 경상남도 … 미진참사… 53.2049 5,900 5 202011 2001
## 7 서울특별시… 은마 84.43 220,000 4 202011 1979
## 8 서울특별시… 한보미도… 128.01 414,000 10 202111 1983
## 9 서울특별시… 대치아이… 119.58 329,500 16 202011 2008
## 10 경상남도 … 덕산아내… 59.9652 19,200 14 202111 2012
그리고, distinct를 이용해서 시군구를 뽐을수 있다. 아래를 보니 2,996개의 시군구가 있다.
df %>%
distinct(시군구)
## # A tibble: 2,996 × 1
## 시군구
## <chr>
## 1 강원도 강릉시 견소동
## 2 강원도 강릉시 교동
## 3 강원도 강릉시 금학동
## 4 강원도 강릉시 내곡동
## 5 강원도 강릉시 노암동
## 6 강원도 강릉시 송정동
## 7 강원도 강릉시 연곡면 영진리
## 8 강원도 강릉시 옥천동
## 9 강원도 강릉시 유천동
## 10 강원도 강릉시 입암동
## # … with 2,986 more rows
dplyr 은 여러가지 기능이 있다.
댓글 없음:
댓글 쓰기