본문 바로가기

Analytics/Study

실전#5 미국의 대통령은 어떻게 뽑힐까(3)

EDA 시작!
오늘의 주제는 County별 통계로 데이터프레임 구조 변경 및 통합하기 이다.
 
테이블 단위로 작업 과정을 하나씩 따라가보자
 

df_pres

# Step1. 데이터 형태 확인
df_pres.head()


# Step2. 공화당(DEM), 민주당(REP)만 남길 수 있도록 lambda 적용 확인 과정
df_pres['party'].apply(lambda s: str(s) in ['DEM','REP'])

# Step3. Step2를 실제 data로 적용한 뒤, pivot_table을 활용하여 데이터프레임 구조 변경
data = df_pres.loc[df_pres['party'].apply(lambda s: str(s) in ['DEM','REP'])]
table_pres = pd.pivot_table(data = data, index=['state' , 'county'], columns = 'party', values = 'total_votes')
table_pres.rename({'DEM':'Pres_DEM', 'REP':'Pres_REP'}, axis = 1, inplace = True)
table_pres

# Step4. DEM과 REP만 남긴 party에 대해 NaN값이 존재하는지 여부 확인
table_pres.isna().sum()

 

 

df_gov

df_pres 과정과 동일하게 진행.
중간에 데이터 참고 위치 및 컬럼명 수정이 필요
예) total_votes >> votes


 

df_census

# Step1. 테이블 형태 확인
df_census.head()

# Step2. 컬럼명 통일 및 countyid 컬럼 제거(필요없음), set_index를 통해 구조 맞추기
df_census.rename({'State' : 'state', 'County':'county'}, axis = 1, inplace = True)
df_census.drop('CountyId', axis = 1, inplace = True)
df_census.set_index(['state', 'county'], inplace = True)
df_census

# Step3. 추가로 필요없는 컬럼 제거
df_census.drop(['Income', 'IncomeErr', 'IncomePerCapErr'], axis = 1, inplace = True)
df_census.drop('Women', axis = 1, inplace = True)

# Step4. 누적 수치와 백분율이 혼재되어 있어 일부 컬럼값 형태 변경 >> 전체 인구 대비 비율 변수로
df_census['Men'] /= df_census['TotalPop']
df_census['VotingAgeCitizen'] /= df_census['TotalPop']
df_census['Employed'] /= df_census['TotalPop']

# Step5. 전처리 완료된 테이블 형태 재확인
df_census.head()

부연 설명으로 변수들 중 Women을 제외한 이유는 Men과 TotalPop 변수가 존재하고 있기 때문이다. Men의 비율이 Women과 정반대의 상관성을 지니게 되므로 자연스럽게 제외하는 것이다.
또하나 설명으로 백분율로 나타난 다른 변수들의 자리수는 % 자체인 반면, 새로 변환한 변수들은 소수점 형태이다 (예 10% vs 0.1)
이 떄 두 형태의 컬럼 통일이 필요하지 않은 이유는 해당 변수들이 모두 수치형이기 떄문이다. (이게 왜?)
수치형 변수들은 이후 표준화 작업이 들어갈 것이고, 해당 작업을 거치게 되면 자리수는 관계없이 모두 표준화된 수치로 변환되기 때문에 굳이 맞출 필요가 없다.
 
이렇게 정리된 3개의 테이블을 하나로 결합하여 추가 EDA를 진행할 수 있도록 하자

df = pd.concat([table_pres, table_gov, df_census], axis = 1)

 

 


http://bit.ly/3Y34pE0

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.