지하철 데이터 분석 | 지하철데이터분석 모든 답변

당신은 주제를 찾고 있습니까 “지하철 데이터 분석 – 지하철데이터분석“? 다음 카테고리의 웹사이트 https://you.charoenmotorcycles.com 에서 귀하의 모든 질문에 답변해 드립니다: https://you.charoenmotorcycles.com/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 소희 안 이(가) 작성한 기사에는 조회수 101회 및 좋아요 8개 개의 좋아요가 있습니다.

Table of Contents

지하철 데이터 분석 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 지하철데이터분석 – 지하철 데이터 분석 주제에 대한 세부정보를 참조하세요

지하철 데이터 분석 주제에 대한 자세한 내용은 여기를 참조하세요.

국토교통 빅데이터 온라인 해커톤 경진대회

따라서 저희는 수도권 전철에 대한 포괄적인 분석을 위해 “한국교통안전공단 교통카드 데이터”를 사용하여 COVID19 확산 전후의 지하철 이용 패턴을 분석하였습니다. 특히 …

+ 여기에 보기

Source: dacon.io

Date Published: 12/30/2021

View: 9736

판다스 – 지하철 공공데이터 분석 (2020년 1월 ~ 5월) : 전처리

우선 1월의 데이터프레임을 맛보기로 봐보자. 우선 고려해야할 것은 사용일자 컬럼이다. 이 컬럼은 날짜를 나타내고, 숫자형으로 등록되어 있다.

+ 여기에 표시

Source: steadiness-193.tistory.com

Date Published: 9/21/2021

View: 1180

[ 빅데이터의 이해 ] 공공 데이터를 이용하여 지하철 이용객 …

주로 빅데이터 이론에 대해서 배웠고, 분석 방법도 이론만 배웠다. 교양 과목이었지만, python 언어를 활용할 수 있기 때문에. 다른 수강생들과 차이점을 …

+ 자세한 내용은 여기를 클릭하십시오

Source: jerrys-ai-lab.tistory.com

Date Published: 12/3/2022

View: 8787

7. 지하철 승하차 데이터 분석 따라하기_1

누구나 쉽게 따라하는 데이터 분석. 7. 지하철 승하차 데이터 분석 따라하기_1. 관리자. Author: 관리자. 조회수: 1,556. 2020 데이터산업 백서 · 6. 데이터 정제 기법 …

+ 여기에 더 보기

Source: dataonair.or.kr

Date Published: 1/25/2021

View: 3460

[월간 데이터 분석] 지하철 앉아서 가고 싶다!! – 브런치

그리하여 처음 시도하는 월간 데이터 분석 첫 주제는 ‘지하철은 언제 어디서 사람이 많이 탈까’입니다. 이 주제를 생각한 계기는 학교 1교시 수업이 …

+ 여기에 표시

Source: brunch.co.kr

Date Published: 10/17/2022

View: 3650

[Python] 파이썬을 이용한 공공 데이터 분석 및 활용(2)

이번 프로젝트에서는 서울 열린 데이터 광장에서 제공하는 서울시 지하철 호선별 역별 승하차 인원 정보 데이터를 분석하고 지하철 역 위치 좌표 …

+ 자세한 내용은 여기를 클릭하십시오

Source: smartreporter3.tistory.com

Date Published: 8/8/2022

View: 6330

Pandas를 이용한 지하철 데이터 분석 – 환희는 오늘도 뚠뚠

지하철 데이터¶. In [1]:. import numpy as np import pandas as pd import matplotlib.pyplot as plt. In [2]:. data = pd.read_csv(‘CARD_SUBWAY_MONTH_201901.csv’).

+ 여기에 자세히 보기

Source: jfun.tistory.com

Date Published: 11/8/2021

View: 1320

데이터로 보는 서울시 대중교통 이용

지하철과 버스는 대표적인 대중교통 수단입니다. … 지하철 이용 인원 데이터를 승차인원과 하차인원으로 분리하여 분석해보면, 각 역이 위치한 지역의 특색을 파악 …

+ 더 읽기

Source: www.bigdata-map.kr

Date Published: 2/30/2022

View: 4282

[논문]빅데이터 분석을 이용한 지하철 혼잡도 예측 및 추천시스템

본 논문에서는 기존의 지하철 혼잡도를 다중 회귀 분석으로 예측하고 빅데이터 처리를 통한 실시간으로 혼잡도를 모니터링하고, 자신의 출발역과 도착역 정보뿐만 …

+ 자세한 내용은 여기를 클릭하십시오

Source: scienceon.kisti.re.kr

Date Published: 7/16/2021

View: 9689

주제와 관련된 이미지 지하철 데이터 분석

주제와 관련된 더 많은 사진을 참조하십시오 지하철데이터분석. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

지하철데이터분석
지하철데이터분석

주제에 대한 기사 평가 지하철 데이터 분석

  • Author: 소희 안
  • Views: 조회수 101회
  • Likes: 좋아요 8개
  • Date Published: 2022. 3. 27.
  • Video Url link: https://www.youtube.com/watch?v=-uXxS4WfTvc

도시의 동맥, 지하철을 진단하자! 수도권 고령자/청소년 지하철 이용 패턴 분석

만약 열람시 tableau 로딩에 에러가 발생하면 새로고침 하거나 첨부된 링크를 참조해주시기 바랍니다. 감사합니다!

—————————

안녕하세요, 팀 acg입니다!

도시의 동맥, 지하철을 진단하기 위해 한국교통안전공단 수도권 (서울, 경기, 인천) 지하철 데이터를 Python으로 전처리한 뒤 GIS정보를 활용해 시각화했습니다. 이용자 유형별로 데이터를 나누어 패턴을 살펴보면서 노령 인구와 청소년 인구의 특수성을 고려하였습니다. 끝으로 COVID19에 대한 교통 차원의 대응 방안과 수도권 교통 문제에 대한 전반적인 제언을 마련하였습니다.

판다스 – 지하철 공공데이터 분석 (2020년 1월 ~ 5월) : 전처리

반응형

데이터 출처

https://data.seoul.go.kr/dataList/OA-12914/S/1/datasetView.do

1. 데이터 불러오기

위의 2020년 1월부터 5월까지의 csv 파일을 subway 폴더에 저장해서

glob를 이용해 불러온다.

https://steadiness-193.tistory.com/27

우선 1월의 데이터프레임을 맛보기로 봐보자

우선 고려해야할 것은 사용일자 컬럼 이다.

이 컬럼은 날짜를 나타내고, 숫자형으로 등록되어 있다.

따라서 데이터를 불러올 때 parse_dates를 이용하는 것이 좋아보인다.

2. 데이터 합치기

이제 for loop를 이용해 리스트에 데이터프레임을 쌓고

concat을 이용해 합치면 된다.

단, csv 인코딩 문제가 있어서

불러올 때 encoding 파라미터를 이용해야, 글자의 깨짐이 없고 문제 없이 불러올 수 있다.

** 5월의 csv 파일은 utf-8로 해야 읽힌다.

encoding에 넣을 만한 코드는 아래와 같다.

euc-kr, cp949, latin_1, utf-8, utf-16

이제 df_list를 concat해주자

기존 인덱스가 유지되어 합쳐졌으니

인덱스를 초기화 해주자

3. 데이터 살펴보기

이제 이 데이터프레임의 정보를 살펴보면

총 6개의 컬럼이 있고, 사용일자는 datetime으로 잘 불려왔다.

누락값이 있지는 않은지 확인해보자

다행히 누락값은 없다.

4. 불필요한 컬럼 삭제 및 연/월/일 컬럼 추가

사실 등록일자 컬럼은 필요가 없으니 삭제하고

사용일자의 컬럼에서 연, 월, 일을 얻어 하나씩 컬럼을 추가해보자

https://steadiness-193.tistory.com/60

dt 연산자에 대한 내용은 위 포스팅 참조

마지막으로 한번 더 각 컬럼의 유형을 보면

연, 월, 일 컬럼이 정수형으로 잘 추가되었다.

5. 분석에 이용할 총 승객수 컬럼 추가

승차총승객수와 하차총승객수를 합친 total 컬럼을 추가했다.

반응형

[ 빅데이터의 이해 ] 공공 데이터를 이용하여 지하철 이용객 데이터 분석

제리

2021년 1학기에 진행한 프로젝트인데, 그동안 다사다난하여 이제야 프로젝트 로그를 적는다.

이 프로젝트는 학교 기말과제로 제출하였고, 제목에도 있듯이 ‘빅데이터의 이해’라는 과목이었다.

해당 기말과제는 자유로운 주제로 데이터를 분석하는 것이었다.

단, 공공데이터를 이용해야 된다.

이 과목은 프로그래밍 언어를 가르치는 것은 아니다.

주로 빅데이터 이론에 대해서 배웠고, 분석 방법도 이론만 배웠다.

교양 과목이었지만, python 언어를 활용할 수 있기 때문에

다른 수강생들과 차이점을 두기 위해 python을 이용해서 분석하기로 마음을 먹었다.

참고문헌 포함하여 10페이지 안으로 보고서를 작성해야 되기 때문에

많은 내용을 담지는 못하지만, 대충 하는 성격은 못되어서 보고서에 담지 못한 내용까지 포함하여

블로그에 정리를 하려고 한다.

결과부터 말하자면 기말과제는 만점을 받았고, 학점은 A+을 받았다.

보고서에 적은 순서로 포스팅을 할 예정이다.

1. Project 목적

2. 배경 및 필요성

3. 데이터 수집 및 전처리

4. 데이터 분석

5. 결론

언어 : Python

사용 라이브러리 : pandas, folium, googlemaps

# 필요 라이브러리 import import pandas as pd import folium import folium.plugins as plugins import googlemaps

참고로 해당 프로젝트는 2021년 6~7월에 진행한 것이라서 지금이랑 코로나 상황이 많이 다르다.

500~1500명 정도로 지금보다는 확연히 적은 수이지만, 물론 이때도 심각하였고 거리두기를 강화해서 저녁 10시 제한이 걸려있는 상황이다.

[ Project 목적 ]

중학생 때부터 지겹도록 서울 지하철을 많이 타고 다녔다. 물론 지금도 지겹도록 타고 있다.

아침 출근시간, 저녁 퇴근시간을 보면 유동인구가 많은 역에는 역무원들이 추가로 배치되어 있는 것을 볼 수 있다.

구토나 음식물로 인하여 전철이 오염되거나 갑작스러운 상황을 미리 대비하기 위해 적은 직원들을 효율적으로 배치하고 집중 분배를 시킬 필요가 있다.

집중분배를 하기 위해 승·하차 인원 정보 데이터를 이용하여 언제, 어디에 사람들이 제일 많이 모이는지 확인한다.

특히 거리두기 강화로 저녁 10시에 승·하차인원이 급증하게 되는데 이때 어느 지하철역의 사람이 제일 많이 모이는지 확인한다.

이 프로젝트를 통해서 서울 지하철의 직원을 효율적으로 배치하기 위해 데이터 분석을 통하여 언제, 어디에 승객들이 가장 많이 모이는지 미리 예측할 수 있도록 도움을 주고자 한다.

(물론, 이미 데이터 분석을 통해서 효율적으로 배치하고 있을 것이다.)

[ Project 배경 및 필요성 ]

옛날에도 자주 겪었고, 최근에 또 겪었던 일이 있다.

학교를 다닐 때 지하철 마지막 차를 많이 탔었는데 술을 먹고 타는 사람들이 굉장히 많았다.

그래서 마지막 차를 타면 높은 확률로 구토를 자주 본다.🤮🤮

이제는 사회적 거리두기 강화로 인하여 저녁 10시가 되면 식당 문을 닫아서 저녁 10시까지 빠르게 먹고 지하철을 타는 사람들이 많다. (이때는 저녁 10시였다.)

마지막 차처럼 술에 취한 사람도 많지만, 사람도 많아서 구토를 발견하면 너무 큰 피해를 준다.

지하철 안에서 구토를 하거나 음식물을 흘린 사람들은 휴지 같은 닦을 것이 없어서 못 치워서 주변 사람들에게 휴지가 있는지 물어봐서 치우는 게 정상이지만, 대부분은 다른 칸으로 가던가 그냥 나가버린다.

객실 내부의 청소는 보통 종착역에 도착했을 때 하기 때문에, 종착역 도착하기 전에 오염이 되면 좌석에 앉지도 못하고 냄새로 인하여 주변에 여러모로 피해가 많기 때문에 신속한 처리가 필요하다고 본다.

목적에도 말하였듯이 출퇴근 시간에 사람들이 많이 몰리는 지하철역에는 직원이 앞뒤로 1명씩 배치가 되어있는 것을 종종 본다. 하지만, 그렇지 않은 역이 대부분이고 지하철 운행하는 기관사분이 마이크를 통해 말을 하여도 통제가 전혀 되지 않는다. 이러면 다음 열차부터 계속 지연되어서 몇 백에서 몇 천이 피해를 보는 것이다.

이런 피해를 자주 당해서 언제 어디에 승객들이 많이 몰리는지 알려주어야겠다는 필요성을 느꼈다.

해결하기 위해서 직원을 더 뽑는 방안도 있다.

하지만 2021년 코로나19와 우대권 등의 관한 문제로 인하여 서울교통공사의 예상 적자가 1조 넘게 발생하였고, 적자는 점점 늘어나고 있다.

관련 뉴스 : https://www.news1.kr/articles/?4332941

큰 폭으로 적자가 증가하고 있다.

덩달이 직원도 감축하기 때문에 더 채용하거나 근무시간을 늘리는 것은 불가능하다.

그래서 남은 직원을 이용하여 효율적으로 운영시키는 것이 필요하다.

이것에 대해서 여러 조사를 하다가 서울교통공사가 적자라는 것에 대해 크게 와닿은 영상이 있었다.

인형을 팔았다는 사실을 이 영상 보고 알았지만, 적자가 심각하다는 것을 각인시킨 영상이었다.

[ 데이터 수집 및 전처리 ]

데이터 수집

데이터는 [서울시 지하철 호선별 역별 시간대별 승·하차 인원 정보]를 이용하였고, [서울 열린 데이터 광장]에서 수집하였다.

이 데이터는 티머니로부터 제공받았다고 한다.

http://data.seoul.go.kr/dataList/OA-12252/S/1/datasetView.do

2015.01부터 2021.05까지의 승·하차 인원 수가 적혀 있는 데이터이다.

데이터는 정형 데이터로 되어있고, 속성은 [사용 월, 호선명, 지하철역, 시간별 승·하차인원]으로 총 52개로 구성되어있다.

# 승하차 인원정보 (2021.05~2015.01) station_people = pd.read_csv(‘서울시 지하철 호선별 역별 시간대별 승하차 인원 정보.csv’,encoding=’EUC-KR’) # info station_people.info()

