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 2021112020년 보다는 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 rowsdplyr 은 여러가지 기능이 있다.
댓글 없음:
댓글 쓰기