Week3 01
강의 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_title
의loc
항목 수정을 통해 제목 위치 수정 가능- 범례 위치도
loc
이용해서 위치 수정 가능,shadow
등도 넣을 수 있음 tick
을 없애거나 원하는 대로 조정가능annotation
등을 이용해 고급 시각화 가능
실습 2-6
- Color
plt.colormaps()
를 통해 다양한 colormap 사용가능Set1 , tab10
이 군집비교나 집단비교에 용이하게 사용되고 있음- 연속형 색상, 발산형 색상
- 채도, 명도, 보색 등을 이용해 시각화 강조 가능
댓글남기기