본문 바로가기
프로그래머스/데이터분석 데브코스

프로그래머스 데이터분석 데브코스 8-3

by 포잉띠 2024. 4. 3.

8-2에 배운 내용들은 주로 확률, 통계에 관한 내용이었는데 수식이 너무 많고

이해를 제대로 하지 못한 상태여서 기본적인 개념들 바퀴를 다시 만드는 작업을 하며 익히는 중이다.

 

8-3에서는 python의 matplotlib, seaborn 라이브러리에 대해 배웠다.

matplotlib은 어째서인지 가장 처음 접한 라이브러리여서 익숙했다.

seaborn의 존재는 알았지만, 산점도 히트맵 같은 기술이 그간 필요한 경우가 없었어서 접하지 못했었다.

가볍게 새로 알게된 부분들만 정리하겠다.

 

시각화

  • 데이터 분석 결과를 plot이나 graph등을 통해 시각적으로 전달하는 방법
  • 통계수치를 사용한 정량적 분석이 정확한 분석 내용을 전달하는데 강점이 있다면, 
    시각화는 데이터 분석 내용을 한눈에 볼 수 있게 내용을 효과적으로 전달할 수 있다.
  • 통계수치상으로는 파악하기 쉽지 않은 내용 또한 분석이 가능한 경우가 존재한다.

 

Matplotlib

  • plt.plot() 등의 명령문을 작성한 뒤 plt.show()를 통해 바로 확인하는 방법과
    plt.savefig()로 저장한 후 확인하는 방법이 있다. (저장 시 확장자, 해상도 지정 가능)
  • 좋은 플롯의 조건 
    • 플롯만 봐도 전체적인 내용 파악이 가능한가 여부
  • 선형, 산점도의 경우 marker, markersize, linestyle, color, alpha 등을 설정해 조절 가능
    (점, 점 크기, 점선 실선 등등..., 색, 투명도)
  • 산점도에서 color를 label로 주어 label에 따른 분포 파악도 가능하다.
  • plt.scatter(s= , c= ) : x, y 좌표로 이루어진 데이터들을 점으로 표현하는 플롯
    s = 점 크기, c = 점 색깔 / label이나 class에 따른 데이터 분포를 확인할 때 활용 가능
  • 히트맵 / plt.matshow()
    • 다양한 값을 갖는 숫자 데이터를 열분포 형태와 같이 색상을 이용해서 시각화 한 것
    • 지도 이미지 위에 인구 분포와 같이 2차원 형태로 표현되는 데이터의 빈도 분포를 보여주기에 적합함.

 

Seaborn

Relplot : 2개 이상의 변수 간 관계를 효과적으로 나타내는 플롯

  • scatter plot : 두개의 연속형 변수 간의 관계를 scatter plot으로 표현 가능
  • sns.replot(data = df, x = 'x label', y = 'y label')
  • hue (색), size, style을 통해 categorical 변수값을 표현할 수 있음
  • 기본적으로 lineplot은 95% 신뢰구간을 표현해 준다.
  • facet : matplotlib의 subplot 같은 느낌
    • 변수가 많아질수록 한 플롯 안에서 표현하다 보면 가시성이 떨어지고 
      효과적인 분석이 어렵다.
    • 여러 플롯으로 나누어 분석을 하는 것이 효과적일 수 있다.

Displot : 1개 이상의 변수 값의 분포를 효과적으로 나타내는 플롯

  • 기본적으로 히스토그램을 그려줌
  • binwidth / bins 로 너비 조절 가능하다.
  • 이상형 변수인 경우 discrete = True 옵션을 통해 X축 값 중앙에 막대가 위치하도록 할 수 있다.
  • shrink 옵션을 통해 막대 간 공간 조절 가능
  • hue 옵션을 통해 추가 변수를 조건으로 한 분포를 시각화 가능
  • 막대 간 겹쳐지는 부분의 경우
    • element = step(계단형 차트)
    • multiple = stack(누적 차트)
    • multiple = dodge / 변수가 categorical 한 경우
    • stat = 'probability' 옵션을 통해 모든 막대의 높이의 합이 1이 되게 만들 수 있으며, 
      이를 빈도의 비율값으로 해결할 수 있음.
  • kde plot : 부드러운 곡선 차트, hue 옵션으로 분포 파악 가능
  • heatmap / contour(등고선 느낌의 차트)
    • 변수가 2개일 때
    • 기본적으로 displot은 heatmap을 그려준다.
    • 변수가 한개인 kde plot에서 변수를 한개 더 추가하면 contour plot을 그려준다.
  • joint plot 2개의 변수 간 분포와 각 변수의 분포를 동시에 보여준다.
    • 기본적으로 scatter plot과 히스토그램을 그려준다.
    • kind = 'kde' 인 경우 contour plot과 kde plot을 그려준다.
  • pair plot을 이용해 각 변수들간의 pairwise 관계를 시각화 할 수 있다.
    • 고려해야할 변수들이 많고 변수 간 상관관계 파악이 필요한 경우 유용하다.

Catplot : 범주형 데이터의 분포를 효과적으로 나타내는 플롯

  • 기본 플롯은 strip plot, 한쪽 변수가 categorical 데이터인 산점도라고 생각하면 편하다.
  • 한 범주에 속하는 모든 점이 범주형 변수에 해당하는 축을 따라 동일한 위치에 있게된다.
  • jitter 옵션을 통해 좌우로 퍼진 정도를 조절하거나 비활성화
  • swarm plot을 활용하면 점들의 중첩을 방지하는 알고리즘을 사용하여 시각화 가능
    • 상대적으로 데이터 수가 적은 경우에만 잘 작동한다.
    • 관측치 분포를 더 잘 표현한다.
  • hue를 사용하여 다른 차원을 추가할 수 있다.
  • native_scale = True 를 사용하면 X축 데이터의 분포를 보존할 수 있다.
    • 특정 X의 y값이 비어있는 경우 그 값을 날리고 plot을 그려버리는데, 
      위의 옵션을 사용하면 방지할 수 있다.
  • box plot
    • 데이터셋의 크기가 커짐에 따라 범주형 산점도는 각 범주 내의 값 분포에 대해
      제공할 수 있는 정보가 제한되기에 Box plot 사용
    • hue 사용 가능하다.
    • 각 수준에 대한 상자는 더 좁아지고 범주형 축을 따라 이동됨.
  • boxen plot : 분위수를 좀 더 자세하게 표시가능. 

차트가 되게 신기하게 생겼다.

 

  • box plot이나 violin plot을 swarm plot과 결합하는것 또한 가능하다.
  • bar plot 가능하다.
    • 95% 신뢰구간 추가 가능하다.
    • errorbar 옵션을 이용해 다른방식으로도 분산을 표현할 수 있다.
  • point plot
    • categorical 변수에 따라 다른 변수가 어떻게 변화하는지를 효과적으로 나타낸다.
    • 이 때 점 추정치 중심으로 95% 신뢰구간이 포함된다.