[파이썬 부동산] 아파트 거래량 그래프

이현지·2024년 8월 30일
0

데이터 분석

목록 보기
12/13

(시별 최근 3년 거래금액 top10 이어서 그대로 진행)

1. 동 기준 거래량

df1.head(20)

2. 거래금액 기준으로 확인하기

df2 = df1.groupby(['법정동']).count().sort_values(by='거래금액', ascending=False)[['거래금액']]
df2 = df2[df2['거래금액']>=1000]

df2

3.거래량 기준으로 확인하기

df2.columns = ['거래량']

df2

4. 설치

!pip install PublicDataReader

from PublicDataReader import HousingLicense

5. 데이터 추출

service_key = "키 입력"
api = HousingLicense(service_key)

dfa = api.get_data(
service_type="행위개요",
sigungu_code="41135",
bdong_code="11000",
bun="542",
ji="",
)

dfa.head(1)

6. 컬럼 확인

df.columns

단지 기본정보 엑셀파일 다운로드

https://www.k-apt.go.kr/web/board/webReference/boardView.do?seq=120501&boardSecret=0&boardType=03&pageNo=1&keyword=&board_pwd=&scodeT=01&_csrf=33a9ae7e-bb19-476f-bcdd-4351f2c327d0

7. 엑셀 불러오기

df02 = pd.readexcel('C:/Users/폴더~~~스/20240823단지_기본정보.xlsx', skiprows=1)

데이터프레임 확인하기

f02.head(20)

8. 원하는 열만 추출하기

df02 = df02[['시도', '시군구', '읍면', '동리', '단지명', '세대수']]

df02.head(20)

9. 동리별 세대수 확인

df02 = df02.groupby(['동리']).sum()[['세대수']]

df02

10. 이너조인

df3 = pd.merge(df2, df02, how = 'inner', left_on = df2.index, right_on = df02.index)

df3

11. 거래량비중 열 생성

df3['거래량비중'] = round((df3['거래량'] / df3['세대수'])*100, 2)

df3

12. 거래량비중 내림차순 정렬

df3 = df3.sort_values(by='거래량비중', ascending = False)

df3.head()

13. 세대수별 거래량비중 그래프 그리기

plt.figure(figsize=(20, 9))

제목 설정

plt.title('세대수별 거래량비중')

바플롯 그리기

barplot = sns.barplot(x='key_0', y='거래량비중', data=df3, palette=sns.color_palette('deep'))

각 바 위에 텍스트 레이블 추가

for bar in barplot.patches:

# 바의 높이
height = bar.get_height()
# 바의 x 위치
x = bar.get_x() + bar.get_width() / 2
# 텍스트 추가
plt.text(x, height + 0.5, f"{height:.2f}", ha='center', va='bottom', fontsize=9, color='blue')

x축 레이블 회전

plt.xticks(rotation=45)

plt.ylim(0, 15)

그래프 보여주기

plt.show()

14. 계약연도가 2023년인 데이터프레임 확인

df

a1 = df[df['계약년도']=='2023']

a1

15. 전용면적으로 평수 만들기 & 거래금액 데이터 정제

a1['전용면적'] = a1['전용면적'].apply(lambda x : float(x))

a1['평수'] = a1['전용면적'].apply(lambda x : x*0.3025)

a1['거래금액'] = a1['거래금액'].apply(lambda x : float(x.replace(',','')))

15. 법정동코드 관련 데이터프레임 만들기

a2 = a1[['거래금액','법정동시군구코드','평수','계약월']]

a2= pd.merge(a1, city, how='left', left_on=a1['법정동시군구코드'], right_on=city['법정동코드'])

a2.head()

16. 법정동주소, 계약월 기준 평수, 거래금액 합계

a3 = a2.groupby(['법정동주소', '계약월']).sum()[['평수','거래금액']]

a3.head()

17. 평당실거래가 생성

a3 = a3.reset_index()

a3['계약월'] = a3['계약월'].apply(lambda x : '0' + str(x) if int(x) < 10 else str(x))

a3['평당실거래가'] = round(a3['거래금액']/a3['평수'], 0)

a3['평당실거래가'] = a3['평당실거래가'].apply(lambda x : int(x))

a3 = a3.sort_values(by = '계약월', ascending=False)

a3

18. 데이터프레임 잡기

a3 = pd.DataFrame(a3.pivot_table(values='평당실거래가', index='법정동주소', columns='계약월'))

a3 = a3.astype('int')

19. 연도별 구별 아파트 평당 실 거래금액 그래프 생성

plt.rcParams['font.size'] = 12

plt.figure(figsize=(20, 11))

plt.rcParams['font.family'] = 'Malgun Gothic'

#dfct = pd.DataFrame(a3.pivot_table(values='평당실거래가', index='법정동주소', columns = '계약월'))
sns.heatmap(a3, cmap = 'Blues', annot=True, fmt='d')
plt.title('2023년 1월 ~ 12월 구별 아파트 평당 실 거래금액', fontsize = 18)

19. 데이터프레임 확인

a2.head()

a1.head()

20. 법정동주소, 계약월 기준 거래 발생건 세기(거래금액 기준)

a4 = a2.groupby(['법정동주소', '계약월']).count()[['거래금액']]

a4

병합한 것을 풀기 위해 리인덱스 과정을 거쳐야 함

a4 = a4.reset_index()

a4

21. 법정동 주소별 계약월, 거래건수 확인

a4['계약월'] = a4['계약월'].apply(lambda x : '0' + str(x) if int(x) < 10 else str(x))

계약월 값이 10보다 작으면 앞에 '0'을 붙여 두 자리 숫자로 만듦
예를 들어, 1월은 '01', 9월은 '09'로 변환됨
이미 두 자리인 경우 그대로 유지됨

a4 = a4.rename(columns={'거래금액':'거래건수'})

a4

  1. 거래량 그래프 생성
profile
관심분야: 추천시스템, 자연어처리, 머신러닝, 딥러닝

0개의 댓글