Python

[QGIS + Python] 서울사람들은 어디로 놀러다닐까

이언배 2025. 1. 24. 11:30

내가 서울사람이 아니어서 슬프지만,

궁금하긴 하다.

 

연령대별로 사람들은 어딜 놀러다닐까.

데이터는 생활인구 이동데이터

서울 생활이동> 서울빅데이터 | 서울열린데이터광장

 

열린데이터광장 메인

데이터분류,데이터검색,데이터활용

data.seoul.go.kr

그리고 행정동 코드 데이터

브이월드 공간정보 다운로드

 

브이월드

국가가 보유하고 있는 공개 가능한 공간정보를 모든 국민이 자유롭게 활용할 수 있도록 다양한 방법을 제공합니다.

www.vworld.kr

 

이제 연령대별로 어딜 놀러다니는지 보자.

기준은

1. 23년 11월 기준

2. 주중, 주말 구분 없이

3. 17시 ~ 24시 사이에

4. 행정동에 도착한 사람들 중

5. 놀러 온 사람들 (집에서 여가, 업무에서 여가, 여가에서 여가)의

6. 연령대별 합을

구해보자.

 

import psycopg2 as psql
import pandas as pd
from sqlalchemy import create_engine
import seaborn as sns
import matplotlib.pyplot as plt
from glob import glob

###########11월 생활이동 데이터는 시간대별로 파일이 구성되어 있으니 17~24시 파일을 한 폴더에
filenames = glob('../Data/생활이동_행정동_202311/*.csv')
dfs = []
for filename in filenames:
    df = pd.read_csv(filename, encoding = 'cp949')
    dfs.append(df)
df_move = pd.concat(dfs)
df_move.head(3)

##########이동 유형 중에서 끝이 'E'로 끝나는, 여가 목적으로 도착하는 행정동만 잘라본다.
df_move2 = df_move[['대상연월', '도착시간', '출발 행정동 코드', '도착 행정동 코드', '성별', '나이', '이동유형', '이동인구(합)']]
moving_patterns = ['HE', 'WE', 'EE']
df_move3 = df_move2[(df_move2['이동유형'].isin(moving_patterns)) & (df_move2['이동인구(합)'] != '*')]
df_move3['이동인구(합)'] = df_move3['이동인구(합)'].astype(float)

##########연령대는 10~15세, 15~20세 사이로 나와있는 것 같은데 일단 10년 기준으로 끊어본다.
df_10 = df_move3[(df_move3['나이'] == 10) | (df_move3['나이'] == 15)]
df_20 = df_move3[(df_move3['나이'] == 20) | (df_move3['나이'] == 25)]
df_30 = df_move3[(df_move3['나이'] == 30) | (df_move3['나이'] == 35)]
df_40 = df_move3[(df_move3['나이'] == 40) | (df_move3['나이'] == 45)]
df_50 = df_move3[(df_move3['나이'] == 50) | (df_move3['나이'] == 55)]
df_60 = df_move3[(df_move3['나이'] == 60) | (df_move3['나이'] == 65)]
df_70 = df_move3[(df_move3['나이'] >= 70)]

########## 도착 행정동에 모이는 사람들을 기준으로 싹 더해본다.
df_10_sum = df_10[['도착 행정동 코드', '이동인구(합)']].groupby(['도착 행정동 코드']).sum().reset_index().rename(columns = {'도착 행정동 코드': 'hjd_cd', '이동인구(합)': '10s_inflow'})
df_20_sum = df_20[['도착 행정동 코드', '이동인구(합)']].groupby(['도착 행정동 코드']).sum().reset_index().rename(columns = {'도착 행정동 코드': 'hjd_cd', '이동인구(합)': '20s_inflow'})
df_30_sum = df_30[['도착 행정동 코드', '이동인구(합)']].groupby(['도착 행정동 코드']).sum().reset_index().rename(columns = {'도착 행정동 코드': 'hjd_cd', '이동인구(합)': '30s_inflow'})
df_40_sum = df_40[['도착 행정동 코드', '이동인구(합)']].groupby(['도착 행정동 코드']).sum().reset_index().rename(columns = {'도착 행정동 코드': 'hjd_cd', '이동인구(합)': '40s_inflow'})
df_50_sum = df_50[['도착 행정동 코드', '이동인구(합)']].groupby(['도착 행정동 코드']).sum().reset_index().rename(columns = {'도착 행정동 코드': 'hjd_cd', '이동인구(합)': '50s_inflow'})
df_60_sum = df_60[['도착 행정동 코드', '이동인구(합)']].groupby(['도착 행정동 코드']).sum().reset_index().rename(columns = {'도착 행정동 코드': 'hjd_cd', '이동인구(합)': '60s_inflow'})
df_70_sum = df_70[['도착 행정동 코드', '이동인구(합)']].groupby(['도착 행정동 코드']).sum().reset_index().rename(columns = {'도착 행정동 코드': 'hjd_cd', '이동인구(합)': '70s_inflow'})

