본문 바로가기

부스트캠프 AI Tech

[WEEK 3-4] Data Visualization

정형 데이터

- 일반적으로 csv, tsv

- Row = 데이터 1개 item

- Column = attribute(feature)

시계열 데이터 (Time-Series)

- 추세(Trend), 계절성(Seasonality), 주기성(Cycle)을 살핌

지리/지도 데이터

관계 데이터

- 객체는 Node, 관계는 Link

계층적 데이터

- 관계 중 포함관계가 분명한 데이터

- Tree, Treemap, Sunburst 등

분류

- 수치형(numerical) : 연속형(continuous), 이산형(discrete)

- 범주형(categorical) : 명목형(nominal), 순서형(ordinal)

마크(mark) : 점, 선, 면으로 이루어진 데이터 시각화

채널(chnnel) : 각 마크를 변경할 수 있는 요소들

전주의적 속성(Pre-attentive Attribute) : 주의를 주지 않아도 인지하게 되는 요소

 

Bar plot

- 범주(category)에 따른 수치 값을 비교하기에 적합

- 수직(vertical) : .bar(), x축에 범주, y축에 값 (default)

- 수평(horizontal) : .barh(), y축에 범주, x축에 값 (범주가 많을 때)

Multiple Bar Plot

- 플롯을 여러 개

Stacked Bar Plot

- 2개 이상의 그룹을 쌓음(stack)

- 맨 밑의 bar의 분포 이외는 파악이 힘듦

- .bar()에서는 bottom 파라미터, .barh()에서는 left 파라미터

- Percentage Stacked Bar Chart : 응용하여 전체에서 비율을 나타냄

Overlapped Bar Plot

- 2개 그룹만 비교

- 비교가 쉬움

- 투명도 조(alpha)

- Area plot에서 더 효과적

Grouped Bar Plot

- Matplotlib으로는 구현이 어려움 (.set_xticks(), .set_xticklabels())

Principle of Proportion Ink

- 실제 값과 그에 표현되는 그래픽으로 표현되는 잉크 양은 비례

- x축의 시작은 0

데이터 정렬

- Pandas에서는 sort_values(), sort_index()를 이용하여 정렬

- 시계열은 시간순, 수치형은 크기순, 순서형은 범주의 순서대로, 명목형은 범주의 값에 따라

- 여러 가지 기준으로 정렬을 하여 패턴을 발견

- 대시보드에서는 Interactive로 제공

공간 활용

- 가독성을 높임

- X/Y axis Limit (.set_xlim(), .set_ylime())

- Spines (.spines[spine].set_visible())

- Gap (width)

- Legend (.legend())

- Margins (.margins())

복잡함과 단순함

- 필요없는 복잡함, 무의미한 3D

- Grid (.grid())

- Ticklabels (.set_ticklabels())

- Text (.text(), .annotate())

ETC

- 오차 막대 (errorbar)

- 히스토그램(Histogram) : Bar 사이 Gap이 0인 경우

- 제목 (.set_title())

- 라벨 (.set_xlabel(), ,set_ylabel())

 

Line plot

- 시간/순서에 대한 변화에 적합 (시계열 분석)

- .line이 아니라 .plot()

- 색상(color), 마커(marker, markersize), 선의 종류(linestyle, linewidth)

전처리

- Noise의 인지적인 방해를 줄이기 위해 smoothing

추세

- 축을 0에 초점을 둘 필요가 없음

- 생략되지 않는 선에서 범위를 조정하며 관찰 (.set_ylim())

간격

- 규칙적인 간격 맞추고, 관측 값 마커 사용

보간

- Moving Average

- Smooth Curve with Scipy (scipy.interpolate.make_interp_spline(), scipy.interpolate.interpld(), scipy.ndimage.gaussian_filter1d())

- 일반적인 분석에서는 지양

이중 축(dual axis)

- 한 plot에 2개의 축 사용

- 같은 시간 축에 다른 종류의 데이터 (.twinx())

- 한 데이터에 대해 다른 단위 (.secondary_xaxis(), .secondary_yaxis())

- 함부로 사용 지양

ETC

- 범례 대신 라인 끝 단에 레이블을 추가

- Min/Max 정보 등을 추가 (annotation)

- 연한 색을 사용하여 uncertainty 표현 (신뢰구간, 분산 등)

 

Scatter plot

