Study/Python

[Python/Matplotlib] 지역 이름 입력받아 해당 지역의 연령별 인구 분포 꺾은 선 그래프 출력하기

ChoiSenn 2022. 1. 19. 15:13

 

 

 

지역 이름을 입력받아 해당 지역의 연령별 인구 수 분포 꺾은 선 그래프 시각화하여 출력하기

 

import csv
import matplotlib.pyplot as plt

dong = input('연령별 인구분포를 알고싶은 동 명을 입력하시오 : ')
f = open('age.csv')
data = csv.reader(f)
result = []

for row in data :
    if dong in row[0]:
        for i in row[3:]:
            result.append(int(i))

plt.rc('font', family='Malgun Gothic')
plt.style.use('ggplot')
plt.figure(figsize=(10, 6), dpi=300)
plt.title(dong + '의 연령대별 인구분포 그래프')
plt.plot(result, color='red', label='연령별 인구수')
plt.legend()
plt.show()

 전체 코드

 

 

 

1. 라이브러리 및 모듈 import

 

import csv
import matplotlib.pyplot as plt

 - csv 파일을 읽기 위해 csv 모듈을 import한다.

 - 그래프를 그려 시각화 하기 위해 matplotlib 라이브러리의 pyplot 모듈을 import한다.

 

 

 

2. 추출하고자 하는 지역명 입력받기

 

dong = input('연령별 인구분포를 알고싶은 동 명을 입력하시오 : ')

 - input()을 이용하여 찾고싶은 지역 명을 입력받아 dong 변수에 저장한다.

 

 

 

3. csv 공공데이터 읽어오기

 

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

 - open()을 이용하여 age.csv 파일을 f에 저장한다. age.csv에는 지역/연령별 인구 수 공공데이터가 저장되어있다.

 - csv.reader()를 이용하여 f에 저장된 공공 기온 데이터를 읽어와 data에 저장한다.

 

 

 

4. 데이터 시각화를 위한 변수 선언

 

result = []

 - 해당하는 지역의 연령별 인구 수 값을 저장하기 위한 리스트 변수 result를 선언한다.

 

 

 

5. 공공데이터로부터 원하는 데이터 추출 및 저장

 

for row in data :
    if dong in row[0]:
        for i in row[3:]:
            result.append(int(i))

 - for row in data를 이용하여 모든 데이터를 한 줄 씩 읽는다.

 - 만약 0번째 줄(지역)이 dong(입력받은 지역 명)이라면

 - 해당하는 줄의 3번째 이후 데이터들을 모두

 - result 리스트에 int값으로 변환하여 저장한다.

 

 

 

6. 그래프를 그리고 화면에 나타내기

 

plt.rc('font', family='Malgun Gothic')
plt.style.use('ggplot')
plt.figure(figsize=(10, 6), dpi=300)
plt.title(dong + '의 연령대별 인구분포 그래프')
plt.plot(result, color='red', label='연령별 인구수')
plt.legend()
plt.show()

 - plt.rc()를 이용하여 한글 폰트를 맑은 고딕으로 설정한다.

 - plt.style.use()를 이용하여 그래프 차트의 스타일을 'ggplot'으로 지정한다.

 - plt.figure()을 이용하여 그릴 그래프 이미지의 사이즈와 해상도를 설정한다.

 - plt.title()을 이용하여 그래프의 이름을 "(지역 명)의 연령대별 인구분포 그래프"로 설정한다.

 - plt.plot()을 이용하여 result 리스트로 꺾은선 그래프를 그린다. 두 번째 인자로는 꺾은 선 그래프의 선 색상을 빨강으로 지정하고, 레이블은 "연령별 인구수"로 주었다.

 - plt.legend()로 레이블을 이미지에 나타낸다.

 - plt.show()로 그래프를 화면에 나타낸다.

 

 

 

 

 

출력된 그래프 ('시흥시 정왕2동'을 입력한 모습)

 

 

주의!!

 지역 명 입력 시에 '경기도 시흥시' 등 동 명까지가 아닌 시 명까지만 입력하는 '경기도 시흥시'에 해당하는 모든 동들이 추출되어 그래프로 그려지니 주의. ('경기도 시흥시' 입력 시에는 '경기도 시흥시 정왕1동', '경기도 시흥시 정왕2동', '경기도 시흥시 정왕3동', '경기도 시흥시 정왕4동'이 모두 가로로 합쳐진 그래프가 출력됨.)