본문 바로가기
Programming/Python

[ 모두의 데이터 분석 with python ] 3.지하철 데이터

by _S0_H2_ 2020. 5. 8.
728x90
반응형

0. 데이터 가져오기

다음의 책을 참조하였습니다.

 

지하철 데이터를 다운받기 위해서 https://pay.tmoney.co.kr/index.dev 에 접속합니다.

 

데이터를 다운 받습니다.

1 ) subwayfee.csv 파일을 생성하겠습니다.

다운로드 받은 엑셀 파일을 열어 '지하철 유무임별 이용현황' tab으로 이동합니다.

pandas로 불러와서 int로 편하게 바꾸기 위해서 ctrl + F 로 콤마를 찾아 제거합니다.

이후, 작업일시 (I)는 사용하지 않으므로 삭제합니다.

2 ) subwaytime.csv 파일을 생성하겠습니다.

다운로드 받은 엑셀 파일을 열어 '지하철 시간대별 이용현황' tab으로 이동합니다.

pandas로 불러와서 int로 편하게 바꾸기 위해서 ctrl + F 로 콤마를 찾아 제거합니다.

이후, 작업일시(BA)는 사용하지 않으므로 삭제합니다.

 


1. subwayfee 데이터 살펴보기

import pandas as pd
data = pd.read_csv('/모두의 데이터 분석 with 파이썬/Unit4 subwayfee.csv', encoding='cp949')

# 문자열의 값을 정수로 바꿔줍니다.
data.loc[:,['유임승차','유임하차','무임승차','무임하차']].astype(int)

# 유임승차비율 column을 생성합니다.
data['유임승차비율'] = data['유임승차'] / (data['유임승차'] + data['무임승차'])

 


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

# data의 '유임승차비율' column을 기준으로 값을 정렬해보자
data.sort_values(by=['유임승차비율'], axis=0, ascending=False)

0인 값이 있기 때문에 요런 column은 제거해주자.

data = data[ data['유임승차비율'] != 1 ]
data.sort_values(by=['유임승차비율'], axis=0, ascending=False)

첫 번째 행을 확인해보니, 유임승차와 무임승차의 값이 다른 행과 차이나기 때문에 결과가 유의미하지 않다고 느껴진다.

따라서 유임승차 + 무임승차 값이 100,000 이상의 값만 남겨두고 나머지는 제거하자.

data = data[ (data['유임승차'] + data['무임승차']) > 100000 ]
data.sort_values(by=['유임승차비율'], axis=0, ascending=False)

 

결과 : 홍대입구에서의 유임승차비율이 가장 높음을 확인할 수 있었다 !


3. 유무임 승하차 인원이 가장 많은 역은 어디일까?

data.loc[data['유임승차'] == max(data['유임승차']), ['호선명', '지하철역', '유임승차'] ]

=> 유임승차 인원이 가장 많은 지역은 강남역이다 ! 

 

그럼 for문을 이용해서 유임승차, 유임하차, 무임승차, 무임하차인원이 가장 많은 곳을 확인해보자.

max_list = ['유임승차', '유임하차', '무임승차', '무임하차']

for col_name in max_list : 
    display(data.loc[data[col_name]==max(data[col_name]), ['호선명', '지하철역', col_name] ])


4. subwaytime 데이터 살펴보기

import csv
data = pd.read_csv('/content/drive/My Drive/도서 참고/모두의 데이터 분석 with 파이썬/Unit4 subwaytime.csv', encoding='cp949')
data

원본 데이터가 요렇게 생겼기 때문에

dataframe으로 불러오면 Unnamed : n 이 생기고, index=0에 승차와 하차가 반복되어 발생하였다.

 

Unnamed는 이전 열 이름 + '하차' 로 이름을 붙이고, index=0은 삭제한다.

# column을 list로 받은 뒤,
col_name = list(data.columns)

# index >= 4이고 숫자가 홀수이면 column명을 변경한다
for i in range(len(col_name)) :
    if i >=4 and i % 2 == 1 :
        col_name[i] = col_name[i-1]+'하차'

# 변경된 col_name을 data.columns에 저장한다
data.columns = col_name

# index=0 삭제
data.drop(index=0, inplace=True)
data


5. 출근 시간대 사람들이 가장 많이 타고 내리는 역은 어디일까?

출근시간승차, 하차 column을 새로 생성한다. 그리고 출근시간은 7시 ~ 9시로 정하였다 !

data['출근시간승차'] = data['07:00:00~07:59:59'].astype(int) + data['08:00:00~08:59:59'].astype(int)
data['출근시간하차'] = data['07:00:00~07:59:59하차'].astype(int) + data['08:00:00~08:59:59하차'].astype(int)

다음을 하나씩 실행하여 출력해보면,

data.loc[data['출근시간승차'] == max(data['출근시간승차']),['호선명', '지하철역','출근시간승차'] ]
data.loc[data['출근시간하차'] == max(data['출근시간하차']),['호선명', '지하철역','출근시간하차'] ]

요런 결과가 나온다 !

 

+ 보너스 ) 밤 11시에 사람들이 가장 많이 타고 내리는 역은 어디일까?

 

# 가장 많이 타는 역
max_11 = max(data['23:00:00~23:59:59'].astype(int))
show_col = ['호선명', '지하철역','23:00:00~23:59:59']
data.loc[data['23:00:00~23:59:59'].astype(int) == max_11, show_col]


# 가장 많이 내리는 역
max_11 = max(data['23:00:00~23:59:59하차'].astype(int))
show_col = ['호선명', '지하철역','23:00:00~23:59:59하차']
data.loc[data['23:00:00~23:59:59하차'].astype(int) == max_11, show_col]

 


6. 시간대별로 사람들이 가장 많이 타고 내리는 역은 어디일까?

import csv
import matplotlib.pyplot as plt

f = open('/모두의 데이터 분석 with 파이썬/Unit4 subwaytime.csv', encoding='cp949')
data = csv.reader(f)

# 처음 두 줄은 사용하지 않는다
next(data)
next(data)

# 저장할 변수 개수만큼 미리 만들어 둔다
mx = [0] * 24
mx_station = ['']*24

for row in data :
	# map함수를 사용하여 row의 4번째 열부터 모두 int로 변경한다
    row[4:] = map(int, row[4:])
    for j in range(24):
    	# 전체 행을 돌면서 max값이 바뀔 때 마다 바꿔준다
        b = row[5 + j * 2]
        if b > mx[j] :
            mx[j] = b
            mx_station[j] = row[3] + '( ' + str(j+4) + ' )'


plt.rcParams['figure.figsize'] = [10,8]
plt.rc('font', family = 'NanumBarunGothic')
plt.bar(range(24), mx, color='b')
plt.xticks(range(24), mx_station, rotation=90)
plt.show()

 

강남, 홍대입구, 신림이 승하차 인원이 많은 것을 알 수 있었습니다.

728x90
반응형