-
[Python/Matplotlib] 특정 지역의 남녀 성별 별 인구 수 비교 막대그래프 그리Study/Python 2022. 1. 22. 14:28
특정 지역의 남녀 성별 별 인구 수 데이터를 이용하여 막대그래프로 비교 시각화하기
import csv import matplotlib.pyplot as plt f = open('gender.csv') data = csv.reader(f) m = [] f = [] name = input('찾고 싶은 지역의 이름을 입력하시오 : ') for row in data: if name in row[0]: for i in row[3:104]: m.append(-int(i)) for i in row[106:]: f.append(int(i)) plt.style.use('ggplot') plt.figure(figsize = (10, 5), dpi=300) plt.rc('font', family = 'Malgun Gothic') plt.rcParams['axes.unicode_minus'] = False plt.title(name + ' 지역의 남녀 성별 인구 분포') plt.barh(range(101), m, label='남성') plt.barh(range(101), f, label='여성') plt.legend() plt.show()
전체 코드
1. 라이브러리 및 모듈 import
import csv import matplotlib.pyplot as plt
- csv 파일을 읽기 위해 csv 모듈을 import한다.
- 그래프를 그려 시각화 하기 위해 matplotlib 라이브러리의 pyplot 모듈을 import한다.
2. csv 공공데이터 읽어오기
f = open('age.csv') data = csv.reader(f)
- open()을 이용하여 age.csv 파일을 f에 저장한다. age.csv에는 지역/연령별 인구 수 공공데이터가 저장되어있다.
- csv.reader()를 이용하여 f에 저장된 공공 기온 데이터를 읽어와 data에 저장한다.
3. 데이터 시각화를 위한 변수 선언
m = [] f = [] name = input('찾고 싶은 지역의 이름을 입력하시오 : ')
- 각각 남성과 여성에 따른 인구 수 데이터를 저장할 리스트 변수를 선언한다.
- 데이터를 찾고자 하는 지역 명을 input받아 name 변수에 저장한다.
4. 공공데이터로부터 원하는 데이터 추출 및 저장
for row in data: if name in row[0]: for i in row[3:104]: m.append(-int(i)) for i in row[106:]: f.append(int(i))
- for row in data를 이용하여 모든 데이터를 한 줄 씩 읽는다.
- 만약 0번째 줄(지역)이 '시흥시 정왕2동'이라면 (해당 문자열을 다른 지역으로 바꾸어주면 해당하는 지역의 인구 수 그래프를 출력할 수 있다. 그러나 동/읍/면까지 작성하지 않고 '시흥시' 등으로 작성할 경우, 중복 값이 생겨 오류가 일어난다.)
- 해당하는 줄의 3번째부터 104번째(남성의 연령별 인구 수 데이터)까지의 데이터를 m 리스트에 음수 값으로 변환하여 append한다.
- 해당하는 줄의 106번째부터 끝(여성의 연령별 인구 수 데이터)까지의 데이터를 m 리스트에 append한다.
5. 그래프를 그리고 화면에 나타내기
plt.style.use('ggplot') plt.figure(figsize = (10, 5), dpi=300) plt.rc('font', family = 'Malgun Gothic') plt.rcParams['axes.unicode_minus'] = False plt.title(name + ' 지역의 남녀 성별 인구 분포') plt.barh(range(101), m, label='남성') plt.barh(range(101), f, label='여성') plt.legend() plt.show()
- plt.style.use()를 이용하여 그래프 차트의 스타일을 'ggplot'으로 지정한다.
- plt.figure()를 이용하여 이미지 사이즈와 해상도를 설정한다.
- plt.rc()를 이용하여 한글 폰트를 맑은 고딕으로 설정한다.
- plt.rcParams를 이용하여 마이너스 기호가 깨지지 않도록 해준다.
- plt.title()을 이용하여 그래프의 제목을 '(지역명) 지역의 남녀 성별 인구 분포' 로 설정한다.
- plt.barh()를 이용하여 길이가 101인, m 리스트를 이용하여, label은 남성인 가로 막대그래프를 그린다.
- plt.barh()를 이용하여 길이가 101인, f 리스트를 이용하여, label은 여성인 가로 막대그래프를 그린다.
- plt.legend()를 이용하여 레이블을 화면에 나타낸다.
- plt.show()로 그래프를 화면에 나타낸다.
출력된 그래프 ('정왕2동'을 입력하였을 때)
'Study > Python' 카테고리의 다른 글
[Python/Matplotlib] 지하철 시간대별 이용 현황 데이터를 이용하여 아침 7시의 승차 데이터 막대그래프 그리기 (0) 2022.01.27 [Python/Matplotlib] 특정 지역의 남녀 연령별 인구 비교 막대그래프 그리기 (0) 2022.01.24 [Python/Matplotlib] 지역 이름 입력받아 해당 지역의 연령별 인구 분포 꺾은 선 그래프 출력하기 (0) 2022.01.19 [Python/Matplotlib] 특정 지역의 연령별 인구 수로 꺾은 선 그래프 그리기 (0) 2022.01.18 [Python/Matplotlib] 작년과 올해 특정 월의 최고 기온 차이 박스 플롯 그래프 그리기 (0) 2022.01.17