컬럼이 너무 많아서 짤렸지만 03시~04시까지 있다.

# size station_people.shape

행은 44730개가 있고 총 52개의 열로 구성되어있다.

데이터 전처리 1 – 지하철역 위치

역 위치를 파악하여 지도를 통해 시각화를 하기 위해 folium라이브러리를 사용하였고, 지하철역 위경도를 뽑기 위해 googlemaps 라이브러리를 사용했다.

후에 설명을 하겠지만, 이런 식으로 시각화를 도와주는 라이브러리들이다.

시각화를 위해서는 우선적으로 지하철역의 위경도를 알아야 한다.

해당 데이터셋에 위경도 관련 정보를 없기 때문에 위경도가 있는 데이터셋을 찾아보려고 했으나, 마땅한 데이터가 없어서 포기하고 googlemaps 라이브러리를 이용해 위경도를 추가하였다.

※ 관련 내용은 밑 블로그 게시글을 참고

https://eunjin3786.tistory.com/304

# data read address_station = pd.read_csv(‘서울시 지하철 호선별 역별 시간대별 승하차 인원 정보.csv’,encoding=’EUC-KR’) # 호선명이랑 지하철 역 정보만 추출 address_station=address_station.loc[address_station[‘사용월’]==202105,:] address_station=address_station[[‘호선명’,’지하철역’]]

서울 지하철역이 새로 생기는 것도 있고, 없어지는 것도 있기 때문에 제일 최근 값인 21년 5월에 승·하차 데이터가 발생한 지하철역을 가지고 왔다.

호선명은 역 이름이 같은 경우 구분하기 위해서 가져왔다. (양평 – 중앙선, 5호선)

# 정확한 위도와 경도를 얻기위해 역 추가 for i in address_station.index: station=”.join(list(address_station.loc[i,[‘지하철역’]])) if station[-1] != ‘역’: address_station.loc[i,[‘지하철역’]] = station+’역’

구글맵에서 위경도 값을 가져오기 때문에 검색을 위해서 정확한 지하철역 이름으로 했다.

my_key = “******************************************” maps = googlemaps.Client(key=my_key) lat = [] #위도 lng = [] #경도 # 위치를 찾을 장소나 주소를 넣어준다. places = list(address_station[‘지하철역’]) i=0 for place in places: i = i + 1 try: geo_location = maps.geocode(place)[0].get(‘geometry’) lat.append(geo_location[‘location’][‘lat’]) lng.append(geo_location[‘location’][‘lng’]) except: lat.append(”) lng.append(”) print(“%d번 인덱스 위치를 찾는데 실패했습니다.”%(i)) # 데이터프레임만들어 출력하기 df = pd.DataFrame({‘위도’:lat, ‘경도’:lng}, index=places) print(df)

위 코드 결과

208번 인덱스를 제외하고 나머지의 위·경도는 잘 찾은 모습이다.

address_station[‘위도’]=lat address_station[‘경도’]=lng # 동일한 역 처리 address_station.loc[(address_station[‘지하철역’]==’양평역’)&(address_station[‘호선명’]==’5호선’),[‘위도’]]= 37.526226 address_station.loc[(address_station[‘지하철역’]==’양평역’)&(address_station[‘호선명’]==’5호선’),[‘경도’]]= 126.8844202 address_station.loc[(address_station[‘지하철역’]==’양평역’)&(address_station[‘호선명’]==’중앙선’),[‘위도’]]= 37.4927357 address_station.loc[(address_station[‘지하철역’]==’양평역’)&(address_station[‘호선명’]==’중앙선’),[‘경도’]]= 127.4896358 # 위도 경도 못찾는 역 삽입 address_station.loc[(address_station[‘지하철역’]==’증산(명지대앞)역’),[‘위도’]]= 37.5819884 address_station.loc[(address_station[‘지하철역’]==’증산(명지대앞)역’),[‘경도’]]= 126.9101305

이름이 동일한 역의 위·경도를 수정하고 208번 인덱스(‘증산(명지대앞)역’) 위·경도를 추가했다.

# 서울시 중심부의 위도, 경도 입니다. center = [37.541, 126.986] # 맵이 center 에 위치하고, zoom 레벨은 11로 시작하는 맵 m을 만듭니다. m = folium.Map(location=center, zoom_start=10) # 컬러 딕셔너리 (6호선 색깔이 없어서 검정으로 대체) c_dic = {‘1호선’:’darkblue’,’2호선’:’green’,’3호선’:’orange’,’4호선’:’lightblue’,’5호선’:’darkpurple’,’6호선’:’black’,’7호선’:’darkgreen’,’8호선’:’pink’,’9호선’:’beige’,’중앙선’:’blue’, ‘9호선2~3단계’:’beige’,’경강선’:’cadetblue’,’경부선’:’cadetblue’,’경원선’:’cadetblue’,’경의선’:’cadetblue’,’경인선’:’cadetblue’,’경춘선’:’blue’,’공항철도 1호선’:’cadetblue’,’과천선’:’cadetblue’,’분당선’:’lightred’ ,’수인선’:’lightred’,’안산선’:’red’,’우이신설선’:’cadetblue’,’일산선’:’red’,’장항선’:’cadetblue’} # Choropleth 레이어를 만들고, 맵 m에 추가합니다. for i in address_station.index: folium.Marker( location = list(address_station.loc[i,[‘위도’, ‘경도’]]), popup = address_station.loc[i, ‘지하철역’], icon=folium.Icon(color=c_dic[address_station.loc[i, ‘호선명’]],icon=’star’) ).add_to(m) # 맵 m을 저장 m.save(‘map.html’)

folium 라이브러리를 이용해서 지하철역마다 위·경도가 제대로 들어갔는지 확인했다.

호선 색깔을 최대한 현실 반영해서 만들었다.

지하철역위치.html 0.61MB

결괏값은 이런 식으로 나오고 확대·축소도 가능하다.

서울 지하철이 얼마나 많은지 한눈에 확인이 가능하다.

앞으로 위·경도 정보는 시각화할 때마다 사용하기 때문에 저장

# csv 저장 address_station.to_csv(“서울교통공사_역주소_위경도.csv”,index=False)

데이터 전처리 2 – 날짜 지정

해당 데이터는 2015.01부터 2021.05까지의 승하차 인원수가 있다.

그래서 코로나 상황이랑 그전에 있었던 상황이 많이 다르기 때문에,

코로나가 급격히 유행이 되면서 사회적 거리두기가 2단계로 격상된 2020년 8월부터 2021년 5월까지의 데이터만 가지고 왔다.

# 2020.08 그 전 데이터는 제외 for i in station_people.index: if int(station_people.loc[i,[‘사용월’]])==202007: break station_people = station_people.loc[:6041,:] station_people.shape # csv 저장 station_people.to_csv(“서울시 지하철 호선별 역별 시간대별 승하차 인원 정보_202008까지.csv”,index=False)

공공데이터라서 null값도 없고, 정형이기 때문에 전처리는 여기까지 했다.

이제 승차인원이 많은 곳은 어디인지, 하차인원이 많은 곳은 어디인지, 시각화를 통해서 분석을 할 예정이다.

다음 포스팅에서 이어짐..

[월간 데이터 분석] 지하철 앉아서 가고 싶다!!

안녕하세요 월간 데이터 분석 3월호를 가지고 왔습니다.

자체적으로 프로젝트라면 프로젝트를 매달 하려고 하니 학교 일정도 바쁘고 따로 하는 공부들도 있으니 내심 부담이 되었습니다. 그래도 계획하기를 정말 어려운 프로젝트를 하는 것이 아니라 통계기법, 머신러닝 기법 하나도 안 쓰더라도 해결하고자 하는 문제를 찾고 데이터를 구하고 분석해서 마지막에 해결책이나 방향성을 제시하는 과정을 매달 하자는 생각이었기 때문에 조금은 덜 부담 느끼면서 진행했던 것 같습니다.

그리하여 처음 시도하는 월간 데이터 분석 첫 주제는 ‘지하철은 언제 어디서 사람이 많이 탈까’입니다. 이 주제를 생각한 계기는 학교 1교시 수업이 많다 보니 운 좋게 앉을자리를 구하면 부족한 잠을 보충하거나 다른 것을 할 수 있는데 서서 가면 아침부터 벌써 힘들고 사람들이랑 계속 부딪히기 때문입니다. 사실 이 문제에는 정답이 이미 있습니다. 조금이라도 일찍 지하철을 타면 됩니다. 진짜 조금 일찍 타면 줄을 먼저 설 수 있고, 지하철 단위에서 일찍 타면 출퇴근 시간대라는 가정 하에 당연히 앞에 차일수록 탄 사람이 적겠죠. 하지만 한 수업 시간에 데이터 사이언티스트로 현업에 계시면서 금요일 저녁 강의를 하시던 교수님 얘기가 떠올랐습니다. 교수님께서 한 번은 비 오는 날과 카페 방문 횟수와의 상관성을 조사했는데, 비가 오는 날에 사람들이 카페를 덜 이용했다는 결과가 나왔다고 합니다. 그랬더니 다른 직원 분이 그 당연한 걸 왜 조사해서 시간 낭비하냐는 식으로 얘기했고, 교수님께서는 당연하다고 생각되는 것이던 아니던 데이터로 확실하게 검증하고 앞으로는 확실한 정보를 가지고 계획을 짤 수 있게 되었기 때문에 이것은 시간 낭비가 아니라 고 대답했다고 합니다. 사실 증거를 대보기 전에 당연히 그런 것은 없습니다. 이렇게 생각하는 것은 사후 판단 편향(hindsight bias)에 해당됩니다. 단어가 생각이 안 나서 검색했더니 나무 위키에서 이런 예를 들었는데, 딱 맞습니다.

