dplyr %>% 파이프 연산자 부분 집합 및 필터 filter,distinct, sample_n ubuntu R

 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 은  여러가지 기능이 있다. 




 


댓글 없음:

댓글 쓰기

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

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