이번에는 대중교통 데이터, 그 중에서도 서울 지하철역의 유무임 승하차 데이터를 이용해 파이썬을 해보겠다. (코드 내용은 전부 <모두의 데이터 분석 with 파이썬 - 송석리, 이현아> 이 책을 실습하면서 가져온 것이다.)
오늘의 데이터의 출처이다: pay.tmoney.co.kr/index.dev
티머니 카드&페이
티머니카드, 어린이/청소년할인, T마일리지적립, 소득공제, 유통/교통/모바일결제, 고속/시외버스예매
pay.tmoney.co.kr
먼저 유임 승차 비율이 가장 많은 역을 한번 파이썬으로 찾아보자.
import csv
f = open('trans4.csv')
data = csv.reader(f)
next(data)
mx = 0
rate = 0
mxs = ''
for row in data:
for i in range(4, 8):
row[i] = int(row[i].replace(',',''))
if row[6] == 0:
print(row)
if row[6] != 0 and (row[4] + row[6]) > 10000:
rate = row[4] / (row[4] + row[6])
if rate > mx:
mx = rate
mxs = row[3] + ' ' + row[1]
print(mxs, round(mx*100, 2))
코드에 대해 차근차근 설명해보겠다. 먼저 첫번째 네 줄은 csv로 저장된 대중교통 데이터를 불러오는 코드이다. 그리고 유임 승차가 가장 많은 역의 수치를 담기 위한 mx, rate, mxs 변수를 5~7번째줄에 생성시켰다. 8번째 줄의 반복문은 데이터의 모든 콤마(,)들을 없애는 코드이다. 11번째 줄의 조건문은 유임하차가 없을 경우 계산 범위에서 제외시키는 것이다. 유임 하차가 없으면 유임 승차도 없는 것이므로 이렇게 했다. 13번째 줄의 이중 조건문은 rate 변수에 유임승차 비율을 넣고 만약에 지금 들어온 유임승차 비율이 mx보다 크면 mx에 rate값을 넣는 것이다. 그리고 mxs에는 mx의 값의 역 이름을 넣는 것이다. 마지막 줄은 역 이름과 유임승차 비율을 출력해주는 것이다.
이런 식으로 하면 결과가 이렇게 나온다.
다음 코드에서는 유임승차, 무임승차, 유임하차, 무임하차가 가장 큰 역들을 전부 구해보겠다.
import csv
f = open('trans4.csv')
data = csv.reader(f)
next(data)
mx = [0] * 4
ms = [''] * 4
label = ['유임승차', '유임하차', '무임승차', '무임하차']
for row in data:
for i in range(4, 8):
row[i] = int(row[i].replace(',',''))
if row[i] > mx[i-4]:
mx[i-4] = row[i]
ms[i-4] = row[3] + ' ' + row[1]
for i in range(4):
print(label[i]+ ':' + ms[i], mx[i])
마찬가지로 네번째 줄까지는 데이터를 불러오는 코드이다. 그리고 이번에는 변수들을 전부 리스트 형식으로 만들었고, 출력물에 쓰일 label이라는 리스트도 만들었다. 8번째 줄부터 이어지는 반복문은 콤마(,) 제거, 유무임 승하차 수치의 최대치 비교의 내용이 들어있다. 마지막 반복문은 유무임 승하차의 최대치를 계산한 것을 역 이름과 함께 출력하는 코드이다.
코드의 결과는 이렇게 나온다.
마지막 코드는 모든 역의 유무임 승하차의 비율을 원그래프 형식으로 출력하는 코드이다.
import csv
import matplotlib.pyplot as plt
f = open('trans4.csv')
data = csv.reader(f)
next(data)
mx = [0] * 4
ms = [''] * 4
label = ['유임승차', '유임하차', '무임승차', '무임하차']
for row in data:
for i in range(4, 8):
row[i] = int(row[i].replace(',',''))
for row in data:
for i in range(4, 8):
row[i] = int(row[i])
plt.rc('font', family = 'Malgun Gothic')
plt.figure(dpi = 300)
plt.title(row[3] + ' ' + row[1])
plt.pie(row[4:8], labels = label, autopct = '%1.f%%')
plt.axis('equal')
plt.show()
첫번째 8번째 줄까지는 그래프 모듈을 불러오는 것을 제외하면 이전과 같은 내용이다. 그 밑의 반복문도 마찬가지로 데이터의 콤마(,)를 제거하는 코드이다. 그리고 이번에는 11번째 줄의 반복문에서 데이터를 모두 정수화 하는 작업까지 실행했다. 데이터가 그래프에 좀 더 쉽게 표현되기 위해서다. 마지막 6개의 줄은 전부 원 그래프와 관련있는 것이다. 네번째 줄이 그래프를 그리는 코드이고, 나머지는 전부 그래프의 디자인과 비율 조정과 관련되었다.
코드의 실행 결과이다. 빈 네모칸은 내 컴퓨터가 그렇게 좋지 않아서 한글이 깨져서 나오는 것이다.
이렇게 대중교통의 유무임 승하차 데이터를 가지고 파이썬으로 분석을 해보았다. 서울의 대중교통 현황 등을 파이썬을 통해 한번씩 알아갈 수 있었다.
'코딩' 카테고리의 다른 글
인구데이터를 이용한 파이썬 (0) | 2021.02.14 |
---|---|
기온데이터를 이용한 파이썬 (0) | 2021.01.10 |
파이썬의 클래스 & 연산자 add [파이썬 3.7] (0) | 2020.09.05 |
파이썬 클래스(class) 함수 심화 [파이썬 3.7] (0) | 2020.08.15 |
[파이썬 3.7] 함수의 응용 (0) | 2020.08.10 |