7 분 소요

강의 1

현업에서는 어떤데이터를 마주할것인가 고민

데이터 프로세스에 대한 전반적인 이해가 목표

본인이 기여하고 싶은 영역

습득하고 싶은 영역

시각화와 EDA가 각 영역에서 차지하는 역할에 대한 고민

데이터를 살펴보며 통찰력을 기르고, 효과적인 시각화 기법을 스스로 고민해 보는 과정이 필수적

강의 2

  • 데이터 시각화 => 효과적인 이해 위해
  • 귀찮고 번거로운 구현 연습 => 포멧에 대해 익숙해지기
  • 점,선,면 => 데이터를 나타내기 위한 빈공간
  • 채널 => 이 빈공간을 채워주는 변수
  • Bar Plot => 막대의 방향 따라 분류 .bar() / .barh()
  • Multiple Bar Plot => 분포를 보기엔 적합하지만 비교엔 적합하지 않음

=> 한개의 plot에 여러개 데이터 표현하는 방법 있음

  • Stacked Bar Plot => 숫자가 커지면 개별데이터 비교가 힘듬 예를들어 7과 8의 경우 힘듬, (A,B,C,D,E) 전체적인 값에 대한 비교엔 좋지만 집단 SKY와 집단 PINK의 비교엔 좋지않음 .bar() 에선 bottom .barh() 에선 left

=> Percentage Stacked Bar Plot 등장, 비교에 특화 퍼센티지로 표현

  • Overlapped Bar Plot => 2개 그룹 비교엔 겹쳐서 비교 not bad 하지만 3개 이상은 파악 어려움, bar보다는 area에서 유용

  • Grouped Bar Plot => bar를 이웃되게 배치 (seaborn 사용 권장), 최대 5개~7개 그룹일 때 추천

    .set_xticks() .set_xticklabels()

  • Principle of Proportion Ink => x축 시작은 zero(0)!!

  • 데이터 정렬 => 데이터 종류에 따라 정렬, 정렬만으로 인지 up! sort_values(), sort_index()

  • 여백, 공간 조정 => 가독성 up!, matplotlib techniques 활용하기 슬라이드 p17

  • 필요 없는 복잡함 no! (무의미한 3D X), 오히려 가독성 저하시킬 수 있음


Line plot

  • 시간/순서에 대한 변화에 적합하여 시계열 분석에 특화, 그 외에는 적합x 경우 다수 matplotlib에선 .plot()
  • 5개 이하 선 사용 추천, 색상,마커,선의 종류 등으로 구별
  • smoothing => 노이즈 방해 줄이기 위해 사용 ( 시시각각 변하는 데이터 )
  • 축을 0에 초점 둘 필요 없음 => 추세를 보기 위함
  • 구체적인 것보다 생략된 line plot이 더 나을 수 있음 (Grid, Annotate 등 모두 제거) , 디테일한 정보는 표로 제공
  • 규칙적인 간격이면 좋지만, 규칙적인 데이터가 아닐 경우 관측값에 점으로 표시해서 오해 줄이기
  • 보간 => 점과 점 사이에 데이터가 없기에 이를 잇는 방법

=> presentation엔 좋지만, 없는데이터 있다고 생각하게 할 수 있고, 작은 차이 없앨 수 있음, 일반적인 분석에선 지양

  • 이중 축 사용 => 같은 시간 축에 대해 서로 다른 종류의 데이터 표현 twinx(), 한 데이터에 대해 다른단위(rad, degree) 적용할 때도 사용가능 .secondary_xaxis(), .secondary_yaxis()

=> 같은 축에 대해 서로 다른 종류 데이터 표현하는 것은 최대한 지양

  • 라인 끝단에 레이블 추가하면 식별에 도움됨
  • Min/Max 정보 추가하면 도움될 수 있음
  • 보다 연한 색으로 uncertainty 표현 가능(신뢰구간, 분산 등)

Scatter plot

  • 점을 사용해 두 feature간의 관계를 알기 위해 사용하는 그래프
  • .scatter()
  • 색, 모양, 크기 를 이용해 다양한 산점도 그리기 가능
  • 가장 기본적인 목적 => 상관 관계 확인 ( 양의 상관관계, 음의 상관관계, 없음)
  • 군집, 값 사이의 차이, 이상치에 대해서도 확인 가능
Overplotting
  • 점이 많아질수록 점의 분포 파악 힘듬 => 투명도 조정, 지터링(겹치는 점을 살짝씩 위치 조정해서 그부분 데이터 많아보이게 => 데이터 값을 건드리는 것이므로 추천 x), 2차원 히스토그램 => 분포에 대해 이해하기 쉬움, Contour plot => 등고선 사용 표현
  • 2차원 히스토그램이나 Contour plot 사용하는 것 추천
