2025년, 코딩은 선택이 아닌 필수!

2025년 모든 학교에서 코딩이 시작 됩니다. 먼저 준비하는 사람만이 기술을 선도해 갑니다~

머신러닝/3. 머신러닝을 위한 파이썬

데이터분석] 스타벅스 이디야 상권분석

파아란기쁨1 2022. 7. 13. 13:23
반응형

데이터 준비

공공데이터 포털의 다음의 위치에서 소상공인시장진흥공단_상가(상권)정보 를 가져 옵니다.

https://www.data.go.kr/dataset/15012005/fileData.do

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

서울 지역만 코랩에 업로드 한다.

파일을 읽어서 데이터 준비

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 파일을 읽어 온다.
file = "소상공인시장진흥공단_상가(상권)정보_서울_202203.csv"
df = pd.read_csv(file,engine='python',encoding='utf-8')

컬럼을 확인하자.

print('컬럼 항목수 : ',len(df.columns))
list(df.columns)

#결측 데이터 확인하자.
df.isnull().sum().plot.barh(figsize=(8,9)) #그래프를 이용하면 확인하기 용이하다.

한글이 깨진다면 다음과 같이 처리하자.

!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf

#설치 후 런타임 재시작 한다.
plt.rc('font', family='NanumBarunGothic') #폰트를 나눔바른고딕으로 설정하자.

한글이 정상으로 표시 되는 것을 확인 할 수 있다.

지점명 같은 경우는 결측치가 많은 것을 알 수 있다.

 

 

상권 업종을 확인한다.

#상권업종 확인하기
print('=' * 50)
print('상권업종대분류명',set(df['상권업종대분류명']))
print('=' * 50)
print('상권업종중분류명',set(df['상권업종중분류명']))

==================================================

상권업종대분류명 {'학문/교육', '생활서비스', '관광/여가/오락', '부동산', '숙박', '음식', '스포츠', '소매'}

==================================================

상권업종중분류명 {'패스트푸드', '의복의류', '음식배달서비스', '화장품소매', '분양', '책/서적/도서', '일식/수산물', '시계/귀금속소매', '가정/주방/인테리어', '분식', '연극/영화/극장', '모텔/여관/여인숙', '종합소매점', '부동산중개', '음/식료품소매', '취미/오락관련소매', '학원-어학', '인력/고용/용역알선', '중식', '예술품/골동품/수석/분재', '커피점/카페', '운영관리시설', '양식', '가방/신발/액세서리', '이/미용/건강', '제과제빵떡케익', '법무세무회계', '애견/애완/동물', '사진/광학/정밀기기소매', '중고품소매/교환', '주택수리', '물품기기대여', '주유소/충전소', 'PC/오락/당구/볼링등', '예식/의례/관혼상제', '평가/개발/관리', '스포츠/운동', '대중목욕탕/휴게', '별식/퓨전요리', '장례/묘지', '학원-창업취업취미', '학원-보습교습입시', '학원기타', '자동차/이륜차', '가구소매', '기타음식업', '세탁/가사서비스', '유아용품', '개인서비스', '부동산관련서비스', '무도/유흥/가무', '사무/문구/컴퓨터', '유아교육', '건강/미용식품', '개인/가정용품수리', '놀이/여가/취미', '한식', '경마/경륜/성인오락', '자동차/자동차용품', '실외운동시설', '요가/단전/마사지', '도서관/독서실', '닭/오리요리', '캠프/별장/펜션', '유흥주점', '학원-음악미술무용', '유스호스텔', '페인트/유리제품소매', '부페', '운동/경기용품소매', '종교용품판매', '운송/배달/택배', '실내운동시설', '사진', '기타판매업', '호텔/콘도', '의약/의료품소매', '학원-자격/국가고시', '학문교육기타', '대행업', '학원-컴퓨터', '철물/난방/건설자재소매', '학원-예능취미체육', '광고/인쇄', '민박/하숙', '행사/이벤트', '가전제품소매', '기타서비스업', '선물/팬시/기념품'}

 

필요한 컬럼만 추출하자.

#필요한 컬럼만 추출하자.
dataset = df[['상호명','지점명','상권업종대분류명','상권업종중분류명','시도명','시군구명','행정동명','법정동명','도로명주소','위도','경도']]
dataset.head()

상호명이 대소문자 섞여 있을 수 있어서 모두 소문자로 변경해 주자.

#상호명을 모두 소문자로 변경해 주자.
dataset["상호명_소문자"] = dataset["상호명"].str.lower()
#커피 전문점만 추출하자.
df_coffee = dataset[(dataset['상권업종중분류명']=='커피점/카페')]
df_coffee.index = range(len(df_coffee))
print('커피 전문점 점포 수 :',len(df_coffee))
df_coffee.head()

이디야와 스타벅스만 추출해 보자.

df_coffee.loc[df_coffee['상호명_소문자'].str.contains('이디야|이디아|ediya'),"브랜드명"]="이디야"
df_coffee.loc[df_coffee['상호명_소문자'].str.contains('스타벅스|starbucks'),"브랜드명"]="스타벅스"
df_coffee = df_coffee[ (df_coffee["브랜드명"]=="이디야") | (df_coffee["브랜드명"]=="스타벅스")]
df_coffee.head()

#시군구별로 그래프를 그려 보자.
plt.figure(figsize=(15,4))
sns.countplot(data=df_coffee,x="시군구명",hue="브랜드명")

위치별로 맵을 그려 보자.