나무위키 – 편향[https://namu.wiki/w/%ED%8E%B8%ED%96%A5]

그래서 한 번 더 보기도 하고 단지 저의 문제만 해결하는 것이 아니라 제 코드를 조금만 손 보면 다른 분들도 자신의 거주지역에 적용해 볼 수 있게 해 보자는 생각이었습니다. (이 주소에 코드를 올려놓고 설명이나 수정은 지속적으로 하도록 하겠습니다.)

아 혹시 앉아있던 사람이 내리는 걸 예측해서 거기 앞에 서성이고 싶으신 분들은 최규민 님이 재밌게 진행하신 ‘강남 출근길에 판교/정자역에 내릴 사람 예측하기’를 보셔도 좋을 것 같습니다.

이번 데이터는 감사하게도 ‘공공데이터 포털’에 있는 것이 쓸만하여 그 데이터를 사용했습니다. 이 데이터에는 1-8호선 정보만 있었고 단위가 시간이었기 때문에 7시라고 하면 7시부터 7시 59분의 시간 동안 일어난 모든 승하차 정보의 합입니다. 이런 점을 감안하면서 읽어주시면 좋겠습니다. 처음에는 데이터를 대충 둘러보고 제가 분석하기 좋을 것 같은 형태로 변환시켜주는 작업을 했습니다. 고민도 많이 하고 비효율적인 코드를 짜서 처리하는데 오래 걸리기도 하는 등 시행착오를 겪고 다시 효율적이고 제가 원하는 형태가 나오게 바꿨더니 저장할 때 인코딩이 또 문제가 되고… 그렇게 해서 전처리가 끝난 데이터로 다음과 같은 질문을 던져 봤습니다.

1. 시간대별 – 특히 출퇴근 시간대 + 막차 시간대 – 에 어디에 사람이 많이 탈까? ——전체적으로 유동인구보다는 내린 사람 대비 탄 사람이 얼마나 많은가에 중점을 뒀습니다. 저는 앉아야 하니까요^^

2. 주중, 주말에 차이가 있을까?

3. 역들은 대체적으로 양끝은 사람이 적고 가운데에 사람이 많은 정규분포를 따를까?

일단 1번과 2번 질문은 어느 정도 묶어서 생각했기 때문에 모든 분석은 주중인지 주말인지에 따라서 2가지로 분석했습니다. 또한 시간대는 5시부터 7시, 저녁 6시, 23시, 24시 이후였습니다. 먼저 첫차 시간대에 해당하는 5시를 보시겠습니다. 좌측이 주중, 우측이 주말입니다 – 앞으로도 이 형식을 유지할 것입니다. 모든 역에 대해 다룰 수 없기에 각 시간대별로 [승차 인원 – 하차 인원] 수(앞으로는 그냥 사람 수라고 해도 이 값을 의미합니다)가 많은 역 top 40을 뽑았습니다. 핑크색 선은 top 40 중 상위 10%에 해당하는 값, 빨간 선은 25%, 검정 선은 평균(중간값이 아닙니다), 파란색은 하위 25%에 해당하는 값입니다.

주중에는 신림, 신도림, 서울대입구, 구로디지털단지 비교적 가까운 4곳이 사람 수가 제일 많았습니다. 저기에 무슨 일이 있나요? 궁금한데 단순 검색으로는 원인을 알기 힘들더라고요. 주말 5시에는 다른 곳 다 필요 없습니다. 홍대입구가 미친 듯이 쏟아있습니다. 다들 신나게 놀고 첫차를 이용하시나 봅니다. 이태원도 어느 정도 같은 맥락이라고 봐도 되겠죠? 주말에도 신림, 신도림, 구로디지털단지, 서울대입구의 2호선 좌하단 연합은 굳건했습니다.

다음은 6시입니다.

주중 기준 5시에 비해 역당 500명 정도는 많다고 볼 수 있겠네요. 신림은 여전히 사람이 많았지만 아까부터 선두권에 있던 연신내, 쌍문, 수유 등이 상당히 높은 사람 수를 보였고 저희 집 근처인 까치산, 화곡, 우장산 트리오가 나름 높은 위치에 있네요. 주말에는 역시나… 홍대 당신은 대체… 어떻게 사람이 놀고 바로 첫차 타고 가겠습니까? 쉬다 보면 첫차보다 늦게 탈 수도 있죠.

거의 본격적인 등교, 출근 시간대인 7시 보시겠습니다.

같은 사진 올린 줄 알고 착각했을 정도로 비슷한 멱분포가 나왔습니다. 특히 상위권에는 계속해서 나왔던 역들이 또 나오고 있습니다. 그래서 그냥 넘어갈까 했는데 아까 말씀드린 까치산, 화곡, 우장산 트리오가 우장산역은 그래도 40위권에서 뒤쪽이라고 쳐도 까치산, 화곡은 탑 6 안에 두 개가 랭크되어있습니다. 어쩐지 우장산에서 자리를 못 잡으면 30분 정도 못 잡는 경우가 많았는데 다 이 트리오 덕분이었습니다. 주말에는 강세였던 홍대입구께서 조금 내려간 것을 볼 수 있습니다.

6-7시 타임에 대한 내용은 이따 다시 분석하겠습니다. 다음은 시간을 뛰어넘어 오후 6시(18시) 보겠습니다.

이 시간대는 앞서 봤던 시간대들과는 속성이 다릅니다. 앞서 봤던 시간대들은 출근+등교 시간이라고 볼 수 있고 사람들이 다양한 지역에 살기 때문에 상대적으로 여러 거주지에서 사람들이 탔다고 볼 수 있습니다. 하지만 이 시간대는 퇴근 시간이고 하교 시간은 아닙니다. 대학생들에겐 일반적으로 정해진 하교 시간이라는 개념은 없으니까요. 높은 순위에 있는 역들은 대체로 회사 밀집 지역인 것을 쉽게 알 수 있습니다. 주말에는 삼성역과 을지로입구 역이 수가 많기는 하지만 전체적으로 어떤 설명 거리를 찾지는 못했습니다. 보이는 경향성이 있다 싶으시면 알려주시는 것을 반영하겠습니다.

19시입니다.

역시 대체적으로 비슷하지만 6시에 비해 사람이 절반입니다. 아마도 야근을 늦게까지 할지언정 야근하지 않는 사람들은 대부분 6시에 귀가하고 7시에 귀가하는 분들은 그보다 적나 봅니다. 주말은 마찬가지로 좀 난해합니다…

23시입니다.

제 개인적으로 흥미로웠던 시간대는 이 시간대와 5,6시 시간대였습니다. 딱 보면 사람들이 어디서 노는지 알 거 같지 않나요? 또 한 가지 볼 만한 것은 주중에는 강남이 더 인기가 많고, 주말에는 홍대가 더 인기가 많았다는 점입니다. 강남은 주중이 더 재밌고 홍대는 주말이 더 재밌다고 이해해도 되겠죠? 저도 이 정보를 참고해서 놀아야겠습니다. 심지어 주중, 주말을 크게 구분해서 볼 필요도 없습니다.

이제 막차 시간입니다.

강남 근처만 피하면 나머지는 쾌적하게 앉아서 갈 수 있을 거 같습니다. 처음으로 0이 안 되는 수가 나왔죠? 하지만 주말에는 여러분이 그동안 봤던 그래프들에 비해 형태가 더 과격합니다. 주말에는 막차가 일찍 끊기기 때문에 막차 시간대에 사람들이 대부분 집으로 돌아갔다는 것을 알 수 있습니다.

아직 끝난 것은 아닙니다. 아까 오전 시간대의 묘미를 여러분들도 느끼셨을 것 같은데요, 그래서 주중 6시, 주중 7시, 주말 6시, 주말 7시에 랭크에 올랐던 지하철역들을 놓고 랭크에 기반해서 그래프를 그려봤습니다. 참고로 숫자가 높을수록 사람이 많은 것이고, 어디선 랭크에 올라갔고 다른 곳에선 그렇지 않은 역들이 많아서 그때는 0이라는 기준선에 있게 했습니다.

위에서 언급했던 신림, 쌍문, 연신내, 수유 등이 지속적으로 위쪽에 랭크되었다는 것을 확인할 수 있습니다. 하지만 이 그래프를 보면 위쪽에 뭐가 랭크되었다보다 눈에 띄는 것이 여러 삼각형들입니다. 그래서 역들 중 어느 정도 큰 삼각형을 그리는 역들을 골라 그래프를 그려봤습니다.

[강변 구의 구파발 낙성대 남구로 남한산성입구 단대오거리 대림 마들 미아 부평구청 상일동 신대방삼거리

신도림 신촌 이태원 잠실새내 홍대입구 화랑대] 19개 역이 선정되었습니다. 이를 좀 더 세분화해봤습니다.

왼쪽은 역삼각형에 가까운 모양, 오른쪽은 삼각형에 가까운 모양으로 나눠봤습니다.

역삼각형은 [구의 낙성대 마들 미아 부평구청 신도림], 삼각형은 [강변 구파발 남구로 남한산성입구 단대오거리 대림 상일동 신대방삼거리 신촌 이태원 잠실새내 홍대입구 화랑대]가 있었습니다.

평일 7시에 영향을 받는 역들도 있었지만 대부분 영향을 크게 받으면 주말 6시였습니다. 따라서 주말 오전에 이동하신다면 역삼각형에 속한 역들 주변에 거주하시는 분들은 일찍 이동하시고, 삼각형에 속한 역들 주변에 거주하시는 분들은 늦게 이동하시는 것이 좋아 보입니다. 물론 랭크만으로 모든 걸 설명할 순 없습니다. 오전 6시 1등 하는 역보다 오전 7시 20등 하는 역에 사람이 더 많으니까요!

이제부터는 각 호선별로 역마다 인원을 그래프로 그려봤습니다. 각 역마다 고유번호가 있는 것은 다들 알고 계신가요? 예를 들어 1호선이면 100에 가까울수록 앞쪽 역이고 200에 가까울수록 뒤쪽 역입니다. 그것에 기반해서 그래프를 그려봤습니다. 역이 갈라지거나 순환하는 경우도 있으나 그것까지 고려해서 시각화하긴 어려워서 역 번호순으로 했다는 점 고려하고 보시면 좋겠습니다. 상단 왼쪽부터 1호선 하단 마지막이 8호선입니다.

다들 7시 대 기준입니다. 대부분 중앙에 위치한 역들에서 타는 사람보다 내리는 사람이 많은데, 이를 무시하고 가운데가 더 높은 역들은 정말 피해야 되는 곳입니다. 내리는 사람도 많은데 타는 사람이 엄청 많다는 것을 의미하거든요. 각자 주로 이용하는 역을 기준으로 살펴보시고 우리 집 주변이 몇 번쯤 되나 확인 후에 지하철 앉아가기 전략을 짜시기 바랍니다. 마지막으로 본 목적이었던 저의 전략을 위해 방화역부터 발산역까지 7시에 사람이 얼마나 타는지를 확인해 봤습니다.

지옥입니다… 발산역까지 누적합은 4500명 가량으로 7시 대에 19대의 지하철이 온다는 것을 고려하면 대략 236석이 차 있는 것입니다. 지하철은 총 360석이라 124석 가량이 여유가 있다고 볼 수 있습니다. 그런데 우장산역에서 2000석이나 늘어나는 것이 보이시나요? 지하철당 100명이 추가로 타는 셈입니다. 남은 좌석은 24석입니다. 1-1부터 9-4까지 화곡역에 도착하기 전에 샅샅이 뒤져서 24석 중 하나를 차지해야겠군요. 다른 분들이 이 글을 보고 전략 세울 때 실수하실까봐 첨언하자면 6시 대에 가까울수록 사람이 적고 뒤로 갈수록 사람이 많기 때문에 7시 10분 정도라면 사실 이 걱정을 안 하고 타도 나름 여유롭게 자리를 구할 수 있고, 7시 50분 정도라면 이걸 알아도 이미 만석입니다. 그저 7시 00분부터 7시 59분까지 평균적으로 24석 정도가 남는다고 생각하면 되겠네요.

쓰다 보니 굉장히 길어졌습니다. 한 달 동안 시간 날 때 조금씩 한 결과물이라 고퀄리티는 아니지만 여러분이 보시고 조금 재밌다고 느끼셨다면 좋겠습니다.

다음 달에 또 다른 주제를 가지고 돌아오겠습니다. 감사합니다

[Python] 파이썬을 이용한 공공 데이터 분석 및 활용(2)

728×90

반응형

**본 내용은 Alice 의 데이터 분석을 위한 라이브러리 과정을 수강하면서 , 직접 궁금한 것을 찾아보고 공부하며 정리한 내용임을 밝힙니다.

앞번 포스팅이 너무 지저분 하여서.. 출처를 명시했으니 좀더 깔끔하게 정리를 해보려한다.

프로젝트2. 지하철_승하차_인원_분석_프로젝트

jupyter 를 여세요. 시작합니다.

프로젝트 목표 :

– 승차 또는 하차 시 해당 시간, 해당 역의 승객 수를 확인하기 위해 개찰구 통과 승객 수 데이터와 지하철 위치좌표 데이터를 활용

– 탐색적 데이터 분석을 수행하기 위한 데이터 정제, 특성 엔지니어링, 시각화 방법 학습

[ 프로젝트 목차]

1. 데이터 읽기:

승하차 인원 정보 데이터를 불러오고 DataFrame 구조를 확인

1.1. 데이터 불러오기

1.2. 데이터 확인하기

2. 데이터 정제:

데이터 확인 후 형 변환 및 이상치 데이터 처리

2.1. 2021년 6월 승하차 인원만 추출

3. 데이터 시각화:

각 변수별로 추가적인 정제 또는 feature engineering 과정을 거치고 시각화를 총해 데이터 특성 파악

3.1. 호선 별 이용객 수 출력

3.2. 특정 호선에서 역별 평균 승하차 인원 데이터 추출

3.3. 평균 승하차 인원 수 내림차순으로 막대그래프 출력

3.4. 특정 호선의 혼잡 정도와 위치좌표 데이터 병합

3.5. 특정 호선의 혼잡 정도를 지도에 출력

데이터 출처

서울시 지하철 호선별 역별 승하차 인원 정보 데이터:

http://data.seoul.go.kr/dataList/OA-12252/S/1/datasetView.do

여기서 데이터를 가져와서 설치합니다.

프로젝트 개요

코로나 시국에 익숙해졌다고는 하지만 가끔 밖으로 나갈 때 사람 많은 곳은 피하고 싶은 생각에 어떤 장소를 피해야 하는지 알아보고 싶을 때가 있을 겁니다. 지하철 이용 승객 수를 확인해보면 혼잡도가 높은 지역을 확인해볼 수 있을 것 같습니다.

이번 프로젝트에서는 서울 열린 데이터 광장에서 제공하는 서울시 지하철 호선별 역별 승하차 인원 정보 데이터를 분석하고 지하철 역 위치 좌표 데이터를 활용해 특정 호선에서 어떤 역이 가장 혼잡한지 직관적으로 확인해봅시다.

1. 데이터 읽기

mport numpy as np import pandas as pd import matplotlib.pyplot as plt #서울시 지하철 호선별 역별 승하차 인원 정보 데이터를 불러와 metro_all에 저장 # pd.read_csv를 통하여 승하차 인원 정보 데이터를 데이터프레임 형태로 읽어옵니다. metro_all = pd.read_csv(“./data/서울시 지하철 호선별 역별 시간대별 승하차 인원 정보_20210705.csv”, encoding = ‘cp949’) # 승하차 인원 정보 상위 5개 데이터를 출력합니다. metro_all.head() # 승하차 인원 정보 데이터프레임 정보를 요약하여 출력합니다. metro_all.info() #불러온 두 데이터프레임의 특정 컬럼 데이터를 중복없이 오름차순 정렬하여 확인 # metro_all DataFrame 사용월 데이터 확인 sorted(list(set(metro_all[‘사용월’]))) # metro_all DataFrame 호선명 데이터 확인 sorted(list(set(metro_all[‘호선명’]))) # DataFrame 지하철역 데이터 확인 sorted(list(set(metro_all[‘지하철역’]))) # DataFrame 지하철역 데이터 개수 확인 len(list(set(metro_all[‘지하철역’])))

2. 데이터 정제

앞서, 데이터를 확인해보니 2015년 1월부터 2021년 6월까지 수집된 데이터인 것을 확인

이번 프로젝트에서는 가장 최근 한달간 수집된 데이터를 기준으로 특정 호선에서 어떤 역이 가장 혼잡한지 확인하고자 함.

2.1. 2021년 6월 승하차 인원만 추출

수집된 데이터 중 가장 최근인 6월에 수집한 데이터만 추출하고 불필요한 컬럼을 제거해봅시다.

# 2021년 6월 총 승객수만 추출 metro_recent = metro_all[metro_all[‘사용월’]==202106] metro_recent

# 불필요한 작업일자 컬럼 제거 metro_recent = metro_recent.drop(columns={‘작업일자’}) metro_recent

3. 데이터 시각화

2021년 6월 데이터만 추출한 metro_recent를 활용하여 다양한 데이터 시각화 및 혼잡도 분석을 진행해봅시다.

3.1. 호선 별 이용객 수 출력

추출한 metro_recent 데이터를 활용해 이용객 수가 가장 많은 호선 순으로 막대그래프를 출력해 보겠습니다. #groupby는 그룹화할것 선택 #mean은 평균값 #reset_index는 set_index와 반대로 초기화해 인덱스를 컬럼화 시킨다. #set_index는 컬럼을 인덱스화. groupby하면 series형태로 되있는데, 그것을 어떻게 쓸건지에 따라서 사용. #drop으로 필요없는 행/열 을 삭제해준다. #sort_values는 정렬 방법중 하나인데 True면 오름차순 / False면 내림차순 * 참고할 정렬의 4가지 방법 1. 데이터프레임 정렬(특정 컬럼 기준으로) > df.sort_values(‘a’) 2. 시리즈로 정렬하는 방법(하나의 열에 대해) > df[‘a’].sort_values() 3. 내림차순 정렬 (True면 오름차순 / False면 내림차순) > df.sort_values(‘a’, ascending=False) 4. 여러 컬럼을 리스트로 묶는 방법 > df.sort_values([‘b’,’c’], ascending=False)

import matplotlib.font_manager as fm #공식적으로 알려진 한글 사용방법 , 폰트 관련용도 font_dirs = [‘/usr/share/fonts/truetype/nanum’, ] font_files = fm.findSystemFonts(fontpaths=font_dirs) for font_file in font_files: fm.fontManager.addfont(font_file) metro_line = metro_recent.groupby([‘호선명’]).mean().reset_index() metro_line = metro_line.drop(columns=’사용월’).set_index(‘호선명’)#drop 선택한 행,열을 삭제한 새로운 객체 생ㅇ성 metro_line = metro_line.mean(axis=1).sort_values(ascending=False) plt.figure(figsize=(20,10)) plt.rc(‘font’, family=”NanumBarunGothic”) plt.rcParams[‘axes.unicode_minus’] = False metro_line.plot(kind=(‘bar’)) plt.show()

3.2. 특정 호선에서 역별 평균 승하차 인원 데이터 추출¶

다양한 호선에서 역별 평균 승하차 인원이 많은 역은 어디일까요? 이용객이 가장 많은 2호선 기준으로 확인해봅시다. line = ‘2호선’ metro_st = metro_recent.groupby([‘호선명’,’지하철역’]).mean().reset_index() metro_st_line2 = metro_st[metro_st[‘호선명’]==line] metro_st_line2

여기서 부터 쬐끔 생각해야한다!

승하차 인원은 홀/짝수를 반복하며 나와있다. 이것을 분리해야한다.

for문에서

len다음으로 오는 부분을보자.

왜 -3 이냐 하면, 맨앞의 호선명/지하철역/사용월 의 3개 칼럼을 제외한 갯수의 홀/짝의 각각의 수를 구해야한다.

그래서 ! 나누기 2를 해준것.

그리고

3+2*i 는 3,5,7,9 식으로가고

4+2*i 는 4,6,8,10 식으로 간다.

# 승차 인원 컬럼만 추출 metro_get_on = pd.DataFrame() metro_get_on[‘지하철역’] = metro_st_line2[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_on[metro_st_line2.columns[3+2*i]] = metro_st_line2[metro_st_line2.columns[3+2*i]] metro_get_on = metro_get_on.set_index(‘지하철역’) metro_get_on

# 하차 인원 컬럼만 추출 metro_get_off = pd.DataFrame() metro_get_off[‘지하철역’] = metro_st_line2[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_off[metro_st_line2.columns[4+2*i]] = metro_st_line2[metro_st_line2.columns[4+2*i]] metro_get_off = metro_get_off.set_index(‘지하철역’) metro_get_off

# 역 별 평균 승하차 인원을 구한 후 정수로 형 변환하여 데이터프레임으로 저장 df = pd.DataFrame(index = metro_st_line2[‘지하철역’]) df[‘평균 승차 인원 수’] = metro_get_on.mean(axis=1).astype(int) df[‘평균 하차 인원 수’] = metro_get_off.mean(axis=1).astype(int) df

3.3. 평균 승하차 인원 수 내림차순으로 막대그래프 출력

2호선 기준 6월 한 달간 강남 > 잠실 > 신림 > 구로디지털단지 > 홍대입구 > 선릉 순으로 평균 승차 인원이 많았습니다. # 승차 인원 수 Top10 top10_on = df.sort_values(by=’평균 승차 인원 수’, ascending=False).head(10) plt.figure(figsize=(20,10)) plt.rc(‘font’, family=”NanumBarunGothic”) plt.rcParams[‘axes.unicode_minus’] = False plt.bar(top10_on.index, top10_on[‘평균 승차 인원 수’]) for x, y in enumerate(list(top10_on[‘평균 승차 인원 수’])): if x == 0: plt.annotate(y, (x-0.15, y), color = ‘red’) else: plt.annotate(y, (x-0.15, y)) plt.title(‘2021년 6월 평균 승차 인원 수 Top10′) plt.show()

평균 하차 인원은 거의 동일하게 강남 > 잠실 > 신림 > 구로디지털단지 > 홍대입구 > 역삼 순으로 많았습니다.

# 하차 인원 수 Top10 top10_off = df.sort_values(by=’평균 하차 인원 수’, ascending=False).head(10) plt.figure(figsize=(20,10)) plt.rc(‘font’, family=”NanumBarunGothic”) plt.rcParams[‘axes.unicode_minus’] = False plt.bar(top10_off.index, top10_off[‘평균 하차 인원 수’]) for x, y in enumerate(list(top10_off[‘평균 하차 인원 수’])): if x == 0: plt.annotate(y, (x-0.15, y), color = ‘red’) else: plt.annotate(y, (x-0.15, y)) plt.title(‘2021년 6월 평균 하차 인원 수 Top10’) plt.show()

퀴즈1.

6호선의 지하철 역 중에서 승차 인원수가 가장 많은 역명을 구하세요.

# 3.2.의 첫 번째 셀에서 line값만 수정한 후 # 3.2.와 3.3. 코드를 순서대로 다시 실행해보면 답을 구할 수 있습니다. line = ‘6호선’ metro_st = metro_recent.groupby([‘호선명’,’지하철역’]).mean().reset_index() metro_st_line2 = metro_st[metro_st[‘호선명’]==line] metro_st_line2 # 승차 인원 컬럼만 추출 metro_get_on = pd.DataFrame() metro_get_on[‘지하철역’] = metro_st_line2[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_on[metro_st_line2.columns[3+2*i]] = metro_st_line2[metro_st_line2.columns[3+2*i]] metro_get_on = metro_get_on.set_index(‘지하철역’) metro_get_on # 하차 인원 컬럼만 추출 metro_get_off = pd.DataFrame() metro_get_off[‘지하철역’] = metro_st_line2[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_off[metro_st_line2.columns[4+2*i]] = metro_st_line2[metro_st_line2.columns[4+2*i]] metro_get_off = metro_get_off.set_index(‘지하철역’) metro_get_off # 역 별 평균 승하차 인원을 구한 후 정수로 형 변환하여 데이터프레임으로 저장 df = pd.DataFrame(index = metro_st_line2[‘지하철역’]) df[‘평균 승차 인원 수’] = metro_get_on.mean(axis=1).astype(int) df[‘평균 하차 인원 수’] = metro_get_off.mean(axis=1).astype(int) df top10_on = df.sort_values(by=’평균 승차 인원 수’, ascending=False).head(1) top10_on.index[0]

# 6호선 지하철 역 중 승차 인원 수가 가장 많은 역명을 quiz_1 변수에 저장합니다. # ‘~~역’에서 역을 제외한 ~~을 문자형으로 저장합니다. quiz_1 = top10_on.index[0]

3.4. 특정 호선의 혼잡 정도와 위치좌표 데이터 병합

먼저 특정 호선의 역별 평균 승하차 인원 수와 지하철 역별 위치좌표 데이터를 병합하여 데이터프레임을 생성해봅시다.

# 특정 호선의 역별 평균 승하차 인원 수와 지하철 역 위치 좌표를 데이터프레임으로 반환하는 함수입니다. def get_nums_and_location(line, metro_st): # 특정 호선의 데이터만 추출합니다. metro_line_n = metro_st[metro_st[‘호선명’]==line] # 승차 인원 컬럼만 추출합니다. metro_get_on = pd.DataFrame() metro_get_on[‘지하철역’] = metro_line_n[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_on[metro_line_n.columns[3+2*i]] = metro_line_n[metro_line_n.columns[3+2*i]] metro_get_on = metro_get_on.set_index(‘지하철역’) # 하차 인원 컬럼만 추출합니다. metro_get_off = pd.DataFrame() metro_get_off[‘지하철역’] = metro_line_n[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_off[metro_line_n.columns[4+2*i]] = metro_line_n[metro_line_n.columns[4+2*i]] metro_get_off = metro_get_off.set_index(‘지하철역’) # 역 별 평균 승하차 인원을 구한 후 정수로 형 변환하여 데이터프레임으로 저장합니다. df = pd.DataFrame(index = metro_line_n[‘지하철역’]) df[‘평균 승차 인원 수’] = metro_get_on.mean(axis=1).astype(int) df[‘평균 하차 인원 수’] = metro_get_off.mean(axis=1).astype(int) # 지하철역 명 동일하도록 설정합니다. temp = [] df = df.reset_index() for name in df[‘지하철역’]: temp.append(name.split(‘(‘)[0]+’역’) df[‘지하철역’] = temp # 지하철역 명을 기준으로 두 데이터프레임 병합합니다. df = df.merge(subway_location, left_on=’지하철역’, right_on=’지하철역’) return df

3.5. 특정 호선의 혼잡 정도를 지도에 출력

지도를 출력하기 위한 라이브러리로 folium을 사용해 봅시다.

# 특정 호선의 역별 평균 승하차 인원 수와 지하철 역 위치 좌표를 데이터프레임으로 반환하는 함수입니다. def get_nums_and_location(line, metro_st): # 특정 호선의 데이터만 추출합니다. metro_line_n = metro_st[metro_st[‘호선명’]==line] # 승차 인원 컬럼만 추출합니다. metro_get_on = pd.DataFrame() metro_get_on[‘지하철역’] = metro_line_n[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_on[metro_line_n.columns[3+2*i]] = metro_line_n[metro_line_n.columns[3+2*i]] metro_get_on = metro_get_on.set_index(‘지하철역’) # 하차 인원 컬럼만 추출합니다. metro_get_off = pd.DataFrame() metro_get_off[‘지하철역’] = metro_line_n[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_off[metro_line_n.columns[4+2*i]] = metro_line_n[metro_line_n.columns[4+2*i]] metro_get_off = metro_get_off.set_index(‘지하철역’) # 역 별 평균 승하차 인원을 구한 후 정수로 형 변환하여 데이터프레임으로 저장합니다. df = pd.DataFrame(index = metro_line_n[‘지하철역’]) df[‘평균 승차 인원 수’] = metro_get_on.mean(axis=1).astype(int) df[‘평균 하차 인원 수’] = metro_get_off.mean(axis=1).astype(int) # 지하철역 명 동일하도록 설정합니다. temp = [] df = df.reset_index() for name in df[‘지하철역’]: temp.append(name.split(‘(‘)[0]+’역’) df[‘지하철역’] = temp # 지하철역 명을 기준으로 두 데이터프레임 병합합니다. df = df.merge(subway_location, left_on=’지하철역’, right_on=’지하철역’) return df

이제 특정 호선의 역별 평균 승차 인원 수를 원형마커를 통해 지도에 출력해봅시다

#color – 선색

#fill_color -면색

# 특정 호선의 역별 평균 승하차 인원 수와 위치좌표 데이터만 추출합니다. rail = ‘6호선’ df = get_nums_and_location(rail, metro_st) # 서울의 중심에 위치하는 명동역의 위도와 경도를 중심으로 지도 출력합니다. latitude = subway_location[subway_location[‘지하철역’]==’명동역’][‘x좌표’] #위도 longitude = subway_location[subway_location[‘지하철역’]==’명동역’][‘y좌표’]#경도 map_osm = folium.Map(location = [latitude, longitude], zoom_start = 12) #지도출력 # 각 지하철 역의 위치별로 원형마커를 지도에 추가합니다. for i in df.index: marker = folium.CircleMarker([df[‘x좌표’][i],df[‘y좌표’][i]], radius = (df[‘평균 승차 인원 수’][i]+1)/3000, # 인원 수가 0일 때 계산오류 보정 popup = [df[‘지하철역’][i],df[‘평균 승차 인원 수’][i]], color = ‘blue’, fill_color = ‘blue’) marker.add_to(map_osm) map_osm

퀴즈2. 강남역의 x좌표(위도)를 구하세요.

# get_nums_and_location() 함수를 활용하면 쉽게 구할 수 있습니다. # 강남역은 2호선이기 때문에 df = get_nums_and_location(‘2호선’, metro_st)으로 데이터프레임을 추출합니다. # df[df[‘지하철역’]==’강남역’][‘x좌표’]을 통해 컬럼 ‘지하철역’이 ‘강남역’인 행을 추출하고 ‘x좌표’값을 구해보세요. df = get_nums_and_location(‘2호선’, metro_st) x = df[df[‘지하철역’]==’강남역’][‘x좌표’] x[0]

# float형으로 좌표값만 저장합니다. 예시: 37.123456 quiz_2 = x[0]

728×90

반응형

Pandas를 이용한 지하철 데이터 분석

Out[246]:

[[1323, ‘가평’, ‘경춘선’], [1322, ‘상천’, ‘경춘선’], [1321, ‘청평’, ‘경춘선’], [1320, ‘대성리’, ‘경춘선’], [1319, ‘마석’, ‘경춘선’], [1318, ‘천마산’, ‘경춘선’], [1317, ‘평내호평’, ‘경춘선’], [1316, ‘금곡’, ‘경춘선’], [1315, ‘사릉’, ‘경춘선’], [1314, ‘퇴계원’, ‘경춘선’], [1313, ‘별내’, ‘경춘선’], [1312, ‘갈매’, ‘경춘선’], [1804, ‘부천’, ‘경인선’], [1803, ‘역곡’, ‘경인선’], [1802, ‘오류동’, ‘경인선’], [1801, ‘개봉’, ‘경인선’], [1296, ‘계양’, ‘경의선’], [1284, ‘문산’, ‘경의선’], [1283, ‘파주’, ‘경의선’], [1282, ‘월롱’, ‘경의선’], [1280, ‘금촌’, ‘경의선’], [1279, ‘금릉’, ‘경의선’], [1278, ‘운정’, ‘경의선’], [1277, ‘야당’, ‘경의선’], [1276, ‘탄현’, ‘경의선’], [1275, ‘일산’, ‘경의선’], [1274, ‘풍산’, ‘경의선’], [1273, ‘백마’, ‘경의선’], [1272, ‘곡산’, ‘경의선’], [1271, ‘능곡’, ‘경의선’], [1270, ‘행신’, ‘경의선’], [1269, ‘강매’, ‘경의선’], [1268, ‘화전’, ‘경의선’], [1267, ‘수색’, ‘경의선’], [1266, ‘디지털미디어시티’, ‘경의선’], [1265, ‘가좌’, ‘경의선’], [1264, ‘홍대입구’, ‘경의선’], [1263, ‘서강대’, ‘경의선’], [1262, ‘공덕’, ‘경의선’], [1261, ‘효창공원앞’, ‘경의선’], [1252, ‘신촌’, ‘경의선’], [1251, ‘서울역’, ‘경의선’], [1916, ‘소요산’, ‘경원선’], [1915, ‘동두천’, ‘경원선’], [1914, ‘보산’, ‘경원선’], [1913, ‘동두천중앙’, ‘경원선’], [1912, ‘지행’, ‘경원선’], [1911, ‘덕정’, ‘경원선’], [1910, ‘덕계’, ‘경원선’], [1909, ‘양주’, ‘경원선’], [1908, ‘녹양’, ‘경원선’], [1907, ‘가능’, ‘경원선’], [1906, ‘의정부’, ‘경원선’], [1905, ‘회룡’, ‘경원선’], [1904, ‘망월사’, ‘경원선’], [1903, ‘도봉산’, ‘경원선’], [1902, ‘도봉’, ‘경원선’], [1901, ‘방학’, ‘경원선’], [1021, ‘녹천’, ‘경원선’], [1020, ‘월계’, ‘경원선’], [1019, ‘광운대’, ‘경원선’], [1018, ‘석계’, ‘경원선’], [1017, ‘신이문’, ‘경원선’], [1016, ‘외대앞’, ‘경원선’], [1014, ‘청량리(서울시립대입구)’, ‘경원선’], [1013, ‘왕십리(성동구청)’, ‘경원선’], [1012, ‘응봉’, ‘경원선’], [1011, ‘옥수’, ‘경원선’], [1010, ‘한남’, ‘경원선’], [1009, ‘서빙고’, ‘경원선’], [1008, ‘이촌(국립중앙박물관)’, ‘경원선’], [1750, ‘광명’, ‘경부선’], [1749, ‘서동탄’, ‘경부선’], [1729, ‘당정’, ‘경부선’], [1728, ‘천안’, ‘경부선’], [1727, ‘두정’, ‘경부선’], [1726, ‘직산’, ‘경부선’], [1725, ‘성환’, ‘경부선’], [1724, ‘평택’, ‘경부선’], [1723, ‘지제’, ‘경부선’], [1722, ‘서정리’, ‘경부선’], [1721, ‘송탄’, ‘경부선’], [1720, ‘진위’, ‘경부선’], [1719, ‘오산’, ‘경부선’], [1718, ‘오산대’, ‘경부선’], [1717, ‘세마’, ‘경부선’], [1716, ‘병점’, ‘경부선’], [1715, ‘세류’, ‘경부선’], [1714, ‘독산’, ‘경부선’], [1713, ‘수원’, ‘경부선’], [1712, ‘화서’, ‘경부선’], [1711, ‘성균관대’, ‘경부선’], [1710, ‘의왕’, ‘경부선’], [1709, ‘군포’, ‘경부선’], [1708, ‘금정’, ‘경부선’], [1707, ‘명학’, ‘경부선’], [1706, ‘안양’, ‘경부선’], [1705, ‘관악’, ‘경부선’], [1704, ‘석수’, ‘경부선’], [1703, ‘금천구청’, ‘경부선’], [1702, ‘가산디지털단지’, ‘경부선’], [224, ‘서초’, ‘2호선’], [1701, ‘구로’, ‘경부선’], [1032, ‘신길’, ‘경부선’], [1007, ‘신도림’, ‘경부선’], [1006, ‘영등포’, ‘경부선’], [1005, ‘대방’, ‘경부선’], [1004, ‘노량진’, ‘경부선’], [1003, ‘용산’, ‘경부선’], [1002, ‘남영’, ‘경부선’], [1001, ‘서울역’, ‘경부선’], [1511, ‘여주’, ‘경강선’], [1510, ‘세종대왕릉’, ‘경강선’], [1509, ‘부발’, ‘경강선’], [1508, ‘이천’, ‘경강선’], [1507, ‘신둔도예촌’, ‘경강선’], [1879, ‘월곶’, ‘수인선’], [1878, ‘달월’, ‘수인선’], [1872, ‘매교’, ‘분당선’], [1871, ‘수원시청’, ‘분당선’], [1870, ‘매탄권선’, ‘분당선’], [1869, ‘망포’, ‘분당선’], [1506, ‘곤지암’, ‘경강선’], [1505, ‘초월’, ‘경강선’], [1504, ‘경기광주’, ‘경강선’], [1503, ‘삼동’, ‘경강선’], [1502, ‘이매’, ‘경강선’], [1501, ‘판교’, ‘경강선’], [4138, ‘중앙보훈병원’, ‘9호선2~3단계’], [4137, ‘둔촌오륜’, ‘9호선2~3단계’], [4136, ‘올림픽공원(한국체대)’, ‘9호선2~3단계’], [4135, ‘한성백제’, ‘9호선2~3단계’], [4134, ‘송파나루’, ‘9호선2~3단계’], [4133, ‘석촌’, ‘9호선2~3단계’], [4132, ‘석촌고분’, ‘9호선2~3단계’], [4131, ‘삼전’, ‘9호선2~3단계’], [4130, ‘종합운동장’, ‘9호선2~3단계’], [4129, ‘봉은사’, ‘9호선2~3단계’], [4128, ‘삼성중앙’, ‘9호선2~3단계’], [4127, ‘선정릉’, ‘9호선2~3단계’], [4126, ‘언주’, ‘9호선2~3단계’], [4125, ‘신논현’, ‘9호선’], [4124, ‘사평’, ‘9호선’], [4123, ‘고속터미널’, ‘9호선’], [4122, ‘신반포’, ‘9호선’], [4121, ‘구반포’, ‘9호선’], [4120, ‘동작(현충원)’, ‘9호선’], [4119, ‘흑석(중앙대입구)’, ‘9호선’], [4118, ‘노들’, ‘9호선’], [4117, ‘노량진’, ‘9호선’], [4116, ‘샛강’, ‘9호선’], [4115, ‘여의도’, ‘9호선’], [4114, ‘국회의사당’, ‘9호선’], [4113, ‘당산’, ‘9호선’], [4112, ‘선유도’, ‘9호선’], [4111, ‘신목동’, ‘9호선’], [4110, ‘염창’, ‘9호선’], [4109, ‘등촌’, ‘9호선’], [4108, ‘증미’, ‘9호선’], [4106, ‘양천향교’, ‘9호선’], [4105, ‘마곡나루’, ‘9호선’], [4104, ‘신방화’, ‘9호선’], [4103, ‘공항시장’, ‘9호선’], [4102, ‘김포공항’, ‘9호선’], [4101, ‘개화’, ‘9호선’], [2827, ‘모란’, ‘8호선’], [2826, ‘수진’, ‘8호선’], [2825, ‘신흥’, ‘8호선’], [2824, ‘단대오거리’, ‘8호선’], [2823, ‘남한산성입구(성남법원.검찰청)’, ‘8호선’], [2822, ‘산성’, ‘8호선’], [2821, ‘복정’, ‘8호선’], [2820, ‘장지’, ‘8호선’], [2819, ‘문정’, ‘8호선’], [2818, ‘가락시장’, ‘8호선’], [2817, ‘송파’, ‘8호선’], [2816, ‘석촌’, ‘8호선’], [2815, ‘잠실(송파구청)’, ‘8호선’], [2814, ‘몽촌토성(평화의문)’, ‘8호선’], [2813, ‘강동구청’, ‘8호선’], [2812, ‘천호(풍납토성)’, ‘8호선’], [2811, ‘암사’, ‘8호선’], [2761, ‘부평구청’, ‘7호선’], [2760, ‘굴포천’, ‘7호선’], [2759, ‘삼산체육관’, ‘7호선’], [2758, ‘상동’, ‘7호선’], [2757, ‘부천시청’, ‘7호선’], [2756, ‘신중동’, ‘7호선’], [2755, ‘춘의’, ‘7호선’], [2754, ‘부천종합운동장’, ‘7호선’], [2753, ‘까치울’, ‘7호선’], [2752, ‘온수(성공회대입구)’, ‘7호선’], [2750, ‘광명사거리’, ‘7호선’], [2749, ‘철산’, ‘7호선’], [2748, ‘가산디지털단지’, ‘7호선’], [2747, ‘남구로’, ‘7호선’], [2746, ‘대림(구로구청)’, ‘7호선’], [2745, ‘신풍’, ‘7호선’], [2744, ‘보라매’, ‘7호선’], [2743, ‘신대방삼거리’, ‘7호선’], [2742, ‘장승배기’, ‘7호선’], [2741, ‘상도’, ‘7호선’], [2740, ‘숭실대입구(살피재)’, ‘7호선’], [2739, ‘남성’, ‘7호선’], [2738, ‘이수’, ‘7호선’], [2737, ‘내방’, ‘7호선’], [2736, ‘고속터미널’, ‘7호선’], [2735, ‘반포’, ‘7호선’], [2734, ‘논현’, ‘7호선’], [2733, ‘학동’, ‘7호선’], [2732, ‘강남구청’, ‘7호선’], [2731, ‘청담’, ‘7호선’], [2730, ‘뚝섬유원지’, ‘7호선’], [2729, ‘건대입구’, ‘7호선’], [2728, ‘어린이대공원(세종대)’, ‘7호선’], [2727, ‘군자(능동)’, ‘7호선’], [2726, ‘중곡’, ‘7호선’], [2725, ‘용마산’, ‘7호선’], [2724, ‘사가정’, ‘7호선’], [2723, ‘면목’, ‘7호선’], [2722, ‘상봉(시외버스터미널)’, ‘7호선’], [2721, ‘중화’, ‘7호선’], [2720, ‘먹골’, ‘7호선’], [2719, ‘태릉입구’, ‘7호선’], [2718, ‘공릉(서울과학기술대)’, ‘7호선’], [2717, ‘하계’, ‘7호선’], [2716, ‘중계’, ‘7호선’], [2715, ‘노원’, ‘7호선’], [2714, ‘마들’, ‘7호선’], [2713, ‘수락산’, ‘7호선’], [2712, ‘도봉산’, ‘7호선’], [2711, ‘장암’, ‘7호선’], [2648, ‘봉화산(서울의료원)’, ‘6호선’], [2647, ‘화랑대(서울여대입구)’, ‘6호선’], [2646, ‘태릉입구’, ‘6호선’], [2645, ‘석계’, ‘6호선’], [2644, ‘돌곶이’, ‘6호선’], [2643, ‘상월곡(한국과학기술연구원)’, ‘6호선’], [2642, ‘월곡(동덕여대)’, ‘6호선’], [2641, ‘고려대(종암)’, ‘6호선’], [2640, ‘안암(고대병원앞)’, ‘6호선’], [2639, ‘보문’, ‘6호선’], [2638, ‘창신’, ‘6호선’], [2637, ‘동묘앞’, ‘6호선’], [2636, ‘신당’, ‘6호선’], [2635, ‘청구’, ‘6호선’], [2634, ‘약수’, ‘6호선’], [2633, ‘버티고개’, ‘6호선’], [2632, ‘한강진’, ‘6호선’], [2631, ‘이태원’, ‘6호선’], [2630, ‘녹사평(용산구청)’, ‘6호선’], [2629, ‘삼각지’, ‘6호선’], [2628, ‘효창공원앞’, ‘6호선’], [2627, ‘공덕’, ‘6호선’], [2626, ‘대흥(서강대앞)’, ‘6호선’], [4209, ‘검암’, ‘공항철도 1호선’], [2625, ‘광흥창(서강)’, ‘6호선’], [2624, ‘상수’, ‘6호선’], [2623, ‘합정’, ‘6호선’], [2622, ‘망원’, ‘6호선’], [2621, ‘마포구청’, ‘6호선’], [2620, ‘월드컵경기장(성산)’, ‘6호선’], [2619, ‘디지털미디어시티’, ‘6호선’], [2618, ‘증산(명지대앞)’, ‘6호선’], [2617, ‘새절(신사)’, ‘6호선’], [2616, ‘구산’, ‘6호선’], [2615, ‘연신내’, ‘6호선’], [2614, ‘독바위’, ‘6호선’], [2613, ‘불광’, ‘6호선’], [2612, ‘역촌’, ‘6호선’], [2611, ‘응암’, ‘6호선’], [2561, ‘마천’, ‘5호선’], [2560, ‘거여’, ‘5호선’], [2559, ‘개롱’, ‘5호선’], [2558, ‘오금’, ‘5호선’], [2557, ‘방이’, ‘5호선’], [2556, ‘올림픽공원(한국체대)’, ‘5호선’], [2555, ‘둔촌동’, ‘5호선’], [2554, ‘상일동’, ‘5호선’], [2553, ‘고덕’, ‘5호선’], [2552, ‘명일’, ‘5호선’], [2551, ‘굽은다리(강동구민회관앞)’, ‘5호선’], [2550, ‘길동’, ‘5호선’], [2549, ‘강동’, ‘5호선’], [2548, ‘천호(풍납토성)’, ‘5호선’], [2547, ‘광나루(장신대)’, ‘5호선’], [2546, ‘아차산(어린이대공원후문)’, ‘5호선’], [2545, ‘군자(능동)’, ‘5호선’], [2544, ‘장한평’, ‘5호선’], [2543, ‘답십리’, ‘5호선’], [2542, ‘마장’, ‘5호선’], [2541, ‘왕십리(성동구청)’, ‘5호선’], [2540, ‘행당’, ‘5호선’], [2539, ‘신금호’, ‘5호선’], [2538, ‘청구’, ‘5호선’], [2537, ‘동대문역사문화공원’, ‘5호선’], [2536, ‘을지로4가’, ‘5호선’], [2535, ‘종로3가’, ‘5호선’], [2534, ‘광화문(세종문화회관)’, ‘5호선’], [2533, ‘서대문’, ‘5호선’], [2532, ‘충정로(경기대입구)’, ‘5호선’], [2531, ‘애오개’, ‘5호선’], [2530, ‘공덕’, ‘5호선’], [2529, ‘마포’, ‘5호선’], [2528, ‘여의나루’, ‘5호선’], [2527, ‘여의도’, ‘5호선’], [2526, ‘신길’, ‘5호선’], [2525, ‘영등포시장’, ‘5호선’], [2524, ‘영등포구청’, ‘5호선’], [2523, ‘양평’, ‘5호선’], [2522, ‘오목교(목동운동장앞)’, ‘5호선’], [2521, ‘목동’, ‘5호선’], [2520, ‘신정(은행정)’, ‘5호선’], [2519, ‘까치산’, ‘5호선’], [2518, ‘화곡’, ‘5호선’], [2517, ‘우장산’, ‘5호선’], [2516, ‘발산’, ‘5호선’], [2515, ‘마곡’, ‘5호선’], [2514, ‘송정’, ‘5호선’], [2513, ‘김포공항’, ‘5호선’], [2512, ‘개화산’, ‘5호선’], [2511, ‘방화’, ‘5호선’], [434, ‘남태령’, ‘4호선’], [433, ‘사당’, ‘4호선’], [432, ‘총신대입구(이수)’, ‘4호선’], [431, ‘동작(현충원)’, ‘4호선’], [430, ‘이촌(국립중앙박물관)’, ‘4호선’], [429, ‘신용산’, ‘4호선’], [428, ‘삼각지’, ‘4호선’], [427, ‘숙대입구(갈월)’, ‘4호선’], [426, ‘서울역’, ‘4호선’], [425, ‘회현(남대문시장)’, ‘4호선’], [424, ‘명동’, ‘4호선’], [423, ‘충무로’, ‘4호선’], [422, ‘동대문역사문화공원’, ‘4호선’], [421, ‘동대문’, ‘4호선’], [420, ‘혜화’, ‘4호선’], [419, ‘한성대입구(삼선교)’, ‘4호선’], [418, ‘성신여대입구(돈암)’, ‘4호선’], [417, ‘길음’, ‘4호선’], [416, ‘미아사거리’, ‘4호선’], [415, ‘미아(서울사이버대학)’, ‘4호선’], [414, ‘수유(강북구청)’, ‘4호선’], [413, ‘쌍문’, ‘4호선’], [412, ‘창동’, ‘4호선’], [411, ‘노원’, ‘4호선’], [410, ‘상계’, ‘4호선’], [409, ‘당고개’, ‘4호선’], [342, ‘오금’, ‘3호선’], [341, ‘경찰병원’, ‘3호선’], [340, ‘가락시장’, ‘3호선’], [339, ‘수서’, ‘3호선’], [4107, ‘가양’, ‘9호선’], [338, ‘일원’, ‘3호선’], [337, ‘대청’, ‘3호선’], [336, ‘학여울’, ‘3호선’], [335, ‘대치’, ‘3호선’], [334, ‘도곡’, ‘3호선’], [333, ‘매봉’, ‘3호선’], [332, ‘양재(서초구청)’, ‘3호선’], [331, ‘남부터미널(예술의전당)’, ‘3호선’], [330, ‘교대(법원.검찰청)’, ‘3호선’], [329, ‘고속터미널’, ‘3호선’], [328, ‘잠원’, ‘3호선’], [327, ‘신사’, ‘3호선’], [326, ‘압구정’, ‘3호선’], [325, ‘옥수’, ‘3호선’], [324, ‘금호’, ‘3호선’], [323, ‘약수’, ‘3호선’], [322, ‘동대입구’, ‘3호선’], [321, ‘충무로’, ‘3호선’], [320, ‘을지로3가’, ‘3호선’], [319, ‘종로3가’, ‘3호선’], [318, ‘안국’, ‘3호선’], [317, ‘경복궁(정부서울청사)’, ‘3호선’], [316, ‘독립문’, ‘3호선’], [315, ‘무악재’, ‘3호선’], [314, ‘홍제’, ‘3호선’], [313, ‘녹번’, ‘3호선’], [312, ‘불광’, ‘3호선’], [311, ‘연신내’, ‘3호선’], [310, ‘구파발’, ‘3호선’], [309, ‘지축’, ‘3호선’], [250, ‘용두(동대문구청)’, ‘2호선’], [249, ‘신정네거리’, ‘2호선’], [248, ‘양천구청’, ‘2호선’], [247, ‘도림천’, ‘2호선’], [246, ‘신설동’, ‘2호선’], [245, ‘신답’, ‘2호선’], [244, ‘용답’, ‘2호선’], [243, ‘충정로(경기대입구)’, ‘2호선’], [242, ‘아현’, ‘2호선’], [241, ‘이대’, ‘2호선’], [240, ‘신촌’, ‘2호선’], [239, ‘홍대입구’, ‘2호선’], [238, ‘합정’, ‘2호선’], [237, ‘당산’, ‘2호선’], [236, ‘영등포구청’, ‘2호선’], [235, ‘문래’, ‘2호선’], [234, ‘신도림’, ‘2호선’], [233, ‘대림(구로구청)’, ‘2호선’], [232, ‘구로디지털단지’, ‘2호선’], [231, ‘신대방’, ‘2호선’], [230, ‘신림’, ‘2호선’], [229, ‘봉천’, ‘2호선’], [228, ‘서울대입구(관악구청)’, ‘2호선’], [227, ‘낙성대’, ‘2호선’], [226, ‘사당’, ‘2호선’], [225, ‘방배’, ‘2호선’], [223, ‘교대(법원.검찰청)’, ‘2호선’], [222, ‘강남’, ‘2호선’], [221, ‘역삼’, ‘2호선’], [220, ‘선릉’, ‘2호선’], [219, ‘삼성(무역센터)’, ‘2호선’], [218, ‘종합운동장’, ‘2호선’], [217, ‘잠실새내’, ‘2호선’], [216, ‘잠실(송파구청)’, ‘2호선’], [215, ‘잠실나루’, ‘2호선’], [214, ‘강변(동서울터미널)’, ‘2호선’], [213, ‘구의(광진구청)’, ‘2호선’], [212, ‘건대입구’, ‘2호선’], [211, ‘성수’, ‘2호선’], [210, ‘뚝섬’, ‘2호선’], [209, ‘한양대’, ‘2호선’], [208, ‘왕십리(성동구청)’, ‘2호선’], [207, ‘상왕십리’, ‘2호선’], [206, ‘신당’, ‘2호선’], [205, ‘동대문역사문화공원’, ‘2호선’], [204, ‘을지로4가’, ‘2호선’], [203, ‘을지로3가’, ‘2호선’], [202, ‘을지로입구’, ‘2호선’], [201, ‘시청’, ‘2호선’], [159, ‘동묘앞’, ‘1호선’], [158, ‘청량리(서울시립대입구)’, ‘1호선’], [157, ‘제기동’, ‘1호선’], [156, ‘신설동’, ‘1호선’], [155, ‘동대문’, ‘1호선’], [154, ‘종로5가’, ‘1호선’], [153, ‘종로3가’, ‘1호선’], [1022, ‘창동’, ‘경원선’], [152, ‘종각’, ‘1호선’], [151, ‘시청’, ‘1호선’], [150, ‘서울역’, ‘1호선’], [1220, ‘지평’, ‘중앙선’], [1861, ‘보정’, ‘분당선’], [1862, ‘죽전’, ‘분당선’], [1863, ‘구성’, ‘분당선’], [1864, ‘신갈’, ‘분당선’], [1865, ‘기흥’, ‘분당선’], [1866, ‘상갈’, ‘분당선’], [1867, ‘청명’, ‘분당선’], [1868, ‘영통’, ‘분당선’], [1880, ‘소래포구’, ‘수인선’], [1881, ‘인천논현’, ‘수인선’], [1882, ‘호구포’, ‘수인선’], [1883, ‘남동인더스파크’, ‘수인선’], [1884, ‘원인재’, ‘수인선’], [1885, ‘연수’, ‘수인선’], [1886, ‘송도’, ‘수인선’], [1888, ‘인하대’, ‘수인선’], [1889, ‘숭의’, ‘수인선’], [1890, ‘신포’, ‘수인선’], [1891, ‘인천’, ‘수인선’], [1751, ‘산본’, ‘안산선’], [1752, ‘대야미’, ‘안산선’], [1753, ‘반월’, ‘안산선’], [1754, ‘상록수’, ‘안산선’], [1755, ‘한대앞’, ‘안산선’], [1756, ‘중앙’, ‘안산선’], [1757, ‘고잔’, ‘안산선’], [1758, ‘초지’, ‘안산선’], [1759, ‘안산’, ‘안산선’], [1760, ‘신길온천’, ‘안산선’], [1761, ‘정왕’, ‘안산선’], [1762, ‘오이도’, ‘안산선’], [1763, ‘수리산’, ‘안산선’], [4701, ‘북한산우이’, ‘우이신설선’], [4702, ‘솔밭공원’, ‘우이신설선’], [4703, ‘4.19민주묘지’, ‘우이신설선’], [4704, ‘가오리’, ‘우이신설선’], [4705, ‘화계’, ‘우이신설선’], [4706, ‘삼양’, ‘우이신설선’], [4707, ‘삼양사거리’, ‘우이신설선’], [4708, ‘솔샘’, ‘우이신설선’], [4709, ‘북한산보국문’, ‘우이신설선’], [4710, ‘정릉’, ‘우이신설선’], [4711, ‘성신여대입구(돈암)’, ‘우이신설선’], [4712, ‘보문’, ‘우이신설선’], [4713, ‘신설동’, ‘우이신설선’], [1948, ‘원흥’, ‘일산선’], [1950, ‘삼송’, ‘일산선’], [1951, ‘원당’, ‘일산선’], [1952, ‘화정’, ‘일산선’], [1953, ‘대곡’, ‘일산선’], [1954, ‘백석’, ‘일산선’], [1955, ‘마두’, ‘일산선’], [1956, ‘정발산’, ‘일산선’], [1957, ‘주엽’, ‘일산선’], [1958, ‘대화’, ‘일산선’], [1401, ‘봉명’, ‘장항선’], [1402, ‘쌍용(나사렛대)’, ‘장항선’], [1403, ‘아산’, ‘장항선’], [1405, ‘배방’, ‘장항선’], [1407, ‘온양온천’, ‘장항선’], [1408, ‘신창(순천향대)’, ‘장항선’], [1015, ‘회기’, ‘중앙선’], [1201, ‘중랑’, ‘중앙선’], [1202, ‘상봉(시외버스터미널)’, ‘중앙선’], [1203, ‘망우’, ‘중앙선’], [1204, ‘양원’, ‘중앙선’], [1205, ‘구리’, ‘중앙선’], [1206, ‘도농’, ‘중앙선’], [1207, ‘양정’, ‘중앙선’], [1208, ‘덕소’, ‘중앙선’], [1209, ‘도심’, ‘중앙선’], [1210, ‘팔당’, ‘중앙선’], [1211, ‘운길산’, ‘중앙선’], [1454, ‘정부과천청사’, ‘과천선’], [1455, ‘인덕원’, ‘과천선’], [1456, ‘평촌’, ‘과천선’], [1457, ‘범계’, ‘과천선’], [1023, ‘선릉’, ‘분당선’], [1024, ‘한티’, ‘분당선’], [1025, ‘도곡’, ‘분당선’], [1026, ‘구룡’, ‘분당선’], [1027, ‘개포동’, ‘분당선’], [1028, ‘대모산입구’, ‘분당선’], [1311, ‘신내’, ‘경춘선’], [1823, ‘도화’, ‘경인선’], [1822, ‘중동’, ‘경인선’], [1821, ‘온수(성공회대입구)’, ‘경인선’], [1817, ‘도원’, ‘경인선’], [1816, ‘간석’, ‘경인선’], [1815, ‘부개’, ‘경인선’], [1814, ‘소사’, ‘경인선’], [1813, ‘구일’, ‘경인선’], [1812, ‘인천’, ‘경인선’], [1811, ‘동인천’, ‘경인선’], [1810, ‘제물포’, ‘경인선’], [1809, ‘주안’, ‘경인선’], [1808, ‘동암’, ‘경인선’], [1807, ‘백운’, ‘경인선’], [1806, ‘부평’, ‘경인선’], [1805, ‘송내’, ‘경인선’], [1030, ‘수서’, ‘분당선’], [2751, ‘천왕’, ‘7호선’], [1846, ‘수원’, ‘분당선’], [1847, ‘서울숲’, ‘분당선’], [1848, ‘압구정로데오’, ‘분당선’], [1849, ‘강남구청’, ‘분당선’], [1850, ‘선정릉’, ‘분당선’], [1851, ‘가천대’, ‘분당선’], [1852, ‘태평’, ‘분당선’], [1853, ‘모란’, ‘분당선’], [1854, ‘야탑’, ‘분당선’], [1855, ‘서현’, ‘분당선’], [1856, ‘수내’, ‘분당선’], [1857, ‘정자’, ‘분당선’], [1858, ‘미금’, ‘분당선’], [1859, ‘오리’, ‘분당선’], [1860, ‘이매’, ‘분당선’], [4208, ‘계양’, ‘공항철도 1호선’], [4210, ‘청라국제도시’, ‘공항철도 1호선’], [4207, ‘김포공항’, ‘공항철도 1호선’], [4206, ‘마곡나루’, ‘공항철도 1호선’], [4204, ‘디지털미디어시티’, ‘공항철도 1호선’], [4203, ‘홍대입구’, ‘공항철도 1호선’], [4202, ‘공덕’, ‘공항철도 1호선’], [4201, ‘서울역’, ‘공항철도 1호선’], [1329, ‘춘천’, ‘경춘선’], [1328, ‘남춘천’, ‘경춘선’], [1327, ‘김유정’, ‘경춘선’], [1326, ‘강촌’, ‘경춘선’], [1325, ‘백양리’, ‘경춘선’], [1324, ‘굴봉산’, ‘경춘선’], [4211, ‘운서’, ‘공항철도 1호선’], [4212, ‘공항화물청사’, ‘공항철도 1호선’], [4213, ‘인천공항1터미널’, ‘공항철도 1호선’], [4215, ‘인천공항2터미널’, ‘공항철도 1호선’], [4217, ‘영종’, ‘공항철도 1호선’], [1450, ‘선바위’, ‘과천선’], [1451, ‘경마공원’, ‘과천선’], [1452, ‘대공원’, ‘과천선’], [1453, ‘과천’, ‘과천선’], [1212, ‘양수’, ‘중앙선’], [1213, ‘신원’, ‘중앙선’], [1214, ‘국수’, ‘중앙선’], [1215, ‘아신’, ‘중앙선’], [1216, ‘오빈’, ‘중앙선’], [1217, ‘양평’, ‘중앙선’], [1218, ‘원덕’, ‘중앙선’], [1219, ‘용문’, ‘중앙선’], [1024, ‘한티’, ‘분당선’], [203, ‘을지로3가’, ‘2호선’], [204, ‘을지로4가’, ‘2호선’], [205, ‘동대문역사문화공원’, ‘2호선’], [206, ‘신당’, ‘2호선’], [207, ‘상왕십리’, ‘2호선’], [208, ‘왕십리(성동구청)’, ‘2호선’], [209, ‘한양대’, ‘2호선’], [210, ‘뚝섬’, ‘2호선’], [211, ‘성수’, ‘2호선’], [212, ‘건대입구’, ‘2호선’], [213, ‘구의(광진구청)’, ‘2호선’], [214, ‘강변(동서울터미널)’, ‘2호선’], [215, ‘잠실나루’, ‘2호선’], [216, ‘잠실(송파구청)’, ‘2호선’], [217, ‘잠실새내’, ‘2호선’], [218, ‘종합운동장’, ‘2호선’], [219, ‘삼성(무역센터)’, ‘2호선’], [220, ‘선릉’, ‘2호선’], [221, ‘역삼’, ‘2호선’], [222, ‘강남’, ‘2호선’], [223, ‘교대(법원.검찰청)’, ‘2호선’], [224, ‘서초’, ‘2호선’], [225, ‘방배’, ‘2호선’], [226, ‘사당’, ‘2호선’], [227, ‘낙성대’, ‘2호선’], [1212, ‘양수’, ‘중앙선’], [1213, ‘신원’, ‘중앙선’], [1214, ‘국수’, ‘중앙선’], [1220, ‘지평’, ‘중앙선’], [1219, ‘용문’, ‘중앙선’], [1218, ‘원덕’, ‘중앙선’], [1217, ‘양평’, ‘중앙선’], [1216, ‘오빈’, ‘중앙선’], [1215, ‘아신’, ‘중앙선’], [228, ‘서울대입구(관악구청)’, ‘2호선’], [229, ‘봉천’, ‘2호선’], [230, ‘신림’, ‘2호선’], [231, ‘신대방’, ‘2호선’], [232, ‘구로디지털단지’, ‘2호선’], [233, ‘대림(구로구청)’, ‘2호선’], [234, ‘신도림’, ‘2호선’], [235, ‘문래’, ‘2호선’], [236, ‘영등포구청’, ‘2호선’], [237, ‘당산’, ‘2호선’], [238, ‘합정’, ‘2호선’], [239, ‘홍대입구’, ‘2호선’], [240, ‘신촌’, ‘2호선’], [241, ‘이대’, ‘2호선’], [242, ‘아현’, ‘2호선’], [243, ‘충정로(경기대입구)’, ‘2호선’], [244, ‘용답’, ‘2호선’], [245, ‘신답’, ‘2호선’], [246, ‘신설동’, ‘2호선’], [247, ‘도림천’, ‘2호선’], [248, ‘양천구청’, ‘2호선’], [249, ‘신정네거리’, ‘2호선’], [250, ‘용두(동대문구청)’, ‘2호선’], [309, ‘지축’, ‘3호선’], [310, ‘구파발’, ‘3호선’], [311, ‘연신내’, ‘3호선’], [312, ‘불광’, ‘3호선’], [313, ‘녹번’, ‘3호선’], [314, ‘홍제’, ‘3호선’], [315, ‘무악재’, ‘3호선’], [316, ‘독립문’, ‘3호선’], [317, ‘경복궁(정부서울청사)’, ‘3호선’], [318, ‘안국’, ‘3호선’], [319, ‘종로3가’, ‘3호선’], [320, ‘을지로3가’, ‘3호선’], [321, ‘충무로’, ‘3호선’], [322, ‘동대입구’, ‘3호선’], [323, ‘약수’, ‘3호선’], [324, ‘금호’, ‘3호선’], [325, ‘옥수’, ‘3호선’], [326, ‘압구정’, ‘3호선’], [327, ‘신사’, ‘3호선’], [328, ‘잠원’, ‘3호선’], [329, ‘고속터미널’, ‘3호선’], [330, ‘교대(법원.검찰청)’, ‘3호선’], [331, ‘남부터미널(예술의전당)’, ‘3호선’], [332, ‘양재(서초구청)’, ‘3호선’], [333, ‘매봉’, ‘3호선’], [334, ‘도곡’, ‘3호선’], [335, ‘대치’, ‘3호선’], [336, ‘학여울’, ‘3호선’], [337, ‘대청’, ‘3호선’], [338, ‘일원’, ‘3호선’], [339, ‘수서’, ‘3호선’], [340, ‘가락시장’, ‘3호선’], [341, ‘경찰병원’, ‘3호선’], [342, ‘오금’, ‘3호선’], [409, ‘당고개’, ‘4호선’], [410, ‘상계’, ‘4호선’], [411, ‘노원’, ‘4호선’], [412, ‘창동’, ‘4호선’], [413, ‘쌍문’, ‘4호선’], [414, ‘수유(강북구청)’, ‘4호선’], [415, ‘미아(서울사이버대학)’, ‘4호선’], [416, ‘미아사거리’, ‘4호선’], [417, ‘길음’, ‘4호선’], [418, ‘성신여대입구(돈암)’, ‘4호선’], [419, ‘한성대입구(삼선교)’, ‘4호선’], [420, ‘혜화’, ‘4호선’], [421, ‘동대문’, ‘4호선’], [422, ‘동대문역사문화공원’, ‘4호선’], [423, ‘충무로’, ‘4호선’], [424, ‘명동’, ‘4호선’], [425, ‘회현(남대문시장)’, ‘4호선’], [426, ‘서울역’, ‘4호선’], [427, ‘숙대입구(갈월)’, ‘4호선’], [428, ‘삼각지’, ‘4호선’], [429, ‘신용산’, ‘4호선’], [430, ‘이촌(국립중앙박물관)’, ‘4호선’], [431, ‘동작(현충원)’, ‘4호선’], [432, ‘총신대입구(이수)’, ‘4호선’], [433, ‘사당’, ‘4호선’], [434, ‘남태령’, ‘4호선’], [2511, ‘방화’, ‘5호선’], [2512, ‘개화산’, ‘5호선’], [2513, ‘김포공항’, ‘5호선’], [2514, ‘송정’, ‘5호선’], [2515, ‘마곡’, ‘5호선’], [2516, ‘발산’, ‘5호선’], [2517, ‘우장산’, ‘5호선’], [2518, ‘화곡’, ‘5호선’], [2519, ‘까치산’, ‘5호선’], [2520, ‘신정(은행정)’, ‘5호선’], [2521, ‘목동’, ‘5호선’], [2522, ‘오목교(목동운동장앞)’, ‘5호선’], [2523, ‘양평’, ‘5호선’], [2524, ‘영등포구청’, ‘5호선’], [2525, ‘영등포시장’, ‘5호선’], [2526, ‘신길’, ‘5호선’], [2527, ‘여의도’, ‘5호선’], [2528, ‘여의나루’, ‘5호선’], [2529, ‘마포’, ‘5호선’], [2530, ‘공덕’, ‘5호선’], [2531, ‘애오개’, ‘5호선’], [2532, ‘충정로(경기대입구)’, ‘5호선’], [2533, ‘서대문’, ‘5호선’], [2534, ‘광화문(세종문화회관)’, ‘5호선’], [2535, ‘종로3가’, ‘5호선’], [2536, ‘을지로4가’, ‘5호선’], [2537, ‘동대문역사문화공원’, ‘5호선’], [2538, ‘청구’, ‘5호선’], [2539, ‘신금호’, ‘5호선’], [2540, ‘행당’, ‘5호선’], [2541, ‘왕십리(성동구청)’, ‘5호선’], [2542, ‘마장’, ‘5호선’], [2543, ‘답십리’, ‘5호선’], [2544, ‘장한평’, ‘5호선’], [2545, ‘군자(능동)’, ‘5호선’], [2546, ‘아차산(어린이대공원후문)’, ‘5호선’], [2547, ‘광나루(장신대)’, ‘5호선’], [2548, ‘천호(풍납토성)’, ‘5호선’], [2549, ‘강동’, ‘5호선’], [2550, ‘길동’, ‘5호선’], [2551, ‘굽은다리(강동구민회관앞)’, ‘5호선’], [2552, ‘명일’, ‘5호선’], [2553, ‘고덕’, ‘5호선’], [2554, ‘상일동’, ‘5호선’], [2555, ‘둔촌동’, ‘5호선’], [2556, ‘올림픽공원(한국체대)’, ‘5호선’], [2557, ‘방이’, ‘5호선’], [2558, ‘오금’, ‘5호선’], [2559, ‘개롱’, ‘5호선’], [2560, ‘거여’, ‘5호선’], [2561, ‘마천’, ‘5호선’], [2611, ‘응암’, ‘6호선’], [2612, ‘역촌’, ‘6호선’], [2613, ‘불광’, ‘6호선’], [2614, ‘독바위’, ‘6호선’], [2615, ‘연신내’, ‘6호선’], [2616, ‘구산’, ‘6호선’], [2617, ‘새절(신사)’, ‘6호선’], [2618, ‘증산(명지대앞)’, ‘6호선’], [2619, ‘디지털미디어시티’, ‘6호선’], [2620, ‘월드컵경기장(성산)’, ‘6호선’], [2621, ‘마포구청’, ‘6호선’], [2622, ‘망원’, ‘6호선’], [2623, ‘합정’, ‘6호선’], [2624, ‘상수’, ‘6호선’], [2625, ‘광흥창(서강)’, ‘6호선’], [2626, ‘대흥(서강대앞)’, ‘6호선’], [2627, ‘공덕’, ‘6호선’], [2628, ‘효창공원앞’, ‘6호선’], [2629, ‘삼각지’, ‘6호선’], [2630, ‘녹사평(용산구청)’, ‘6호선’], [2631, ‘이태원’, ‘6호선’], [2632, ‘한강진’, ‘6호선’], [2633, ‘버티고개’, ‘6호선’], [2634, ‘약수’, ‘6호선’], [2635, ‘청구’, ‘6호선’], [2636, ‘신당’, ‘6호선’], [2637, ‘동묘앞’, ‘6호선’], [2638, ‘창신’, ‘6호선’], [2639, ‘보문’, ‘6호선’], [2640, ‘안암(고대병원앞)’, ‘6호선’], [2641, ‘고려대(종암)’, ‘6호선’], [2642, ‘월곡(동덕여대)’, ‘6호선’], [2643, ‘상월곡(한국과학기술연구원)’, ‘6호선’], [2644, ‘돌곶이’, ‘6호선’], [2645, ‘석계’, ‘6호선’], [2646, ‘태릉입구’, ‘6호선’], [2647, ‘화랑대(서울여대입구)’, ‘6호선’], [2648, ‘봉화산(서울의료원)’, ‘6호선’], [2711, ‘장암’, ‘7호선’], [2712, ‘도봉산’, ‘7호선’], [2713, ‘수락산’, ‘7호선’], [2714, ‘마들’, ‘7호선’], [2715, ‘노원’, ‘7호선’], [2716, ‘중계’, ‘7호선’], [2717, ‘하계’, ‘7호선’], [2718, ‘공릉(서울과학기술대)’, ‘7호선’], [2719, ‘태릉입구’, ‘7호선’], [2720, ‘먹골’, ‘7호선’], [2721, ‘중화’, ‘7호선’], [2722, ‘상봉(시외버스터미널)’, ‘7호선’], [2723, ‘면목’, ‘7호선’], [2724, ‘사가정’, ‘7호선’], [2725, ‘용마산’, ‘7호선’], [2726, ‘중곡’, ‘7호선’], [2727, ‘군자(능동)’, ‘7호선’], [2728, ‘어린이대공원(세종대)’, ‘7호선’], [2729, ‘건대입구’, ‘7호선’], [2730, ‘뚝섬유원지’, ‘7호선’], [2731, ‘청담’, ‘7호선’], [2732, ‘강남구청’, ‘7호선’], [2733, ‘학동’, ‘7호선’], [2734, ‘논현’, ‘7호선’], [2735, ‘반포’, ‘7호선’], [2736, ‘고속터미널’, ‘7호선’], [2737, ‘내방’, ‘7호선’], [2738, ‘이수’, ‘7호선’], [2739, ‘남성’, ‘7호선’], [2740, ‘숭실대입구(살피재)’, ‘7호선’], [2741, ‘상도’, ‘7호선’], [2742, ‘장승배기’, ‘7호선’], [2743, ‘신대방삼거리’, ‘7호선’], [2744, ‘보라매’, ‘7호선’], [2745, ‘신풍’, ‘7호선’], [2746, ‘대림(구로구청)’, ‘7호선’], [2747, ‘남구로’, ‘7호선’], [2748, ‘가산디지털단지’, ‘7호선’], [2749, ‘철산’, ‘7호선’], [2750, ‘광명사거리’, ‘7호선’], [2751, ‘천왕’, ‘7호선’], [2752, ‘온수(성공회대입구)’, ‘7호선’], [2753, ‘까치울’, ‘7호선’], [2754, ‘부천종합운동장’, ‘7호선’], [2755, ‘춘의’, ‘7호선’], [2756, ‘신중동’, ‘7호선’], [2757, ‘부천시청’, ‘7호선’], [2758, ‘상동’, ‘7호선’], [2759, ‘삼산체육관’, ‘7호선’], [2760, ‘굴포천’, ‘7호선’], [2761, ‘부평구청’, ‘7호선’], [2811, ‘암사’, ‘8호선’], [2812, ‘천호(풍납토성)’, ‘8호선’], [2813, ‘강동구청’, ‘8호선’], [2814, ‘몽촌토성(평화의문)’, ‘8호선’], [2815, ‘잠실(송파구청)’, ‘8호선’], [2816, ‘석촌’, ‘8호선’], [2817, ‘송파’, ‘8호선’], [2818, ‘가락시장’, ‘8호선’], [2819, ‘문정’, ‘8호선’], [2820, ‘장지’, ‘8호선’], [2821, ‘복정’, ‘8호선’], [2822, ‘산성’, ‘8호선’], [2823, ‘남한산성입구(성남법원.검찰청)’, ‘8호선’], [2824, ‘단대오거리’, ‘8호선’], [2825, ‘신흥’, ‘8호선’], [2826, ‘수진’, ‘8호선’], [2827, ‘모란’, ‘8호선’], [4101, ‘개화’, ‘9호선’], [4102, ‘김포공항’, ‘9호선’], [4103, ‘공항시장’, ‘9호선’], [4104, ‘신방화’, ‘9호선’], [4105, ‘마곡나루’, ‘9호선’], [4106, ‘양천향교’, ‘9호선’], [4107, ‘가양’, ‘9호선’], [4108, ‘증미’, ‘9호선’], [4109, ‘등촌’, ‘9호선’], [4110, ‘염창’, ‘9호선’], [4111, ‘신목동’, ‘9호선’], [4112, ‘선유도’, ‘9호선’], [4113, ‘당산’, ‘9호선’], [4114, ‘국회의사당’, ‘9호선’], [4115, ‘여의도’, ‘9호선’], [4116, ‘샛강’, ‘9호선’], [4117, ‘노량진’, ‘9호선’], [4118, ‘노들’, ‘9호선’], [4119, ‘흑석(중앙대입구)’, ‘9호선’], [4120, ‘동작(현충원)’, ‘9호선’], [4121, ‘구반포’, ‘9호선’], [4122, ‘신반포’, ‘9호선’], [4123, ‘고속터미널’, ‘9호선’], [4124, ‘사평’, ‘9호선’], [4125, ‘신논현’, ‘9호선’], [4126, ‘언주’, ‘9호선2~3단계’], [4127, ‘선정릉’, ‘9호선2~3단계’], [4128, ‘삼성중앙’, ‘9호선2~3단계’], [4129, ‘봉은사’, ‘9호선2~3단계’], [4130, ‘종합운동장’, ‘9호선2~3단계’], [4131, ‘삼전’, ‘9호선2~3단계’], [4132, ‘석촌고분’, ‘9호선2~3단계’], [4133, ‘석촌’, ‘9호선2~3단계’], [4134, ‘송파나루’, ‘9호선2~3단계’], [4135, ‘한성백제’, ‘9호선2~3단계’], [4136, ‘올림픽공원(한국체대)’, ‘9호선2~3단계’], [4137, ‘둔촌오륜’, ‘9호선2~3단계’], [4138, ‘중앙보훈병원’, ‘9호선2~3단계’], [1501, ‘판교’, ‘경강선’], [1502, ‘이매’, ‘경강선’], [1503, ‘삼동’, ‘경강선’], [1504, ‘경기광주’, ‘경강선’], [1505, ‘초월’, ‘경강선’], [1506, ‘곤지암’, ‘경강선’], [1507, ‘신둔도예촌’, ‘경강선’], [1508, ‘이천’, ‘경강선’], [1509, ‘부발’, ‘경강선’], [1510, ‘세종대왕릉’, ‘경강선’], [1511, ‘여주’, ‘경강선’], [1001, ‘서울역’, ‘경부선’], [1002, ‘남영’, ‘경부선’], [1003, ‘용산’, ‘경부선’], [1004, ‘노량진’, ‘경부선’], [1005, ‘대방’, ‘경부선’], [1006, ‘영등포’, ‘경부선’], [1007, ‘신도림’, ‘경부선’], [1032, ‘신길’, ‘경부선’], [1701, ‘구로’, ‘경부선’], [1702, ‘가산디지털단지’, ‘경부선’], [1703, ‘금천구청’, ‘경부선’], [1704, ‘석수’, ‘경부선’], [1705, ‘관악’, ‘경부선’], [1706, ‘안양’, ‘경부선’], [1707, ‘명학’, ‘경부선’], [1708, ‘금정’, ‘경부선’], [1709, ‘군포’, ‘경부선’], [1710, ‘의왕’, ‘경부선’], [1711, ‘성균관대’, ‘경부선’], [1712, ‘화서’, ‘경부선’], [1713, ‘수원’, ‘경부선’], [1714, ‘독산’, ‘경부선’], [1715, ‘세류’, ‘경부선’], [1716, ‘병점’, ‘경부선’], [1717, ‘세마’, ‘경부선’], [1718, ‘오산대’, ‘경부선’], [1719, ‘오산’, ‘경부선’], [1720, ‘진위’, ‘경부선’], [1721, ‘송탄’, ‘경부선’], [1722, ‘서정리’, ‘경부선’], [1723, ‘지제’, ‘경부선’], [1724, ‘평택’, ‘경부선’], [1725, ‘성환’, ‘경부선’], [1726, ‘직산’, ‘경부선’], [1727, ‘두정’, ‘경부선’], [1728, ‘천안’, ‘경부선’], [1729, ‘당정’, ‘경부선’], [1749, ‘서동탄’, ‘경부선’], [1750, ‘광명’, ‘경부선’], [1008, ‘이촌(국립중앙박물관)’, ‘경원선’], [1009, ‘서빙고’, ‘경원선’], [1010, ‘한남’, ‘경원선’], [1011, ‘옥수’, ‘경원선’], [1012, ‘응봉’, ‘경원선’], [1013, ‘왕십리(성동구청)’, ‘경원선’], [1014, ‘청량리(서울시립대입구)’, ‘경원선’], [1016, ‘외대앞’, ‘경원선’], [1017, ‘신이문’, ‘경원선’], [1018, ‘석계’, ‘경원선’], [1019, ‘광운대’, ‘경원선’], [1020, ‘월계’, ‘경원선’], [1021, ‘녹천’, ‘경원선’], [1901, ‘방학’, ‘경원선’], [1902, ‘도봉’, ‘경원선’], [1903, ‘도봉산’, ‘경원선’], [1904, ‘망월사’, ‘경원선’], [1905, ‘회룡’, ‘경원선’], [1906, ‘의정부’, ‘경원선’], [1907, ‘가능’, ‘경원선’], [1908, ‘녹양’, ‘경원선’], [1909, ‘양주’, ‘경원선’], [1910, ‘덕계’, ‘경원선’], [1911, ‘덕정’, ‘경원선’], [1912, ‘지행’, ‘경원선’], [1913, ‘동두천중앙’, ‘경원선’], [1914, ‘보산’, ‘경원선’], [1915, ‘동두천’, ‘경원선’], [1916, ‘소요산’, ‘경원선’], [1251, ‘서울역’, ‘경의선’], [1252, ‘신촌’, ‘경의선’], [1261, ‘효창공원앞’, ‘경의선’], [1262, ‘공덕’, ‘경의선’], [1263, ‘서강대’, ‘경의선’], [1264, ‘홍대입구’, ‘경의선’], [1265, ‘가좌’, ‘경의선’], [1266, ‘디지털미디어시티’, ‘경의선’], [1267, ‘수색’, ‘경의선’], [1268, ‘화전’, ‘경의선’], [1269, ‘강매’, ‘경의선’], [1270, ‘행신’, ‘경의선’], [1271, ‘능곡’, ‘경의선’], [1272, ‘곡산’, ‘경의선’], [1273, ‘백마’, ‘경의선’], [1274, ‘풍산’, ‘경의선’], …]

하루 평균 승/하차 인원의 합이 상위 7개 역은

1. 잠실역(143,668명)

2. 강남역(142,515명)

3. 고속터미널역(127,065명)

4. 서울역(121,447명)

5. 홍대입구역(115,999명)

6. 선릉역(113,357명)

7. 신림역(110,631명) 입니다.

신림역을 제외한 모든 역들은 2개 이상의 호선이 교차하는 환승역으로, 환승 인원까지 고려하면 서울의 주요 이동 허브라고 할 수 있습니다.

하루 평균 승/하차 인원 합 상위 20역

하루 평균 승/하차 인원의 합이 많은 상위 20개 역들을 지도로 시각화 해보면, 주요 역의 지역 분포가 한눈에 들어옵니다. 상당수가 강남구, 서초구, 관악구, 영등포구, 마포구, 중구에 위치하고 있습니다.

하루 평균 승/하차 인원 합 상위 20역

지하철 이용 인원 데이터를 승차인원과 하차인원으로 분리하여 분석해보면, 각 역이 위치한 지역의 특색을 파악하는데 도움이 될 수 있습니다. 환승도 포함되어 있지만, 출근 시간에 하차 인원이 많은 역 주변은 업무지역, 반대로 승차 인원이 많은 역 주변은 주거지 혹은 주요 환승지의 특성이 있다고 볼 수 있습니다.

그렇다면 오전 8~9시 출근 시간대에 하차 인원이 가장 많은 역은 어디일까요? ‘가산디지털단지역’입니다. 2005년에 가리봉역에서 역명이 변경된 가산디지털단지역 주변에는 ‘G밸리’로 불리는 서울 디지털산업단지가 있습니다. 오전 8~9시 사이에만 하루 평균 18,615명이 이 역에서 내려서 일을 하러 갑니다. 다음으로 선릉역(13,243명), 여의도역(12,476명), 시청역(12,170명), 역삼역(10,979명), 강남역(10,718명), 삼성역(10,696명), 서울역(10,556명), 을지로입구역(9,492명), 구로디지털단지역(8,855명)이 있습니다.

출근시간 하차 인원 상위 20

출근 시간대의 승차 인원도 한 번 볼까요? 오전 8~9시 사이에 지하철 승차 인원이 가장 많은 역은 관악구에 위치한 신림역(10,190명)입니다.

관악구는 특히 25-29세 인구가 가장 많은 지역, 청년층 인구가 가장 많은 지역, 1인 가구가 가장 많은 지역으로 꼽힙니다. 신림역의 뒤를 이어 사당역(6,165명), 서울대입구역(6,067명), 구로디지털단지역(6,034명), 잠실역(5,563명), 연신내역(5,211명), 까치산역(5,148명), 화곡역(4,813명), 신도림역(4,807명), 쌍문역(4,392명)이 있습니다. 동시간대 하차 인원이 많은 역들과 차이를 보입니다.

출근시간 승차 인원 상위 20

하지만 퇴근 시간대인 오후 6시~7시 사이에 사람들이 많이 하차하는 역은 출근 시간대에 승차 인원이 많은 역들과 또 다릅니다. 퇴근시간에 하차인원이 많은 역들은 신림역(8,186명), 잠실역(7,955명),

사당역(7,679명), 홍대입구역(7,013명), 신도림역(6,054명), 건대입구역(5,902명), 강남역(5,791명), 서울대입구역(5,745명), 고속터미널역(5,541명), 구로디지털역(5,435명)입니다. 홍대입구역, 건대입구역, 강남역, 고속터미널역은 출근 시간대 승차 인원이 상대적으로 많지 않았던 역들로, 퇴근 후 사람들의 활동 지역이 주거지 외에 위의 역들 주변으로 확장되는 것으로 보입니다.

퇴근시간 하차 인원 상위 20

그럼 늦은 밤까지 활동하는 올빼미족을 위한 지하철 ‘막차’ 시간대의 이용 현황은 어떨까요? 오후 11시와 오전 1시 사이에 승차 인원이 많은 역으로 홍대입구역(880명), 강남역(802명), 고속터미널역(667명), 서울역(628명), 잠실역(548명)이 있습니다. 특히 상위 3개인 홍대입구역, 강남역, 고속터미널역의 경우 퇴근 시간에 하차 인원이 많은 역들이기도 합니다. 상당 수의 사람들이 퇴근 후 지하철 막차 시간까지 해당 역 인근에 머무르며 활동하는 것으로 보입니다.

11PM ~ 1AM 막차 시간대 승차 인원 상위 15

2021년의 지하철 이용 인원은 코로나 팬데믹 발생 이전과 비교하면 전체적으로 크게 감소한 상황입니다. 2018년부터 2019년까지의 데이터를 시각화해보면, 지하철 이용 인원은 일년 중 1월과 2월에 상대적으로 적고, 3월부터 증가하다가 8월에 줄어들며, 9월 이후 다시 증가하는 패턴을 보입니다. 방학, 여름 휴가, 명절연휴 등에 영향을 받는다고 추측할 수 있습니다.

서울시 지하철역 하루 평균 승/하차 인원 2018.01~2021.04

하지만 이러한 패턴을 깨고, 한국에서 코로나 팬데믹 확진자가 나타나기 시작한 2020년 3월에는 하루 평균 이용 인원이 증가하지 않고 급격하게 줄어듭니다. 일 년 전인 2019년 3월 이용 인구(15,054,602명)의 59.8%(8,999,855명)에 불과한 수준입니다.

이후 2020년 9월과 2020년 12월에 다시 줄어듭니다. 일일 확진자가 4백명까지 증가했던 2020년 8월과 확진자가 천명대로 증가하여 5인 이상 집합 금지 등의 강력한 사회적 거리두기가 실시된 결과가 지하철 이용 현황 데이터에 반영되어 있습니다. 2021년부터는 점차 증가하기 시작하여, 2021년 4월에는 11,865,285명으로 코로나 팬데믹이 시작되기 직전인 2020년 2월(11,677,278명) 수준으로 회복되었습니다. 하지만 2019년 4월의 이용 인구(15,697,807명)와 비교하면 75.6%에 불과합니다.

한국 코로나 주 단위 신규 확진자 수

이처럼 지하철 이용 현황 데이터는 호선, 역, 요일, 시간대, 연도를 기준으로 다양하게 분석해 볼 수 있습니다. 코로나 팬데믹의 영향으로 이용 패턴에 변화가 있기는 하지만, 대중교통 이용 인구가 증가하는 역, 줄어드는 역을 추출해 보면, 인구의 활동이 집중되고 있는 지역을 파악하는 데 활용할 수 있습니다.

지하철과 버스의 이용 인원을 비교해 볼까요? 전반적으로 버스보다 지하철의 이용 인원이 많습니다. 특히 출퇴근 시간대에는 지하철 이용 인구가 크게 증가합니다. 혼잡한 출퇴근 시간대에는 역시 버스보다는 지하철을 이용하는 사람들이 많은 것 같습니다.

시간대별 평균 지하철, 버스 승/하차 인원

지역별로 지하철과 버스의 승/하차 인원을 비교해보면, 지하철을 많이 이용하는 지역과 버스를 많이 이용하는 지역이 나타납니다. 대표적으로 강남구, 중구, 마포구, 영등포구는 버스보다 지하철 이용인구가 많습니다. 북한산, 인왕산, 관악산과 같은 지형적 특성, 지역내 역의 위치, 도로 교통 상황 등이 영향을 준다고 볼 수 있습니다. 예를 들어 지하철 이용 인원이 버스보다 2.7배 많은 중구는 시청, 을지로가 위치한 강북의 대표적인 업무지역이자 명동, 남대문 시장, 동대문 패션타운 등 서울의 명소들이 밀집해 있는 지역이기도 합니다. 버스와 지하철 인프라가 잘 갖춰져 있지만 도로 혼잡도가 높고, 교통체증이 심할 때가 많아 중구를 오고 갈 때는 버스보다 지하철을 선호하는 사람들이 많지 않을까 추측됩니다.

하루 평균 지역별 지하철, 버스 승/하차 인원

본 스토리에서는 간단한 기술통계로 서울시 대중교통 이용 현황 데이터를 살펴보았습니다. 서울에서 매일 대중교통을 이용하는 사람들에게 지하철과 버스 이용 현황 분석 결과는 우리가 체험하는 일상과 크게 다르지 않습니다. 하지만 예상하지 못했던 사실들도 찾을 수 있습니다. 또한 대중교통 이용 현황 데이터는 교통 혼잡도 예측, 이동 경로 추천부터 대중 교통 운영 개선까지 다양한 목적으로 활용될 수 있습니다. 주요 도시 인프라와 함께 지역 사회가 어떻게 변화하는지 분석해 보세요.

서울시 대중교통은 경기, 인천 등 수도권으로 노선이 연결되며 계속 확장 중이며, 또한 역명이 변경되는 경우도 있습니다. 대중교통 이용 현황 데이터를 활용할 때는 이러한 변경 항목들에 주의할 필요가 있습니다. 또한 지하철 관리 기관이 다른 일부 호선의 데이터는 함께 제공되지 않고 있습니다. 버스 이용 현황 데이터는 약 12,598개의 정류장과 약 633개 노선으로 구성되어 복잡하게 느껴질 수 있습니다.

각 버스 정류장이 가지고 있는 ARS 번호를 기준으로 정류장의 좌표와 이름을 추적할 수 있는 ‘서울특별시 정류소정보조회 서비스’ API(각주2)를 함께 이용하면 도움이 됩니다.

각주1. 기록으로 만나는 대한민국, 대중교통

https://theme.archives.go.kr/next/koreaOfRecord/publicTransport.do

각주2. 서울특별시 정류소정보조회 서비스’ API

https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15000303

[논문]빅데이터 분석을 이용한 지하철 혼잡도 예측 및 추천시스템

초록

지하철은 버스와 택시에 비해 많은 승객들을 안전하고 신속하게 대량 수송할 수 있는 미래 지향적인 교통수단이다. 지하철 이용자의 증가에 따른 혼잡도 증가는 지하철을 쾌적하게 이용할 수 있는 시민들의 권리를 저해하는 요인 중의 하나이다. 따라서 지하철 내의 혼잡도 예측은 승객의 이용 편의성과 쾌적성을 극대화할 수 방법 중 하나이다. 본 논문에서는 기존의 지하철 혼잡도를 다중 회귀 분석으로 예측하고 빅데이터 처리를 통한 실시간으로 혼잡도를 모니터링하고, 자신의 출발역과 도착역 정보뿐만 아니라 다양한 정보를 추가하여 개인화된 혼잡도 예측 시스템을 제안한다. 제안된 혼잡도 예측 시스템을 적용한 결과 예측혼잡도가 실제혼잡도에 비해 평균 81% 정확도를 보였다. 본 논문에서 제안한 예측 및 추천 어플리케이션을 지하철 고객에 적용하면 지하철 혼잡도 예측과 개인 사용자의 편리성에 도움이 될 것으로 예상된다.

키워드에 대한 정보 지하철 데이터 분석

다음은 Bing에서 지하철 데이터 분석 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 지하철데이터분석

  • 동영상
  • 공유
  • 카메라폰
  • 동영상폰
  • 무료
  • 올리기

지하철데이터분석


YouTube에서 지하철 데이터 분석 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 지하철데이터분석 | 지하철 데이터 분석, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  실생활 속 확률 과 통계 | 윷놀이와 확률 계산 | 5분 특강, 생활 속 수학 162 개의 가장 정확한 답변

Leave a Comment