아침에 코드를 보기좋게 프레임 생성+넣어가며 정리했다.
# 0. 초기 데이터프레임 준비 및 컬럼 이름 변경
dfs = [df_2018, df_2019, df_2020, df_2021, df_2022, df_2023, df_2024]
# 컬럼 이름 변경
for df in dfs:
df.rename(columns={
'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': '건물면적(m²)', 'LAND_AREA': '토지면적(m²)', 'FLR': '층', 'RGHT_SE': '권리구분',
'RTRCN_DAY': '취소일', 'ARCH_YR': '건축년도', 'BLDG_USG': '건물용도', 'DCLR_SE': '신고구분',
'OPBIZ_RESTAGNT_SGG_NM': '신고한 개업공인중개사 시군구명'
}, inplace=True)
# 1. '취소일', '신고구분', '공인중개사', '권리구분' 컬럼 제거
dfs_1 = []
for df in dfs:
df_new = df.drop(columns=['취소일', '신고구분', '신고한 개업공인중개사 시군구명', '권리구분'], inplace=False)
dfs_1.append(df_new)
# 2. '지번구분'과 '지번구분명' 결측치를 '1'과 '대지'로 대체
dfs_2 = []
for df in dfs_1:
df_new = df.copy()
df_new['지번구분'] = df_new['지번구분'].fillna('1')
df_new['지번구분명'] = df_new['지번구분명'].fillna('대지')
dfs_2.append(df_new)
# 3. '본번', '부번' 결측치 중 '단독다가구'인 경우 '단독_미상'으로 대체
dfs_3 = []
for df in dfs_2:
df_new = df.copy()
condition = (df_new['건물용도'] == '단독다가구')
df_new.loc[condition & df_new['본번'].isna(), '본번'] = '단독_미상'
df_new.loc[condition & df_new['부번'].isna(), '부번'] = '단독_미상'
dfs_3.append(df_new)
# 4. '본번'과 '부번' 결측치 행 제거
dfs_4 = []
for df in dfs_3:
df_new = df.dropna(subset=['본번', '부번'], inplace=False)
dfs_4.append(df_new)
# 5. '건물명'이 결측치이고 '건물용도'가 '단독다가구'인 경우 '단독다가구'로 대체
dfs_5 = []
for df in dfs_4:
df_new = df.copy()
condition = (df_new['건물명'].isna()) & (df_new['건물용도'] == '단독다가구')
df_new.loc[condition, '건물명'] = '단독다가구'
dfs_5.append(df_new)
# 6. '층' 결측치를 '단독'으로 대체
dfs_6 = []
for df in dfs_5:
df_new = df.copy()
df_new['층'] = df_new['층'].fillna('단독')
dfs_6.append(df_new)
# 7. '건축년도' 결측치와 0인 행 제거, '토지면적' 결측치와 0인 행 제거
dfs_7 = []
for df in dfs_6:
df_new = df[(df['건축년도'].notna()) | (df['건축년도'] != 0)]
dfs_7.append(df_new)
# 결과 확인
for i, df in enumerate(dfs_7, 2018):
print(f"df_{i} 최종 행 개수:", len(df))
print(f"df_{i} 열 목록:", df.columns)
# '토지면적(m²)' 컬럼 제거
dfs_8 = []
for df in dfs_7:
df_new = df.drop(columns=['토지면적(m²)'], inplace=False)
dfs_8.append(df_new)
# 결과 확인
for i, df in enumerate(dfs_8, 2018):
print(f"df_{i} 열 목록:", df.columns)
토지면적 컬럼은 결국 제거하고,
LB에 단독다가구 경우만 남겨뒀다.
# '건물용도'가 '단독다가구'이면서 '토지면적(m²)'이 0이거나 결측치가 아닌 행만 유지
df_year_LB = df_year_LB[(df_year_LB['건물용도'] == '단독다가구') &
(df_year_LB['토지면적(m²)'].notna()) &
(df_year_LB['토지면적(m²)'] != 0)]
도로명 주소 찾기 사이트를 통해
본번 부번을 검색해서, 건물명을 찾아서 채워줬다.
# 새로운 리스트 생성 (dfs_8 기반)
dfs_9 = []
# 각 연도별 데이터프레임에 대해 작업 수행
for df in dfs_8:
df_new = df.copy()
# 1. 법정동명: 화양동, 본번: 0111, 부번: 0012 → 건물명: 빌리브인테라스
condition_1 = (df_new['법정동명'] == '화양동') & (df_new['본번'] == '0111') & (df_new['부번'] == '0012')
df_new.loc[condition_1, '건물명'] = '빌리브인테라스'
# 2. 법정동명: 사당동, 본번: 0182, 부번: 0003 → 건물명: Studio사당35
condition_2 = (df_new['법정동명'] == '사당동') & (df_new['본번'] == '0182') & (df_new['부번'] == '0003')
df_new.loc[condition_2, '건물명'] = 'Studio사당35'
# 3. 법정동명: 신정동, 본번: 0988, 부번: 0005 → 건물명: 목동중앙하이츠펠리시티
condition_3 = (df_new['법정동명'] == '신정동') & (df_new['본번'] == '0988') & (df_new['부번'] == '0005')
df_new.loc[condition_3, '건물명'] = '목동중앙하이츠펠리시티'
# 4. 법정동명: 개포동, 본번: 1194, 부번: 0001 → 건물명: 런던빌 개포
condition_4 = (df_new['법정동명'] == '개포동') & (df_new['본번'] == '1194') & (df_new['부번'] == '0001')
df_new.loc[condition_4, '건물명'] = '런던빌 개포'
# 5. 법정동명: 시흥동, 본번: 0888, 부번: 0014 → 건물명: 신영메트로시티
condition_5 = (df_new['법정동명'] == '시흥동') & (df_new['본번'] == '0888') & (df_new['부번'] == '0014')
df_new.loc[condition_5, '건물명'] = '신영메트로시티'
# 6. 법정동명: 명일동, 본번: 0121, 부번: 0000 → 건물명: 명일동 121
condition_6 = (df_new['법정동명'] == '명일동') & (df_new['본번'] == '0121') & (df_new['부번'] == '0000')
df_new.loc[condition_6, '건물명'] = '명일동 121'
dfs_9.append(df_new)
반복문 사용해서 구할 수도 있었다.
# 연도별 행 개수 출력 및 전체 개수 계산
total_rows = 0
for i, df in enumerate(dfs_9, 2018):
row_count = len(df)
print(f"df_{i} 행 개수: {row_count}")
total_rows += row_count
이렇게 나름 필터링 해봤지만!
팀원들과 맞춰본 결과, 좀 달라서 한분 코드로 통일했다 ㅠㅠ 모가 문제지ㅣㅣ..ㅠ
페르소나 설정
📌페르소나 : 은퇴 후 자산관리 목적의 중장년층
다운사이징(Downsizing)이란?
다운사이징은 주거 공간이나 자산 규모를 축소하여 관리의 효율성을 높이고 생활비를 절감하는 것을 의미. 은퇴 후에는 자녀의 독립 등으로 큰 주거 공간이 필요하지 않게 되어, 소형 아파트나 주택으로 이사함으로써 주거비와 유지비를 절감하고 남은 자산을 활용하여 생활의 질을 향상시키는 전략.
목적:
✅ 주거 환경 – 조용하고 편리한 지역 선호
✅ 병원 접근성 – 정기 검진과 응급 상황 대응 가능해야 함
✅ 교통 편의성 – 친척 및 지인 방문이 쉬운 곳
✅ 여가 및 문화생활 – 중장년층 커뮤니티 및 활동 공간 확보
잠실동/문정동/가락동
이건 데이터를 보면서 좀 더 디테일하게 재설정해봐야겠다.
🔻
송파구 주요 주변 인프라를 아래에 표시해서 ppt발표 자료에 사용해봐야겠다 !!
데이터 분석 좁혀나가기
import pandas as pd
import matplotlib.pyplot as plt
라이브러리 불러오고
선그래프 몇개 돌려보면서 저녁 스터디 했다.
#낮은 층(예: 5층 이하) 선호 가능성 고려
affordable_apts_low_floor = affordable_apts[affordable_apts['층'].astype(str).str.contains('^[1-5]$', na=False)]
print("\n5층 이하 추천 아파트:")
print(affordable_apts_low_floor[['건물명', '법정동명', '물건금액(만원)', '건물면적(m²)', '건축년도', '층']].head(5))
#신축 아파트 선호 가능성 고려 (예: 2010년 이후 건축)
affordable_apts_new = affordable_apts[affordable_apts['건축년도'] >= 2010]
print("\n2010년 이후 건축된 추천 아파트:")
print(affordable_apts_new[['건물명', '법정동명', '물건금액(만원)', '건물면적(m²)', '건축년도', '층']].head(5))
추가 자료들을 조사하며 ...
내가 팀장이긴 하지만, 도메인지식이 충분하지는 못해.. 다른 팀원분이 열심히 리드해주시고 계시다. 감사하기도 하고 나두 더 열심히 해야겠다는 생각이 무지 드는 하루였다 ㅠ ㅋㅋㅋ
내일은 시각화를 토대로, 페르소나 빌드업을 고도화해봐야겠다 !!!
스크럼 + 프로젝트 노션 열심히 채워가며 화요일도 잘 보내봐야겠다!