Bar Plot

  • 직사각형 막대를 사용하여 데이터 값을 표현하는 차트/그래프
  • 범주(category)에 따른 수치 값을 비교(개별 비교, 그룹 비교)
  • 막대 방향 지정
    • 수직(vertical) : .bar(), x축 범주 y축 값(default)
    • 수평(horizontal) : .barh(), x축 값, y축 범주 (범주가 많을 때 적합)

다양한 Bar plot

  • 두 종류의 라벨 데이터에 대한 bar plot
    • 플롯을 여러개 그리기
    • 한 개의 플롯에 동시에 나타내기
      • 쌓아서 표현
      • 겹쳐서 표현(대신 투명도 조정)
      • 이웃에 배치하여 표현

stacked bar plot

  • 2개 이상의 그룹을 쌓아서 표현
  • 맨 밑의 bar 분포는 파악하기 쉽지만 그 외 분포 파악이 조금 어려움
    • 경우 percentage Stacked bar chart로 하면 전체적인 분포를 파악하기 편함
  • 2개의 그룹이 positive/negative면 축 조정 가능
  • .bar()에서는 bottom을, .barh()에서는 left 파라미터 사용

Overlapped Bar Plot

  • 2개 그룹만 비교한다면 겹쳐서 만드는 것도 하나의 선택지
    • 3개 이상이면 파악하기 어려움
  • 투명도를 조정하여 겹치는 부분 파악(alpha option)
  • bar plot보다는 area plot 활용하면 더 효과적(seaborn)

grouped bar plot

  • 그룹별 범주에 따른 bar를 이웃되게 배치
  • 다만, matplotlib으로는 조금 까다로움(seaborn is best!!)
    • 적당한 테크닉(set_xticks(), set_xticklabels())
  • 다만 그룹도 5~7개 이하일 때만 효과적, 그룹이 많으면 적은 그룹은 ETC 그룹으로 처리

정확한 Bar plot

  • X축의 시작은 반드시 0부터 시작
    • Area chart, donut chart도 동일
    • 가독성을 높인다고 150~200정도만 나타내면 독자가 오해할 수 있음
    • y축의 차이를 보여주고 싶으면 figure size 자체를 조정
  • 데이터 정렬
    • Pandas는 sort_values(), sort_index()
    • 데이터 종류에 따른 기준
      1. 시계열 | 시간 순서
      2. 수치형 | 크기 순서
      3. 순서형 | 범주 순서
      4. 명목형 | 범주 값 순서
  • 적절한 공간 활용
    • 여백과 공간만 조정해도 가독성 향상
    • Matplotlib Technique
      • X/Y axis Limit(.set_xlim())
      • Spines(.spines[spine].set_visible())
      • Gap(width)
      • Legend(.legend())
      • Margins(.margins())
  • 복잡함과 단순함
    • 무의미하 복잡함은 기독성 저하
    • 3D를 할 떄는 interactive하게 가동할 수 있도록
    • 가능하면 2D로
    • 정확한 EDA 를 통한 데이터 시각화
    • 큰 틀에서 비교 및 추세 파악 시 Dashboard 활용

Line Plot

  • 선 그래프
  • 시간/순서에 대한 변화에 적합하여 추세를 살피는 용도
    • 시계열 분석에 특화
  • .plot()
  • 다섯개 이하의 선을 사용하는 것을 추천
    • 중첩으로 인해 가독성 저하
  • 색상(color),마커(maker, makersize), 선의 종류(linestyle, lindwidth)
  • 시계열 데이터는 노이즈로 인해 패턴 및 추세 파악이 어려운데, Noise의 인지적 방해를 줄이기 위해 smoothing(e.g. moving average) 사용

정확한 line plot

  • bar plot과 다르게 축을 꼭 0에 초점을 둘 필요는 없음
  • 너무 구체적이면 오히려 가독성 저하
    • grid, annotate 등 불필요하면 제거(다만 상황에 따라 다름)
    • 디테일한 정보는 표로..
  • 생략되지 않는 선에서 범위 조정(.set_ylim())
  • 간격에 따라 독자가 받아들이기에 오해할 수 있으므로 관측값에 대해 marker를 사용하는 것도 좋음
  • 보간 : 점과 점 사이에 데이터가 없기에 이를 잇는 방법
    • Moving average
    • smooth curve with Scipy
      • scipy.interplate.make_interp_spine()
      • scipy.interpolate.interp1d()
      • scipy.ndimage.gaussian_filter1d()
    • presentation에는 좋으나, 없는 데이터를 생성해주는 것이므로 일반적인 분석에서는 지양
  • 이중 축(dual axis)
    • 같은 시간 축 + 다른 종류의 데이터
      • .twinx()
    • 한 데이터에 다른 단위(radian, degree)
      • .secondary_xaxis(), .secondary_yaxis()
    • 단, 두 그래프를 같이 그리면 상관관계가 있어보이므로, 가능하면 이중 축보단 두 그래프로 그리는 것이 가독성이 향상
  • annotate나 text를 활용하여 legend, 그래프의 point를 지정해주면 가독성이 향상

Scatter Plot

  • 점을 사용하여 두 feature 관계를 알기 위해 사용
  • 산점도
  • .scatter()
  • variation을 활용하여 5차원까지 시각화 가능
    • 색(color),모양(marker), 크기(size) 조정
  • 목적 : 상관관계 확인

정확한 Scatter Plot

  • 점이 많아질수록 분포 파악이 어려움
    • 투명도 조정(alpha)
    • 지터링(jittering): 점의 위치를 약간씩 변경
    • 2차원 히스토그램: 히트맵을 사용하여 시각화
    • contour plot: 분포를 등고선으로 사용
  • 점의 요소와 인지
    • 색 : 연속은 gradient, 이산은 개별 색상으로
    • 마커 : 거의 구별이 어려움 + 크기가 고르지 않음
    • 크기 :
      • 흔히 버블 차트(bubble chart)라고 부르는데, 구별하기 쉬지만 오용이 쉬움
      • 관계보다는 가 점간 비율에 초점
      • SWOT 분석 등에 활용 가능
  • 인과 관계와 상관 관계는 다름!!
  • scatter plot과 grid는 잘 어울리지는 않음
    • 사용할 경우 최소환으로만, 색은 무채색으로
  • 범주형이 포함된 관계에서는 heatmap이나 bubble chart
profile
DL, NLP Engineer to be....

0개의 댓글

Powered by GraphCDN, the GraphQL CDN