주제

2차 프로젝트 진행

 

2일차

  • 프로젝트의 문제 정의 : 서울의 어느 구역이 아파트 투자 가치가 높은가?
  • 투자 가치가 높은 지역에 대한 인사이트 도출이 목적
  • 거래금액 상승과 관련이 있는 지표들을 5가지 뽑아 각자 시각화 시도
  • 내가 맡은 부분은 지역 별 거래된 아파트의 평균 건축년도를 계산하고 시각화하는 것
  • 건축년도는 어떤 지역에서 더 많은 신축 아파트가 세워지고 거래되는지, 어느 구역이 노후되었는지의 지표가 될 수 있음.
  • 혹은 건축년도가 오래된 아파트가 많은 지역은 재개발이 예정되어있을수도 있다 -> 투자 가치가 있다

 

 

데이터 정리

  • 아침 회의 때 데이터가 너무 많은 관계로 서울특별시로만 한정하기로 결정
  • 전처리 담당 팀원이 전처리를 진행하여 정리된 csv파일 공유
  • 약 5백만 개의 데이터에서 60만 개로 줄었다
  • 지번 컬럼은 사용하지 않기로 결정 -> 삭제
  • 최고 거래금액 아파트를 조회하니 같은 데이터가 중복된 것을 확인, 하나만 삭제
  • 지역코드를 한글로 바꾸는 과정을 거침
    • 예. 11100번은 서울시 종로구

전처리 후 데이터의 모습

 

 

구 별 건축년도 평균 구하기

  • 시각화에 필요한 데이터를 정제하기 전, 내가 이 과정에서 얻고자 하는 것이 무엇인지 정리
    • 신축 아파트와 구축 아파트의 거래 실황(매매가 활발하게 이루어지는지?)
    • 건축년도를 범주화해서 시각화하기
  • 우선 내가 필요한 것은 [지역명]과 [건축년도] 컬럼이니 그것만 담은 mask를 생성하였다
# 구별 평균 건축년도
construct_by_district = df.groupby(by=['지역명']).agg({'건축년도':'mean'}).reset_index()
construct_by_district.sort_values(by=['지역명'], inplace=True)
  • 지역명으로 그룹화를 한 후, 건축년도의 평균을 계산하여 새로운 변수에 데이터 프레임을 생성
  • 지역명이 너무 길어서 시각화할 때 불편할 것을 예상하여, '서울시'는 빼기로 결정
construct_by_district['지역명'] = construct_by_district['지역명'].str.replace('서울시', '')

정리된 지역명

  • 이제 이 데이터를 가지고 시각화를 진행
  • x축에는 지역명이, y축에는 평균 건축년도를 두고 플롯을 짰다.
# 맷플롯립은 한글 지원이 되지 않기 때문에 인코딩 필요(Mac 버전)
from matplotlib import rc
rc('font', family='AppleGothic')

# 플롯
x = construct_by_district['지역명']
y = construct_by_district['건축년도']

plt.figure(figsize=(12, 6))
sns.barplot(x=x, y=y)

plt.title('서울특별시 구별 아파트 평균 건축년도')
plt.xlabel('서울 특별시 구')
plt.ylabel('평균 건축년도')
plt.ylim(1990, 2010)
plt.xticks(rotation=45)

plt.show()

서울의 구 별 거래된 아파트의 평균 건축년도

  • 노원구와 도봉구의 아파트들이 제일 오래된 것을 알 수 있다.
  • 평균 건축년도가 가장 높은 지역은 은평구였다.

 

건축년도 별 평균 거래금액 구하기

  • 위의 그래프를 보니 평균 거래금액도 같이 보고 싶다는 생각이 들었다.
  • 따라서 건축년도를 10년씩 나눠서 범주화한 후, 그에 대한 평균 거래금액을 구해보기로 했다
  • 우선 원본 데이터에서 [지역명], [건축년도], [거래금액]만을 가져왔다
construct_cost = df[['지역명', '건축년도', '거래금액']]
  • 그 다음에는 건축년도를 범주화하기 위한 함수를 만들었다
    • 10년씩 끊어서 60년대부터 2020년대까지 카테고리화시킬 함수
def categorize_year(year):
    if 1960 <= year < 1970:
        return '1960년대'
    elif 1970 <= year < 1980:
        return '1970년대'
    elif 1980 <= year < 1990:
        return '1980년대'
    elif 1990 <= year < 2000:
        return '1990년대'
    elif 2000 <= year < 2010:
        return '2000년대'
    elif 2010 <= year < 2020:
        return '2010년대'
    else:
        return '2020년대'
  • 이 함수를 apply()를 통해서 데이터에 적용했다
year_data['건축년도'] = year_data['건축년도'].apply(categorize_year)
year_data.head(20)

건축년도가 범주화된 모습

  • 이제 지역명과 건축년도 별로 그룹화를 한 후 평균 거래금액을 구했다
annual_mean = year_data.groupby(by=['지역명', '건축년도']).agg({'거래금액': 'mean'}).round(2).reset_index()

결과

  • 이제 필요한 정리는 모두 끝났다. 시각화만 진행하면 된다.
  • 우선 대표로 강남구에 대한 데이터를 시각화해봤다.
# 강남구의 건축년도별 평균 거래금액

rc('font', family='AppleGothic')

x = gangnam_mask['건축년도']
y = gangnam_mask['거래금액']

plt.figure(figsize=(9,6))
sns.barplot(x=x, y=y, palette='pastel')

plt.title('서울특별시 강남구 아파트의 건축년도별 평균 거래금액')
plt.xlabel('건축년도')
plt.ylabel('평균 거래금액[단위:만원]')
plt.ylim(90000, 300000)

plt.show()

강남구의 건축년도 별 평균 거래금액

  • 잘 나오는 것을 확인하고, 이제 원하는 구 별로 데이터를 시각화할 수 있게 됐다
  • 서울에는 총 25개의 구가 있으니 5x5 그리드를 이용해서 모든 구의 그래프를 한번에 볼 수 있도록 하고 싶었지만, x축의 레이블이 겹쳐서 아직 해결법을 찾지 못했다.
  • 그래프는 for문을 이용하여 그렸다
unique_regions = annual_mean['지역명'].unique()

fig, axes = plt.subplots(nrows=5, ncols=5, figsize=(15, 15))

axes = axes.flatten()

for i, region in enumerate(unique_regions):
    ax = axes[i]
    
    x = annual_mean[annual_mean['지역명'] == region]['건축년도']
    y = annual_mean[annual_mean['지역명'] == region]['거래금액']

    sns.barplot(x=x, y=y, palette='pastel', ax=ax)

    ax.set_title(f'{region}')
    ax.set_xlabel('건축년도')
    ax.set_ylabel('평균 거래금액[단위:만원]')

# 빈 subplot 숨기기
for i in range(len(unique_regions), len(axes)):
    fig.delaxes(axes[i])

plt.tight_layout()
plt.show()

결과

  • x축 문제만 해결한다면 한 눈에 볼 수 있는 좋은 그래프가 될 수 있을 것 같다.

+ Recent posts