Project_Log

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

Jerry_JH 2022. 2. 6. 22:58
728x90

이전 포스팅에서 이어지는 내용이므로 꼭 보고 오는 것을 추천

 

https://jerrys-ai-lab.tistory.com/38

 

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

이전 포스팅에서 이어지는 내용이므로 꼭 보고 오는 것을 추천 https://jerrys-ai-lab.tistory.com/37 [ 빅데이터의 이해 ] 공공 데이터를 이용하여 지하철 이용객 데이터 분석 - 1 2021년 1학기에 진행한 프

jerrys-ai-lab.tistory.com

 

저번 포스팅을 통해서 승하차 인원이 어디 역에 많은지, 언제 승하차가 인원이 제일 많은지 살펴보았다.

 

이번 포스팅은 저녁 10시 이후에 어디가 승하차 인원이 제일 많은지 알아보고, 

제일 최근 데이터인 2021년 5월과 2020년 8월부터 2021년 4월까지의 평균값을 비교하여 최근 승객들의 동향을 살펴본다. ( 프로젝트 진행했을 당시가 21년 5월이라서 21년 5월 데이터가 제일 최근 값이다.)

 


[ 데이터 분석 ]

저녁 10시(22시) 이후 야간 승객 총합

사회적 거리두기로 인하여 저녁 10시에 대부분의 상업시설이 문을 닫아야 된다. 

그래서 예전보다 저녁 10시에 유동인구가 급증한 상황이다.

지하철 승하차 데이터를 가지고, 저녁 10시 이후 어디가 승하차 인원이 제일 많은지 살펴본다.

 

1. 승차

그룹화한 데이터에서 22시 이후의 컬럼만 가지고 온다.

night_in=station_group[['22시-23시 승차인원','23시-24시 승차인원','00시-01시 승차인원','01시-02시 승차인원','02시-03시 승차인원','03시-04시 승차인원']]

 

전에 했었던 방법대로 folium 라이브러리를 이용해서 시각화를 해보았다.

# 서울시 중심부의 위도, 경도 입니다.
center = [37.541, 126.986]

m = folium.Map(location=center, zoom_start=10)

HeatMap(data_list).add_to(m)

m.save('2020_08 이후 10시 이후 승차인원상태.html')

m

2020_08 이후 10시 이후 승차인원상태.html
0.02MB
전체를 보았을 때 모습이다.
한강 중심으로 본 22시 이후 승차인원 히트맵

22시 이후로만 뽑았을 때, 전체 시간으로 본 것이랑 다른 점이 있다는 것을 볼 수 있다.

마찬가지로 이것도 히트맵을 중심으로 TOP5를 뽑아보았다.

[ TOP5 ] 

1. 강남

2. 홍대입구

---------

3. 광화문

4. 망우

5. 월곡

 

강남이랑 홍대입구가 압도적으로 많았고, 나머지는 큰 차이가 없었다. 

 

22시 이후 승차를 가장 많이 한 곳

강남역에서 22시~23시 승차인원이 약 140만 명으로 제일 많았다.

( 야근하는 인원 + 코로나로 인하여 22시에 문을 닫아 집에 가는 인원으로 추정된다. ) 

 

2. 하차

승차와 마찬가지로 하차도 그룹화한 데이터에서 22시 이후 컬럼만 뽑았다.

night_out=station_group[['22시-23시 하차인원','23시-24시 하차인원','00시-01시 하차인원','01시-02시 하차인원','02시-03시 하차인원','03시-04시 하차인원']]

코드는 승차와 동일하다.

# 서울시 중심부의 위도, 경도 입니다.
center = [37.541, 126.986]

m = folium.Map(location=center, zoom_start=10)

HeatMap(data_list).add_to(m)

m.save('2020_08 이후 10시 이후 하차인원상태.html')

m

2020_08 이후 10시 이후 하차인원상태.html
0.02MB
전체를 본 모습
한강을 중심으로 확대한 모습

지금까지 보았던 히트맵들이랑 확연히 다른 모습을 보여준다. (항상 핫플이었던 강남이 없다.)

[ TOP5 ]

1. 신림

----------

2. 사당

3. 서울대입구

4. 잠실

5. 신도림

 

신림이 엄청 많았고, 나머지는 큰 차이가 없었다. 

 

22시 이후 하차를 가장 많이 한 곳

신림에서 22시 ~ 23시 하차하는 인원이 약 100만 명으로 제일 많았다.