점의 요소와 인지
  • 색, 마커, 크기

  • 색상이 구별하기 좋음 => 마커는 보조적인 도구로 사용 추천
  • 크기 => 흔히 버블 차트 (bubble chart), 구별은 쉽지만 오용하기 쉬움, 통계적 시각화에는 그리 추천하지않음, 각 점간 비율에 초점 두면 좋음
인과관계와 상관관계
  • 인과관계 : 특정 요인 A가 B에 영향을 준다
  • 상관관계: 특정 요인 A와 B가 연관성이 있다
  • 인과관계는 항상 사전정보와 함께 가정으로 제시하는 것이 중요
  • 텍스트 같은 것을 통해 시각화 차트를 읽을 때 오인하지 않게 하는것도 TIP
추세선
  • scatter 패턴 유추 가능
  • 추세선 2개 이상이 되면 가독성 down
ETC
  • 왠만하면 GRID 사용 지양, 사용한다면 최소한으로

텍스트와 색상

  • Text => Visual representation들이 줄 수 없는 많은 설명 추가 가능
  • matplotlib api 바탕으로 Text 이해하기 => 실습
  • Title, Label, Tick Label, Legend, Annotation

  • 색상 => 가장 중요한 것은 독자에게 원하는 인사이트를 전달
  • 색이 가지는 의미 => 기존 정보와 느낌을 잘 반영하는 것이 중요
Color palette
  • 5개~7개 사용하고 그 외 하나는 무채색으로 뭍는 거 추천

  • 색의 차이로 구분하는 것
  • 범주형
  • 이산적인 개별 값에 적합
  • 연속형
  • 연속적인 색상으로 표현 => 어두운 배경에선 밝은 색으로 큰값 표현, 밝은 배경에선 어두운 색
  • 색상은 단일 색조로 표현하는 것이 좋음, 균일한 색상 변화가 중요
  • 발산형
  • 연속형과 유사하지만 중앙기준으로 발산
  • 상반된 값이나 서로 다른 2개(ex. 지지율)를 표현하는데 적합
  • ex. 대한민국 평균 기온 데이터 (x축 일, y축 월, 값: 온도 나타내는 색상=> 여름일수록 진한 빨강, 겨울일수록 파랑색)
그 외 색상
  • 색상 대비 사용
  • 색 인지가 중요한 분야 => 색각이상 고려 필수

실습 2-1

  • figure() => 큰 틀을 만든다
  • figure() 사이즈 조정하면 원하는 차트의 크기와 비율로 만들 수 있음 figsize()
  • add_subplot() 서브플롯 추가 , 최소 1개 이상 추가해야함
  • 2개 이상 그리고싶다 => fig.add_subplot(121), fig.add_subplot(122)
  • plt => 그래프 순차적으로 그리기 좋음
  • 그래프 동시에 여러개 그리기 가능

  • 색상 지정 => color 파라미터로 직접 전달 한글자, color name, hex code 등으로 지정 가능
  • label 지정 => 시각화에 안드러나므로 => legend 추가
  • 제목 추가 .set_title() , ax에서 특정 데이터를 변경하는 경우 .set_{}() 형태의 메서드가 많다!
  • set으로 세팅해놓은 정보를 받아올 때는 .get{}() 형태의 메서드를 사용

  • ticks=> 축에 적히는 수 위치 지정, ticklabels => 축에 적히는 텍스트 수정
  • .text() , .annotate() 로 텍스트 작성 가능 text => 개별로 전달, annotate => tuple로 위치 전달, 화살표 사용 가능

실습 2-2

  • Bar Plot

  • 기본적인 Bar Plot => bar(), barh() 사용
  • fig, axes = plt.subplots(1,2, figure(12,7)) ==> figure 생성하고 1행 2열의 subplot 생성
  • clist = ['blue' if i < 2 else 'gray' for i in x] 와 같은 형태로 데이터가 많은경우 for문 이용해서 처리 할 수도 있음!
  • dataset.info() 를 통해 빠르게 data 확인 가능 => null 값이 얼마나 있는지 (결측치가 얼마나 있는지), Dtype은 어떤지
  • 수치형인데도 text로 포함된 경우 Dtype이 object로 나오는데 이를 수치형으로 바꿔주고 연산을 처리해야 error가 나지않음

  • describe 메소드 이용해서 대푯값들 확인가능 => 인사이트 얻기 좋음
  • groupby 통해서 특정 column 정보 확인가능 => text로 보면 비교 어려우므로 막대그래프 활용
  • group['male']을 통해 group정보 확인 가능 해당 정보의 index와 값을 이용해 plot 가능
  • multiple plot을 이용해 양옆에 plot을 할 수 있지만 y축이 달라 각각 비교하기엔 부적절 => sharey로 y축에 대한 정보 통일
  • 개별적으로 y축 범위 조정도 가능 => ax.set_ylim(0,200)과 같이 조정가능 for axe in axes와 같이 여러개 조정도 가능
  • 이렇게 해도 개별적인 비교가 엄청 쉽진않음 (그룹간의 비교)
  • Stacked Bar Plot => bottom parameter 이용해서 그리기 가능 ex. bottom = group['male']
  • barh 이용해서 left = 형태로도 만들 수 있음
  • Overlapped Bar Plot => alpha값(투명도) 조정해서 겹쳐서 그리기 가능 => 추천하진 않음
  • Grouped Bar Plot => width 조정 필요(idx-width/2), 개별비교에 용이함 => 개인적으로 추천하는 방식
  • 데이터 개수가 많을 경우 index따라 width조정하기 가능
  • 축을 통해서 장난을 칠 수 있으므로, 오용을 하지 않기 위해 주의하기

