Study/Python

[Python/Matplotlib] 특정 지역의 남녀 연령별 인구 비교 막대그래프 그리기

ChoiSenn 2022. 1. 24. 13:55

 

 

 

 

특정 지역의 연령별 남성-여성 인구 막대그래프 시각화하기

 

import csv
import matplotlib.pyplot as plt

f = open('gender.csv')
data = csv.reader(f)
result = []

name = input('궁금한 동네를 입력해주세요 : ')

for row in data:
    if name in row[0]:
        for i in range(3, 104):
            result.append(int(row[i]) - int(row[i+103]))
        break

plt.rc('font', family = 'Malgun Gothic')
plt.rcParams['axes.unicode_minus'] = False
plt.title(name + '의 남여 인구 차이')
plt.bar(range(101), result)
plt.show()

 전체 코드

 

 

 

1. 라이브러리 및 모듈 import

 

import csv
import matplotlib.pyplot as plt

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

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

 

 

 

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

 

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

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

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

 

 

 

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

 

result = []

name = input('궁금한 동네를 입력해주세요 : ')

 - 연령별 남성 인구 데이터 - 연령별 여성 인구 데이터를 담기 위한 리스트 변수 result를 선언한다.

 - 데이터를 찾고자 하는 지역 명을 input받아 name 변수에 저장한다.

 

 

 

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

 

for row in data:
    if name in row[0]:
        for i in range(3, 104):
            result.append(int(row[i]) - int(row[i+103]))
        break

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

 - 만약 0번째 줄(지역)이 '시흥시 정왕2동'이라면 (해당 문자열을 다른 지역으로 바꾸어주면 해당하는 지역의 인구 수 그래프를 출력할 수 있다. 그러나 동/읍/면까지 작성하지 않고 '시흥시' 등으로 작성할 경우, 중복 값이 생겨 오류가 일어난다.)

 - 0세부터 100세 이상 데이터까지 저장하기 위하여 3번째부터 104번째 줄까지 반복한다.

 - 해당하는 줄의 i번째(남성 인구 데이터) 값에서 i+103번째(여성 인구 데이터) 값을 뺀 값을 result 리스트에 저장한다.(연령별 남성 데이터 - 연령별 여성 데이터가 리스트에 저장됨)

 - 3번째부터 104번째까지의 데이터를 모두 읽었으면 break문을 이용하여 for문을 빠져나간다.

 

 

 

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

 

plt.rc('font', family = 'Malgun Gothic')
plt.rcParams['axes.unicode_minus'] = False
plt.title(name + '의 남여 인구 차이')
plt.bar(range(101), result)
plt.show()

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

 - plt.rcParams를 이용하여 마이너스 기호가 깨지지 않도록 해준다.

 - plt.title()을 이용하여 그래프의 제목을 '(지역명)의 남여 인구 차이' 로 설정한다.

 - plt.bar()을 이용하여 세로축 막대그래프를 그린다. 총 줄 수는 101개, 값은 result 리스트를 이용한다.

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

 

 

 

 

 

출력된 그래프 ('정왕2동'을 입력하였을 때)