Data Viz 2강) Bar/Line/Scatter Plot

한량·2021년 8월 14일
0

Bar Plot

  • 직사각형 막대를 사용해 데이터 값을 표현하는 차트/그래프
  • 범주(category)에 따른 수치 값을 비교하기에 적합한 방법
    • 개별 비교, 그룹 비교 모두 적합

  • 수직(vertical): x축에 범주, y축에 값을 표기(default)
  • 수평(horizontal): y축에 범추, x축에 값을 표기(범주가 많을 때 적합)

Multiple Bar Plot

가정

임의의 그룹 데이터 Sky, Pink에 A,B,C,D,E 데이터가 존재

  • Group Sky: [1,2,3,4,3]
  • Group Pink: [4,3,2,5,1]

  • 범주에 대해 각 값을 표현 --> 1개의 feature에 대해서만
  • 여러 group을 보여주려면 여러 방법이 필요
    1. 플롯을 여러 개 그리는 방법
    2. 한 개의 플롯에 동시에 나타내는 방법(5~7개 이하일 때 효과적)
      1) 쌓아서
      2) 겹쳐서
      3) 이웃해서 배치해서

Stacked Bar Plot

  • 2개 이상의 그룹을 쌓아서(stack) 표현
    • 각 bar에서 나나타는 그룹의 순서는 항상 유지
  • 2개의 그룹이 positive/negative라면 축 조정 가능
  • .bar()에서는 bottom 파라미터, .barh()에서는 left 파라미터 이용
  • 전체적인 분포를 살피기엔 적합하지만 개별 분표는 파악하기 어려움
    --> 주석을 달아서 해결
  • 전체에서 비율을 나타내는 Percentage Stacked Bar Chart로 주석, 비율을 달아 표현 가능

Overlapped Bar Plot

  • 같은 축을 사용해 비교가 쉬움
    • 투명도(α\alpha), 명도, 채도 등을 조절해 잘 보이게 해야함
  • 3개 이상 겹칠때부터는 보기 어려워서 지양하는편

Grouped Bar Plot

  • 그룹별 범주에 따른 bar를 이웃되게 배치
  • 수치형 데이터(numpy등)으로는 쉬우나, Matplotlib으로는 구현이 까다로움
    • .set_xticks(), .set_xticklabels()를 활용

정확한 Bar Plot

Principle of Proportion Ink

The representation of numbers, as physically measured on the surface of the graphic itself, should be directly proportional to the numerical quantities represented.

  • 실제 값과 그에 표현되는 그래픽으로 표현되는 잉크 양은 비례해야함
  • 반드시 x축의 시작은 zero(0)!!
    • 차이를 늘리고 싶다면 plot 세로 비율을 늘린다

데이터 정렬하기

  • 더 정확한 정보를 전달하기 위해서는 정렬이 필수
    • Pandas에서는 sort_values(), sort_index()를 이용
  • 데이터의 종류에 따라 다음 기준으로
    1. 시계형: 시간순
    2. 수치형: 크기순
    3. 순서형: 범수의 순서대로 (i.e. 초-중-고등학교)
    4. 명목형: 범주의 값에 따라(최대값/최소값, 오름차순/내림차순)
  • 대시보드에서 interactive를 제공하는 것이 유용

적절한 공간 활용

  • 여백과 공간만 조정해도 가독성이 높아진다
  • Matplotlib은 bar plot이 ax에 꽉 차서 좀 답답함
  • Matplotlib techniques
    • X/Y axis limit: .set_xlim(), .set_ylim()
    • Spines: .spines[spine].set_visible
    • Gap: width
    • Legend: .legend()
    • Margins: .margins()

복잡함과 단순함

  • 필요없는 복잡함은 No, 무의미한 3D는 Never...
    • 직사각형이 아닌 다른 형태의 bar는 지양
  • 정확한 차이(EDA), 큰 틀에서의 비교 및 추세 파악(Dashboard)
  • 축과 디테일 등의 복잡함

ETC

  • 오차 막대를 추가해 Uncertainty 정보를 추가 가능(errorbar)
  • Bar 사이 Gap이 0이라면 --> Histogram
    • .hist()를 사용
    • 연속된 느낌을 줄 수 있음
  • 다양한 text 정보 활용하기
    • 제목: .set_title()
    • 라벨: .set_xlabel(), .set_ylabel()

Line Plot

  • 연속적으로 변화하는 값을 순서대로 점으로 나타내고, 이른 선으로 연결한 그래프
  • 꺾은선 그래프, 선 그래프, line chart, line graph 등으로 불림
  • 시간/순서에 대한 변화에 적합해 추세를 살피기 위해 사용
    • 시계열 분석에 특화!!
  • .plot()를 사용