########## 이쁘게 merge 해주고
df_inflows = df_10_sum.merge(df_20_sum, on = 'hjd_cd').merge(df_30_sum, on = 'hjd_cd').merge(df_40_sum, on = 'hjd_cd').merge(df_50_sum, on = 'hjd_cd').merge(df_60_sum, on = 'hjd_cd').merge(df_70_sum, on = 'hjd_cd')

########## 동에 방문한 사람들 중 연령대별 비율을 구해본다. 예를 들어 가회동에 100명이 오면 그 중에서 10대는 몇%고 20대는 몇%고...
df_inflows['total'] = df_inflows['10s_inflow'] + df_inflows['20s_inflow'] + df_inflows['30s_inflow'] + df_inflows['40s_inflow'] + df_inflows['50s_inflow'] + df_inflows['60s_inflow'] + df_inflows['70s_inflow']
df_inflows['10s_r'] = df_inflows['10s_inflow']/df_inflows['total']
df_inflows['20s_r'] = df_inflows['20s_inflow']/df_inflows['total']
df_inflows['30s_r'] = df_inflows['30s_inflow']/df_inflows['total']
df_inflows['40s_r'] = df_inflows['40s_inflow']/df_inflows['total']
df_inflows['50s_r'] = df_inflows['50s_inflow']/df_inflows['total']
df_inflows['60s_r'] = df_inflows['60s_inflow']/df_inflows['total']
df_inflows['70s_r'] = df_inflows['70s_inflow']/df_inflows['total']

df_inflows['hjd_cd'] = df_inflows['hjd_cd'].astype(str)

 

연령 불문하고 사람들이 "놀러" 많이 가는 동네.

크게 묶어보면 마곡, 여의도, 홍대, 종로~을지로, 한남동, 용산, 강남, 천호, 양재, 가리봉동 등이 보인다.

 

내가 서울을 안 살아서 모르겠는데 도대체 저 진관동은 어디인가. 은평뉴타운 때문인가?

 

반면 시흥, 쌍문동, 신월동 등은 사람들이 "놀러"가지는 않는 동이다. 주택단지, 아파트단지가 많으면 아무래도 그렇겠지.

 

1. 동별 방문 수를 따져보자.

"이 동네에는 이 연령대의 사람들이 많이 온다" 라는 의미로 해석하길.

5만명을 못 넘기면 파란색, 20만명이 넘으면 주황색, 25만명이 넘으면 빨간색.

10대들이 놀러다니는 곳은 딱 정해져있다. 목동, 여의도, 서초, 대치, 건대, 진관동(여긴 뭐야? 은평이야?), 잠실.

그리고 확실한건, 애들은 놀러가고 싶으면 홍대에 간다.

 

10만명을 못넘기면 파란색, 20~30만명이 초록색, 90만명이 넘으면 빨간색.

20대가 놀러다니는 곳은 너무나 명확하다. 정확히는, 홍대-여의도-신침-강남-대치-종로가 아니면

"놀러가지 않는다". 워낙에 홍대가 압도적으로 많이 방문해서 그런 것 같은데, 11월에 홍대에 무슨 일이 있었나...??

불안하니까 서교동을 빼고 다시 찍어본다.

10만명 이하 파란색, 40만명 이상 빨간색. 그게 다를 건 없다.