(이러한 결과가 나왔다는 것은 신림이 서울 지하철역 기준으로 서울에서 주택단지가 많다는 의미로 해석된다.)

 


2021년 5월(최근 데이터)과 2020년 8월~2021년 4월까지의 평균값과 승하차 수 비교

2021년 6~7월에 이 프로젝트를 진행했기 때문에 이때 당시 2021년 5월 승하차 데이터가 제일 최근 데이터였다. 

그래서 승객들의 최근 동향을 코로나 거리두기가 시작한 2020년 8월부터 2021년 4월까지의 승하차 평균값과 비교해서 분석해보았다.

 

일단 해당 데이터를 비교하기 위해 2021년 5월 데이터와 2020년 8월~2021년 4월까지의 데이터를 나누었다.

# 2021.05 데이터
lately_data = station_people.loc[station_people['사용월']==202105,:]

# 2021.04~2020.08 데이터
mean_data =station_people.loc[station_people['사용월']!=202105,:]

1. 승차

승차 관련 컬럼값만 필터링을 하고, 2020년 8월~2021년 4월 데이터는 평균으로 groupby를 했다.

# 승차 관련 컬럼만 필터링
in_list = lately_data.columns.tolist()[:3]

for a in station_people.columns.tolist():
    if a.find('승차')!= -1 :
        in_list.append(a)

in_lately_data = lately_data[in_list]
in_mean_data = mean_data[in_list]

# 평균값 group
in_mean_group=in_mean_data.groupby(['호선명','지하철역']).mean()
in_mean_group =in_mean_group.drop(['사용월'],axis=1)

in_lately_data =in_lately_data.drop(['사용월'],axis=1)

 

2021년 5월 데이터와 평균 데이터를 이용해 계산을 하고,

시각화를 하였을 때 수치 값이 너무 커서 히트맵이 제대로 안 나오는 현상이 발생했다.

(대부분의 수치 값들이 빨간색으로 나왔다.)

시각화가 잘못된 것 같아, 최근 데이터(2021/05)에서 평균 데이터 뺀 값에서 max, min 값을 뽑아 정규화를 시켰다.

# 5월 데이터 - 평균데이터 = 계산
column_list=in_mean_group.columns.tolist()

# 문자열 데이터 삭제
data_list = []
max_value = 76480.0
min_value = -7709.1111111111095

for j in column_list:
    location_list = []
    for i in range(len(in_mean_group_index)):
        data_a = [] 
        data_a.append(address_station.loc[i,'위도'])
        data_a.append(address_station.loc[i,'경도'])
        a =float(in_lately_data.loc[i,[j]])-float(in_mean_group_index.loc[i,[j]])
        # 정규화
        people = (a - min_value) / (max_value-min_value)
        data_a.append(people)
        location_list.append(data_a)
    data_list.append(location_list)

그다음 시각화를 했다.

이번에는 시각화를 이전에 했던 방법이랑은 다르게 색다르게 해 보았다.

HeatMapWithTime 함수를 이용하였는데, 이것은 시간에 흐름대로 실시간 변화하는 것을 볼 수 있다.

center = [37.541, 126.986]

m = folium.Map(location=center, zoom_start=11)

hm = plugins.HeatMapWithTime(data_list,auto_play=True, index=column_list,max_opacity=1,min_opacity=0)

hm.add_to(m)

m.save('평균-2021_5월 승차 인원수 시각화.html')

m

평균-2021_5월 승차 인원수 시각화.html
0.66MB

03시부터 시작된 24시간을 영상으로 찍어보았다.

하단에 있는 메뉴바를 이용하여 진행시킬 수 있다.

영상을 보면 알다시피 21시 전까지는 서울역만 색깔이 살짝 다르고 21시부터 홍대를 시작으로 종로 3가, 강남, 잠실, 건대입구, 합정, 공덕 등이 히트맵에 강하게 찍히고 있다. 

22시-23시 승차인원 상태

크게 차이가 나는 지하철역만 뽑아 표로 정리를 하면 이러하다.

하남풍산역은 이번에 개통되어서 그전에 데이터가 없어 크게 늘어났다고 나온 것 같다.

21시부터 홍대입구와 강남이 크게 늘어난 것이 특이점이다. 이제 백신을 맞기 시작하면서 사람들이 다시 모이기 시작한다는 것을 간접적으로 느낄 수 있다.

 

2. 하차

하차도 승차와 마찬가지고 하차 관련 컬럼만 필터링하고, groupby로 평균값을 구했다.

