Bar Plot
Bar Plot은 직사각형 막대를 사용하여 데이터의 값을 표현하는 차트 및 그래프로 막대 그래프, bar chart, bar graph 등의 이름으로 사용된다.
- 범주(category)에 따른 수치 값을 비교하기에 적합한 방법
막대의 방향에 따라 .bar(), .barh()로 분류된다.
- .bar(): 수직(vertical)로 x축에 범주, y축에 값을 표기 (default)
- .barh(): 수평(horizontal)로 y축에 범주, x축에 값을 표기 (범주가 많을 때 적합)
fig, axes = plt.subplots(1, 2, figsize=(12, 7))
x = list('ABCDE')
y = np.array([1, 2, 3, 4, 5])
axes[0].bar(x, y)
axes[1].barh(x, y)
plt.show()
Bar에 색은 list를 활용하여 지정할 수도 있다.
clist = ['blue', 'gray', 'gray', 'gray', 'red']
color = 'green'
axes[0].bar(x, y, color=clist)
axes[1].barh(x, y, color=color)
Bar Plot에서는 범주에 대해 각 값을 표현하기 때문에 1개의 feature에 대해서만 볼 수 있어서 여러 group으로 보여주기 위한 방법들이 사용한다.
- plot을 여러 개 그린다
- 한 개의 플롯에 동시에 나타낸다
- 쌓아서 표현
- 겹쳐서 표현
- 이웃에 배치하여 표현
쌓아서 표현 (Stacked bar plot)
2개 이상의 그룹을 쌓아서 표현하는 bar plot으로 각 bar에서 나타나는 그룹의 순서는 항상 유지된다.
- 맨 밑의 bar의 분포는 파악하기 쉽지만 그 외의 분포들은 파악하기 어렵기 때문에 수치들에 annotation을 추가해 이를 보완할 수 있고 2개의 그룹이 positive, negative라면 축 조절이 가능하다
- .bar()에서는 bottom, .barh()에서는 left 파라미터를 사용
- 응용으로 전체에서 비율을 나타내는 percentage stacked bar chart 등도 있다
겹쳐서 표현 (Overlapped bar plot)
2개 그룹만 비교한다면 겹쳐서 만드는 것도 활용할 수 있지만 3개 이상에서는 파악이 어렵다.
- 같은 축을 사용하니 비교가 쉽고 투명도를 조정해 겹치는 부분을 파악한다 (alpha)
- bar plot 보다는 area plot에서 더 효과적이다
이웃에 배치하여 표현 (Grouped bar plot)
그룹별 범주에 따른 bar를 이웃되게 배치하는 방법이다.
- Matplotlib은 범주형보다는 수치형 데이터를 표현하기 용이해 비교적 구현이 까다롭다
- ticks, ticklabels 등 적당한 테크닉이 필요하다
세 가지 표현 방법은 모두 그룹이 5~7개 이하일 때 효과적이지만 그룹이 더 많다면 적은 그룹은 ETC로 처리하는 방법도 있다.
정확한 표현을 하기 위한 방법
- Principle of proportion link
- 반드시 x축의 시작은 0으로 하고 실제 값과 그에 표현되는 그래픽으로 표현되는 잉크 양은 비례해야 한다
- 차이점을 부각시키고 싶으면 figure의 세로 길이를 늘린다
- 데이터 정렬
- 더 정확한 정보를 전달하기 위해서는 정렬이 필수
- pandas에서는 sort_values(), sort_index()를 사용하여 정렬
- 여러 가지 기준으로 정렬을 하여 패턴을 발견할 수 있고 대시보드에서는 interactive로 제공하는 것이 유용하다
- 적절한 공간 활용
- 여백과 공간만 조정해도 가독성이 높아진다
- .margins(), .set_xlim(), set_ylime(), set_spines[spine], set_visible() 등
- 복잡함과 단순함
- ETC
- 오차 막대를 추가하여 Uncertainty 정보를 추가 가능하다
- bar 사이 gap이 0이 되도록 히스토그램을 사용하여 연속된 느낌을 줄 수 있다
- 다양한 text 정보를 활용한다
Line Plot
Line Plot은 연속적으로 변화하는 값을 순서대로 점으로 나타내고, 이를 선으로 연결한 그래프이다.
- 꺾은선 그래프, 선 그래프, line chart, line graph 등의 이름으로 사용된다
- 시계열 분석과 같은 시간/순서에 대한 변화에 적합하여 추세를 살피기 위해 사용한다
- 중첩으로 인해 가독성이 하락될 수 있어 5개 이하의 선을 사용하는 것이 좋다
- 구별은 색상, 마커, 선의 종류 등의 요소를 사용한다
시시각각 변동하는 데이터는 noise로 인해 패턴 및 추세가 파악하기 어렵다.
- noise의 인지적인 방해를 줄이기 위해 smoothing을 사용한다
정확한 표현을 하기 위한 방법
-
추세에 집중
- 추세를 보기 위한 목적이기 때문에 Bar plot과 다르게 꼭 축을 0에 초점을 둘 필요는 없다
- 너무 구체적인 line plot 보다는 생략된 line plot이 더 나을 수 있다
- Grid, Annote 등 모두 제거
- 디테일한 정보는 표로 제공이 나을 수 있다
- 생략되지 않는 선에서 범위를 조정하여 변화율 관찰
-
간격
- 규칙적인 간격이 아니라면 오해를 줄 수 있다
- 그래프 상에서 규칙적일 때
- 그래프 상에서 간격이 다를 때
- 규칙적인 간격의 데이터가 아니라면 각 관측 값에 점으로 표시하여 오해를 줄인다
-
보간
- Line은 점을 이어 만드는 요소로 점과 점 사이에 데이터가 없기에 이를 잇는 방법인 보간을 사용할 수 있다
- 데이터의 error나 noise가 포함되어있는 경우, 데이터의 이해를 돕는 방법
- Moving Average
- Smooth Curve with Scipy
- scipy.interpolate.make_interp_spline()
- scipy.interpolate.interp1d()
- scipy.ndimage.gaussian_filter1d()
- Presentation에는 좋은 방법이 될 수 있으나 없는 데이터를 있다고 생각하게 할 수 있으며 작은 차이를 없앨 수 있다
-
이중 축 사용
- 한 plot에 대해 2개의 축을 이중 축(dual axis)라고 한다
- 같은 시간 축에 대해 서로 다른 종류의 데이터를 표현하기 위해서는 축이 2개가 필요
- 한 데이터에 대해 다른 단위를 가진다 (ex: radian, dgree)
- .secondary_xaxis(), secondary_yaxis() 사용
- 범위가 다른데 임의로 조정해야 할 경우 상관관계가 있어보이는 단점이 있어 이중 축을 사용하는 것보단 2개의 plot을 그리는 것을 지향
-
ETC
- 범례 대신 라인 끝 단에 레이블을 추가하면 식별에 도움된다
- Min/Max 정보(혹은 원하는 포인트)는 축해주면 도움이 될 수 있다 (annotation)
- 보다 연한 색을 사용하여 uncertainty 표현 가능하다 (신뢰구간, 분산 등)
Scatter Plot
Scatter plot은 점을 사용하여 두 feature간의 관계를 알기 위해 사용하는 그래프로 상관 관계를 확인하기 위해 사용한다.
- 산점도 등의 이름으로 사용된다
- 직교 좌표계에서 x축, y축에 feature 값을 매핑해서 사용한다
- 점에서 다양한 variation 사용이 가능하다 (2차원 데이터에서 N차원 데이터로 확장 가능)
- 군집 (Cluster), 값 사의 차이 (Gap in values), 이상치 (Outliers)를 확인할 수 있다
정확한 표현을 하기 위한 방법
- 점이 많아질수록 점의 분포를 파악하기 힘들다
- 투명도 조정
- 지터링 (jittering)
- 2차원 히스토그램
- Contour plot
- 점의 요소와 인지
- 색
- 연속은 gradient, 이산은 개별 색상으로 표시
- 마커
- 크기
- 흔히 버블 차트 (bubble chart)라고 부른다
- 구별하기는 쉽지만 오용하기 쉽다 (원의 크기 비교)
- 관계보다는 각 점간 비율에 초점을 둔다면 좋다
- SWOT 분석 등에 활용 가능하다
- 인과관계와 상관관계
- 인과 관계 (casual relation)과 상관 관계 (correlation)은 다르다
- 인과 관계는 항상 사전 정보와 함께 가정으로 제시해야 한다
- 추세선
- 추세선을 사용하면 scatter의 패턴을 유추할 수 있다
- 추세선이 2개 이상이 되면 가독성이 떨어질 수 있으므로 주의한다
- ETC
- Grid는 지양하고 사용한다면 색은 무채색으로 하여 최소한으로 한다
- 범주형이 포함된 관계에서는 heatmap 또는 bubble chart가 더 좋다