[Python/Matplotlib] 특정 지역의 남녀 연령별 인구 비교 막대그래프 그리기
특정 지역의 연령별 남성-여성 인구 막대그래프 시각화하기
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()로 그래프를 화면에 나타낸다.