ABC 부트캠프 데이터 탐험가 4기

[10 일차] ABC 부트캠프 : 데이터 전처리 예제

marriina 2024. 7. 17. 23:36
1. 데이터 불러오기:

주어진 csv 파일 "아파트(매매)_실거래가_서울_2022.csv"를 활용하여 데이터프레임(DataFrame)을 생성하고
"df_trade" 변수에 저장한 후 아래의 결과를 확인하시오.
(파일의 내용을 확인하여 불필요 데이터는 제외하고 데이터프레임을 만들어야 합니다.)

  • df_trade에 저장된 데이터프레임의 전체 관측치(행)와 변수(열)의 개수를 출력하시오.
  • df_trade에 저장된 데이터프레임의 변수(열) 별 데이터유형을 확인 및 출력하시오.
df_trade = pd.read_csv('./아파트(매매)_실거래가_서울_2022.CSV', encoding='CP949',skiprows=16)
display(df_trade)​
  • 'CP949' 인코딩을 사용하여 CSV 파일을 읽어들이고, 처음 16행은 건너뜁니다.
  • 데이터프레임 df_trade에 저장합니다.

 

display(df_trade)
print(df_trade.shape)
print(df_trade.dtypes)​
 
  • 데이터프레임의 내용을 출력합니다.
  • 데이터프레임의 행과 열의 개수를 출력합니다.
  • 데이터프레임의 각 열의 데이터 유형을 출력합니다.

2. 결측값 및 파생 변수 생성:

위 1번의 **"df_trade"**의 데이터프레임에 **"선택조건"**의 관측치(행)만을 선택하여 **"df_trade"**에 저장한 후 "평당거래금액(만원)" 변수(열)를 추가하하고 "df_trade" 데이터프레임을 출력하시오.

  • 선택조건: "해제사유발생일"이 "결측값"인 데이터 (결측값이 아닌 경우 취소된 거래 건)
  • 산 술 식: "평당거래금액(만원)" = "거래금액(만원)" / "전용면적(㎡)"


cond = df_trade['해제사유발생일'].isnull()
df_trade['평당거래금액(만원)'] = df_trade['거래금액(만원)'] / df_trade['전용면적(㎡)'] 
df_trade = df_trade[cond]
df_trade.head(10)
  • '해제사유발생일' 열이 비어있는 행을 선택합니다.
  • '평당거래금액(만원)' 열을 추가하여 '거래금액(만원)'을 '전용면적(㎡)'로 나눕니다.
  • 위에서 선택한 행만 남기고 데이터프레임을 업데이트합니다.

 


3. 데이터 집계 및 부분선택:

위 2번의 **"df_trade"**의 데이터프레임을 대상으로 "시군구"  "평당거래금액(만원)"  평균이 높은 5개 지역을 target 으로 지정한 후 아래의 결과를 확인하시오.

  • "df_trade" 데이터프레임의 관측치(행) 중 "시군구" 변수가 target 에 속하는 관측치만을 선택하여 출력하시오.
  • "df_trade" 데이터프레임의 관측치(행) 중 "거래유형"  "중개거래" 인 관측치만을 선택하여 출력하시오.
  • 위 두개의 조건을 모두 만족하는 관측치(행)를 선택하고 "df_sub" 변수에 결과를 저장하시오
target_mean = df_trade.groupby('시군구',as_index=False)['평당거래금액(만원)'].mean()
target = target_mean.nlargest(5,'평당거래금액(만원)')['시군구']​

 

  • '시군구' 별 '평당거래금액(만원)'의 평균을 계산합니다.
    평균이 가장 높은 5개 '시군구'를 선택합니다.

cond1 = df_trade['시군구'].isin(target)
cond2 = df_trade['거래유형'].isin(['중개거래'])
cond_comb = cond1 & cond2
df_sub = df_trade[cond_comb]
  • '시군구'가 target에 속하는 행을 선택합니다.
  • '거래유형'이 '중개거래'인 행을 선택합니다.
  • 두 조건을 모두 만족하는 행만 선택하여 df_sub에 저장합니다.

4. 데이터 집계 및 데이터처리 2:

위 3번의 **"df_sub"**의 데이터프레임을 대상으로 "단지명"  "거래건수", "평당평균거래금액(만원)", "최대거래금액(만원)", **"최소전용면적(㎡)"**을 집계한 후 아래의 조건에 따른 15개 **관측치(행)**을 선택하여 df_result에 저장한 후 결과를 확인하시오.

  • 선택조건: **"거래건수"**가 많은 15개의 관측치 선택 (거래건수가 동일할 경우 "평당평균거래금액(만원)"이 높은 순)
  • 출력변수: "단지명", "거래건수", "평당평균거래금액(만원)", "최대거래금액(만원)", " 최소전용면적(㎡)"
df_sub2 = df_sub['단지명'].value_counts(ascending=False).nlargest(15)​

'단지명' 별 거래 건수를 내림차순으로 정렬하고, 상위 15개 단지를 선택합니다.
df_sub6 = df_sub.groupby('단지명',as_index=False).agg({'평당거래금액(만원)':'mean',
	'거래금액(만원)' : 'max','전용면적(㎡)':'min'})​
  • '단지명' 별로 '평당거래금액(만원)'의 평균, '거래금액(만원)'의 최댓값, '전용면적(㎡)'의 최솟값을 계산합니다.
df_result = pd.merge(df_sub2,df_sub6,how='inner',on = '단지명')
df_result = df_result.rename(columns={'count' : '거래건수',
	'평당거래금액(만원)': '평당평균거래금액(만원)','거래금액(만원)':'최대거래금액(만원)',
    '전용면적(㎡)':'최소전용면적(㎡)'})​
  • df_sub2와 df_sub6를 '단지명'을 기준으로 inner join합니다.
  • 열 이름을 변경합니다.

 


5. 데이터프레임 저장: 위 4번의 "df_result"데이터프레임을 "agg_result.csv" 이름의 파일로 저장하시오.  
df_result.to_csv('./agg_result.csv', index=True, encoding='CP949')
  • 최종 결과 데이터프레임 df_result를 'agg_result.csv' 파일로 저장합니다.

 


 

주요 메소드와 함수:

  • pd.read_csv(): CSV 파일을 데이터프레임으로 불러옵니다.
  • display(): 데이터프레임을 화면에 출력합니다.
  • df.shape: 데이터프레임의 행과 열의 개수를 반환합니다.
  • df.dtypes: 데이터프레임의 각 열의 데이터 유형을 반환합니다.
  • df['열이름'] = 계산식: 데이터프레임의 새로운 열을 생성합니다.
  • df[조건]: 데이터프레임에서 조건에 해당하는 행을 선택합니다.
  • df.groupby('열이름').agg({'열이름':'집계함수'}): 데이터프레임을 특정 열로 그룹화하고 집계 함수를 적용합니다.
  • df.nlargest(n, '열이름'): 데이터프레임의 특정 열에서 상위 n개 값을 반환합니다.
  • df.isin(['값1', '값2']): 데이터프레임의 특정 열에서 특정 값이 포함된 행을 선택합니다.
  • pd.merge(df1, df2, how='inner', on='열이름'): 두 개의 데이터프레임을 지정된 열을 기준으로 병합합니다.
  • df.rename(columns={'기존열이름':'새로운열이름'}): 데이터프레임의 열 이름을 변경합니다.
  • df.to_csv('파일명.csv', index=True, encoding='CP949'): 데이터프레임을 CSV 파일로 저장합니다.