1. 막대그래프 그리기
- bar() 함수
bar(막대를 표시할 위치, 막대의 높이)
import matplotlib.pyplot as plt
plt.bar([0,1,2,4,6,10], [1,2,3,5,6,7])
plt.show()
0에 해당하는 위치의 막대 높이는 1이고, 10에 해당하는 위치의 막대 높이는 7인 그래프
막대그래프의 위치를 오름차순으로 표현하는 경우가 많으므로, range() 함수를 사용하여 막대그래프의 위치 표현 가능
import matplotlib.pyplot as plt
plt.bar(range(6), [1,2,3,5,6,7])
plt.show()
우리 동네의 인구 구조를 막대 그래프로 표현하기
import csv
f = open('age.csv')
data=csv.reader(f)
result=[]
for row in data:
if '천전동' in row[0]:
for i in row[3:]:
result.append(int(i))
import matplotlib.pyplot as plt
plt.bar(range(101), result)
plt.show()
- barh() 함수: 수평 막대그래프로 표현
위 코드에서 bar()함수를 barh()함수로 수정
2. 항아리 모양 그래프 그리기
남녀 성별이 포함된 데이터 사용
이 데이터의 CSV 파일의 구조를 간략하게 표현하면 다음과 같다.
남성 연령별 인구수 | 여성 연령별 인구수 | |||||||||||||
지역명 | 총인구1 | 총인구2 | 0세 | 1세 | (생략) | 99세 | 100세 이상 |
총인구1 | 총인구2 | 0세 | 1세 | (생략) | 99세 | 100세 이상 |
남성과 여성 데이터를 각각 따로 저장하기
남성 데이터는 왼쪽에, 여성 데이터는 오른쪽에 있으므로, 남성 데이터는 맨 앞에서부터 리스트 m에 차례대로 저장하고 여성 데이터는 맨 뒤에서부터 -1, -2, ... 순으로 리스트 f에 저장한 후, 저장된 여성 데이터를 역순으로 뒤집으면 된다.
남성 데이터는 인덱스 3에서, 여성 데이터는 인덱스 -1에서 시작된다는 점을 주의해야 한다.
import csv
f = open('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()
# 순서대로 저장
for i in row[3:104] :
m.append(int(i)) # ➊ 남성 데이터를 리스트 m에 저장
for i in row[106:] :
f.append(int(i)) # ➋ 여성 데이터를 리스트 f에 저장
- 데이터 시각화하기
import csv
f = open('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()
import matplotlib.pyplot as plt
plt.barh(range(0,101), m)
plt.barh(range(0,101), f)
plt.show()
두 데이터가 모두 양수로 이루어져 있기 때문에 그래프가 겹쳐 알아보기 어렵다.
→ 남성 데이터를 음수로 만들어 왼쪽에 둔다.
import csv
f = open('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()
import matplotlib.pyplot as plt
plt.barh(range(0,101), m)
plt.barh(range(0,101), f)
plt.show()
그래프에 제목과 범례 넣기
import csv
f = open('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()
import matplotlib.pyplot as plt
plt.rc('font', family='Malgun Gothic')
plt.rcParams['axes.unicode_minus'] = False #마이너스 기호 깨짐 해결
plt.title('천전동 지역의 남녀 성별 인구 분포')
plt.barh(range(0,101), m, label='남성')
plt.barh(range(0,101), f, label='여성')
plt.legend()
plt.show()
참조
모두의 데이터 분석 with 파이썬: ■ 데이터 수집하기 - 4
더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.
thebook.io
참고서적
'데이터 분석' 카테고리의 다른 글
One-hot Encoding / get_dummies (0) | 2024.03.07 |
---|---|
[데이터 분석] 파이 차트, 산점도 (1) | 2024.02.07 |
[데이터 분석] 우리 동네 인구 구조 시각화하기 (2) | 2024.01.29 |
[데이터 분석] A열의 한글이 깨져 보일 때 해결 방법 (1) | 2024.01.29 |
[데이터 분석] 기온 변화 그래프 그리기 / 기온 데이터 다양하게 시각화하기 (0) | 2024.01.29 |