분석가 황규진 2024. 7. 10. 11:16

대중교통 데이터

대중교통 데이터 내려 받기

 

티머니 카드&페이

티머니카드, 어린이/청소년할인, T마일리지적립, 소득공제, 유통/교통/모바일결제, 고속/시외버스예매

pay.tmoney.co.kr

 

subway.csv
0.03MB

 

 

 

지하철 유무임별 이용현황 데이터 정제(데이터 전처리)

  • row는 리스트형 데이터이고 이 리스트의 각 요소는 문자열 데이터인 것을 확인
  • 인덱스 4부터 7까지는 숫자이므로 정수로 변환
f = open('subway.csv', encoding='cp949')
data = csv.reader(f)

next(data)

for row in data:
  for idx in range(4,8):
    row[idx] = int(row[idx])
  print(row)

f.close()

['Jun-23', '신림선', '4411', '관악산(서울대)', 62350, 64350, 41685, 42081]

 

유임승차 비율이 가장 높은 역은 어디일까?

  1. 테이터를 읽어 온다.
  2. 필요시 데이터를 정제(데이터 전처리)를 한다.
  3. 모든 역의 데이터를 바탕으로 각 역의 유임승차율을 구한다.
  4. 무임승차율이 가장 높은 역과 가장 낮은 역을 찾는다.
  5. 적절한 시각화 방법으로 보고서에 들어갈 그래프를 그린다.
  • 유임승차인원의비율=유임승차인원/무임승차인원
import csv

f = open('subway.csv', encoding = 'cp949')
data = csv.reader(f)

next(data)

rate = []
name_station =[]

for row in data:
  for idx in range(4,8):
    row[idx] = int(row[idx])
  #if row[6] != 0:
  rate.append( row[4]/(row[4] + row[6]) )
  name_station.append(row[3])

for idx in range(len(name_station)):
  print('{} : {:.2f}%'.format(name_station[idx], rate[idx]*100))

f.close()

샛강 : 80.46%

대방 : 79.04%

서울지방병무청 : 72.39%

보라매 : 78.82%

보라매공원 : 72.16%

보라매병원 : 73.73%

당곡 : 71.73%

신림 : 67.70%

서원 : 75.94%

서울대벤처타운 : 76.29%

관악산(서울대) : 59.93%

 

최고 비율

import csv

f = open('subway.csv', encoding = 'cp949')
data = csv.reader(f)

next(data)

rate = []
name_station =[]

for row in data:
  for idx in range(4,8):
    row[idx] = int(row[idx])

  rate.append( row[4]/(row[4] + row[6]) )
  name_station.append(row[3])

f.close()

for idx in range(len(rate)):
  if rate[idx] == max(rate):
    print(name_station[idx],':', rate[idx]*100, '%')

지축 : 100.0 %

연신내 : 100.0 %

까치울 : 100.0 %

춘의 : 100.0 %

신중동 : 100.0 %

 

95% 이상

import csv

f = open('subway.csv', encoding = 'cp949')
data = csv.reader(f)

next(data)

rate = []
name_station =[]
name_line =[]

for row in data:
  for idx in range(4,8):
    row[idx] = int(row[idx])

  rate.append( row[4]/(row[4] + row[6]) )
  name_station.append(row[3])
  name_line.append(row[1])

f.close()

for idx in range(len(rate)):
  if rate[idx] >= 0.95:
    print( name_line[idx] + '-' + name_station[idx],':', rate[idx]*100, '%')

2호선-한양대 : 95.65348153810488 %

2호선-홍대입구 : 95.06278500780586 %

3호선-충무로 : 98.21428571428571 %

일산선-지축 : 100.0 %

6호선-연신내 : 100.0 %

7호선-까치울 : 100.0 %

7호선-춘의 : 100.0 %

7호선-신중동 : 100.0 %

공항철도 1호선-홍대입구 : 95.21693034404622 %

 

유무임 승하차 인원이 가장 많은 지역

import csv

f = open('subway.csv', encoding = 'cp949')
data = csv.reader(f)
next(data)

population=[]
maxs_pop = [0] * 4
names_station = [''] * 4
labels = ['최고 유임 승차 인원', '최고 유임 하차 인원', '최고 무임 승차 인원', '최고 무임 하차 인원']

for row in data:
  for idx in range(4,8):
    row[idx] = int(row[idx])
    if row[idx] > maxs_pop[idx-4]:
      maxs_pop[idx-4] = row[idx]
      names_station[idx-4] = row[3] + "-" + row[1]

for i in range(4):
  print( labels[i] + ':'+names_station[i]+':', maxs_pop[i] )

최고 유임 승차 인원:강남-2호선: 2123826

최고 유임 하차 인원:홍대입구-2호선: 2092841

최고 무임 승차 인원:종로3가-1호선: 304455

최고 무임 하차 인원:제기동-1호선: 29575