TIP
  • spines = 테두리, spines['top'].set_visible(False)예시처럼 테두리를 없애서 보기 편하게 바꿀 수 있음
  • 상단 우측 테두리 제거 for s in ['top', 'right'], spines[s].set_visible 과 같이 테두리 없애기 가능
  • margin 조정을 통해 시각적으로 좀 더 편하게 .margines(0.1,0.1) 좌항이 양쪽, 우항이 상단
  • edgecolor 설정, grid 설정 technique 가져가기, grid 그릴 때는 zorder 신경쓰기(뭐가 더 앞에 나올지 결정)
  • 커스텀하는 것을 선호한다 => text를 통해 개별로 그리고, 함수있는걸로 쓰겠다 => bar_label 사용

  • errorbar 사용해서 편차 등의 정보 추가 가능
  • set_xlabel set_ylabel, fontsize fontweight 등 다양하게 커스텀 가능

실습 2-3

  • Line

  • .plot() 을 통해 lineplot 수행, 순차적으로 그리기 때문에 x값이 정렬 안되어있으면 시각화에서 오차 생길 수 있음
  • sin, cos 이용해 plot(x,y) 하여 다양한 도형을 그릴 수 있음
  • x = np.sin(np.linspace(0, 2*np.pi, n)) => n값 변화주어 원부터 삼각형까지 그릴 수 있음( y = np.cos() )
  • 색, 마커, 선의 종류 변경가능 color, marker, linestyle
  • date를 불러왔을 때 일부 데이터는 잘 호환이 되고 일부는 잘 안되는 경우가 있어 pd.to_datetime 을 통해 시계열 데이터 전처리 함
  • pandas의 rolling => 이동평균, 연속된 N개의 평균을 통해 더 변동성이 적은 데이터를 표현하는 방법
  • google.rolling(window = 20) 20일 기준 이동 평균을 구함
  • sharex , sharey를 사용하면 여러개 차트 그릴 때 비교에 용이함 sharex = True
  • 축 간격에 따라 해석 잘못될 수 있음 => 마커 추가도 하나의 방법
  • 보간보단 이동평균 사용 추천
  • twinx()이용해서 이중축 표현 => 그냥 다른 데이터 동시에 표현하고싶을 때
  • 1:1 로 치환되는데 새로운 축을 만들어야 한다 => secondary_xaxis() 사용하기 (rad, degree 같이 표현)
  • 범례 박스 띄우는 대신 lineplot 끝에 이쁘게 붙이고싶을 때 => text() 이용해서 만들 수 있음
  • min, max 지점만 표시할 수도 있음 => scatter 부분 배우고 다시 봐보기

실습 2-4

  • scatter
  • 특정 조건에 따라 색을 다르게 해서 주의를 더 줄 수 있음
  • 개별 데이터에 대한 비교, 군집 등에 대해 훨씬 더 용이하게 파악 가능
  • 시각적 주의를 주기 위해 선도 사용 가능 ax.axvline, ax.axhline
  • 점들관의 관계, 군집을 보기 용이하므로 종류별로 column별로 봐야함 => n by n 으로 차트 그릴 수도 있음

실습 2-5

  • Text
  • ax.text => x, y값 기준으로 text 생성, fig.text => 전체를 1로 봤을 때 비율에 맞게 위치하여 생성
  • family 글씨체 , size or fontsize , style or fontstyle (이탈릭체 등) , weight or fontweight
  • color, linespacing, backgroundcolor,alpha, zorder, visible
  • 정렬을 하기위해 ha, va, rotation, multialignment 를 조정 가능
  • bbox 통해서 꾸밀 수 있음 텍스트 박스
  • set_titleloc 항목 수정을 통해 제목 위치 수정 가능
  • 범례 위치도 loc 이용해서 위치 수정 가능, shadow 등도 넣을 수 있음
  • tick을 없애거나 원하는 대로 조정가능
  • annotation 등을 이용해 고급 시각화 가능

실습 2-6

  • Color
  • plt.colormaps() 를 통해 다양한 colormap 사용가능
  • Set1 , tab10 이 군집비교나 집단비교에 용이하게 사용되고 있음
  • 연속형 색상, 발산형 색상
  • 채도, 명도, 보색 등을 이용해 시각화 강조 가능

업데이트:

댓글남기기