3 분 소요

ABC 부트캠프 [인구 공공 데이터 분석]

image

기온 공공데이터를 활용한 기온 분석에 이어서

인구 공공데이터를 활용한 인구구조 분석을 진행해보도록 한다

인구 공공데이터 내려받기

[연령별 인구현황]-[통계표]-[조회기간 설정]-[남여 구분 체크 해제]

[연령 구분 단위 ‘1세’ ]-[만 연령구분 0세~ 100세 이상 설정]-[검색]

image

[전체읍면동현황 체크]-[csv파일 다운로드]

우리 동네 인구 구조 시각화 알고리즘 설계

  1. 인구 데이터 파일을 읽어온다.

  2. 전체 데이터에서 한 줄씩 반복해서 읽어온다.

  3. 우리 동네에 대한 데이터인지 확인한다.

  4. 우리 동네일 경우 0세부터 100세 이상까지의 인구수를 순서대로 저장한다.

  5. 저장된 연령별 인구수 데이터를 시각화한다.

인구 데이터가 준비되었다면 본격적으로 colab 환경에서 데이터 분석을 진행해보자!

인구 공공 데이터 준비하기

  import csv
  
  # 1) 파일 열기
  f = open('/content/201902_201902_연령별인구현황_월간.csv')
  data = csv.reader(f)
  
  # 2) 데이터 한줄씩 출력
  for row in data:
    print(row)
  
  # 3) 파일 닫기
  f.close()

신도림 데이터 확인하기

  print('서울특별시 구로구 신도림동(1153051000)' == '신도림동')    # False
  print('서울특별시 구로구 신도림동(1153051000)' in '신도림동')    # False
  print('신도림동' in '서울특별시 구로구 신도림동(1153051000)')    # True(반대로 넣어줌)

in 연산자를 활용해 신도림 데이터만 추출

import csv

# 1) 파일 열기
f = open('/content/201902_201902_연령별인구현황_월간.csv')
data = csv.reader(f)

# 2) 데이터 한줄씩 출력
for row in data:
  if '신도림동' in row[0] :  # 읍면동 조건
      print(row[3:])        # 0~100세 정보
      print(len(row[3:]))   # 0~100세 데이터 수

# 3) 파일 닫기
f.close()

우리 동네 연령별 인구수 result 리스트에 저장(시각화)

import csv
import matplotlib.pyplot as plt


# 1) 연령별 인구수 리스트 선언
result = []

# 2) 파일 열기
f = open('/content/201902_201902_연령별인구현황_월간.csv')
data = csv.reader(f)

# 3) 데이터 한줄씩 출력
for row in data:
  if '신도림동' in row[0] :  # 읍면동 조건
      for i in row[3:] :
        result.append(int(i))  # 정수형 출력

# 4) 파일 닫기
f.close()

# 5) 인구구조 시각화
plt.title('신도림동의 인구구조')
plt.style.use('ggplot')
plt.plot(resul

image

사용자 입력(동)을 통한 인구구조 시각화 하기

import csv
import matplotlib.pyplot as plt


# 1) 연령별 인구수 리스트 선언
result = []
dong = input('인구구조를 확인하고 싶은 동네명(동) 입력하세요 : ')

# 2) 파일 열기
f = open('/content/201902_201902_연령별인구현황_월간.csv')
data = csv.reader(f)

# 3) 데이터 한줄씩 출력
for row in data:
  if dong in row[0] :  # 읍면동 조건
      for i in row[3:] :
        result.append(int(i.replace(",","")))  # 정수형 출력
      break

# 4) 파일 닫기
f.close()

# 5) 인구구조 시각화
plt.title(dong+'의 인구구조')
plt.style.use('dark_background')
plt.plot(result)
plt.show()

image

두개의 동네의 인구구조 비교하기

import csv
import matplotlib.pyplot as plt


# 1) 연령별 인구수 리스트 선언
result1 = []
result2 = []
dong1 = input('인구구조를 확인하고 싶은 동네명(동) 입력하세요 : ')
dong2 = input('인구구조를 확인하고 싶은 다른 동네명(동) 입력하세요 : ')

# 2) 파일 열기
f = open('/content/201902_201902_연령별인구현황_월간.csv')
data = csv.reader(f)

# 3) 데이터 한줄씩 출력
for row in data:

  if dong1 in row[0] :  # 읍면동 조건
      for i in row[3:] :
        result1.append(int(i.replace(",","")))  # 정수형 출력
  elif dong2 in row[0] :  # 읍면동 조건
      for j in row[3:] :
        result2.append(int(j.replace(",","")))  # 정수형 출력
      break

# 4) 파일 닫기
f.close()

# 5) 인구구조 시각화
plt.title('%s의 인구구조와 %s의 인구구조 비교'% (dong1, dong2))
plt.style.use('dark_background')
plt.plot(result1,  color = 'b' , label = '%s의 인구구조' % dong1 )
plt.plot(result2,  color = 'r' , label = '%s의 인구구조' % dong2 )
plt.legend()
plt.show()


image

다른 지역의 인구구조 비교하기

import csv
import matplotlib.pyplot as plt


# 1) 연령별 인구수 리스트 선언
result1 = []
result2 = []
address1 = input('인구구조를 확인하고 싶은 지역을 입력하세요 : ')
address2 = input('인구구조를 확인하고 싶은 다른 지역을 입력하세요 : ')

# 2) 파일 열기
f = open('/content/201902_201902_연령별인구현황_월간.csv')
data = csv.reader(f)

# 3) 데이터 한줄씩 출력
for row in data:
  split_address = row[0].split('(')[0].strip()   # strip()은 공백 제거

  if split_address == address1 :
    for i in row[3:] :
      result1.append(int(i.replace(",","")))  # 정수형 출력

  if split_address == address2 :
    for i in row[3:] :
      result2.append(int(i.replace(",","")))  # 정수형 출력


# 4) 파일 닫기
f.close()

# 5) 인구구조 시각화
plt.title('%s의 인구구조와 %s의 인구구조 비교'% (address1, address2))
plt.style.use('dark_background')
plt.plot(result1,  color = 'b', label = '%s의 인구구조' % address1)
plt.plot(result2,  color = 'r', label = '%s의 인구구조' % address2)
plt.legend()
plt.show()

image

row[0].split('(')[0].strip()

데이터 첫번째 요소의 괄호(‘(‘) 이후

그 요소안의 데이터 공백을 없애는 코드이다.

strip() 함수는 문자열 시작과 끝 공백을 제거하는 함수이다.

이렇게 서울특별시 강남구와 대전광역시의 인구 구조를 비교해 볼 수 있다

댓글남기기