[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개 이상인 것을 필터링 하였다.    

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






댓글 없음:

댓글 쓰기

[주식 클로드 자동매매 프로젝트] 제2편. 데이터 인프라 구축 — 모델보다 데이터가 먼저다

 머신러닝 모델을 이야기하기 전에, 그 모델이 먹는 데이터가 어디서 어떻게 왔는지부터 정직하게 밝혀야 한다. 이 프로젝트에서 가장 많은 시간이 들어간 부분은 화려한 모델 튜닝이 아니라, "내가 정말 그 데이터를 갖고 있는가"를 확인하...