빅데이터 분석결과 해석 및 활용 - 공간 시각화

반응형

 

공간 시각화 정의

  • 장소나 지역에 따른 데이터의 분포를 표현한 것
  • 실제 지도나 지도모양의 다이어그램을 배경으로 데이터의 위치를 시각화
    • 정보 표현 : 위치와 거리 또는 색상을 이용하여 정보 표현
    • 정확한 투영(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)

  • 데이터 값의 변화에 따라 지도의 면적을 인위적으로 왜곡(확대 또는 축소)하여 데이터 값에 대한 직관적인 이해가 가능하도록 한 다이어그램

<단계구분도 예시, 출처 plotly>

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()

참고

반응형