DB엔지니어가 공부하는 python

파이썬 인구 데이터 분석, 제주도엔 정말 여자가 더 많을까?

sTricky 2020. 3. 26. 13:04

파이썬 인구 데이터 분석, 제주도엔 정말 여자가 더 많을까?

 

#index#

1. 분석용 데이터 다운로드

2. csv 파일 손보기

3. 데이터 분석 시작 하기

 

안녕하세요. 

 

정말 오랜만에 이렇게 파이썬을 이용한 데이터 분석을 해보게 되었습니다.

 

한동안 SQL 강의 올리고, 알고리즘 쪽 공부를 하고, 일도 좀 바빠서요...

 

조금은 허접한... 저의 파이썬 데이터 분석을 다시 하게 되었습니다.

 

하면서도 기분이 좋네요. 재미있습니다.

 

오늘은 간단한 데이터 분석을 할 거예요.

 

"정말 제주도에 여자가 많이 있을까?" 입니다.

 

삼다도라 불리는 제주도, 돌, 바람, 여자가 많다는데..

 

가봤더니 정말 돌도 많이 있고, 바람도 많이 불긴 불던데 정말 여자가 많은지는..

 

아무래도 데이터가 정확하게 알려 줄 것입니다.

 

그리고 데이터가 가장 정확하겠죠? ㅎㅎ

 

그럼 바로 시작하겠습니다!!!

 

1. 분석용 데이터 다운로드

 

우선 우리에게 필요한 것은 무엇일까요? 바로바로 인구 데이터입니다.

 

제주도에 사람이 몇 명이나 살고 있는지? 그리고 그중에 남자가 몇 명이고, 여자가 몇 명인지 알아야 하겠죠?

 

그런 건 어디서 찾느냐, 바로 공공데이터 포털입니다.

 

공공데이터 포털에 접속해서 아래와 같이 검색을 합니다.

 

#공공데이터 포털 바로 가기

https://www.data.go.kr/

 

위 그림에서와 같이 "주민등록 연령별 인구 현황"이라고 검색을 하면 가장 위에 행정안전부에서 업로드한 주민등록 연령별 인구 현황 파일 데이터를 확인할 수 있습니다.

 

클릭을 하면 아래와 같이 화면이 나옵니다.

여기에서 바로 다운을 받을 수는 없습니다.

 

"바로가기" 링크를 눌러서 들어갑니다.

 

행정안전부로 연결이 되네요!

 

여기에서 우리가 필요한 데이터를 다운로드할 수 있을 겁니다.

 

여기에서 위 그림과 같이 설정을 합니다.

 

제일 처음 하셔야 할 것은 화면 왼쪽에 주민등록 인구통계 아래 있는 연령별 인구현황 탭을 선택하셔야 하는 것입니다.

 

여길 선택하셔야 오른쪽 화면과 같은 화면이 나오게 됩니다.

 

구분에서 '남, 여 구분'을 체크하고 '계'는 빼줍니다.

 

그리고 정렬 순서는 상관없습니다.

 

그 아래 연령 구분 단위를 '1세'로 설정합니다.

 

만 연령 구분은 '0'에서 '100 이상'으로 설정하고 "검색" 버튼을 눌러 줍니다.

 

그러고 나서 아래 csv 파일 다운로드를 누르면 우리가 필요한 인구 데이터를 다운로드할 수 있습니다.

 

2. csv 파일 손보기

일단 파일을 다운로드하셨으면 csv 파일을 엑셀에서 열어서 아래와 같이 설정해줍니다.

전체를 선택한 다음 홈 메뉴 탭에서 "통화"라고 쓰여있는 데이터 타입을 설정하는 리스트 박스를 열어서 "숫자"로 선택을 합니다.

 

그리고 데이터를 한번 보면 A열에는 각 광역시도별 구분명이 있고, 다음엔 전체 인구, 그리고 D열부터 남자 0세의 데이터가 들어있습니다. E열에는 남자 1세의 데이터가 들어있고요.

 

이런 식으로 D부터 103개의 열에 남자 데이터, 여자 0세 데이터는 104번째부터 103개 열에 걸쳐 들어 있겠죠.

 

이렇게 데이터를 한번 쭉 훑어보시길 바랍니다. 그래야 아래 분석용 파이썬 소스가 금방 이해됩니다.

 

확인을 다 하셨으면, 해당 파일을 전 jupyter notebook을 쓰니깐 쓰시는 파이썬 프로그램에서 불러다 쓰기 편한 곳으로 저장을 해줍니다.

 

전 파일 이름을 아래와 같이 저장했습니다.

 

각자 편하신 데로 저장하시면 될 것 같습니다.

"population_mf.csv"로 파일을 저장했습니다.

 

3. 데이터 분석 시작 하기

이젠 jupyter notebook을 실행해서 데이터 분석을 시작합니다.

 

