2022.08.22

인구 공공데이터

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

행정안정부에 접속하여 주민등록 인구통계에서 인구 데이터를 가져온다.

행정안정부처럼 공공데이터를 주제에 맞게 가져올 수 있는데, 기상관련데이터는 기상자료개방포털, 보건의료데이터는 보건의료빅데이터개방시스템, 공공데이터는 공공데이터 포털에서 검색하여 사용할 수 있다!

우리 동네 인구 구조 파악하기

내가 사는 우리 동네는 둔산동이다.
둔산동은 대전광역시 서구에 속하며 1,2,3동으로 나눠져있다.

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

import csv

f = open('/content/age.csv') # 1) 데이터 불러오기
data = csv.reader(f)

for row in data :
    print(row)

위에서 보이는 바와 같이 데이터를 불러와 제대로 데이터를 받았는지 출력해본다.
각종 시,군,읍,동이 나열되어 데이터를 보여준다.
하지만 정리되어있지않고 너무 많은 데이터이기 때문에 저절로 고개를 젓게 만든다.

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

import csv

f = open('/content/age(2019).csv') # 1) 데이터 불러오기
data = csv.reader(f)

# 2) 데이터 한줄씩 읽기

for row in data :
    # 둔산동만 추출하여 출력, 중복 -> 중복되는 동이 있을 경우, 사용자에게 시(서울? 대전...) 정보를 추가해서 and 조건 추가
    if '대전광역시' in row[0] and '둔산2동' in row[0]:
        print(row[0].split('(')[0], row[1:])

그래서 이렇게 '대전광역시', '둔산2동'이라는 조건을 추가해서 값을 출력한다.

이렇게.

그렇다면 다른 동네는 어떨까?

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

import csv
import matplotlib.pyplot as plt

f = open('/content/age(2019).csv') # 1) 데이터 불러오기
data = csv.reader(f)

result = []
city = input("조회하고 싶은 동네명(동)을 입력하세요. ")


# 2) 데이터 한줄씩 읽기

for row in data :
    # 2-1) 사용자가 입력한 정보만 추출하여 출력, 중복 -> 중복되는 동이 있을 경우, 사용자에게 시(서울? 대전...) 정보를 추가해서 and 조건 추가
    if city in row[0]:
        # 연령별 인구 수 데이터 result 변수에 담기
        for i in row[3:]:
            result.append(int(i))

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


# 시각화
plt.rc('font', family='NanumBarunGothic') 
plt.figure(dpi = 100)

plt.style.use('ggplot') # 격자 무늬 스타일 지정
plt.plot(result)
plt.title(city + ' 의 인구 구조')

plt.show()

input을 이용하여 사용자가 필요한 동네의 인구 구조 데이터를 선형 그래프로 보여준다.

이렇게.

막대그래프로 보고 싶을때는?

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

import csv
import matplotlib.pyplot as plt

f = open('/content/age(2019).csv') # 1) 데이터 불러오기
data = csv.reader(f)

result = []
address = input("우리동네 전체 주소(시, 군구, 읍면동)를 입력하세요. ")


# 2) 데이터 한줄씩 읽기

for row in data :
    # 2-1) 사용자가 입력한 정보만 추출하여 출력
    if row[0].split('(')[0] == address: # 시 군구 읍면동의 정보가 일치하는 정보 추출
        # 연령별 인구 수 데이터 result 변수에 담기
        for i in row[3:]:
            result.append(int(i.replace(',',''))) # i.replace(A,B) -> i의 A값을 B로 변경

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


# 시각화
plt.rc('font', family='NanumBarunGothic') 
plt.figure(dpi = 100)

plt.style.use('ggplot') # 격자 무늬 스타일 지정
plt.bar(range(len(result)),result) # bar(x,y) x,y 둘다 list 형태
plt.title(address + ' 의 인구 구조 그래프')

plt.show()

이렇게.

x축과 y축을 바꾸고 싶을때는 plt.bar(range(len(result)),result)에서 bar뒤에 h를 붙여서 plt.barh()를 사용해준다.

만약

2019~2022년까지 같은 달의 인구구조를 보고싶을때는?

import csv
import matplotlib.pyplot as plt

# 1) 데이터 불러오기
f = open('/content/age(2019).csv') 
g = open('/content/age(2020).csv')
h = open('/content/age(2021).csv')
i = open('/content/age(2022).csv')

data_2019 = csv.reader(f)
data_2020 = csv.reader(g)
data_2021 = csv.reader(h)
data_2022 = csv.reader(i)

result_2019 = []
result_2020 = []
result_2021 = []
result_2022 = []

city = input("알고싶은 전체 주소를 입력하세요. ")


# 2) 데이터 한줄씩 읽기

for row in data_2019:
    # 2-1) 사용자가 입력한 정보만 추출하여 출력, 중복 -> 중복되는 동이 있을 경우, 사용자에게 시(서울? 대전...) 정보를 추가해서 and 조건 추가
    if city in row[0]:
        # 연령별 인구 수 데이터 result 변수에 담기
        for f in row[3:]:
            result_2019.append(int(f.replace(',','')))
for row in data_2020:
    if city in row[0]:
        for g in row[3:]:
            result_2020.append(int(g.replace(',','')))
for row in data_2021:
    if city in row[0]:
        for h in row[3:]:
            result_2021.append(int(h.replace(',','')))
for row in data_2022:
    if city in row[0]:
        for i in row[3:]:
            result_2022.append(int(i.replace(',','')))

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


# 시각화
plt.figure(dpi = 200)
plt.style.use('ggplot') # 격자 무늬 스타일 지정
plt.plot(result_2019, 'red', label = '2019년 ' + city)
plt.plot(result_2020, 'blue', label = '2020년 ' + city)
plt.plot(result_2021, 'skyblue', label = '2020년 ' + city)
plt.plot(result_2022, 'orange', label = '2022년 ' + city)
plt.title(city + ' ' + "'s population comparing graph")
plt.legend()
plt.show()

이렇게.

자율 주제(발표 후 업데이트 할 예정)

profile
Do (Awe)Something!

0개의 댓글