[무역|3|Plotly] 자전거 수출입과 일상의 데이터 - 공간데이터 시각화 Plotly (2부)

 

지난 시간에 받아둔 CSV파일을 들여다 보겠습니다.

 

 총 21개의 데이터 항목 중 아래의 항목들이 이번에 처음 해보는 공간시각화의 과정에서 필수로 처리되어야 할 항목들로 보입니다.

 

 (1) 자전거대여소명 

 (2) 자전거대여소구분 - 유인으로 운영되는지, 무인으로 운영되는지 또는 병행되는지가 표시됩니다.

 (3) 소재지도로명주소

 (4) 소재지지번주소

 (5) 위도

 (6) 경도

 (7) 운영시작시각

 (8) 운영종료시각

 (9) 휴무일

 (10) 요금구분

 (11) 자전거이용요금

 

 

 

plotly 엿보기

 

 

우선 간단한 형태로 코딩을 실행해 보겠습니다.

 

 

import pandas as pd
import plotly.express as px


df = pd.read_csv(r"C:\Users\USER\Desktop\블로그\example\Bicycle\전국자전거대여소표준데이터.csv", encoding="euc-kr")
print(df)

fig = px.scatter_mapbox(df, lat="위도", lon="경도", color_discrete_sequence=["fuchsia"], zoom=4, height=800)
fig.update_layout(mapbox_style="open-street-map")
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()

 

이 코딩문은 Plotly Graphing Libraries 의 'Mapbox Map Layers in Python' 페이지를 통해 공개되어 있는 'OpenStreetMap tiles: no token needed' 에서 발췌한 코딩문을 사용하였습니다. 

 

 

 원문은 아래 링크를 참조해 주세요.

 

 

링크 : Mapbox Map Layers in Python (https://plotly.com/python/mapbox-layers/)

 

 

 

 1) df = pd.read_csv(r"C:\Users\USER\Desktop\블로그\example\Bicycle\전국자전거대여소표준데이터.csv", encoding="euc-kr") 

 

  먼저, '전국자전거대여소표준데이터.csv'파일을 euc-kr 인코딩 방식으로 df라는 명칭의 DataFrame으로 읽어 들였습니다.

 print(df)를 통해 잘 읽어 들이는지 여부를 확인해 보았을 때, 이상없이 잘 읽어 들이는 것이 확인되었습니다. 

 

 제 경험에 근거해서 말씀 드린다면, 공공데이터포털에서 제공되는 한글이 포함된 Data Set은 거의 대부분의 경우에 encoding방식을 euc-kr로 할 경우 정상적으로 잘 읽어 들였습니다. 

 

 한글이 포함된 데이터를 다루시면서 python이 파일을 읽어들이는 과정에서 에러를 겪고 계시다면, encoding방식을 위와 같이 해보시기 바랍니다.

 

 

 2) fig = px.scatter_mapbox(df, lat="위도", lon="경도", color_discrete_sequence=["fuchsia"], zoom=4, height=800)

 

 fig 변수에 plotly.express의 scatter_mapbox() 메소드를 대입하였습니다.

 scatter_mapbox()는 mapbox가 제공하는 지도에 데이터를 그려 놓을 수 있도록 구성된 메소드임을 알 수 있습니다. 이 메소드의 첫번째 인자로 df 즉, Data Set전부를 그냥 던져 주었습니다. 

 이 점이 조금 간편하면서도 공간데이터 시각화의 다른 점 같습니다. matplotlib에서 barplot이나 lineplot을 그리려면 x축과 y축에 대입할 DataFrame의 Series를 특정해 줘야 했습니다. 형식도 미리 맞추구요. 그런데, 공간데이터 시각화에서는 Data Set 전체를 던져줘도 문제 될 것이 없습니다. 오히려, 후술할 지도상에 표출된 지점의 hovering data를 표시할 때도 간편하게 지정해 줄 수 있게 해 줍니다.

 

 공간데이터 시각화의 핵심은 아무래도 위도와 경도 좌표값이 되겠습니다. lat인자에 "위도" series를 lon인자에 "경도" series값을 부여하였습니다. 

 

 color_discrete_sequence인자에는 marker를 표현할 색값을 지정하는데요. fuchsia라는 색깔 정의 용어를 입력해 주었네요. 이게 뭔가 싶어 구글링을 해보았습니다. 한국어로 '푹샤'로 부르는 것 같구요. 꽃의 이름인데, 그 색이 연보라빛이 띄고 있습니다. 이제 우리가 표시할 데이터 maker는 연보라빛을 띄게 되겠습니다.

 

 zoom인자에는 4를 넣었는데요. 지도가 최초 표출될 때의 확대 수준을 지정합니다. plotly의 mapbox에 의한 공간데이터 시각화는 interactive 하기 때문에, 지도 표출 후 , 마우스 휠 기능을 활용해 zoom-in과 zoom-out이 가능합니다. 여기서 설정되는 값은 최초 지도가 로딩되었을 때의 확대 수준을 결정하게 됩니다. 이 수치를 높일수록 zoom-in이 됩니다. 

 

 height인자에는 지도가 browser상에 표현될 때 세로폭을 결정합니다. 

 

 

 

 

 3) fig.update_layout(mapbox_style="open-street-map")

 

  fig변수에 대입되어 표출될 지도의 스타일은 open-street-map이라는 스타일로 표현하도록 했습니다. 원문 페이지의 설명문을 보시면, 아래와 같습니다.

 