sns.scatterplot(data=df_coffee,x="경도",y="위도",hue="브랜드명")

강남에 스타벅스가 많은 것을 알 수 있다.

#시군구명,브랜드명으로 갯수를 세어 보자.
df_cafe_vs = df_coffee.groupby(["시군구명","브랜드명"])["상호명"].count()
df_cafe_vs = df_cafe_vs.reset_index()
df_cafe_vs

구별 매장수를 확인하고 싶다면

 

df_cafe_vs.columns=["구","브랜드명","매장수"]
df_cafe_vs.head()

#맵을 사용하기 위해 folium 사용법을 알아 보자.
import folium
new_map=folium.Map(location=[37.5429,126.9887],zoom_start=17) #서울의 중심
new_map

해당 위치를 중심으로 맵을 확인 할 수 있다.

 

# 해당 매장의 위치별 중심점을 잡아보자
lat = df_coffee["위도"].mean()
long = df_coffee["경도"].mean()
lat,long

(37.54205587509544, 126.9884972653293)

new_map=folium.Map(location=[lat,long],zoom_start=12,tiles="Stamen Toner") #서울의 중심
new_map

for i in df_coffee.index:
  sub_lat=df_coffee.loc[i,"위도"]
  sub_long = df_coffee.loc[i,"경도"]

  title = f"{df_coffee.loc[i,'상호명']}-{df_coffee.loc[i,'도로명주소']}"
  if df_coffee.loc[i,"브랜드명"]=="스타벅스":
    color = "green"
  else :
    color = "blue"
  folium.CircleMarker([sub_lat,sub_long],radius=3,color=color,tooltip=title).add_to(new_map) #마우스 댔을 때 tooltip으로 

new_map

서울의 경계를 구분으로 깔끔하게 표시를 해 보자.

시각화 하기 위해서 지리정보를 담고 있는 폴리곤 json 파일이 필요하다.

https://github.com/PinkWink/DataScience/tree/master/data

 

GitHub - PinkWink/DataScience: 책) 파이썬으로 데이터 주무르기 - 소스코드 및 데이터 공개

책) 파이썬으로 데이터 주무르기 - 소스코드 및 데이터 공개. Contribute to PinkWink/DataScience development by creating an account on GitHub.

github.com

에서 02. skorea_municipalities_geo_simple.json 파일을 다운로 받는다.

이 파일을 업로드 하자.

geo_file = '02. skorea_municipalities_geo_simple.json'
import json
geo_json = json.load(open(geo_file,encoding='utf-8'))

스타벅스의 구 별 밀집도를 확인해 보자.

#스타벅스 매장만 가져 오자
df_star = df_cafe_vs[df_cafe_vs["브랜드명"]=="스타벅스"]
df_star
m=folium.Map(location=[lat,long],zoom_start=12) #서울의 중심
folium.Choropleth(
    geo_data=geo_json,
    data=df_star,
    columns=["구","매장수"],
    key_on = "feature.properties.name", #색상별로 밀집 현황 확인
    fill_color="YlGn", #옐로우 그린
    fill_opacity = 0.7 #투명도
).add_to(m)
m

강남구에 밀집해 있는 것을 파악할 수 있다.

이디야도 확인을 해 보자.

#이디야 매장만 가져 오자
df_ediya = df_cafe_vs[df_cafe_vs["브랜드명"]=="이디야"]
m=folium.Map(location=[lat,long],zoom_start=12) #서울의 중심
folium.Choropleth(
    geo_data=geo_json,
    data=df_ediya,
    columns=["구","매장수"],
    key_on = "feature.properties.name", #색상별로 밀집 현황 확인
    fill_color="YlGn", #옐로우 그린
    fill_opacity = 0.7 #투명도
).add_to(m)
m

강서구 쪽에 밀집해 있는 것을 확인 할 수 있다.

 

이디야와 스타벅스를 비교하기 위해

구, 스타벅스,이디야 컬럼과 같이 만들어 보자.

df_vs = df_cafe_vs.pivot(index="구",columns="브랜드명",values="매장수")
df_vs

#매장수 비교해 보자. 스타벅스가 많으면 true
df_vs["매장수비교"]=df_vs["스타벅스"]>df_vs["이디야"]
df_vs

df_vs["매장수비교"] = df_vs["매장수비교"].astype(float)
df_vs=df_vs.reset_index()
df_vs.head()

 

#비교한 데이터를 화면에 출력해 보자.
m=folium.Map(location=[lat,long],zoom_start=10) #서울의 중심
folium.Choropleth(
    geo_data=geo_json,
    data=df_vs,
    columns=["구","매장수비교"],
    key_on = "feature.properties.name", #색상별로 밀집 현황 확인
    fill_color="BuGn", #블루 그린
    fill_opacity = 0.7 #투명도
).add_to(m)
m

 

녹색은 스타벅스 블루는 이디야 이다.

 

https://www.insight.co.kr/news/194890

 

왜 스타벅스 옆에는 항상 토종 커피 브랜드 ‘이디야’가 있을까?

스타벅스가 있는 곳에는 항상 국내 커피 프랜차이즈 브랜드인 이디야가 있다는 이야기가 돌면서 ‘이디야의 전략’이라는 등 각종 추측이 난무하고 있다.

www.insight.co.kr

스타벅스 옆에는 이디야가 있을까? 라는 것을 데이터로 확인을 해 보았는데요~

그렇지 않다는 것을 알수가 있었네요.

반응형