-
서울 크로스핏 박스 지도 시각화 with Python, Mapbox, 카카오 APIData Analysis/LifeStyles 2021. 5. 31. 22:31
요즘 크로스핏 매력에 완전히 빠져버렸다. 하루라도 젊었을 때 크로스핏을 시작했으면 어땠을까라는 생각이 들 정도로 너무 후회스럽다. 왜 재미없는 헬스에 그 많은 시간을 쏟아부었는지...
여하튼 강철부대 영향으로 크로스핏의 인기가 날날이 높아지고 있다. 이번 포스팅에서는 그래서 서울 내에 위치한 크로스핏 박스를 지도에 시각화해보도록 하겠다. 역시나 이번에도 파이썬, Mapbox, 카카오 지도 API를 사용하도록 하겠다.
서울 크로스핏 박스 위치 데이터 가져오기
카카오 Rest API 키 값만 받으면 아래 코드를 돌려서 데이터를 확보할 수 있을 것이다.
from bs4 import BeautifulSoup as bs import pandas as pd import requests url='https://www.seoul.go.kr/seoul/autonomy.do' re=requests.get(url) obj=bs(re.content,'html.parser') gu=[] for s in obj.find_all('li',{'class':'tabcont'}): gu.append(s.select_one('strong').get_text()) def crossfit(key,x): data=[] for v in gu: query=v+' '+x for i in range(1,4): url = f'''https://dapi.kakao.com/v2/local/search/keyword?query={query}&page={i}&size=15''' headers = { "Authorization": f"KakaoAK {key}" } #json 형태로 데이터가 주어진다 places = requests.get(url, headers = headers).json()['documents'] data.extend(places) df=pd.DataFrame(data) df_=df.drop_duplicates().sort_values(by='place_name',ascending=True) df_['si']=df_['address_name'].apply(lambda x: x.split(' ')[0]) df_=df_[(df_['si']=='서울')] df_=df_[['place_name','address_name','y','x']] df_['지역구']=df_['address_name'].apply(lambda x: x.split(' ')[1]) return df_ key='~~~' cf=crossfit(key,'크로스핏')
위 코드가 문제 없이 돌아간다면 아래와 같이 약 93개의 크로스핏 시설이 검색되었다. 장소명, 주소, 위도, 경도 데이터를 가져올 수 있다.
서울 크로스핏 박스 위치 지도 시각화 With Mapbox
다음으로 Mapbox를 활용해서 크로스핏 박스를 지도에 시각화해보도록 하겠다.
from mapboxgl.utils import * from mapboxgl.viz import * from mapboxgl.utils import df_to_geojson import json cf['LAT']=cf['y'].astype(float) cf['LNG']=cf['x'].astype(float) geo_data = df_to_geojson( df=cf, properties=['place_name', 'address_name'], lat='LAT', lon='LNG', precision=5, filename = "seoul_crossfit.geojson" ) geo_data = 'seoul_crossfit.geojson' with open(geo_data) as f: gdata = json.loads(f.read()) token = '~~~~' center = [126.979952, 37.517296] viz = CircleViz( data=gdata, access_token=token, center=center, zoom=10.3, radius=3, stroke_color='black' ) viz.show() viz.create_html('seoul_crossfit.html')
위 코드가 문제 없이 돌아간다면 아래와 같이 서울 지도 위에 크로스핏 박스 위치를 점으로 찍어서 시각화할 수 있을 것이다. 내가 다니는 크로스핏 박스도 문제 없이 지도 위에 나타나고 있다.
'Data Analysis > LifeStyles' 카테고리의 다른 글
21년 1월 서울 공공자전거 대여 이력 데이터 분석 & 시각화 with Python, Pydeck, Plotly, Sankey Diagram (0) 2021.06.08 제주도 렌터카 업체 정보 분석 & 시각화 With Python & Mapbox (0) 2021.06.07 NBA Data Analysis - Top 10 포인트 가드의 어시스트/턴오버 분석 (0) 2021.05.19 국내 SPA 패션 브랜드 매장 수 비교 분석(ZARA, 8Seconds, SPAO, Etc) (1) 2021.04.06 국내 메이저 영화관 브랜드(CJCGV, 메가박스, 롯데시네마) 데이터 분석 (0) 2021.04.05