# 하차 관련 컬럼만 필터링
out_list = lately_data.columns.tolist()[:3]

for a in station_people.columns.tolist():
    if a.find('하차')!= -1 :
        out_list.append(a)

out_lately_data = lately_data[out_list]
out_mean_data = mean_data[out_list]

# 평균값 
out_mean_group=out_mean_data.groupby(['호선명','지하철역']).mean()

하차도 승차처럼 정규화를 해서 전체적으로 값을 작게 만들었다.

# 5월 데이터 - 평균데이터 = 계산
column_list=out_mean_group.columns.tolist()

# 문자열 데이터 삭제
#data = night_in_index.drop(['index','호선명','지하철역'],axis=1)
data_list = []
max_value = 39173.0
min_value = -8071.444444444438

for j in column_list:
    location_list = []
    for i in range(len(in_mean_group_index)):
        data_a = [] 
        data_a.append(address_station.loc[i,'위도'])
        data_a.append(address_station.loc[i,'경도'])
        a =float(out_lately_data.loc[i,[j]])-float(out_mean_group_index.loc[i,[j]])
        # 정규화
        people = (a - min_value) / (max_value-min_value)
        data_a.append(people)
        #data_a.append(float(out_lately_data.loc[i,[j]])-float(out_mean_group_index.loc[i,[j]]))
        location_list.append(data_a)
    data_list.append(location_list)
# 시각화
center = [37.541, 126.986]

m = folium.Map(location=center, zoom_start=11)

hm = plugins.HeatMapWithTime(data_list,auto_play=True, index=column_list,max_opacity=1,min_opacity=0)

hm.add_to(m)

m.save('평균-2021_5월 하차 인원수 시각화.html')

m

평균-2021_5월 하차 인원수 시각화.html
0.66MB

 

승차와 마찬가지로 하차도 영상으로 찍었다.

하차는 흥미로운 결과를 보인다. 

서울역은 계속 빨간불이 들어와 있는 것을 보아, 2021년 5월부터 서울역에서 열차를 타고 이동하는 사람이 많은 것 같다. (개인적인 추측)

홍대입구, 고속터미널, 김포공항, 신림, 사당, 잠실, 공덕 등 서울 여러 곳에서 하차하는 인원들이 급증했다.

제일 큰 변화가 발생한 22시~23시 하차인원 상황이다.

차이 많이 나는 역을 표로 정리해보았다.

승차와는 다르게 큰 변화를 보이는데, 그만큼 사람들이 많이 움직이기 시작했다는 정보로 생각된다.

 


[ 결론 ] 

1. 서울 지하철 승하차 데이터를 가지고 살펴본 결과 대체로 승객들이 강남, 잠실, 반포, 서울역, 고속터미널에서 승하차가 활발하다는 것을 알게 되었고, 이 데이터 분석을 참고하여 직원들을 배치한다면 더 좋은 서비스를 승객들에게 제공할 수 있을 것 같다는 생각이 든다.

 

2. 최근 데이터(2021년 5월)를 중점적으로 과거와 데이터 비교를 한 결과, 홍대입구, 강남, 서울역, 시청, 고속터미널, 김포공항 등 2021년 5월부터 큰 증가를 가진 곳이 많았다. 이때가 1차 백신을 맞기 시작한 시기인데, 백신을 접종하기 시작하면서 사회적 거리두기가 다시 느슨해지고 있다는 것을 알 수 있다.

 


이 글을 쓰고 있는 현재를 보았을 때, 확진자는 엄청난 속도로 계속 나오고 있다.

단, 위중증자는 줄고 있는 상황이다. 정부에서도 이것을 긍정적으로 바라보고, 최근 뉴스에서는 다시 거리두기를 완화할 수도 있다는 희망이 돌고 있다.

뉴스에서는 확진자만 가지고 강조를 하는데, 위중증자가 줄어든다는 희망을 주는 기사가 나왔으면 좋겠다.

그리고 이제는 사회적 거리두기는 큰 의미가 없어 보인다. 저녁 9시쯤 되면 지하철에 사람이 너무 많다. 또한 출퇴근하는 직장인은 대중교통 이용할 때마다 무수히 많은 사람들이랑 좁은 공간에 같이 들어가게 되는데, 확진자가 이렇게 나온 것을 보면 없다고는 장담이 절대 안 된다.

사회적 거리두기를 빨리 풀어서 죽어나가는 자영업자들을 살리는 것이 맞다고 생각한다.

728x90