책에서 안내해주는 것을 따라 남녀 구분이 된 데이터를 다운받습니다.
인덱싱 부분은 책에 자세히 설명되어 있으니 책 내용을 잘 따라가면 될 것 같습니다.
imort csv
f = opne('gender.csv')
data = csv.reader(f)
m = []
f = []
for row in data:
if '신도림' in row[0]:
for i in row[3:104]:
m.append(int(i))
for i in row[106:]:
f.append(int(i))
이렇게 보는 것이 이해하기 더 쉬워보여 먼저 이 코드부터 보겠습니다.
책에서 나와있듯 3번 인덱스부터 103번까지가 0세부터 100세까지의 남성 데이터, 다시 106부터 끝까지가 여성 데이터입니다.
같은 내용을 다르게 표현해볼까요?
imort csv
f = opne('gender.csv')
data = csv.reader(f)
m = []
f = []
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)]))
f.reverse()
int()는 정수화시키는 부분이니 제외하고 row[i+3]과 row[-(i+1)]))만 이해해보겠습니다.
우선 책 내용을 보면 3번째(0부터 시작하면) 데이터부터 103번째까지가 남성 데이터이고 같은 방식으로 뒤에서부터 세면 여성 데이터가 나옵니다.
range(0, 101), 0부터 100까지 반복하기 때문에 m.append의 경우 3부터 103까지 f.append는 -1부터 -101까지
인덱싱이 다르게 표현됐지만 결국에는 위와 같은 의미입니다.
마지막에 f 리스트를 reverse() 함수를 사용해 역순으로 만들어주면 남성과 여성 데이터가 동일하게 0세부터 100세까지로 정렬이 됩니다.
처음에 f가 2개가 있어 마지막 f.reverse()가 어떤 것을 의미하는지 헷갈렸는데 코드를 돌려보니 f 리스트를 역순으로 바꾼다가 맞는 해석 같습니다.
import matplotlib.pyplot as plt
plt.barh(range(101), m)
plt.barh(range(101), f)
plt.show()
barh() 함수를 이용해 수평 막대그래프를 그리겠습니다.
range를 101로 설정했기 때문에 y값이 100까지 나오겠네요.
결과값을 보면 두 그래프가 양수 방향에 겹쳐져 그려집니다. 두 데이터 중 한 가지를 음수처리하면 양쪽으로 그래프를 그릴 수 있겠죠?
처리 방법은 append() 함수 사용 부분에서 int를 음수화 시켜주면 됩니다. ex) m.append(-int(i))
+
혹시 출력값의 마이너스 부분이 깨진다면 plt.rcParams['axes.unicode_minus'] = False를 추가해주시면 됩니다.
'DATA STUDY > 모두의 데이터분석 with 파이썬' 카테고리의 다른 글
셋째 마당 - 인구 구조 다양한 형태로 시각화하기 UNIT 08 (0) | 2021.03.16 |
---|---|
셋째 마당 - 우리 동네 인구 구조 시각화하기 UNIT 07 (0) | 2021.03.16 |
둘째 마당 - 기온 데이터 다양하게 시각화 UNIT 06 (0) | 2021.03.07 |
둘째 마당 - 내 생일 기온 그래프 그리기(인코딩) UNIT 05 (0) | 2021.03.07 |
둘째 마당 - 기본 그래프 그리기 UNIT 04 - 02 (0) | 2021.03.06 |