본문 바로가기

study

스타벅스 이디야 매장 수 비교

오늘은 데이터 공부하면서 자주 참고하는 유튜브 채널인 오늘의 코드에 올라온 스타벅스와 이디야 상권분석을 따라해보고자 한다. 순서는 아래와 같다.

1. 데이터 수집
2. 시각화
# 요약
folium # 지리정보 시각화 모듈
reset.index() # 인덱스 정리
.str.lower() # 영문 소문자화
.str.contains("x" | "y") # ~을 포함하는 문자
df.plot.scatter(x,y) # 산점도
sns.barplot(data=??, x=??, y=??, hue = ??) # 카테고리 변수를 뜻하는 hue 인수

 

 

1. 데이터 수집

분석에 사용된 데이터는 공공데이터포털(https://www.data.go.kr/)에 제공하는 데이터이다. 상가업소정보 외에도 다양한 데이터를 제공하고 있으며 오픈API 형식으로 제공하고 있다. 

# 필요한 모듈 설치
import pandas as pd
import numpy as np
import seaborn as sns
import folium # 지리정보 시각화

shop_2019 = pd.read_csv("./상가업소정보_201912_01_final.csv",encoding = 'cp949', engine = 'python')
shop_2019.columns

 

2. 시각화

그래프로 보아 해당 데이터는 두 지역의 데이터만 존재하는 듯하다. 실제로 서울시와 부산시 데이터만 존재했고 서울시로 한정하여 시각화를 진행하고자 한다.

# 위도와 경도로 산점도를 그린 후 서울시로 한정하여 분석 진행
shop_2019[:1000].plot.scatter(x="경도", y="위도", grid = "True")
shop_seoul = shop_2019[shop_2019['시도명'] == '서울특별시']

 

 

확실히 편의점의 수가 많았으며, 업종을 "커피점/카페"로 한정했을때는 "간단하지만 특별한 화피디Cafe"라는 처음 듣는 브랜드의 점포 수가 가장 많았다. 확인해본 결과, 대게 작은 규모의 커피점으로 건물 내에 자리잡은 점포들이었다. 

shop_seoul.상호명.value_counts().head()
shop_seoul[shop_seoul.상권업종중분류명=="커피점/카페"].상호명.value_counts().head()

 

이제 본격적으로 스타벅스와 이디야만 추출하여 시각화를 해보았다. 우선 상호명이 영문로 된 경우도 있고 그것도 소문자와 대문자로 나눠져 복잡하게 되어 있는 것을 확인했다. 따라서 영문의 경우 모두 소문자로 치환하여 새로운 변수에 저장했다.

# 데이터 프레임 전체에 .lower를 적용하기 위해서 .str를 앞에 붙임
shop_seoul["상호명2"] = shop_seoul["상호명"].str.lower() 

# .contains는 특정 문자열을 포함하는 경우를 찾고자 할 때 사용. "|"은 or의 개념
df_cafe = shop_seoul[shop_seoul.상호명2.str.contains("이디야|ediya|스타벅스|starbucks")]

 

새로 지정한 df_cafe 데이터프레임에서 상호명을 스타벅스 또는 이디야로 통일해준다.

# ~는 not을 의미
df_cafe.loc[df_cafe["상호명"].str.contains("스타벅스|starbucks"), "브랜드명"] = "스타벅스"
df_cafe.loc[~df_cafe["상호명"].str.contains("스타벅스|starbucks"), "브랜드명"] = "이디야"

# 데이터 확인
df_cafe[['상호명','브랜드명']].head()
df_cafe["브랜드명"].value_counts()

 

2.1. 지리정보 시각화 모듈 folium 사용하여 시각화

# 지리정보 시각화
geo_df = df_cafe

# 지리정보 시각화 모듈 folium 사용
map = folium.Map(location = [geo_df["위도"].mean(), geo_df["경도"].mean()], zoom_start=12)

for n in geo_df.index :
                # 팝업에 들어갈 텍스트 지정
                popup_name = geo_df.loc[n,'상호명'] + '-' + geo_df.loc[n,'도로명주소']
                if geo_df.loc[n,'브랜드명'] == '스타벅스' :
                 icon_color = "green"
                else :
                 icon_color = "blue"
                
                # 표시 마커 설정
                folium.features.CircleMarker(
                location = [geo_df.loc[n,'위도'], geo_df.loc[n,'경도']],
                radius=3,
                popup = popup_name,
                color = icon_color,
                fill = True,
                fill_color = icon_color
                ).add_to(map)

map.save('index.html') # 버젼 문제로 한글깨짐 따라서 html 형식으로 추출 
map

 

2.2. seaborn 모듈을 이용한 막대그래프

# 구별 브랜드별 점포수
## 그룹바이로 "시군구명","브랜드명"별로 정렬한 후 각각 "상호명"의 수를 계산
## 이를 데이터 프레임화, 이 때 인덱스가 지저분한데 이를 정리하기 위해 reset_index() 사용
df_cafe_brand = pd.DataFrame(df_cafe.groupby(['시군구명','브랜드명'])['상호명'].count()).reset_index()
df_cafe_brand.columns = ['구', '브랜드명', '매장수']

# 그래프 생성
plt.figure(figsize=(24,6))
sns.barplot(data=df_cafe_brand, x="구", y="매장수", hue = '브랜드명')

 

마치며..

상권분석이라고는 하지만 기초적인 수준에서 EDA 정도라고 보면 될 듯하다. 주어진 데이터에서 다른 어떤 분석을 이끌어낼 수 있을지 고민해봐야겠다. 자세한 내용은 출처를 참고하면 된다.  https://www.youtube.com/channel/UCLR3sD0KB_dWpvcsrLP0aUg

 

todaycode오늘코드

공공데이터 분석 데이터 시각화 캐글을 통한 머신러닝/딥러닝 튜토리얼 Pandas, Numpy, Scipy, scikit-learn, TensorFlow, Keras, Jupyter, Colaboratory mail : joeunpark@gmail.com

www.youtube.com

'study' 카테고리의 다른 글

[Kaggle] IMDB 감정 분석 Part 1  (0) 2020.03.21
아파트 분양가격 동향  (0) 2020.03.19
스타벅스 이디야 매장 수 비교  (2) 2020.03.19
러닛 - 우주 최초 플립러닝 플랫폼  (0) 2020.03.16
Database 기초  (0) 2020.03.14
[Kaggle] Survival on the Titanic  (0) 2020.03.11