반응형
공간 시각화 정의
- 장소나 지역에 따른 데이터의 분포를 표현한 것
- 실제 지도나 지도모양의 다이어그램을 배경으로 데이터의 위치를 시각화
- 정보 표현 : 위치와 거리 또는 색상을 이용하여 정보 표현
- 정확한 투영(projection) 필요
- 지형코드화(Geocoding)
- 래스터 이미지를 고쳐 실세계 지도 투영이나 좌표계에 일치시키는 처리 과정
- 래스터 이미지 : 작은 점을 무수히 여러 번 찍어 만들어낸 이미지, 비트맵 이미지와 같은 의미
- 위도와 경도를 활용하여 지도상의 위치 표현
- 래스터 이미지를 고쳐 실세계 지도 투영이나 좌표계에 일치시키는 처리 과정
- 매핑(Mapping)
- 좌표값을 가진 데이터를 다양한 방법으로 지도에 표시
- 예시1) 생태조사 데이터 : 특정 식물이나 동물이 서식하는 장소 나열
- 예시2) 인구분포 데이터 : 시/군/구에 따른 인구 집중도 표현
단계구분도(Choropleth Map)
- 여러 지역에 걸친 정량 정보 표현 시, 데이터가 분포된 지역별로 색을 다르게 칠한 지도
- 색으로 밀도를 표현할 때 가장 효과적
- 보통 밀도가 높은 영역을 진하게 표현, 밀도가 낮은 영역을 연하게 표현
- 장점
- 지도상의 데이터 값을 정확하게 표현
- 단점
- 면적이 넓은 지역의 값이 전체를 지배하는 것처럼 보이는 시각적 왜곡 발생 가능성 존재
- 제공 소스코드인데 어째서인지 내 컴퓨터에서는 실행이 되지 않는다... 아시는 분...
# Install Module
#!pip install mapclassify
#!pip install geopandas
#!pip install geoplot
import plotly.figure_factory as ff
import numpy as np
import pandas as pd
df_sample = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/minoritymajority.csv')
df_sample_r = df_sample[df_sample['STNAME'] == 'California']
values = df_sample_r['TOT_POP'].tolist()
fips = df_sample_r['FIPS'].tolist()
colorscale = [
'rgb(193, 193, 193)',
'rgb(239,239,239)',
'rgb(195, 196, 222)',
'rgb(144,148,194)',
'rgb(101,104,168)',
'rgb(65, 53, 132)'
]
fig = ff.create_choropleth(
fips=fips, values=values, scope=['CA', 'AZ', 'Nevada', 'Oregon', ' Idaho'],
binning_endpoints=[14348, 63983, 134827, 426762, 2081313], colorscale=colorscale,
county_outline={'color': 'rgb(255,255,255)', 'width': 0.5}, round_legend_values=True,
legend_title='Population by County', title='California and Nearby States'
)
fig.layout.template = None
fig.show()
카토그램(Cartogram)
- 데이터 값의 변화에 따라 지도의 면적을 인위적으로 왜곡(확대 또는 축소)하여 데이터 값에 대한 직관적인 이해가 가능하도록 한 다이어그램
import plotly.express as px
df = px.data.election()
geojson = px.data.election_geojson()
fig = px.choropleth(df, geojson=geojson, color="Bergeron",
locations="district", featureidkey="properties.district",
projection="mercator"
)
fig.update_geos(fitbounds="locations", visible=False)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()
참고
반응형