본문 바로가기

API

[공공데이터포털 API] SRT 운행월별 정차역별 승하차인원

반응형

공공데이터 포털 API의 SRT 운행월별 정차역별 승하차 인원데이터를 수집하고 월별 변동률을 확인하겠습니다.

API를 이용하기 위해서는 공공데이터 포털의 API key가 필요합니다.

 

1. 가입 및 API 신청 및 확인

2. 승하차 인원 데이터 수집

3. 승하차 인원 월별 변동율

 

 

 

1. 가입 및 API 신청 및 확인

https://yenpa.tistory.com/35

 

[공공데이터포털 API] 가입하기 및 인증키(APPKey) 발급, 확인

1. 공공데이터포털(data.go.kr) 가입 2. 인증키(APPKey) 발급 3. 인증키(APPKey) 확인 1. 공공데이터포털(data.go.kr) 가입 공공데이터포털 사이트에 접속합니다. https://www.data.go.kr/ 공공데이터 포털 국가에서

yenpa.tistory.com

 

 


2. 승하차 인원 데이터 수집

필요 라이브러리를 import 합니다.

import requests
import pandas as pd
from IPython.display import display

import plotly.express as px
from plotly.subplots import make_subplots
import plotly.graph_objects as go

 

이 데이터는 2022년 08월부터 제공을 하니, 기간을 202208~202301까지로 지정하겠습니다.

page=1
perPage=2000
returnType='json'
startym='202208'
endym='202302'
#apikey='YOUR_APIKEY'

url = 'https://apis.data.go.kr/B553912/srt_passenger/v1/station_passengers'
params ={'serviceKey' : apikey, 'page' : page, 'perPage' : perPage, 'returnType' : returnType,
        'cond[RUN_YM::GTE]' : startym, 
        'cond[RUN_YM::LT]' : endym }

response = requests.get(url, params=params, verify=False)

response.json()

이 조건으로 1314개의 데이터가 수집이 됩니다.

실제 데이터는 'data'에 list형태로 제공이 됩니다.

 

data 부분만 따로 dataframe으로 변환하고 column명을 알기 쉽게 수정합니다.

df=pd.DataFrame(response.json()['data'])
df.columns=['출발역코드','출발역','도착역코드','도착역','운행연월','승차인원수']
df

데이터가 잘 변환된 것을 알 수 있습니다.

 

출발 도착역을 하나의 column으로 만듭니다.

df['출발도착역']=df['출발역']+ '_' + df['도착역']

 

2022년 8월 ~ 2023년 1월까지 출발역~도착역 별로 승차인원을 구하고,

상위 10개에 대해서만 그래프로 그려보겠습니다.

dftop=df[['출발도착역','승차인원수']].groupby('출발도착역').mean().sort_values('승차인원수',ascending=False).iloc[0:10]
dftop1=pd.DataFrame(dftop)
fig=px.bar(x=dftop1.index,y=dftop1['승차인원수'])
fig.update_layout(title_text='승차인원수 Top10', title_x=0.5)
fig.show()

출발역 도착역 모두 수서가 들어간 구간이 높게 나왔습니다.

 

반응형

 

 

반대로 하위 10개를 구해보겠습니다.

dftop=df[['출발도착역','승차인원수']].groupby('출발도착역').mean().sort_values('승차인원수',ascending=True).iloc[0:10]
dftop1=pd.DataFrame(dftop)
fig=px.bar(x=dftop1.index,y=dftop1['승차인원수'])
fig.update_layout(title_text='승차인원수 하위 10', title_x=0.5)
fig.show()

 

 

3. 승하차 인원 월별 변동률

다음으로는 승하차 인원의 월별 변동률을 구해보겠습니다.

출발도착역 별로 pct_change를 이용해서 월별 변동률을 구해서 변동율에 저장했습니다.

codes=df['출발도착역'].unique()

df1=df.copy()
df1['변동율']=0

for code in codes:
    df1.loc[df1['출발도착역']==code, '변동율'] = df1.loc[df1['출발도착역']==code,'승차인원수'].pct_change()*100

 

그럼 월별로 변동율 상위 5개씩을 확인하겠습니다.

yearmon=df['운행연월'].unique()

dfall=pd.DataFrame()

for ym in yearmon:
    df2 = df1.loc[df1['운행연월']==ym,:].sort_values('변동율', ascending=False).iloc[0:5]

    fig=px.bar(data_frame=df2,x='출발도착역',y='변동율', height=300)
    fig.update_layout(title_text=ym + ' 승차인원수 변동율 Top5', title_x=0.5)
    fig.show()

 

 

반응형

 

월별 변동율 하위 5개를 확인하겠습니다.

yearmon=df['운행연월'].unique()

dfall=pd.DataFrame()

for ym in yearmon:
    df2 = df1.loc[df1['운행연월']==ym,:].sort_values('변동율', ascending=True).iloc[0:5]

    fig=px.bar(data_frame=df2,x='출발도착역',y='변동율', height=300)
    fig.update_layout(title_text=ym + ' 승차인원수 변동율 하위 5', title_x=0.5)
    fig.show()

 

이상으로 SRT 운행월별 정차역별 승하차 인원데이터를 수집하고 월별 변동율을 확인해 봤습니다.

반응형