안녕하세요. DA ryan 입니다. 

데이터 분석에 대한 식견을 가지려면 타인이 분석한 것도 잘 파악해볼 필요가 있습니다. 
그래서 kaggle에 open data set을 가지고 분석한 결과물들중에 괜찮은 것을 함께 알아보려고 합니다 

그래서 처음에 고른 데이터는 멜번 부동산 데이터입니다. 
멜번도 집값이 어마어마하긴 마찬가지인데 데이터를 올린 사람이 아래와 같은 사항이 궁금하다고 합니다.

메인 명제
  1. 멜번에 부동산 가격 트렌드를 파악 혹은 예측 할수 있는가?
  2. 어떤 지역을 사는것이 가장 좋은 선택이 되는것인가?
  3. 어떤 부동산이 가장 가치가 있는 부동산인가?
  4. 어디가 상대적으로 비싼지역이고 어디가 싼 지역인가?
  5. 내가 방2개가 딸린 조건의 집을 사야만 하는가?

위의 명제들에 대한 해답을 가지기 위해서 데이터 제공자는 Domain.com.au 에서 데이터공개된 내용을 다운받아 클린징을 하고 최고의
데이터 셋을 만들기 위해서 노력했다고 합니다. 

데이터셋을 클린징 했다는 이야기는 결손값 (즉 데이터 내용이 없는 것들)을 제거하고 그리고 outliner(즉 이상치, 특이하게 평균보다 멀어서 평균을 높으거니 낮추는 것이라고 생각하시면 됩니다. 트랜드를 파악하기 위해서는 단순히 모든 데이터를 다 집어 넣고 분석하는 것도 좋을수 있지만, 주로 잘 일어나지 않을 것같은 이상치값은 빼고 분석하는게 좀더 정확하게 파악될수 있습니다. 마치 각 반의 학생들의 키를 확인할 때 최홍만 선수가 끼어 있으면 평균이 확올라가므로 최홍만 선수의 키값은 빼고 계산하면 어느정도 그 반의 키  평균이 정확히 파악되는 것과 같은 문제가 됩니다. 

이렇게 데이터 클린징 작업이 끝났으면 각 데이터의 열을 파악하는 것이 중요합니다. 
즉 데이터 내의 종류를 파악해서 각각의 데이터 종류를 파악하는 것이 좋습니다. 

그래서 열을 확인해보면 

Suburb: 도시 외곽지역 이름 
Address: 주소
Rooms: 방의 갯수
Price: 호주 달러 가격

여기서 잠깐 호주 부동산 거래방법에 대한 알아볼 필요가 있습니다. 호주에서는 크게 우리가 하는 계약, 그리고 경매를 통해 부동산을 넘기는 경우가 있습니다. 부동산 경매는 우리나라에서는 부동산을 가진 사람이 보통 망한 경우에만 사용하는 경우가 빈번한데, 호주에서는 특별히 망하지 않고 보통 특정시기에는 꼭 팔아야 겠다 하고 생각되면 바로 경매에 넣는다고 합니다. 

Method: S - property sold(부동산 판매완료)
            SP - property sold prior(부동산 경매전 판매완료)
            PI - property passed in(부동산 경매 유찰됨 즉 경매에 내놓았는데 팔리지 않음)
            PN - sold prior not disclosed(경매 이전 비공개 판매완료)
            SN - sold not disclosed(비공개 판매완료)
            NB - no bid(팔리지 않으나 경매에 내놓지 않음, 역자추정)
            VB - vendor bid(경매관리인 경매 후 판매)
            W - withdrawn prior to auction(경매중 팔림)
            SA - sold after auction(경매 후 팔림)
            SS - sold after auction price not disclosed. (경매후 비공개판매)
            N/A - price or highest bid not available.

Type: br - bedroom(s) 침실만 렌트
          h - house,cottage,villa, semi,terrace(집 구매)
          u - unit, duplex(복층 구조)
          t - townhouse(타운하우스)
         dev site - development site(개발 지역, 데이터샘플내 없음)
         res - other residential(기타 )

SellerG: Real Estate Agent(부동산 중계인 이름)
Date: Date sold(거래된 날짜)
Distance: Distance from CBD( C.B.D.)(시내로 부터 떨어진 거리)



import pandas as pd
import numpy as np
%matplotlib inline
import seaborn as sns
import matplotlib.pyplot as plt
dataframe =  pd.read_csv("Melbourne_housing_extra_data.csv")
dataframe.head()  ##<-데이터 확인

dataframe["Date"] = pd.to_datetime(dataframe["Date"],dayfirst=True)
## 글자형태의 날짜 데이터를 날짜 데이터로 바꿈 , dayfirst는 영국 및 유럽국가의 중 날짜 먼저쓰는 방식인지 물어보는 것에 true를 적어준것)

len(dataframe["Date"].unique())/4
##len은 리스트 사이즈 구함, .unique() 중복 방지를 의미 . 중복되지 않은 날짜 갯수를 구하고 4로 나눔

var = dataframe[dataframe["Type"]=="h"].sort_values("Date", ascending=False).groupby("Date").std()
var
##데이터 중에 Type이 h 즉 보통 하우스 만 간추려서, Date기준으로 내림차순하여 표준편차를 구하고 그것을 화면에 출력


위와같은 화면이 나옵니다. 

count = dataframe[dataframe["Type"]=="h"].sort_values("Date", ascending=False).groupby("Date").count()
mean = dataframe[dataframe["Type"]=="h"].sort_values("Date", ascending=False).groupby("Date").mean()
#같은 형태로 날짜기준으로 수량, 평균을 구하였습니다.

mean["Price"].plot(yerr=var["Price"],ylim=(400000,1500000))
#가격의 평균값을 날짜별로 그리고, 표준편차를 그림에 표현하여 봤습니다. 




mean["Price"].plot(ylim=(1000000,1500000))
#이번에는 표준편차를 빼고 평균 가격만 날짜별로 정렬하였습니다.


이표를 보았을때는 근교지역이라도 평균 거래 금액이 1년동안 증가되는 추세가 보입니다. 
그리고 특히 2월 8월이 비수기에 속하고 연말이 성수기에 속한다고 할수도 있을 것이라 봅니다. 
하지만 5년정도의 가격 트랜드를 보아야 더 정확하게 이야기 할수 있을것 같습니다. 
이것은 그냥 1년단위므로 일단 그런정도라고 생각하면 될 듯합니다.

means = dataframe[(dataframe["Type"]=="h") & (dataframe["Distance"]<13)].dropna().sort_values("Date", ascending=False).groupby("Date").mean()
#이것은 집 형태가 h이고 시내와 거리가 13키로 이내이며, 결손값은 버린값들만 평균을 내보겠습니다.

errors = dataframe[(dataframe["Type"]=="h") & (dataframe["Distance"]<13)].dropna().sort_values("Date", ascending=False).groupby("Date").std()
#이것은 집 형태가 h이고 시내와 거리가 13키로 이내이며, 결손값은 버린값들만 표준편차을 내보겠습니다.


means["Price"].plot(yerr=errors["Price"])
# 집 형태가 h이고 시내와 거리가 13키로 이내인 집들을 날짜 기준으로 가격평균, 그리고 가격 표준편차를 그래프로 그려보았습니다.


이표를 보면 시내에서 13키로 이내인 집들의 거래 가격이 점점 높아져가고 있다고 보입니다.

pd.set_eng_float_format(accuracy=1, use_eng_prefix=True)
dataframe[(dataframe["Type"]=="h") &
          (dataframe["Distance"]<14) &
          (dataframe["Distance"]>13.7)
          #&(dataframe["Suburb"] =="Northcote")
         ].sort_values("Date", ascending=False).dropna().groupby(["Suburb","SellerG"]).mean()
# 이번에는 지역별, 부동산 중개인별 , 13.7키로 초과 14키로 미만 인 거리의 집들 가격만 평균을 내봤습니다. 다음과 같습니다.





sns.kdeplot(dataframe[(dataframe["Suburb"]=="Northcote")
         & (dataframe["Type"]=="u")
         & (dataframe["Rooms"] == 2)]["Price"])
#kdeplot은 도수분포도를 볼수 있는 그래프를 그려줍니다. 
#따라서 위의 명령어로는 지역이 Northcote이고, 집 타입이 복층형인 방2개인 집의 가격 도수분포도를 볼수 있게 됩니다.


위의 표를 보았을때 가장 많이 일어나는 가격은 60000 호주달러이고 그 기준에 따라서 표준정규 분포를 비슷하게 따른다는 것을 볼수 있게 됩니다.

sns.kdeplot(dataframe["Price"][((dataframe["Type"]=="u") &
                                (dataframe["Distance"]>3) &
                                (dataframe["Distance"]<10) &
                                (dataframe["Rooms"] > 2)#&
                                #(dataframe["Price"] < 1000000)
                               )])
#이번에는 3키로 초과 10키로 미만인 방3개이상인 집들 중 100만 호주 달러 미만의 집들의 가격분포도를 그려봅니다.

3키로 초과 10키로 미만인 방3개이상인 집들 중 100만 호주 달러 미만의 집들의 가격분포도를 보면
평균가격은  7만호주달러가 있고 그 이상으로 거래 했을 경우에는 비싸다 , 그 이하로 거래했을 경우에는 저렴하다고 이야기 할수 
있을것 같습니다. 


sns.lmplot("Distance","Price",dataframe[(dataframe["Rooms"]<=4) &
                                         (dataframe["Rooms"]> 2) &
                                        (dataframe["Type"]=="h") &
                                        (dataframe["Price"]< 1000000)
                                       ].dropna(),hue="Rooms", size=6)

#lmplot은 산포도에 직선을 그어서 추세선을 확인할수 있게 만들어 줍니다. 
#위의 코드는 보통의 집 타입에서, 가격이 100만호주달러 미만이고,
#방의 숫자가 3개와, 4개인 데이터의 가격과 거리 기준으로 산포도를 그린후에 추세선을 그려보아라는 명령어입니다.


위의 그래프는 보통의 집 타입에서, 가격이 100만호주달러 미만이고,
방의 숫자가 3개와, 4개인 데이터의 가격과 거리 기준으로 산포도를 그린후에 추세선을 그린 것입니다.

거리가 멀수록 가격이 싸지는 것은 당연한 이치이고
시내랑 가까울경우에는 방이 3개든 4개든 큰차이가 없음을 시사해줍니다.
따라서 시내 가까운곳일수록 긑은 예산으로 4개의 방을 구해봄도 괜찮을 듯 합니다.



데이터,코드 출처 사이트 :


+ Recent posts