어쨌거나, 20대의 핫플레이스는 뚜렷하게 정해져있다.

 

5만명 이하 파란색, 30만명 이상 주황색, 35만명 이상 빨간색.

20대가 다니던 동네에서 마곡, 문래, 가리봉동, 양재, 길동, 잠실 등으로 조금 더 퍼지는 경향을 보인다.

하지만 확실한 건, 20대가 90만명 움직일 때 30대는 35만명 움직였다는 것.

홍대에서 놀던 사람들이 강남으로 넘어간다는 것.

 

5만명 이하 파란색, 25만명 이상 빨간색.

40대는 30대가 가는 곳이랑 얼추 비슷한데, 일단 홍대는 서서히 줄어들고 강남에서 양재, 서초로 행선지를 옮긴다.

그리고 잠실, 문정으로도 많이 놀러간다.

무엇보다 상암, 은평 등의 강북서쪽 동네가 많아졌는데, 가족단위로 놀러다녀서 그런가? 왜 그럴까?

40대가 되면 알게될까?

 

5만명 이하면 파랑, 15만명 이상이면 주황, 20만명 이상이 빨강이다.

50대가 되면 놀러가는 곳이 더 명확해진다. 종로와 강남. 그리고 여의도와 서초 조금. 이태원보다는 용산을 간다.

 

5만명 이하면 파랑, 15만명 이상이면 빨강이다.

60대가 되면, 다시 놀러가는 사람 수도 줄어들지만, 놀러가는 동네도 줄어든다.

종로, 강남의 강세는 여전하지만, 20대 때에 보이지 않던 양재-서초-개포가 보인다.

 

결론적으로,

1. 서울에서 사람들이 놀러가는 곳은 정해져있고

2. 그건 종로-강남-여의도-홍대인데

3. 연령대가 높아질수록 서울의 곳곳으로 퍼져나갔다가

4. 60대가 되면 다시 제한된 공간으로 회귀하고,

5. 무엇보다

살인자ㅇ난감 송촌 리얼한 콜라텍 액션씬 https://youtu.be/UV4YUpXy408?si=wU8kkn1sbNOksc4Z

 

2. 동별로 비율을 따져보자.

"이 동네에 가면 이 연령대의 사람들이 많이 보인다" 라는 의미로 해석하길.

 

10대 비율이 40%가 넘는 곳들. 목동, 대치, 중계. 당연해보이지만, 학원가다.

 

20대 비율이 40%가 넘는 곳. 홍대, 신림, 이화, 대학로다.

특히 대학로는 다른 연령대는 많이 방문하지 않지만, 20대들의 핫플레이스로 해석할 수 있다.

 

30대 비율이 10%가 넘으면 노란색, 20%가 넘으면 빨간색이다. 

일단 20대와 비교해서 급격하게 비율이 줄어들고 (아마 '덜 다닌다' 가 아니고, 20대가 다니는 곳은 30대도 다니는데 20대 비율이 워낙 커서 그런 거로 보인다)

마곡, 문래, 대림, 여의도, 이태원~용산, 강남과 잠실 일부. 그리고 성수동의 약진이 눈에 띈다.

 

0.2가 넘으면 주황색, 0.25가 넘으면 빨간색. 

40대는 홍대와 성수, 대학로에 갈 자격을 잃는다...

이태원~강남, 그리고 새롭게 보이는 고덕과 양재~개포동으로 놀러갈 뿐.

물론 청담~논현은 3~40대의 본거지로 보인다.

 

0.2가 넘으면 빨간색. 빨간색이 많아보이니 "50대가 많이 놀러다니는구만!" 이라고 생각할 수 있으나,

"원래도 사람이 덜 가는 동네에는 50대 비율이 높더라" 로 해석하는 게 낫다.

그러니까, 홍대, 한남, 이화, 대학로, 건대에는 50대가 없다.

로 해석하는 게 맞다.

 

그리고 60대는 가지 않는 곳과 가는 곳의 구분이 더욱 명확해진다.

굳이 나누자면, 서울의 중심에서 주변부가 '놀러다닐 곳'이 된다는 의미.

 

 

728x90