본문 바로가기

공부방/Upstage AI Lab 4기

머신러닝 경진대회 1 | 판다스로 데이터 합치기

서울시 아파트 실거래가 정보가 담긴 대용량 데이터셋이 주어져있다. 

서울시에 각 구에 따라 백화점과 쇼핑센터가 몇 개가 있는지 통계 자료를 이 데이터셋에 추가하려고 한다. 

백화점과 쇼핑센터를 동시에 다루는 게 어려운 것 같아서 일단 각 구에 위치한 백화점 개수를 연도별로 세어서 아래와 같이 정리했다.

지금부터 하려는 건, 

train.csv 파일에 있는 주소와 계약년도 데이터를 보고, 이에 해당하는 백화점 개수를 새로운 피쳐로 추가하려는 것!

train.csv 파일의 피쳐 중에서 '시군구'랑 '계약년월'에 구와 연도가 들어있다. 그래서 일단 이 두개의 정보를 따로 뽑아서 새로운 컬럼으로 만들어줬다. 

#데이터셋에 있는 주소 기준으로 구 정보만 뺌
gu = traindata['시군구'].str.split().str[1]
traindata['Gu_column'] = gu

#데이터셋에 있는 계약년월 기준으로 연도 정보만 뺌
contractyear = traindata['계약년월'].astype(str).str[:4]
traindata['contractyear'] = contractyear

좀 더 쉽게 보기 위해서 피쳐들을 정리해줬다.

대충 정리하고, 이제 여기서 백화점 데이터랑 합쳐야하는데 '구' 칼럼을 기준으로 2007년부터 2023년까지 백화점 개수를 전부 붙여준다.

departmentdata = pd.read_csv('/data/ephemeral/home/data/shoppinginfo_dp.csv')

df_merge = pd.merge(traindata_simple, departmentdata,
                    how='left', on='Gu_column')

데이터프레임을 결합하기 위해 merge를 사용했는데, (이거 하면서 배우는 중)
함수 기본 구조는 아래와 같다. left와 right 두 데이터프레임을 합친다고 하고, 이중에서 how 매개변수는 병합방식을 말한다. 

pd.merge(left, right, 
	how='inner', on=None, 
	left_on=None, right_on=None, 
	left_index=False, right_index=False, 
       	sort=False, suffixes=('_x', '_y'), copy=True, 
       	indicator=False, validate=None)

'구'를 기준으로 연도별 백화점수를 냅다 붙여버림

df_merge = pd.merge(traindata_simple, departmentdata,
                    how='left', on='Gu_column')

df_merge['Department'] = df_merge.apply(lambda row: row[row['contractyear']], axis=1)
df_merge = df_merge.drop(columns=departmentdata.columns[1:])
df_merge.to_csv('add_department.csv')

잘 나온 것 같다.

뭐 별거 하지도 않았는데 시간 순삭이다 순사사삭