반응형
공공데이터 포털 API의 SRT 운행월별 정차역별 승하차 인원데이터를 수집하고 월별 변동률을 확인하겠습니다.
API를 이용하기 위해서는 공공데이터 포털의 API key가 필요합니다.
1. 가입 및 API 신청 및 확인
2. 승하차 인원 데이터 수집
3. 승하차 인원 월별 변동율
1. 가입 및 API 신청 및 확인
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 운행월별 정차역별 승하차 인원데이터를 수집하고 월별 변동율을 확인해 봤습니다.
반응형
'API' 카테고리의 다른 글
[한국은행 API] 우리나라의 국가별 수출총액 수집 및 과거데이터 비교 (4) | 2023.02.17 |
---|---|
[네이버 뷰 크롤링] 검색어에 대한 링크정보 확인 (4) | 2023.02.15 |
[Fred API] 실업률과 비농업고용 및 기준금리 비교 (4) | 2023.02.09 |
[한국은행 API] 국채와 회사채 수집 및 신용스프레드와 주가 (4) | 2023.02.07 |
[농림축산식품 API] 농수축산물 물가조사가격 수집 및 가격비교 (4) | 2023.02.02 |