-
이제 서울 내에서 스타벅스 없는 동네를 찾기가 더 어렵다. 그만큼 스타벅스가 구석구석 엄청나게 많은 지점을 늘려왔다는 의미이기도 하다. 그래서 오늘 포스팅에서는 서울 내 위치한 스타벅스 지점 위치 데이터를 가져와서 간단한 분석 및 시각화를 해보도록 하겠다.
1. 데이터 가져오기
스타벅스 데이터는 홈페이지에서 크롤링하거나 아님 아래 내가 한 것처럼 카카오 API를 통해 가져올 수 있다. 카카오 API가 데이터 가져오기 쉽고 빠르기는 하지만 데이터가 100% 정확하지 않은 단점이 있다.
쿼리가 제대로 돌아간다면 아래와 같이 서울 내 481개의 스타벅스 지점 위치 데이터를 볼 수 있을 것이다. 스타벅스 홈페이지에 따르면 약 541개의 서울 지점이 있는데 뭐 정확히 맞출 수는 없는 법...
아래 데이터에는 우리가 필요하는 주소, 지점명, 좌표가 주어져 있다.
import pandas as pd import requests gu=pd.read_html('https://inasie.github.io/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/5/',encoding='utf-8')[0] seoul=gu[gu['법정동주소'].str.contains('서울')][1:] api='~~' starbucks=[] for q in seoul['법정동주소']: query= q+' 스타벅스' for i in range(1,46): url = f'''https://dapi.kakao.com/v2/local/search/keyword?query={query}&page={i}&size=15&category_group_code''' headers = { "Authorization": f"KakaoAK {api}" } places = requests.get(url, headers = headers).json()['documents'] starbucks.extend(places) sb=pd.DataFrame(starbucks) sb=sb.drop_duplicates('place_name',keep='last') sb=sb[sb['address_name'].str.contains('서울')] starbucksr=[] for q in seoul['법정동주소']: query= q+' 스타벅스 리저브' for i in range(1,46): url = f'''https://dapi.kakao.com/v2/local/search/keyword?query={query}&page={i}&size=15&category_group_code''' headers = { "Authorization": f"KakaoAK {api}" } places = requests.get(url, headers = headers).json()['documents'] starbucksr.extend(places) sbr=pd.DataFrame(starbucksr) sbr=sbr[sbr['place_name'].str.contains('R')].drop_duplicates() sbr=sbr[sbr['address_name'].str.contains('서울')] bucks=pd.concat([sb,sbr],axis=0) bucks=bucks.drop_duplicates(['address_name'],keep='last')
2. 지도 좌표 시각화
다음으로는 주어진 위도 경도 좌표 데이터를 지도에 찍어보도록 하겠다.
아래와 같이 스타벅스 지점별로 원형이 찍혀 있는 점을 확인할 수 있다. 마우스를 올려보면 지점명과 주소도 같이 확인할 수 있다.
from mapboxgl.utils import * from mapboxgl.viz import * from mapboxgl.utils import df_to_geojson import json bucks['x']=bucks['x'].astype(float) bucks['y']=bucks['y'].astype(float) geo_data = df_to_geojson( df=bucks, properties=['place_name', 'place_url','address_name','phone'], lat='y', lon='x', precision=5, filename = "starbucks.geojson" ) geo_data_2 = 'starbucks.geojson' with open(geo_data_2) as f: gdata = json.loads(f.read()) token = '~~' center = [126.984630, 37.520189] viz = CircleViz( data=gdata, access_token=token, center=center, zoom=10, radius=3.5, stroke_color='red' ) viz.show() viz.create_html('starbucks.html')
마지막으로 스타벅스 지점 수를 기준으로 클러스터링해서 시각화를 해보도록 하겠다.
color_stops = create_color_stops([20,40,60,80,100,120], colors='BrBG') cviz = ClusteredCircleViz(gdata, access_token=token, color_stops=color_stops, radius_stops=[[1,5], [10, 10], [50, 15], [100, 20]], radius_default=2, cluster_maxzoom=10, cluster_radius=30, label_size=12, opacity=0.9, center=center, zoom=10 ) cviz.show() cviz.create_html('스벅 수.html')
3. 스타벅스 히트맵
다음으로는 Uber에서 만든 시각화 라이브러리 Pydeck을 활용해서 스타벅스 지점 수 기준으로 히트맵을 지도에 그려보도록 하겠다.
아래 히트맵을 보면 확실히 종로 지역에 스타벅스 지점이 가장 밀집되어 있는 점을 확인할 수 있다.
import pydeck as pdk bucks=bucks.rename(columns={'x':'lng','y':'lat'}) heat = pdk.Layer( 'HeatmapLayer', bucks, get_position='[lng, lat]', auto_highlight=True, opacity=0.5 ) center = [126.986, 37.565] view_state = pdk.ViewState( longitude=center[0], latitude=center[1], zoom=10) r = pdk.Deck(layers=[heat], initial_view_state=view_state) r.show() r.to_html('스타벅스 히트맵.html')
'Data Analysis > Real Estate' 카테고리의 다른 글
서울 주요 핫플레이스(홍대입구, 건대입구, 이태원, 명동) 방문객 분석 with 지하철역 하차 인원 수 (0) 2021.05.19 서울시 전통시장 현황 분석 With Python, Mapbox, Pydeck (0) 2021.04.17 국민 임대 주택 총 세대 수 현황 알아보자 with 공공데이터 & 파이썬 (0) 2021.04.08 국내 대형마트(홈플러스, 이마트, 롯데마트) 위치 데이터 분석 & 시각화 With Python/Mapbox (0) 2021.03.30 20년 서울시 행정구역별 전세 값 데이터 분석 & 시각화 with Python/Mapbox (0) 2021.03.04