[모두의 데이터분석 With 파이썬] Unit.08 리뷰 / 항아리모양 그래프 그리기
2022.03.23 - [데이터 분석 학습] - [모두의 데이터분석 With 파이썬] Unit.01 리뷰 / CSV, 아나콘다, 크롬
2022.03.23 - [데이터 분석 학습] - [모두의 데이터분석 With 파이썬] Unit.02 리뷰 / 주피터, 코랩
2022.03.23 - [데이터 분석 학습] - [모두의 데이터분석 With 파이썬] Unit.03 리뷰 / 데이터 전처리
2022.03.23 - [데이터 분석 학습] - [모두의 데이터분석 With 파이썬] Unit.04 리뷰 / 기본 그래프 그리기
2022.03.24 - [데이터 분석 학습] - [모두의 데이터분석 With 파이썬] Unit.05 리뷰 / 데이터에 맞는 시각화
2022.03.24 - [데이터 분석 학습] - [모두의 데이터분석 With 파이썬] Unit.06 리뷰 / 다양한 그래프 시각화
2022.03.24 - [데이터 분석 학습] - [모두의 데이터분석 With 파이썬] Unit.07 리뷰 / 데이터에 맞는 시각화
Unit. 08 인구구조를 다양한 형태로 시각화하시
이전 장의 데이터를 그래프로 그려본다
막대그래프를 그리는 bar()함수로 이러한 데이터를 표현해보자
예시부터 살펴본다
import matplotlib.pyplot as plt
plt.bar([0,1,2,3,6,10],[1,2,3,5,6,7]) # 2개의 리스트를 bar()함수로 막대그래프로 그린다
plt.show()
그래프를 보면 알겠지만 bar()함수의 앞 인자는 가로축 데이터, 뒷 인자는 세로축 데이터를 표현한다.
즉, bar(막대를 표시할 위치, 막대의 높이)이다
이 그래프는 0에 해당하는 위치의 값은 1 10에 해당하는 위치의 값은 7이다.
이번에는 range()함수를 이용해 데이터 값을 정렬해보자 range함수는 자동으로 0~(n-1)까지의 수를 표현한다.
plt.bar(range(6),[1,2,3,5,6,7]) # 2개의 리스트를 bar()함수로 막대그래프로 그린다
plt.show()
어느정도 활용법을 배웠으니 우리 동네의 인구 구조를 bar()와 range()함수를 이용해 막대그래프로 표현해보자.
0~100세 이상까지의 구간(101개)이 있으므로 range(101)으로 설정하면 된다.
for row in data:
if '제주시 연동' in row[0]:
for i in row[3:]:
result.append(int(i))
import matplotlib.pyplot as plt
plt.style.use('ggplot') # 격자무늬 형태로 스타일을 지정한다.
plt.bar(range(101), result) # x축에 101개의 구간을 두고, y값으로 result의 데이터를 담는다
plt.show()
이제 이걸 수평방향으로 그리려면? barh()로 그리기만 하면 된다.
plt.barh(range(101), result) # y축에 101개의 구간을 두고, x값으로 result의 데이터를 담는다
성별을 잘 드러내는 그래프는 무엇일까?
일단 성별로 나타낸 데이터를 받고 고민해보자
아까 데이터를 받은 방식 그대로에서 구분만 '계'에서 '남여구분'으로 바꿔주자
그리고 이걸 csv파일로 받아 확인해보자. 여기서 파일명은 gender.csv로 바꾸어 주었다.
열을 보면 남성 인구 숫자가 쭉 나오고 나서 여성인구 숫자가 나오는 것을 확인 할 수 있다.
정리해보면
지역명[0], 남성총인구1[1], 남성총인구2[2], 남성0세[3] ~ 100세이상[103], 여성총인구1[104], 여성총인구2[105] 여성0세[106] ~ 100세이상[206]으로 정리할 수 있다.
그리고 역순으로 보자면, 여성데이터는 여성0세[-101] ~ 여성100세이상[-1]로도 정리 가능하다.
이 패턴을 정리해서 코드로 표현해보자
import csv
f = open('/content/gender.csv', encoding='cp949')
data = csv.reader(f)
m = [] # Male 남자 데이터를 리스트형태로 담음
f = [] # Female 여자 데이터를 리스트형태로 담음
for row in data:
if '제주시 연동' in row[0]:
for i in range(0, 101):
m.append(int(row[i+3])) # 남자는 배열 [3]부터 시작, row[3:104]로도 표현 가능하다
f.append(int(row[-(i+1)])) # 여자는 배열 [-1]부터 시작, row[106:]로도 표현 가능하다.
f.reverse() # f함수는 역순으로 배열한다. 역순배열 함수는 reverse()
import matplotlib.pyplot as plt
plt.barh(range(101), m)
plt.barh(range(101), f)
plt.show()
음... 겹쳐서 나왔다. 이걸 분리시키려면 하나를 음수형태로 바꾸어서 항아리 형태처럼 나눈다. 항아리 형태로 그려보자
항아리 그래프 그리기
데이터 값 중 하나를 음수형태로 그리면 항아리 형태가 된다.
m = [] # Male 남자 데이터를 리스트형태로 담음
f = [] # Female 여자 데이터를 리스트형태로 담음
for row in data:
if '제주시 연동' in row[0]:
for i in range(0, 101):
m.append(-int(row[i+3])) # 앞에 -를 붙여 음수값으로 바꾼다
f.append(int(row[-(i+1)])) # 여자는 배열 [-1]부터 시작, row[106:]로도 표현 가능하다.
f.reverse() # f함수는 역순으로 배열한다. 역순배열 함수는 reverse()
import matplotlib.pyplot as plt
plt.rc('font', family='Malgun Gothic')
plt.title('연동 지역의 남녀 성별 인구 분포')
plt.barh(range(101), m, label='남성')
plt.barh(range(101), f, label='여성')
plt.rcParams['axes.unicode_minus'] = False # -표기를 정상 출력으로 바꿔준다
plt.legend()
plt.show()
항아리 모양 그래프가 만들어졌다.
오늘 배운 내용 정리
len(): 데이터의 길이를 확인하는 함수
int(): 데이터를 정수형으로 변환하는 함수
reverse(): 데이터를 역순으로 배열하는 함수
matplotlib 라이브러리 활용
pyplot 명령어
plt.style.use(): 배경 스타일 지정하는 함수
plt.bar(): 막대그래프를 그리는 함수 (x축 값, 데이터의 높이)