[Today I Learn]
- 기초프로젝트 회의 및 전처리작업
[기초 프로젝트 전처리]
- 컬럼명 수정, 컬럼 삭제
import pandas as pd
# 1. 파일 불러오기 (인코딩은 상황에 맞게 'euc-kr' 또는 'utf-8' 선택)
# 구글 시트에서 저장한 파일이라면 보통 'utf-8'입니다.
df = pd.read_csv('data/real_estate_total.csv', encoding='cp949', parse_dates=["계약일"])
# 2. 변경할 컬럼 매핑 딕셔너리 생성
# { "기존 한글명": "변경할 영어명" }
rename_dict = {
"접수연도": "RCPT_YR",
"자치구코드": "CGG_CD", "자치구명": "CGG_NM",
"법정동코드": "STDG_CD", "법정동명": "STDG_NM",
"지번구분": "LOTNO_SE", "지번구분명": "LOTNO_SE_NM",
"본번": "MNO", "부번": "SNO",
"건물명": "BLDG_NM",
"계약일": "CTRT_DAY",
"물건금액(만원)": "THING_AMT",
"건물면적(㎡)": "ARCH_AREA", "토지면적(㎡)": "LAND_AREA",
"층": "FLR",
"권리구분": "RGHT_SE",
"취소일": "RTRCN_DAY",
"건축년도": "ARCH_YR","건물용도": "BLDG_USG",
"신고구분": "DCLR_SE", "신고한_개업공인중개사_시군구명": "OPBIZ_RESTAGNT_SGG_NM"
}
# 3. 컬럼명 변경 적용
df = df.rename(columns=rename_dict)
# 4. 제거할 열 리스트 (여기 적힌 열들이 삭제됩니다)
excluded_columns = [
"RCPT_YR", "LOTNO_SE", "LOTNO_SE_NM", "MNO", "SNO", "OPBIZ_RESTAGNT_SGG_NM"
]
# 열 삭제 실행 (axis=1은 열을 의미합니다)
df_final = df.drop(columns=excluded_columns)
# 5. 결과 저장 (DBeaver 업로드용 UTF-8)
df_final.to_csv('data/real_estate_total_edit.csv', index=False, encoding='cp949')
- 토지면적 컬럼 null 값과 0인 값 확인
- '토지면적'이 null 이거나 0인 행은 모두 '건물용도'가 '아파트'임
- '건물용도'가 '아파트'인 행은 모두 '토지면적'이 null이거나 0


- 권리구분을 drop 할 수 없는 경우
- 거의 대부분이 null 값임
- but '건축년도'가 0인 행에서 분양권/입주권을 기준으로 꽤 많은 데이터 행이 추출되었음
- 이와 관련해서 유의미한 결과를 도출할 수 있으므로 일단 keep

- 계약일 컬럼 전처리
import pandas as pd
# 날짜 컬럼을 datetime 형식으로 변환 (필수!)
df['CTRT_DAY'] = pd.to_datetime(df['CTRT_DAY'])
# 계약일 연도값별로 개수 count 하고 연도 순서대로 정렬
df['CTRT_DAY'].dt.year.value_counts().sort_index()
'''
CTRT_DAY
2008 2
2009 1
2010 1
2011 2
2012 2
2013 3
2014 3
2015 7
2016 64
2017 13360
2018 157931
2019 141204
2020 175320
2021 134779
2022 64804
2023 70406
2024 75725
Name: count, dtype: int64
'''
# 물건금액(만원) 기준 IQR 이상치 제거 예시
Q1_price = df['CTRT_DAY'].quantile(0.25)
Q3_price = df['CTRT_DAY'].quantile(0.75)
IQR_price = Q3_price - Q1_price
# 하위 25%와 상위 75% 밖의 극단적 가격 기준 설정
lower_p = Q1_price - 1.5 * IQR_price # Timestamp('2015-07-12 12:00:00')
upper_p = Q3_price + 1.5 * IQR_price # Timestamp('2025-12-10 12:00:00')
- 2008~2016년까지의 거래 건수는 수십 건 미만으로 전체 시장을 대변하기에 유의미하지 않다
- 2017년은 2018년과 비교하여 10배 이상 차이가 나므로 2018년을 기점으로 설정하여 분석을 진행하는 것이 가장 알맞다고 판단
- IQR 상으로는 2015년 데이터도 정상 범위에 속하지만 데이터 수가 너무 적기 떄문에 계약일의 연도 별 count 개수에 따라서 2018~ 2024년의 데이터만 사용하는 것이 좋을 것 같다
'[데이터분석] 부트캠프 TIL' 카테고리의 다른 글
| 20260128 TIL (0) | 2026.01.28 |
|---|---|
| 20260127 TIL (1) | 2026.01.27 |
| 20260122 TIL (0) | 2026.01.22 |
| 20260120 TIL (0) | 2026.01.20 |
| 20260119 TIL (0) | 2026.01.19 |