Info) 정규세션 1주차 (강원도 소방 데이터)

Problem. 왼쪽의 원본 데이터를 가공하여 오른쪽 데이터 형태로 만들기


1. 데이터 불러오기

import pandas as pd

#관할서 센터별 소방용수 데이터
fire_df =  pd.read_csv('./관할서 센터별 소방용수 데이터.csv')

#관할서 센터별 소방용수 데이터 feature설명
feature_df = pd.read_excel('./관할서 센터별 소방용수 데이터.xls')

#정답 파일: 강원도 지역별 소방용수시설 별 개수
answer_df = pd.read_excel('./강원도 지역별 소방용수시설 별 개수.xlsx')

2. fire_df 확인 및 수정 

2-1. fire_df 컬럼명 변경

#feature_df의 컬럼명 리스트로 가져오기
column_names = list(feature_df.columns)

#fire_df의 컬럼명에 추가하여 변경
fire_df.columns = column_names

2-2. 결측치 확인 및 제거

#'소방용수구분명'의 결측치 확인
fire_df['소방용수구분명'].isna().sum() 

#'소방용수구분명'이 null인 행 제거
fire_df.dropna(subset=['소방용수구분명'], axis=0, inplace=True)

3. 파생변수 '지역' Column 만들기

#군구명과 동명을 합쳐 새로운 지역 컬럼 만들기
fire_df['지역'] = fire_df['구군명']+ ' ' + fire_df['동명']

4. One Hot Encoding 적용

#fire_df에서 필요한 컬럼만 추출 
fire_df = fire_df[['지역', '구군명', '동명', '소방용수구분명']]

#원핫 인코딩 적용하여 새로운 fire_df_new 생성
fire_df_new = pd.get_dummies(data = fire_df, columns = ['소방용수구분명'])

5. Column 이름 재설정 및 순서 재배치

#fire_df_new의 컬럼명 재설정
fire_df_new.columns = ['지역', '시군구', '읍면동', '급수탑', '기타', '소화전(지상식)', '소화전(지하식)', '저수조'] 

#컬럼 순서 재설정
fire_df_new = fire_df_new[['지역', '시군구', '읍면동', '소화전(지상식)', '소화전(지하식)', '급수탑', '저수조', '기타']]

6. groupby 통해 그룹별 집계

#groupby 통해 지역별 합계로 집계
fire_df_new = fire_df_new.groupby(['지역', '시군구', '읍면동']).sum()

#인덱스 초기화
fire_df_new.reset_index(inplace=True)

#최종 결과물 확인
fire_df_new

cf) 다른 방식 (crosstab 활용)

cross_tab_prop = pd.crosstab(index=[fire_df['지역'], fire_df['구군명'], fire_df['동명']],
                             columns=fire_df['소방용수구분명'],
                             normalize= False,
                             margins = False)
cross_tab_prop.reset_index(inplace = True)
cross_tab_prop.columns = ['지역', '구군명', '동명', '소화전(지상식)', '소화전(지하식)', '급수탑', '저수조', '기타']
cross_tab_prop

+ Recent posts