[Python/Matplotlib] 지하철 시간대별 최대 승차 역 이름 및 승차 인원 막대그래프 시각화하기
지하철 시간대별 최대 승차 역 이름 및 승차 인원 막대그래프 그리기
지하철 시간대별 최대 승차 역 이름 및 승차 인원 막대그래프 그리기
import csv
import matplotlib.pyplot as plt
f = open('subwaytime.csv')
data = csv.reader(f)
next(data)
next(data)
mx = [0] * 24
mx_station = [''] * 24
for row in data:
row[4:] = map(int, row[4:])
for j in range(24):
a = row[j*2+4] # j와 인덱스 번호 사이의 관계식 사용
if a > mx[j]:
mx[j] = a
mx_station[j] = row[3] + '(' + str(j+4) + ')'
plt.rc('font', family='Malgun Gothic')
plt.bar(range(24), mx)
plt.xticks(range(24), mx_station, rotation = 90)
plt.show()
전체 코드
1. 라이브러리 및 모듈 import
import csv
import matplotlib.pyplot as plt
- csv 파일을 읽기 위해 csv 모듈을 import한다.
- 그래프를 그려 시각화 하기 위해 matplotlib 라이브러리의 pyplot 모듈을 import한다.
2. csv 공공데이터 읽어오기
f = open('subwaytime.csv')
data = csv.reader(f)
next(data)
next(data) # 헤더 제외
- open()을 이용하여 subwaytime.csv 파일을 f에 저장한다. subwaytime.csv에는 시간대별 지하철 이용 현황 데이터가 저장되어 있다.
- csv.reader()를 이용하여 f에 저장된 공공 기온 데이터를 읽어와 data에 저장한다.
- next()를 이용하여 분석에 필요없는 헤더 데이터와 첫 줄을 제거해준다.
3. 데이터 시각화를 위한 변수 선언
mx = [0] * 24
mx_station = [''] * 24
- 시간대별 최대 승차 수를 저장할 mx 리스트 변수를 선언한다.
- 시간대별 최대 승차 수를 기록한 역 이름을 저장할 mx_station 리스트 변수를 선언한다.
4. 공공데이터로부터 원하는 데이터 추출 및 저장
for row in data:
row[4:] = map(int, row[4:])
for j in range(24):
a = row[j*2+4] # j와 인덱스 번호 사이의 관계식 사용
if a > mx[j]:
mx[j] = a
mx_station[j] = row[3] + '(' + str(j+4) + ')'
- for row in data를 이용하여 모든 데이터를 한 줄 씩 읽는다.
- 해당 줄의 네 번째 이후 데이터들()을 map 함수를 이용하여 데이터 타입을 string에서 int 타입으로 변환해준다.
- for문을 이용하여 24번 반복한다.
- row[j*2 + 4]를 참조하여 시간대별 최대 승차 인원을 a에 저장한다.
- 만약 a 값이 mx[j] (현재 저장된 가장 높은 시간대별 최대 승차 인원)보다 크면
- mx[j]에 a값을 저장하고
- mx_station[j]에는 row[3](시간대별 최대 승차 역 이름)을 저장한다.
5. 그래프를 그리고 화면에 나타내기
plt.rc('font', family='Malgun Gothic')
plt.bar(range(24), mx)
plt.xticks(range(24), mx_station, rotation = 90)
plt.show()
- plt.rc()를 이용하여 한글 폰트를 맑은 고딕으로 지정한다.
- plt.bar()를 이용하여 길이 24에 mx 리스트 값을 이용한 세로 막대 그래프를 그린다.
- plt.xticks()를 이용하여 x축에 길이 24에 mx_station 값을 이용한 이름표를 붙여준다. 각도는 90도로 돌려준다.
- plt.show()를 이용하여 막대그래프를 화면에 나타낸다.
출력된 그래프