"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

 

  지도의 스타일로 carto-positron, carto-darkmatter등과 같은 맵들을 설정할 수 있다고 합니다. 또한 이러한 맵 스타일들은 mapbox의 access token이 필요치 않는 것들이라고 합니다. Plotly를 처음 접하면서 간단하게 사용방법을 확인할 목적이니, 우선 access token이 필요 없는 방식으로 지도를 그려 보고자 하였습니다.

 

 

 4) fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})

 

 이 지도의 화면상 margin을 설정하였네요. 이미 유추가능하시겠지만, r은 right (오른쪽), t는 top(위), ㅣ은 left(왼쪽), b는 bottom(아래)가 되겠습니다.  모두 값을 0으로 부여하여 margin없이 화면을 가득채우도록 하겠습니다.

 

 

  5) fig.show()

 

 지도를 화면에 그리도록 명령합니다.

 

 

 

 

이제 실행 결과를 보시겠습니다.

 

 

 

연보라색 marker가 지도에 찬 것이 보입니다.

 

zoom을 당겨 보겠습니다.

 

 

전국 각지에 연보라빛 marker가 나타났습니다. 

 

그런데, 보시는 것처럼 위도와 경도값이 hovering data로 나타납니다. hovering data를 특정하지 않았기 때문에 default로 위도와 경도값을 hovering data로 제공하는 것이 확인됩니다. 그럼, 원문의 예문처럼, hovering data를 특정하기 위해 코드를 조금 수정해 보겠습니다.

 

 

fig = px.scatter_mapbox(df, lat="위도", lon="경도", hover_name="자전거대여소명",
                        hover_data=["자전거대여소구분", "소재지도로명주소", "운영시작시각", '운영종료시각',
                                    '휴무일','자전거이용요금'],
                        color_discrete_sequence=["fuchsia"], zoom=4, height=800)

 

 

hover_name이라는 인자값과 hover_data라는 DataFrame을 제공하였습니다. 이제 결과를 보시겠습니다.

 

 

안산의 대여소 1곳을 지정해 마우스를 가져가 보았더니, 설정한 데로 값이 나오는 것이 확인됩니다.

일부 데이터 표시값이 오류가 있는게 보이기는 하는데요. 그래도 의도한 방식으로 지도에 잘 표현되는 것이 확인됩니다.

 

 

 

 

 

여기까지 Plotly를 이용해 지도상에 데이터를 시각화 하는 방법을 간단히 알아 보았습니다.

 

사용법이 굉장히 복잡하지 않을까 걱정했는데, 기우였음을 깨달았습니다. 

 

매우 쉽게 데이터를 지도상에 표현하였습니다. 

 

이제 위도, 경도 값만 있다면 우리가 보고자 하는 데이터분포를 plotly를 통해 간단히 처리할 수 있다는 것을 알게 되었습니다.

 

다음 번 주제 포스팅들을 통해 plotly도 꾸준히 다루면서, skill-up을 계속해 나가보도록 하겠습니다.

 

 

꾸준한 구독 부탁 드리며, 즐거운 하루 되시길 바랍니다.   :-)

 

 

NPU(엔피유) 관세사무소

대표관세사 고장주

Tel) 031-986-7190

E-mail) sales@npucus.com

[NPU관세사무소 프로모션 페이지] https://www.tradenpu.com/npu_cus/

[무역비지니스 인텔리전스 서비스 | TradeNPU] https://www.tradenpu.com

[파이썬 실용 예제. 무역과 공공데이터] https://pdatinmylife.tistory.com

Certified Customs Broker JangJu Goh

Executive Customs Broker @ NPU Customs Consulting

CEO @ JG TradePlus

sales@npucus.com

Trade Compliance / Customs clearance management at foreign company

Working experience of Air export freight forwarding

Data Visualization / Independent development of business automation application – copyright of JGPO_Manager, JG Data Center, AutoCC and etc.

B2B consignment & direct export/import, B2C Overseas Buying Office consulting

Alibaba.com B2B trade / taobao B2C trade / Amazon.com global selling etc. Online trade regulation consulting.

Import license / Quarantine

English communication available

[TradeNPU for partnership proposal - JGTP] https://www.tradenpu.com/jgtp/

 

 

반응형

+ Recent posts