/////
Search

PPT제작

Tags
Archive
ETA
2025/11/25 → 2025/11/27
Main Task
Sub Task
담당자
메모
상태
Not started
생성 일시
2025/11/19 07:40
생성자
우선 순위
진행률 %
Task :
데이터 소개
1.
데이터 출처 : 서울 열린데이터 광장의 부동산 실거래가 정보에 제공된 데이터
2.
2018 ~ 2024년 7개년 데이터, 모든 테이블의 컬럼이 같아 CONCAT 함수를 사용하여 병합
필요한 컬럼 선정
본 프로젝트의 핵심 목표인 페르소나별 아파트 매물 추천을 위해 필요한 컬럼 선정
[전체 데이터 행렬 : 833,614 x 21]
column
non-null count
dtype
접수연도
833,614
int64
자치구코드
833,614
int64
자치구명
833,613
object
법정동코드
833,614
int64
법정동명
833,614
object
지번구분
776,043
float64
지번구분명
776,043
object
본번
776,052
object
부번
776,052
object
건물명
776,065
object
계약일
833,614
int64
물건금액(만원)
833,614
int64
건물면적(㎡)
833,614
float64
토지면적(㎡)
668,824
float64
776,119
float64
권리구분
7,614
object
취소일
25,541
float64
건축년도
830,198
float64
건물용도
833,614
object
신고구분
225,344
object
신고한 개업공인중개사 시군구명
183,916
object
데이터 전처리
데이터 필터링
건물 용도가 아파트 : 아파트 매물 추천 목적에 맞게 건물 용도를 아파트로만 필터링
계약일 2017년 이후 : 가계약 고려
# 아파트로만 필터링 df_2018_2024 = df_2018_2024[df_2018_2024['건물용도'] == '아파트'].copy() # 계약 연도가 2017년부터 df_2018_2024 = df_2018_2024[df_2018_2024['계약일'] >= 20170101].copy()
Python
복사
필터링 이후
[전체 데이터 행렬 : 393,345 x 12]
column
non-null count
dtype
자치구명
393,344
object
법정동명
393,345
object
본번
393,298
object
부번
393,298
object
건물명
393,345
object
계약일
393,345
int64
물건금액(만원)
393,345
int64
건물면적(㎡)
393,345
float64
393,345
float64
취소일
8,598
float64
건축년도
393,343
float64
건물용도
393,345
object
결측치 확인
취소일의 결측치는 실제 계약이 되었다고 판단할 수 있는 기준이 되기 때문에 제거하면 안됨
column
non-null count
dtype
자치구명
393,344
object
법정동명
393,345
object
본번
393,298
object
부번
393,298
object
건물명
393,345
object
계약일
393,345
int64
물건금액(만원)
393,345
int64
건물면적(㎡)
393,345
float64
393,345
float64
취소일
8,598
float64
건축년도
393,343
float64
건물용도
393,345
object
결측치 처리
자치구명, 본번, 건축년도 결측치 제거 : 부번은 본번 결측치 제거시 함께 사라짐
# 본번 결측치 제거 df_2018_2024 = df_2018_2024[df_2018_2024['본번'].notna()].copy() # 건축년도 결측치 제거 df_2018_2024 = df_2018_2024[df_2018_2024['건축년도'].notna()].copy() # 자치구명 결측치 제거 df_2018_2024 = df_2018_2024[df_2018_2024['자치구명'].notna()].copy()
Python
복사
결측치 처리 이후
[데이터 전체 행렬 개수 : 393,295 x 12]
column
non-null count
dtype
자치구명
393,295
object
법정동명
393,295
object
본번
393,295
object
부번
393,295
object
건물명
393,295
object
계약일
393,295
int64
물건금액(만원)
393,295
int64
건물면적(㎡)
393,295
float64
393,295
float64
취소일
8,598
float64
건축년도
393,295
float64
건물용도
393,295
object
이상치 처리
건축년도, 본번, 건물 면적(㎡), 물건금액(만원)이 0인 경우 제외
취소일에 값이 있는 경우 제외
아파트의 층수가 1층 미만인 경우 제외
# 건축년도 0 제외 df_2018_2024 = df_2018_2024[df_2018_2024['건축년도'] != 0].copy() # 본번 0 제외 df_2018_2024['본번'] = df_2018_2024['본번'].astype(int) df_2018_2024 = df_2018_2024[df_2018_2024['본번'] != 0].copy() # 건물면적 0 제외 df_2018_2024 = df_2018_2024[df_2018_2024['건물면적(㎡)'] != 0.0].copy() # 물건금액 0 제외 df_2018_2024 = df_2018_2024[df_2018_2024['물건금액(만원)'] != 0].copy() # 취소일이 null인 경우 df_2018_2024 = df_2018_2024[df_2018_2024['취소일'].isnull()].copy() # 아파트 층수가 1층 이상 df_2018_2024 = df_2018_2024[df_2018_2024['층'] > 0].copy()
Python
복사
이상치 처리 이후
[데이터 전체 행렬 개수 : 377,199 x 12]
column
non-null count
dtype
자치구명
377,199
object
법정동명
377,199
object
본번
377,199
int64
부번
377,199
object
건물명
377,199
object
계약일
377,199
int64
물건금액(만원)
377,199
int64
건물면적(㎡)
377,199
float64
377,199
float64
취소일
0
float64
건축년도
377,199
float64
건물용도
377,199
object
파생 변수 생성
계약 연도 : 계약 연도별로 가격 확인을 위함(계약일에서 연도만 추출)
평수(평) : 부동산 시장에서 통용되는 단위인 '평'으로 변환함과 동시에 평당가를 구하기 위함
평당가(만원) : 서로 다른 규모의 매물들을 동일 선상에서 비교하여 가치를 평가하기 위함
주소 : 시군구 본-부번의 형태의 데이터로 GIS 시각화를 위함
# 계약 연도 컬럼 추가 ## 계약일 -> 계약 연도 컬럼 추가(int 타입) df_2018_2024['계약 연도'] = df_2018_2024['계약일'] // 10000 ## 계약일 컬럼 제거 df_2018_2024 = df_2018_2024.drop('계약일', axis=1) # 평수 컬럼 추가(정수까지 반올림해서 int화) df_2018_2024['평수(평)'] = round(df_2018_2024['건물면적(㎡)'] / 3.3) df_2018_2024['평수(평)'] = df_2018_2024['평수(평)'].astype(int) # 평당가 계산(정수까지 반올림해서 int화) df_2018_2024['평당가(만원)'] = round(df_2018_2024['물건금액(만원)']/ df_2018_2024['평수(평)']) df_2018_2024['평당가(만원)'] = df_2018_2024['평당가(만원)'].astype(int) # 주소 컬럼 추가 ## 서울특별시를 시명으로 추가 df_2018_2024['시명'] = "서울특별시" ## 부번 정수화 df_2018_2024['부번'] = df_2018_2024['부번'].astype(int) ## 부번 0 -> Null 처리 df_2018_2024['부번'] = df_2018_2024['부번'].replace(0, None) ## 주소 컬럼 생성 main_num = df_2018_2024['본번'].fillna(0).astype(float).astype(int).astype(str) sub_num = df_2018_2024['부번'].fillna(0).astype(float).astype(int).astype(str) hyphen_str = np.where((df_2018_2024['부번'].isna()) | (df_2018_2024['부번'] == 0), "", "-" + sub_num) df_2018_2024['주소'] = (df_2018_2024['시명'].fillna('') + ' ' + df_2018_2024['자치구명'].fillna('') + ' ' + df_2018_2024['법정동명'].fillna('') + ' ' + main_num + hyphen_str)
Python
복사
파생변수 생성 이후
[데이터 전체 행렬 개수 : 377,199 x 16]
column
non-null count
dtype
자치구명
377,199
object
법정동명
377,199
object
본번
377,199
int64
부번
97,807
object
건물명
377,199
object
물건금액(만원)
377,199
int64
건물면적(㎡)
377,199
float64
377,199
float64
취소일
0
float64
건축년도
377,199
float64
건물용도
377,199
object
계약 연도
377,199
int64
평수(평)
377,199
int64
평당가 (만원)
377,199
int64
시명
377,199
object
주소
377,199
object
데이터 검토
층, 건축년도 int화
컬럼, 인덱스 정렬
# 층 int화 df_2018_2024['층'] = df_2018_2024['층'].astype(int) # 건축년도 int화 df_2018_2024['건축년도'] = df_2018_2024['건축년도'].astype(int) # 최종 정렬 df_2018_2024 = df_2018_2024[['계약 연도', '시명', '자치구명', '법정동명', '본번', '부번', '주소', '건물명', '물건금액(만원)', '건물면적(㎡)', '평단가(만원)', '평수(평)', '층', '취소일', '건축년도', '건물용도']] # 인덱스 번호 정렬 df_2018_2024 = df_2018_2024.reset_index(drop=True)
Python
복사
최종 검토 이후
[데이터 전체 행렬 개수 : 377,199 x 16]
column
non-null count
dtype
계약 연도
377,199
int64
시명
377,199
object
자치구명
377,199
object
법정동명
377,199
object
본번
377,199
int64
부번
377,199
object
주소
377,199
object
건물명
377,199
object
물건금액 (만원)
377,199
int64
건물면적(㎡)
377,199
float64
평당가 (만원)
377,199
int64
평수(평)
377,199
int64
377,199
int64
취소일
0
float64
건축년도
377,199
int64
건물용도
377,199
object
외부 데이터를 활용해 컬럼 추가 및 전처리
lat, lng : 위경도 좌표 ← 이 부분은 경원님에게 물어보시면 좋을 것 같아요
실행 및 진행 사항 정리
결과