Line Plot의 요소

  • 5개 이하의 선을 사용하는 것을 추천
    • 많은 선은 중첩으로 인한 가독성 하락
  • 선을 구별하는 요소
    1. 색상(color)
    2. 마커(marker, markersize)
    3. 선의 종류(linestyle, linewidth)

Line Plot을 위한 전처리

  • noise의 인지적 방해를 준이기 위해 smoothing을 사용

정확한 Line Plot

추세에 집중

  • 추세를 보기 위한게 목적이기 때문에 꼭 축을 0에 둘 필요 없음
  • Grid, annotate 등을 모두 제거해 생략된 line plot이 더 나을 수 있다
    • 디테일한 정보는 표로 제공하는 것을 추천
  • 생략되지 않는 선에서 범위를 조정해 변화율 관찰(.set_ylin())

간격

  • 규칙적인 간격이 아니라면 오해를 줄 수 있다!
    • 그래프 상에서 규칙적일 때: 기울기 정보의 오해
    • 그래프 상에서 간격이 다를 때: 없는 데이터에 대해 있다고 오해
  • 규칙적인 간격의 데이터가 아니라면 각 관측 값에 점으로 표시해 오해를 줄이자

보간


이중 축 사용

  • 한 plot에 대해 2개의 축을 이중 축(dual axis)라고 함
  • 같은 시간 축에 대해 서로 다른 종류의 데이터를 표현하기 위해 축이 2개 필요
    • .twinx()를 사용
  • 한 데이터에 대해 다른 단위(ex. raidan과 degree)
    • .secondary_xaxis(), .secondary_yaxis() 사용
  • 같은 시간축/x축에 대해 서로 다른 종류의 데이터를 표현하는 데엔 이중축을 지양(서로 상관관계가 있어보이기 때문)

ETC

  • 라인 끝 단에 레이블을 추가하면 식별에 도움이 됨(범례 대신)

  • Min/Max 같은 원하는 정보는 추가해주면 도움이 될 수 있음(annotation)

  • 보다 연한 색을 이용해 uncertainty 표현 가능(신뢰구간, 분산 등)

Scatter Plot

  • 점을 사용해 두 feature간의 관계를 알기 위해 사용하는 그래프
  • 산점도라고도 함
  • .scatter()

Scatter Plot의 요소

  • 점에서 다양한 variation 사용 가능(2차원 데이터에서 N차원 데이터로 확장 가능)
    1. 색(color)
    2. 모양(marker)
    3. 크기(size)

Scatter Plot의 목적

  • 상관 관계 확인(양/음/없음)

  • 세 가지 특성
    1. 군집(Cluster): 데이터가 어떻게 묶여있는가
    2. 값 사이의 차이(Gap in Values): 보간, 전처리를 위해 사용
    3. 이상치(Outlier)

정확한 Scatter Plot

Overplotting

  • 점이 많아질수록 분포를 파악하기 힘들다
    • 투명도 조정
    • 지터링(jittering): 점의 위치를 약간씩 변경, 효율성이 크지는 않다
    • 2차원 히스토그램: 히트맵을 사용해 깔끔한 시각화
    • Contour plot: 분포를 등고선을 사용해 표현

점의 요소와 인지

    • 연속은 gradient, 이산은 개별 색상으로
  • 마커
    • 거의 구별하기 힘들다
    • 크기가 고르지 않음
  • 크기
    • 흔히 버블 차트(bubble chart)라고 부름
    • 구별하기 쉽지만 오용하기도 쉬움(원의 크기 비교에서)
    • 관계보다는 각 점간 비율에 초점을 둔다면 좋음
    • SWOT 분석 등에 활용 가능

인과관계와 상관관계

  • 인과 관계(casual relation)과 상관 관계(correlation)은 다름!
    • 인과 관계: x축 때문에 y축이 변한다
    • 상관 관계: x축과 y축이 같이 커진다
    • 분석 과정에서 고민해볼 것
  • 인과 관계는 항상 사전 정보와 함께 가정으로 제시할 것

추세선

  • 추세선을 사용해 scatter의 패턴을 유추할 수 있음
    하지만 2개 이상이 되면 가독성이 떨어지므로 주의

ETC

  • Grid와의 궁합이 좋지 않음
    사용은 최소한으로, 색은 무채색

  • 범주형이 포함된 관계에서는 heatmap 또는 bubble chart를 추천

profile
놀고 먹으면서 개발하기

0개의 댓글