본문 바로가기
  • 데이터에 가치를 더하다, 서영석입니다.
도전 : 더 나은 사람으로/GIS 아이템 최적화 프로젝트

[2022 강서구 공모전] 동별 가로쓰레기통_생활인구

by 꿀먹은데이터 2022. 4. 1.

'가로 쓰레기통과 생활인구의 관계'에 따라 가로쓰레기통의 위치 선정에 있어 도움을 주기 위함으로 진행하였다. 

본 연구에서는 강서구의 행정동 별 가로 쓰레기통의 위치 현황을 모델링을 통해 보여준다. 그중 가장 쓰레기통이 필요한 행정동을 특정해 그 행정동 구역 안에서의 최적 입지와 기존 쓰레기통 위치 현황을 보여주고 이에 대한 좌표와 주변 자료들을 보여준다.

        다음은 쓰레기통이 부족한 행정동을 가려내기 위한 설명변수이다.

행정동별 종속변수, 설명변수

# 라이브러리
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.font_manager as fm
import pandas as pd
df1 = pd.read_excel('../서울특별시 강서구_가로쓰레기통 설치 정보_20210901.xlsx')
df2 = pd.read_excel('../강서구 생활인구(2020 1분기~2021 3분기 동정보포함).xlsx')
df3 = pd.read_excel('../행정동코드_매핑정보_2018_1.xlsx')
df1.head()

서울특별시 강서구_가로쓰레기통 설치 정보

df2.head()

강서구 생활인구 (20_1분기~ 21 3분기 동정보 포함)

df3.head()

행정동과 코드의 매핑 정보이다.

  • df1에서 설치위치에 따른 개수로 동별 쓰레기통 개수를 전처리 작업을,
  • df2에서 동 정보에 따른 생활인구의 평균을 전처리 작업을 하였다.
  • 한 눈에 볼 수 있도록 필요한 칼럼('개수/생활인구' 와 '총 생활인구 수)을 추가하였다.
  • 마지막으로 내림차순하여 개수/생활인구가 가장 적은 순으로 추출하였다.
    • 그 이유로는 개수/생활인구의 비율이 적을수록 인구가 많기 때문에 무단투기가 많을 것이고, 쓰레기통의 수요가 많을 것이라고 생각했다.
groups = df1.groupby('설치위치')
data1=groups.count() #개수
data1=data1.reset_index()
data1=data1[['설치위치','연번']]
data1.columns=['동 정보','개수']

groups = df2.groupby('동 정보')
data2=groups.mean() #평균
data2=data2.reset_index()
data2=data2[['동 정보','총_생활인구_수']]

last_df=pd.merge(data1,data2,on='동 정보')
last_df['개수/생활인구']=last_df['개수']/last_df['총_생활인구_수']*10000
last_df['총_생활인구_수[단위:1만명]']=last_df['총_생활인구_수']/10000

ratio_df = last_df.sort_values('개수/생활인구')
ratio_df.rename(columns={'개수/생활인구':'개수/총생활인구[단위:1만명]'},inplace=True)
ratio_df.reset_index(inplace=True)
ratio_df.head()

최종 전처리 후 데이터프레임

동 추출 기준은 다음과 같은 지수 WPP(Waste basket Per Population)를 만들어 가장 값이 낮은 동을 채택했다.

이를 토대로 시각화 작업을 하였다.

Visualization

import numpy
fig,ax=plt.subplots(figsize=(18,6))
x=numpy.arange(len(last_df['동 정보']))

plt.bar(x-0.2,last_df['개수'],color='r',label='쓰레기통 개수',width=0.4)
plt.bar(x+0.2,last_df['총_생활인구_수[단위:1만명]'],label='생활인구(단위:1만명)',color='b',width=0.4)
plt.xticks(x,last_df['동 정보'])
plt.legend()
plt.xlabel('행정동')
plt.ylabel('수치')
plt.title('생활인구 및 쓰레기통 개수',size=20,weight='bold',pad='13')
plt.box(False)
plt.grid(True,axis='y',alpha=10,linestyle='--')
plt.show()

fig = plt.figure(figsize=(12,6))
ax=sns.barplot(x="동 정보",y="개수/총생활인구[단위:1만명]",data=else_df,color="salmon")

bg_color="#f1f1f1"
fig.patch.set_facecolor(bg_color)
fig.set_facecolor(bg_color)

for p in ax.patches:
    ax.annotate(format(p.get_height(),'.5f'),
               (p.get_x()+p.get_width()/2.,
               p.get_height()),
               ha='center',va='center',
               size=12,color='grey',
               xytext=(0,14),
               textcoords='offset points')
plt.xlabel("행정동",size=12)
plt.ylabel("WPP",size=12)
plt.title("행정동별 WPP 지수(가로 쓰레기통)",size=20,weight='bold',pad='13')
plt.box(False)
plt.grid(True,axis='y',alpha=10,linestyle='--')
plt.show()

 위 그림은 상위 5개 동의 WPP 지수를 나타낸 것이다. 화곡8동의 경우 생활인구는 강서구의 행정동 중 가장 많지만 가로 쓰레기통 개수는 가장 적다. 따라서 WPP가 가장 낮은 행정동인 화곡8동에 대한 가로 쓰레기통 위치 설정을 예시로 나타냈다. 다음은 화곡8동 안에서의 실제 가로 쓰레기통 설치 위치, 설치 후보지, 최적 입지를 나타낸 지도이다.

 

 화곡8동 상권들의 기존 가로 쓰레기통 위치를 보면 까치산시장에 3, 강서로18길에 1, 강서로8길에 2개가 있다. 그림 9를 보면 쓰레기통의 위치가 상당히 편향적이다. 따라서 공간 접근성을 고려한 본 연구에서는 쓰레기통의 신규 설치가 필요할 것으로 예측된다. 실제로 최적 위치는 12개의 후보지 중 5개가 설정됐는데, 이 중 3개의 후보지는 기존의 쓰레기통 위치가 아니며, 기존 쓰레기통과의 거리가 100m 미만인 쓰레기통 최적 위치는 없기 때문에 3개의 후보지를 모두 채택한다. 따라서 화곡8동의 상권들에 신규로 채택된 3개의 최적 입지에 쓰레기통을 설치한다면 화곡8동 생활인구와 가로 쓰레기통의 공간 접근성을 최대화시킬 수 있다.

 

관련 github code

https://github.com/rootofdata/Gangseo-gu_contest.git

 

GitHub - rootofdata/Gangseo-gu_contest

Contribute to rootofdata/Gangseo-gu_contest development by creating an account on GitHub.

github.com