오도원입니다.

건강과 행복을 위하여

PNU DSC/파이썬 데이터 분석

03-1. 인구 공공데이터 1

오도원공육사 2020. 5. 11. 01:04
반응형

1. 우리 동네 인구구조 시각화하기

2. 인구 구조를 다양한 형태로 시각화하기

3. 우리 동네 인구 구조를 파이 차트로 나타내기

4. 우리 동네 인구 구조를 산점도로 나타내기

1. 우리 동네 인구 구조 시각화하기

'현대 경영학의 아버지'라 불리는 피터 드러커는 "인구 통계의 변화는 미래와 관련된 것 가운데 정확한 예측을 할 수 있는 유일한 사실"이라고 했다. 그만큼 인구 데이터는 다양한 인사이트(insight)를 제공한다.

 

1) 인구 공공데이터 내려받기

https://mois.go.kr/frt/a01/frtMain.do

 

행정안전부 대표 누리집

행정안전부 홈페이지에 오신것을 환영합니다.

mois.go.kr

정택자료 -> 통계 -> 주민등록 인구통계

 

연령별 인구현환

  • 남/여 구분 체크 해제
  • 연령 구분단위 1세
  • 계 선택
  • 만 연령 0, ~ 100이상
  • 전체 읍면동 현황 체크
  • 검색 클릭
  • csv 파일 다운로드

해당 다운파일을 age.csv로 저장한다.

 

2) 인구 데이터 살펴보기

A열에는 행정 구역, B~C는 전체인구, D열(4번째 열)부터 0세부터의 인구가 기록되어있다.

 

3) 인구 구조 시각화하기

장전제1동의 인구 구조

  • 20대가 가장 많다

해당 자료를 통해서 20대가 굉장히 많다는 것을 알 수 있고, 장전동에는 부산대학교가 있기때문에 그렇다는 것을 유추할 수 있다.

 

인구구조 시각화 단계

  1. 인구 데이터 파일을 읽어온다.
  2. 전체 데이터에서 한 줄씩 반복해서 읽어온다.
  3. 우리 동네에 대한 데이터인지 확인한다.
  4. 우리 동네일 경우 0세부터 100세 이상까지의 인구수를 순서대로 저장한다.
  5. 저장된 연령별 인구수 데이터를 시각화한다.

먼저, 인구 데이터 파일(age.csv)를 읽어와서 한 줄씩 출력해보자.

import csv
f = open('age.csv')
data = csv.reader(f)

for row in data:
    print(row)
f.close()    

 

그렇다면 '장전제1동'의 인구데이터만 출력해보자.

if '부산광역시 금정구 장전제1동(2641060000)' == row[0]:
    print(row)

위와 같이 할 수도 있지만 in연산자를 이용하면 좀 더 효율적으로 코드를 작성할 수 있다. in연산자는 A in B일 때, A가 B안에 존재하면 True, 그렇지않으면 False를 반환한다.

 

import csv
f = open('age.csv')
data = csv.reader(f)

for row in data:
    if '장전제1동' in row[0]:
    	print(row)

이제 우리 동네 데이터를 읽어왓으니 0~100세 이상까지의 인구수를 순서대로 저장해보겠다.

 

  • row[0] -> 지역명
  • row[1], row[2] -> 지역 총 인구
  • row[3]부터 각 나이의 인구가 저장
    • 따라서 row[3]부터 끝 인덱스까지의 인구데이터가 필요 -> row[3:]
f = open('age.csv')
data = csv.reader(f)
data = csv.reader(f)

for row in data:
    if '장전제1동' in row:
    	for i in row[3:]:
        	print(i)

해당 데이터가 제대로 출력되었는지 확인해보자.

for row in data:
    if '장전제1동' in row[0]:
    	print(len(row[3:])

해당 값이 101로 나오면 정확한 것이다.

 

이제 데이터도 제대로 읽어왔기 때문에 나이순대로 저장해보자.

f = open('age.csv')
data = csv.reader(f)
result = [] # 빈 리스트 만들기
for row in data:
    if '장전제1동' in row[0]: # '장전제1동'이 포함된 행정구역 찾기
    	for i in row[3:]: # 0~100세이상 까지의 모든 연령에 대해서 반복
        	result.append(int(i)) # 해당 연령의 인구수 리스트에 나이 순서대로 저장
print(result) # 0~100세 이상까지의 인구수 출력           

이제 인구 데이터도 저장했으므로 데이터를 그래프로 시각화해보자.

import matplotlib.pyplot as plt
import csv
f = open('age.csv')
data = csv.reader(f)
result = [] # 빈 리스트 생성
for row in data:
    if '장전제1동' in row[0]: # '장전제1'이 포함된 행정구역 찾기
        for i in row[3:]: # 0세부터 끝(100세이상)까지 모든 연령에 대해서 반복
            result.append(int(i)) # 해당 연령 인구수를 리스트에 저장

plt.style.use('ggplot') # 격자 무늬 스타일 지정
plt.plot(result)
plt.show()
f.close()

 

문제. 원하는 지역이름을 입력하면 해당 지역의 인구구조를 출력하는 프로그램

  • 지역이름받기
  • 그래프 제목출력하기

> 소스코드

더보기
import matplotlib.pyplot as plt
f = open('age.csv')
data = csv.reader(f)
legion = input('인구 구조가 알고싶은 지역이름(읍,면,동 단위)을 입력하세요 => ')
result = [] # 빈 리스트 생성
for row in data:
    if legion in row[0]: # '장전제1'이 포함된 행정구역 찾기
        for i in row[3:]: # 0세부터 끝(100세이상)까지 모든 연령에 대해서 반복
            result.append(int(i.replace(',', ''))) # 해당 연령 인구수를 리스트에 저장

plt.style.use('ggplot') # 격자 무늬 스타일 지정
plt.rc('font', family='Malgun Gothic')
plt.title(legion + ' 지역의 인구 구조')
plt.plot(result)
plt.show()
f.close()

 

 

반응형