[purrr, 다수의 회귀분석, 테이블 합치기 join ] 공공데이터 R 프로그램 기초 아파트


   purrr  바닷속의 진주를 찾아 낸다고 표현 해야 할까?   서울에는 수업이 많은 아파트 단지들이 있다.  그 아파트 단지 중에서,   가장 추세적으로 잘 오르는 곳,  아니면 그러하지 아니 한 곳을 찾아 볼 수 있을 수 있다.  어찌 되었든  30년 간 서울에서 살았던 나는 한 가지는 확실히 알고 있다.   서울에는 항상 부자들만 살고 있지 않다.  빈부의 격차가 있다는 이야기이다 . 이번에는 평당 가격 가지고 논의 하겠다.  


1. 데이터 불러오기 및 탐색

library(rio)  
library(dplyr)
library(readxl)
library(httr)

# 파일을 불러오는 path를 url 변수로 정의      
url = "https://drive.google.com/u/0/uc?id=1JE-OQNMws1HfVWKCSX4JFwHBUPgnQzP8&export=download"
GET(url, write_disk(tf <- tempfile(fileext = ".xlsx")))
## Response [https://doc-0s-58-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/q8qtsj6d15mhkh8l5im60pdeqdrvnims/1625579250000/07297316292192978319/*/1PT_0-xJvM9KGp5zzx1jjcPAaS25epx4l?e=download]
##   Date: 2021-07-06 13:48
##   Status: 200
##   Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
##   Size: 18.6 MB
## <ON DISK>  /tmp/Rtmp4IrrFt/filec844a09097b.xlsx
apt <- read_excel(tf, 1L)  # 1L은 sheet 1을 이야기 하는 것이다.
apt_df <- apt 

# 데이터를  평당 가격을 구한다.   
  apt <- apt %>%
      group_by(단지명, 계약일자) %>% 
      summarise(전용면적_m3 =sum(전용면적_m3),
                거래금액_만원 = sum(거래금액_만원)) %>% 
      mutate(평당가격 = 거래금액_만원/(전용면적_m3/3.3)) %>% 
      mutate(계약일자 = as.Date(계약일자 , "%Y%m%d"))  
  
  전처리 하면서 고민 하였던 것이 데이터 관측치의 갯수 였다.   앗 그런데,  문제가 생겼다. 1000번 가까이 거래한 아파트 단지가 있는 것이다.    

#  데이터 탐색   
  apt_count <- apt %>% 
      group_by(단지명) %>% 
      count()
  
# 어 데이터가 
    apt_count %>% 
      ggplot(aes(n)) +
      geom_histogram()




그래프가 1000까지 눈금이 그려진 이유는 최대 값이 1,000건 값이 있다는 것이다. 

즉 동이 다른데,  단지명이 같은 곳이 많다는 것이다.  그래서 아래와  시군구로 바꾸고, 번지, 단지명도 그룹화 시키고  거래는 최소 7개 이상 하였다.   비교 할 수 있는 아파트가 적어 질 것 같다. 
   

2. 데이터 전처리 

 시군구, 번지, 단지명을 그룹화 시키고 연산 하려면,  코드화 시키는 것이 좋다.  

# 아파트 번호를 만듦
 apt <- apt_df
 apt_number <- apt %>% 
      group_by(시군구, 단지명, 번지) %>% 
      count()

 apt_number$NO <- as.character( c(1: nrow(apt_number)) + 10000)    
     
# 아파트 번호inner_join
 apt <- apt %>% 
     inner_join(apt_number, by = c("시군구", "번지", "단지명"))
 
 # 아파트 시군구 단지별 시리얼 번호를 만듦
 apt_df <- apt
 
# 데이터를 전처리 한다.  
  apt <- apt %>%
      group_by(NO, 계약일자) %>% 
      summarise(전용면적_m3 =sum(전용면적_m3),
                거래금액_만원 = sum(거래금액_만원),
                ) %>% 
      mutate(평당가격 = 거래금액_만원/(전용면적_m3/3.3)) %>% 
      mutate(계약일자 = as.Date(계약일자 , "%Y%m%d")) 
# 시군구 번지, 단지명에서 거래량이 7개 이상인 것으로 정리     
  apt_count <- apt %>% 
      group_by(NO) %>% 
      count()  %>% 
      filter( n > 6)
  
  
#  데이터 필터링  7개 이상인것 left_join
  apt <-  apt %>% 
      left_join(apt_count , by =c("NO")) %>%
      filter(!is.na(n))
       

 위와 같이 "시군구, 단지명, 번지"를 묶어서,  NO로 코드를 표준화 한다.   즉 서울에 있는 아파트를 표준화 하는 작업이다.    표준화 하면서 독립 적인 코드를 만들면,  위치도 정확 하게 추정할 수 있고,  가격에 대한 집계나 거래량도 정확하게 파악 할 수 있다. 
 
   기술적으로 설명하면,  아파트 "시군구, 단지명, 번지"를 그룹화 한 후에,  각각에 시리얼 번호를  1만 자리로 구하였다. 

그리고,   같은 날에 2번 이상 거래되는 단지가 있어서,  평당 정확한 거래단가를 구하기 위해 거래금액 과 전용면적을 더한 다음 평당 가격으로 나누었다. 

그런 다음 7개 이상인 것을 필터링 하였다.    

오늘은 여기 까지만 하고 다음 편을 계속 이어서 하겠다. 






댓글 없음:

댓글 쓰기

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

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