본문 바로가기

Pandas/실전

판다스 - 미국 신생아 이름 : 전처리

반응형

데이터 불러오기

 

신생아 이름에 관련된 데이터는 메모장에 쉼표로 구분되어 있으며

 

연도별로 파일이 구성되어 있다.

 

 

 

 

이렇게 2010년까지 있다.

 

 

 

 

 

 

2002년의 메모장을 살펴보면 

이름,성별,출생 수

 

이렇게 되어있다.

 

 

 

데이터를 불러와 합치기 위해 glob를 불러온다.

 

 

 

 

babynames 폴더에 있는 모든 경로를 paths에 담아온 뒤

 

 

 

 

 

파일명에 있는 연도수를 이용해서

 

 

 

 

데이터프레임을 df_list에 차곡히 쌓은 다음

 

 

 

 

 

 

pd.concat을 이용하여 names라는 최종 데이터프레임을 만든다.

 

 

 

 

 

 

피벗 테이블로 살펴보기

 

 

 

연도와 성별에 따른 출생 수를 볼 수 있다.

 

 

 

 

이를 시각화해서 보면

 

 

1940년대부턴 남아의 출생 수가 계속 더 높아짐을 확인할 수 있다.

 

 

 

 

 

 

 

각 연도/성별별 이름이, 연도/성별별 전체 출생수에서 차지하는 비율 확인

 

 

 

 

우선 연도와 성별별로 그룹화를 시켜 grouped변수에 담는다.

 

 

 

쉬운 예시를 들기 위해 get_group 메서드를 이용해

1880년대의 여아 이름만을 살펴보자

 

 

 

1880년대 여아는 총 90993명이 태어났고

 

 

그 중 Mary라는 이름이 7065명이라는 것이다.

 

 

저 총 합 값으로 births 컬럼을 나누면 prop을 얻을 수 있다.

 

 

 

 

 

이를 이제 컬럼으로 추가

 

 

 

0.77이라는 것은

100명의 아기 중

7.7명의 아기의 이름이 Mary로 같다는 것이다.

 

 

 

 

 

 

이제 전체 Groupby 객체에 prop 컬럼을 추가해보자

 

 

 

 

apply를 이용해 prop이 담긴 컬럼을 만들고 (transform 이용해도 같은 결과)

 

 

 

 

이 prop_col을 다시 기존 데이터프레임에 컬럼으로 추가한다.

 

 

 

 

그룹 관련 연산을 수행할 땐 모든 그룹에서 prop 컬럼의 합이 1이 맞는지 

새너티 테스트를 하는 것이 좋다.

 

 

 

 

 

 

 

 

prop이 가장 높은 이름은

 

 

 

 

1880-1886년 동안엔 John과 William이 용호상박임을 볼 수 있다.

 

 

 

 

 

 

연도/ 성별에 따라 선호된 이름 1000개씩 추출

 

 

이 또한 그룹 연산이지만 get_group을 이용해

 

쉽게 살펴보자

 

 

 

연도/성별로 그룹핑한 grouped 객체에서

 

 

1880년대의 남자아이 데이터만 가져와 출생수 상위 1000행만 보자

 

 

 

 

 

 

이 작업을 이제 그룹 연산으로 하는 것이다.

 

 

 

 

 

위 데이터프레임은 멀티인덱스이니

 

 

reset_index와 기존 인덱스를 삭제해주면 

 

 

연도/성별별 선호되는 출생 수 상위 1000개씩인, 이름의 데이터프레임을 볼 수 있다.

 

 

 

 

처음 1690784행에 비해 많이 줄어들었다.

 

이름 유행 분석 등은

 

다음 포스팅으로 연결!

 

반응형