[생활|1|Plotly] 전국도시공원 - Plotly 기본 (2부)
Mapbox access token 받기
계속해서 mapbox access token을 받는 방법을 안내 드리겠습니다.
먼저, plotly가 mapbox access token에 대해 설명한 내용을 보시겠습니다.
Mapbox Access Tokens and When You Need Them
The word "mapbox" in the trace names and
layout.mapbox
refers to the Mapbox GL JS open-source library, which is integrated into Plotly.py. If your basemap inlayout.mapbox.style
uses data from the Mapbox service, then you will need to register for a free account at https://mapbox.com/ and obtain a Mapbox Access token. This token should be provided inlayout.mapbox.access_token
(or, if using Plotly Express, via thepx.set_mapbox_access_token()
configuration function).
If your
layout.mapbox.style
does not use data from the Mapbox service, you do not need to register for a Mapbox account.
mapbox라는 용어가 쓰이면 layout.mapbox는 Mapbox GL JS라고 하는 Plotly.py에 통합되어져 있는 오픈소스 라이브러리를 참조한다고 합니다. 이에 따라, mapbox style을 사용한 basemap을 사용시 Mapbox service로부터 데이터를 사용하게 되면 https://mapbox.com/에서 무료계정 등록하여 Mapbox Access token을 받아 사용시 제공되어야 한다는 것입니다.
Mapbox service 의 데이터를 사용치 않는 경우에는 물론 access token이 필요 없구요.
Mapbox에 계정을 만드는 것은 무료이기 때문에 안할 이유가 없습니다. 또한, access token이 필요한 style 맵들도 여럿 있구요. 게다가, access token은 무료로 제공되기도 합니다.
그럼 이제 Mapbox access token을 받으러 가보시겠습니다.
링크 : 맵박스(Mapbox)
아래의 링크로 이동해 주시면 Mapbox의 메인페이지가 나옵니다.
현재 날짜 기준으로 'Start mapping for free'라는 무료 계정 생성 바로가기 버튼이 화면 중앙에 노출되어 있습니다. 누르고 이동하시겠습니다.
일반적인 회원가입을 위한 정보 입력화면이 나오게 됩니다.
누구나 다 아는 회원가입방법은 설명을 생략하겠습니다.
이후 계정에 접속하시면 아래와 같은 글귀를 보실 수 있습니다.
Access tokensYou need an API access token to configure Mapbox GL JS, Mobile, and Mapbox web services like routing and geocoding. Read more about API access tokens in our documentation.
바로 그 하단에 'Default public token'이라고 하여, 암호와 같은 긴 script가 나타납니다. 바로 이 key값이 우리가 mapbox 의 access token이 필요한 스타일 맵 사용시 제출해야 하는 access token의 public 버전입니다.
이제 Mapbox의 access token이 확보되었습니다.
다음은 이 access token을 어떻게 제공할 것이냐 입니다.
Mapbox access token 사용 설정
다시 코드로 돌아가 보겠습니다.
px.set_mapbox_access_token(open("mapbox_token.py").read())
fig = px.scatter_mapbox(df, lat="위도", lon="경도", color="위도", size="공원면적",
hover_name="공원명", hover_data=["공원구분","소재지도로명주소","소재지지번주소"],
color_continuous_scale=px.colors.sequential.Viridis, size_max = 15, zoom = 7)
fig.update_layout(mapbox = {'style': "light", 'zoom': 7}, showlegend = False)
fig.show()
첫 줄의 px.set_mapbox_access_token(open("mapbox_token.py").read())를 통해서 우리의 access token이 제출됩니다.
plotly.express로는 set_mapbox_access_token() 이라는 설정용 메소드를 사용하시면 되겠습니다.
그런데, 우리는 access token값을 받아만 두었을 뿐입니다. 어딘가에 값을 넣어야 하는데, 아직 하지 않았습니다.
방법은 간단합니다.
지금 코딩 중인 python 파일이 저장된 경로와 동일 경로 또는 원하시는 경로에 python 파일을 하나 더 만드시면 됩니다.
현재 코딩 중인 python의 위치와 해당 파일의 위치를 동일하게 하시면, open()함수에 경로를 적으실 필요 없이, 파일명만 적으시면 됩니다. 만약, 경로를 달리 하고 싶으시다면, full address를 넣어 주시면 되겠습니다.
pandas에서 read_csv, read_excel, to_excel할 때와 같이 설정하시면 되겠습니다.
자 이제 빈 python 파일명을 저는 "mapbox_token"으로 이름 지었습니다.
여기에 받아두신 mapbox public access token값을 그냥 단순히 복사해서 붙여 넣으시고 저장만 하시면 되겠습니다.
그러면 코드가 실행될 때, access token값이 전달되게 됩니다.
px.scatter_mapbox() : Plotly.express로 scatter plot 그리기(Mapbox map)
5) fig = px.scatter_mapbox(df, lat="위도", lon="경도", color="위도", size="공원면적", hover_name="공원명", hover_data=["공원구분","소재지도로명주소","소재지지번주소"], color_continuous_scale=px.colors.sequential.Viridis, size_max = 15, zoom = 7)
여기서는 fig라는 변수에 px.scatter_mapbox() 메소드를 통한 그래프 설정을 대입해 주었습니다. px.scatter_mapbox()는 mapbox의 tile-based map상에 scatter plot을 표출하기 위해 사용되는 메소드 입니다. 인자로는 다양한 값을 지원하는데요. 사용한 인자에 대한 설명만 진행하도록 하겠습니다.
a. 맨 처음 인자로는 DataFrame전부를 던져주었습니다.
b. lat인자에 위도 series값을 줍니다.
c. lon인자에 경도 series값을 줍니다.
d. color인자에 결과물인 marker에 대해 어떤 값을 기준으로 색상을 부여할지를 지정합니다.
e. size 인자에 어떤 값을 기준으로 해당 mark의 크기를 설정할지를 지정합니다. 저는 공원면적을 marker의 크기를 표출하는
값으로 지정하였습니다.
f. hover_name과 hover_data는 앞선 포스팅에서 설명 드린 바와 같이, marker에 마우스 포인터를 갖다 대었을 때 나올 hovering description상의 설명을 표출할 값을 정합니다.
g. color_continuous_scale 결과물의 측면에 위치한 scale에 대한 설정입니다.
h. size_max 는 지도의 최대 크기 값을 설정합니다.
i. zoom은 지도가 최초 표출 될 때 어느 정도로 zoom-in된 상태에서 시작할지를 설정합니다.
6) fig.update_layout(mapbox = {'style': "light", 'zoom': 7}, showlegend = False)
update_layout이라는 메소드를 통해 지도꾸미기를 위한 각종의 값들을 설정하게 됩니다. plotly.express를 사용하고 있으니, 복잡하게 할 것 없이 mapbox가 제공하는 스타일 그대로 사용해 보겠습니다.
여기서, style은 'light'로 값을 주었는데요. 직전 포스팅에서 설명 드린 바와 같이, mapbox access token이 필요한 style의 맵이 있는데, light는 access token이 필요한 스타일입니다.
"open-street-map"
, "carto-positron"
, "carto-darkmatter"
, "stamen-terrain"
, "stamen-toner"
or "stamen-watercolor"
yeild maps composed of raster tiles from various public tile servers which do not require signups or access tokens"basic"
, "streets"
, "outdoors"
, "light"
, "dark"
, "satellite"
, or "satellite-streets"
yeild maps composed of vector tiles from the Mapbox service, and do require a Mapbox Access Token or an on-premise Mapbox installation.위와 같이, access token이 필요한 다른 스타일들도 한번씩 직접 사용해 보시면 각각의 차이를 느끼실 수 있으시겠습니다.
이제 결과물을 보시겠습니다.
zoom을 좀 더 당겨 보겠습니다.
색이 연하여 식별이 조금 잘 안되네요.
곧이어 색 변경 방법 등 지도꾸미기(fig.update_layout())에 대한 내용으로 확장해 포스팅 올리도록 하겠습니다.
즐거운 하루 되세요!
(기본편 3부에 계속..)
'파이썬(Python) > 전국도시공원 Plotly 기본' 카테고리의 다른 글
[생활|1|Plotly] 전국도시공원 - Plotly 기본 (1부) (0) | 2020.06.24 |
---|