- 두 feature간의 상관 관계 확인(양의 상관관계 / 음의 상관관계 / 없음)

- 군집, 값 사이의 차이, 이상치 확인

- .scatter() 사용

- 색(color), 모양(marker), 크기(size)

Overplotting

- 투명도 조정

- 지터링(jittering) : 점의 위치를 약간씩 변경

- 2차원 히스토그램 : 히트맵을 사용하여 깔끔한 시각화

- Contour plot : 분포를 등고선을 하용하여 표현

요소와 인지

- 색 : 연속은 gradient, 이산은 개별 색상으로

- 마커 : 구별이 힘들고, 크기도 다름

- 크기 : 버블 차트(bubble chart)라고 부름, SWOT 분석 등에 활용

인과관계(causal relation)와 상관관계(correlation)

- 다름

추세선

- scatter의 패턴을 유추

ETC

- Grid 지양

- 범주형이 포함된 관계는 heatmap 또는 bubble chart 추천

 

Text

- Title, Label, Tick Label, Legend, Annotation(Text)

 

Color

- 범주형 (Categorical) : 독립된 색상으로 색의 차이로 구분

- 연속형 (Sequential) : 연속적인 단일 색조로 표현

- 발산형 (Diverge) : 중앙을 기준으로 발산

- 색상 대비(Color Contrast) : 명도 대비, 색상 대비, 채도 대비, 보색 대비

- 색각 이상 : 색맹, 색약

- Hue(색조), Saturate(채도), Lightness(광도)

 

Facet

- Figure는 큰 틀, Ax는 각 플롯

- plt.subplot(), plt.figure() + fig.add_subplot(), plt.subplots()

- figuresize, dpi, sharex, sharey, squeeze, aspect

- Grid Spec : Slicing(fig.add_grid_spec()), x, y, dx, dy 사용(fig.subplot2grid())

- 서브플롯, 사이드 : ax.inset_axes(), make_axes_locatable(ax)

 

Grid

- 무채색 (color), 맨 밑으로 (zorder), 큰 격자 / 세부 격자 (which='major','minor','both'), X축 / Y축 (axis='x','y','both')

- x+y=c : 절대적 합이 중요한 경우

- y=cx : 비율이 중요한 경우

- 동심원 : 가까운 포인트를 찾거나 특정 범위의 데이터

심플한 처리

- 선 추가, 면 추가

Theme Setting

 

Seaborn

- 실습을 통해 학습

 

Polar Plot

- 극 좌표계(Polar Coordinate)를 사용

- 회전, 주기성 표현에 적합

- projection = polar 추가하여 사용

- Scatter, Line, Bar 모두 가능

Data Converting

- 직교 좌표계 X, Y에서 변환 가능

Radar Plot (Star Plot)

- 극좌표계를 사용하는 대표적인 차트

- 데이터의 Quality를 표현하기 좋음 (강함, 분석, 비교 등)

- 각 feature는 독립적이며 척도가 같아야 함

- 면적이 중요해 보이지만 feature의 순서에 따라 크게 달라짐

- Feature가 많을수록 가독성이 떨어짐

 

Pie Chart

- 원을 부채꼴로 분할하여 표현

- 전체를 백분위로 나타낼 때 유용

- 많이 쓰지만 지양

Donut Chart

- 중간이 비어있는 Pie Chart

Sunburst Chart

- 계층적 데이터를 시각화하는데 사용

 

Missingno

- 결측치(missing value)를 체크하는 시각화 라이브러리

- pip install missingno

Treemap

- 계층적 데이터를 직사각형을 사용하여 포함 관계를 표현

- 모자이크 플롯(Mosaic plot)과 유사

- pip install squarify 혹은 Plotly 사용

Waffle Chart

- 와플 형태로 discrete하게 값을 나타내느 차트

- Icon을 사용 가능 (Pictogram Chart)

- pip install pywaffle

Venn

- 집합(set) 등에서 사용하는 익숙한 벤 다이어그램

- pip install pyvenn 혹은 pip install matplotlib-venn

 

'부스트캠프 AI Tech' 카테고리의 다른 글

[WEEK 4-5] CV 이론  (1) 2023.11.30
데이터 직군에 대한 지식 쌓기  (0) 2023.11.30
[WEEK 3] DL Basic  (0) 2023.11.20
[WEEK 2] PyTorch  (0) 2023.11.13
[WEEK 1] AI Math  (0) 2023.11.09