부동산 거래량

2018년부터 현재까지도 부동산 거래량과 평균 거래 금액에 대해 알아본다.

  • 이 곳에서는 부동산 거래량과 평균 거래 금액의 추이를 광역시 별로 살펴보는 시간을 가져보도록 한다. 
  • 부동산 거래량은 부동산 실거래가 사이트(http://rtdown.molit.go.kr)에서 받을 수 있다. 
  • 이번 것은 2019.06.25일 받은 자료를 바탕으로 작성하였다. 
  • 부동산 실거래는 거래 계약일 기준으로 등록하게 되어 있으며, 계약일과 신고일 차이로 2019년 4, 5월 건의 경우 실제 계약 건수와 차이가 있을 수 있다. 

결론

2019년 3~5월간 서울과 세종의 부동산 평균 거래가가 매우 증가하고 있음을 알 수 있다.

  • 거래량은 줄어드는 것처럼 보이나 4,5월 거래량이 아직 집계가 되지 않았음을 감암해야 한다. 
  • 서울 집값 상승은 뉴스를 통해 알 수 있으나, 세종 집값에 대해서는 분석이 필요해 보인다. 

1. 준비

맥에서 자모 분리되는 문제로 폰트를 변경해 준다.

2. Data prepation

다운 받은 데이터를 csv file format으로 변경해서 저장한다.

duplicated mon: [201903] [201903, 201904, 201905] duplicated mon: [201904] [201903, 201904, 201905, 201812, 201811, 201810, 201805, 201803, 201804, 201806, 201808, 201901]

Out[33]:

(652278, 13)

Out[34]:

시군구번지본번부번단지명전용면적(㎡)계약년월계약일거래금액(만원)층건축년도도로명광역시01234

강원도 강릉시 견소동 202 202 0 송정한신 59.800 201903 7 11800 8 1997 경강로2539번길 강원도
강원도 강릉시 견소동 202 202 0 송정한신 59.800 201903 11 10500 13 1997 경강로2539번길 강원도
강원도 강릉시 견소동 202 202 0 송정한신 84.945 201903 14 14000 4 1997 경강로2539번길 강원도
강원도 강릉시 견소동 289 289 0 송정해변신도브래뉴아파트 84.990 201903 2 27500 12 2005 경강로2539번길 강원도
강원도 강릉시 견소동 289 289 0 송정해변신도브래뉴아파트 59.990 201903 7 16300 9 2005 경강로2539번길 강원도
  • 광역시 별로 분류할 수 있게 준비했다. 

Out[35]:

array(['강원도', '경기도', '경상남도', '경상북도', '광주광역시', '대구광역시', '대전광역시', '부산광역시', '서울특별시', '세종특별자치시', '울산광역시', '인천광역시', '전라남도', '전라북도', '제주특별자치도', '충청남도', '충청북도'], dtype=object)

3. 거래량.

  • 2019년 1월까지 떨어지던 거래량이 살짝 오르고 있다. 
  • 신고일의 차이로 4,5월의 실거래량은 완전하지 않다. 

4. 평균 거래금액

  • '19년 초반부터 서울의 평균 집값이 오르고 있다. 
  • 세종도 서울을 따라 오르고 있다. 

 

 

 

 

부동산 거래량

2018년도 부동산 거래량에 대해 알아본다.

  • 부동산 거래량은 부동산 실거래가 사이트에서 받을 수 있다.
  • 이 곳에서는 부동산 거래량과 평균 거래 금액의 추이를 광역시 별로 살펴보는 시간을 가져보도록 한다.
In [20]:
#-*- encoding: utf8 -*-
import os
import glob
import pandas as pd
import matplotlib.pyplot as plt
import unicodedata

import matplotlib
 

1. 준비

맥에서 자모 분리되는 문제로 폰트를 변경해 준다.

In [21]:
matplotlib.rc('font', family='AppleGothic')
 

2. Data prepation

다운 받은 데이터를 csv file format으로 변경해서 저장한다.

In [23]:
!ls trade/*.csv
 
trade/all_201801_아파트(매매)_실거래가_20190407180211.csv
trade/all_201802_아파트(매매)_실거래가_20190407180234.csv
trade/all_201803_아파트(매매)_실거래가_20190407180301.csv
trade/all_201804_아파트(매매)_실거래가_20190407180321.csv
trade/all_201805_아파트(매매)_실거래가_20190407180347.csv
trade/all_201806_아파트(매매)_실거래가_20190407180409.csv
trade/all_201807_아파트(매매)_실거래가_20190407180427 2.csv
trade/all_201808_아파트(매매)_실거래가_20190407180445.csv
trade/all_201809_아파트(매매)_실거래가_20190407180506.csv
trade/all_201810_아파트(매매)_실거래가_20190407180528.csv
trade/all_201811_아파트(매매)_실거래가_20190407180544.csv
trade/all_201812_아파트(매매)_실거래가_20190407180604.csv
trade/all_201901_아파트(매매)_실거래가_20190407175942.csv
trade/all_201902_아파트(매매)_실거래가_20190407175914.csv
trade/all_201903_아파트(매매)_실거래가_20190407173819.csv
In [67]:
def load_data_all(path):
    filenames = glob.glob(os.path.join(path, '*.csv'))
    ret = []

    for fname in filenames:
        dft = pd.read_csv(fname)
        dft.columns = dft.columns.str.normalize('NFC')
        dft['거래금액(만원)'] = dft['거래금액(만원)'].str.replace(',', '')# extract('(\d+),(\d+)')
        dft['거래금액(만원)'] =  pd.to_numeric(dft['거래금액(만원)'])
        dft['광역시'] = dft['시군구'].map(lambda x: x.split(' ')[0])
        ret.append(dft)
    return pd.concat( ret)
In [31]:
df = load_data_all('./trade/')
In [32]:
df.shape
Out[32]:
(576864, 13)
In [33]:
df.head()
Out[33]:
  시군구 번지 본번 부번 단지명 전용면적(㎡) 계약년월 계약일 거래금액(만원) 건축년도 도로명 광역시
0 강원도 강릉시 견소동 289 289 0 송정해변신도브래뉴아파트 59.9900 201811 11~20 16250 11 2005 경강로2539번길 강원도
1 강원도 강릉시 견소동 289 289 0 송정해변신도브래뉴아파트 59.9900 201811 21~30 17500 9 2005 경강로2539번길 강원도
2 강원도 강릉시 견소동 289 289 0 송정해변신도브래뉴아파트 59.9900 201811 21~30 17500 11 2005 경강로2539번길 강원도
3 강원도 강릉시 교동 1982 1982 0 강릉교동롯데캐슬1단지 135.1727 201811 1~10 35000 7 2009 화부산로99번길 강원도
4 강원도 강릉시 교동 1982 1982 0 강릉교동롯데캐슬1단지 163.9852 201811 21~30 41000 13 2009 화부산로99번길 강원도
 
  • 광역시 별로 분류할 수 있게 준비했다.
In [36]:
df['광역시'].unique()
Out[36]:
array(['강원도', '경기도', '경상남도', '경상북도', '광주광역시', '대구광역시', '대전광역시', '부산광역시',
       '서울특별시', '세종특별자치시', '울산광역시', '인천광역시', '전라남도', '전라북도', '제주특별자치도',
       '충청남도', '충청북도'], dtype=object)
 

3. 거래량을 Plot해 본다.

In [48]:
def cal_volume_all(df_all):
    data = {}

    for key, dft in df_all.groupby('광역시'): # .items():
        data[key] = dft.groupby('계약년월').count()['시군구']
    df_count = pd.DataFrame(data)
    df_count.index = pd.to_datetime(df_count.index, format='%Y%m')
    
    return df_count
In [49]:
dfvol = cal_volume_all(df)
In [54]:
dfvol2 = dfvol / dfvol.iloc[0]
In [59]:
figsize = (12, 8)
In [60]:
dfvol2.plot(figsize=figsize)
Out[60]:
<matplotlib.axes._subplots.AxesSubplot at 0x118db6fd0>
 
 

4. 평균 거래량을 plot 해 본다.

In [68]:
def cal_mean_all(df_all):
    data = {}

    for key, dft in df_all.groupby('광역시'): 
        data[key] = dft[['계약년월', '거래금액(만원)']].groupby('계약년월').mean()['거래금액(만원)']
    df_mean = pd.DataFrame(data)
    df_mean.index = pd.to_datetime(df_mean.index, format='%Y%m')
    
    return df_mean
In [64]:
df_mean = cal_mean_all(df)
In [65]:
df_mean2 = df_mean / df_mean.iloc[0]
In [66]:
df_mean2.plot(figsize=figsize)
Out[66]:
<matplotlib.axes._subplots.AxesSubplot at 0x116c77898>
 

부동산 거래량

In [102]:
#-*- encoding: utf8 -*-
import os
import glob
import pandas as pd
import matplotlib.pyplot as plt
import unicodedata
In [103]:
import matplotlib
In [104]:
matplotlib.rc('font', family='AppleGothic')
In [193]:
def load_data(path):
    filenames = glob.glob(os.path.join(path, '*.csv'))
    ret = {}

    for fname in filenames:
        dft = pd.read_csv(fname)
        dft.columns = dft.columns.str.normalize('NFC')
        dft['거래금액(만원)'] = dft['거래금액(만원)'].str.replace(',', '')# extract('(\d+),(\d+)')
        dft['거래금액(만원)'] =  pd.to_numeric(dft['거래금액(만원)'])
        
        dname = fname.split('_')[0].split('/')[-1]
        ret[unicodedata.normalize('NFC', dname)] = dft
    return ret
In [194]:
df_dict = load_data('./trade/')
In [195]:
df_dict['서울'].head(3)
Out[195]:
시군구번지본번부번단지명전용면적(㎡)계약년월계약일거래금액(만원)건축년도도로명
0서울특별시 강남구 개포동658-16581개포6차우성아파트1동~8동79.9720180311~2013950021987언주로
1서울특별시 강남구 개포동658-16581개포6차우성아파트1동~8동54.982018041~1010750051987언주로
2서울특별시 강남구 개포동658-16581개포6차우성아파트1동~8동79.9720180621~3014500031987언주로
In [117]:
def cal_volume(data_dict):
    data = {}

    for key, dft in data_dict.items():
        data[key] = dft.groupby('계약년월').count()['시군구']
    df_count = pd.DataFrame(data)
    df_count.index = pd.to_datetime(df_count.index, format='%Y%m')
    
    return df_count
In [181]:
def cal_mean(data_dict):
    data = {}

    for key, dft in data_dict.items():
#         print(key)
        data[key] = dft[['계약년월', '거래금액(만원)']].groupby('계약년월').mean()['거래금액(만원)']
#     print(data)
    df_mean = pd.DataFrame(data)
    df_mean.index = pd.to_datetime(df_count.index, format='%Y%m')
    
    return df_mean
In [182]:
dfm = cal_mean(df_dict)
In [183]:
dfm
Out[183]:
경기도광주대구대전서울세종제주
계약년월
2018-03-0136157.29706221204.75464129619.06684122587.75254158728.30103232115.32150326638.266094
2018-04-0134924.96661521097.41219028412.40000022638.45281559856.12597531344.01901123813.879808
2018-05-0134452.95729821713.17541328147.34357022624.98096058969.57206731319.11550223434.927203
2018-06-0135404.03038622061.33698924812.81532622865.25966960210.09130931707.82700425095.180412
2018-07-0137705.97606721510.79766728311.54908923717.25456169906.17245331106.84090926684.820988
2018-08-0143247.27288723409.42218630673.88011827009.36391871688.79425331176.22488029121.371429
2018-09-0136653.89902322592.55984731996.98064926715.61750770335.15124232985.49253728613.664596
2018-10-0134506.45115420914.07618729582.40516126299.34637565617.93476331874.18431426417.256917
2018-11-0133816.16920320567.57067426999.50729325586.32973964199.91460732410.86065627265.452991
2018-12-0133667.32935020395.16942127599.82996922437.41032861598.97557829167.44186026439.788462
2019-01-0133166.54447019968.00777725912.95327723271.17946861272.51717830323.49090925148.101695
2019-02-0131301.96731718640.09655823383.78715221913.49541354783.57880127449.39877322897.721519
In [191]:
dfm2 = dfm / dfm.iloc[0]
dfm2.plot(figsize=(15,8), title='평균 거래 금액')
Out[191]:
<matplotlib.axes._subplots.AxesSubplot at 0x1113437f0>
In [188]:
df_count = cal_volume(df_dict)
In [192]:
df_count_nor = df_count / df_count.iloc[0]
df_count_nor.plot(figsize=(15,8), title='거래량')
Out[192]:
<matplotlib.axes._subplots.AxesSubplot at 0x113e39b00>


+ Recent posts