3-1) 데이터 분석에 필요한 라이브러리 가져오기

#라이브러리 가지고 오기
import matplotlib.pyplot as plt
import csv

그래프를 그리기 위해서 matplotlib.pyplot을 plt로 불러왔습니다.

그리고 데이터를 가지고 오기 위해서 csv를 가지고 왔습니다.

 

3-2) 미리 다운로드한 데이터 파일 가지고 오기

#데이터파일 가져오기
f = open('population_mf.csv')
data = csv.reader(f)

파일을 열어서 f로 저장하고 csv의 reader를 이용해서 f를 읽어 data라는 변수로 저장을 합니다.

 

3-3) 필요한 변수를 선언합니다.

#변수설정 남자, 여자
m = []
f = []
diff = []

m은 남자 인구의 값을 넣고, f에는 여자 인구의 값, 그리고 남, 녀 인구수의 차이 값을 저장할 diff라는 배열을 선언해줍니다.

 

3-4) 변수에 데이터 넣기

#데이터 변수에 입력
for row in data :
    if '제주' in row[0] :
        for i in range(3, 104) :
            m.append(-int(row[i]))
            f.append(int(row[i+103]))
            diff.append((int(row[i]))-(int(row[i+103])))

data에 있는 데이터들을 각각의 변수에 넣어줍니다.

아까 데이터를 엑셀 파일에서 한번 확인해보신 분들은 아시겠지만, 각 광역시도별 인구가 저장되어 있습니다.

여기에서 우리가 필요한 데이터는 제주도의 데이터 이기 때문에 위와 같이 '제주'라는 조건을 넣었습니다.

 

그리고 위에서 설명한 데로 3번부터 104번까지 남자 나이별 인구 데이터를 m 배열에, 여자 나이별 인구 데이터 f 배열에, 남자 나이별 인구 데이터에서 여자 나이별 인구 데이터를 뺀 값을 diff 배열에 for문을 사용해서 각각 저장을 합니다.

 

3-5) 변수를 이용해서 그래프 그리기

plt.figure(dpi=300)
plt.style.use('ggplot')
plt.rc('font', family = 'Malgun Gothic')
plt.title('제주도 성별 인구 구조 그래프')
plt.barh(range(101), m, label = '남자')
plt.barh(range(101), f, label = '여자')
plt.rcParams['axes.unicode_minus'] = False
plt.legend()

위와 같이 코드를 실행하면 아래와 같은 그래프가 그려집니다.

figure, style, title 등의 옵션을 원하시는 데로 변경해보시길 바랍니다.

 

이렇게 보니 제주도에서 나이별 인구가 가장 많은 구간은 약 50세 전후의 나이인 것 같습니다.

 

그리고 위로 나이가 많아질수록 여자 쪽 그래프가 더 높은걸 확인할 수 있습니다.

 

정확하게 수치가 표현되어 있지 않지만 이 정도는 이런 간단한 그래프 시각화를 통해서 알 수 있습니다.

 

그리고 우리가, 아니 제가 정말 궁금했던 거, 바로 "진짜 제주도엔 여자가 많을까?"라는.. 궁금증..ㅎㅎ

 

아래와 같이 확인해보겠습니다.

 

3-6) 남, 녀 차이를 알아보는 그래프

plt.figure(dpi=300)
plt.style.use('ggplot')
plt.rc('font', family = 'Malgun Gothic')
plt.bar(range(101), diff, label = '남녀 인구수 차이')
plt.legend()

위와 같이 파이썬 소스를 작성해서 실행하면 아래와 같은 그래프가 그려집니다.

위 데이터는 남자에서 여자 인구수를 각 연령에서 뺀 값입니다.

 

즉, 양수가 나오면 남자가 많은 것이고요, 음수가 나오면 여자가 더 많다는 뜻입니다.

 

그래프를 통해서 데이터를 보면 약 62~63세쯤을 기점으로 나이가 많아질수록 여자의 인구가 더 높습니다.

 

그 아래에선 남자가 더 많이 있고요. 약 36세 정도의 데이터에서 여자 인구가 약간 더 많은 것 같긴 한데. 60대 이상 데이터를 제외하고 보면, 아무래도 30대쯤에선 여자가 더 많이 있진 않더라도 남, 녀 인구 차이가 다른 20대나 4,50대 데이터에 비해서 많이 나지는 않는 것으로 보입니다.

 

30대의 남자들이 제주도를 떠났다가 다시 40대 이상이 되어 돌아오는 케이스가 많은 건지, 그 원인까지는 그래프를 통해서 확인 하긴 어려울 것 같습니다.

 

다음 시간에는 다른 시도의 데이터와 비교를 통해서 더 객관적으로 제주도 인구에 대해서 확인해보도록 하겠습니다.

 

감사합니다!!

 

 

by.sTricky