꺼내먹는지식 준
Matplotlib Scatter Plot 본문
Scatter plot(산점도)은 점을 사용하여 두 feature 간의 관계를 알기 위해 사용하는 그래프
직교 좌표계에서 x축/ y축에 feature값을 매핑하여 사용
.scatter() 사용
예시)
Scatter Plot 요소
1) 색 (color)
2) 모양 (marker)
3) 크기 (size)
점 자체는 2차원에서 그려지지만, 색 모양 크기를 사용하여 5 ~ 차원의 데이터도 그릴 수 있다.
코드 구현
fig = plt.figure(figsize=(7, 7))
ax = fig.add_subplot(111, aspect=1)
np.random.seed(970725)
x = np.random.rand(20)
y = np.random.rand(20)
s = np.arange(20) * 20
ax.scatter(x, y,
s= s,
c='white',
marker='o',
linewidth=1,
edgecolor='black')
plt.show()
s 즉 size 에 0 ~ 400 의 수를 입력, 다양한 크기의 점이 scatter 된 것을 볼 수 있다.
사용 데이터
Iris 데이터
iris.describe(include='all')
Scatter Plot 목적
상관 관계 확인
처음에 참고한 예시도 상관 관계를 파악하기 위하여 사용하였다.
피어슨 계수, 공분산 등 value 로 파악도 가능
데이터가 어떻게 묶여있는지도 파악할 수 있다. (분류)
값 사이의 차이, 이상치도 파악 가능하다.
코드 구현
fig = plt.figure(figsize=(7, 7))
ax = fig.add_subplot(111)
slc_mean = iris['SepalLengthCm'].mean()
swc_mean = iris['SepalWidthCm'].mean()
ax.scatter(x=iris['SepalLengthCm'],
y=iris['SepalWidthCm'],
c=['royalblue' if yy <= swc_mean else 'gray' for yy in iris['SepalWidthCm']]
)
plt.show()
Sepal Width 가 평균보다 작으면 gray 색상, 아니면 royalblue 색상으로 지정했다.
즉, 각각 데이터 마다 색상을 지정해 줄 수 있다.
scatter 를 통해 두 데이터의 상관 관계도 볼 수 있다.
fig = plt.figure(figsize=(7, 7))
ax = fig.add_subplot(111)
for species in iris['Species'].unique():
iris_sub = iris[iris['Species']==species]
ax.scatter(x=iris_sub['SepalLengthCm'],
y=iris_sub['SepalWidthCm'],
label=species)
ax.legend()
plt.show()
약간 더 고차원 적인 방법을 사용하여 모든 Species 별로 색상을 다르게 지정해주었다.
Species 내에 unique 한 값들, 즉 species 별로 figure 위에 scatter 그림을 그리고, 동시에 label 도 species 로 설정해준다.
그 후, plt.show() 로 한번에 그리면 각 종류별로 색상이 다른 figure 가 그려진다.
간단하게 선을 추가하여 더 큰 시각적 효과를 얻을 수 있다.
ax.axvline(2.5, color='gray', linestyle=':')
ax.axhline(0.8, color='gray', linestyle=':')
fig, axes = plt.subplots(4, 4, figsize=(14, 14))
feat = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm']
for i, f1 in enumerate(feat):
for j, f2 in enumerate(feat):
if i <= j :
axes[i][j].set_visible(False)
continue
for species in iris['Species'].unique():
iris_sub = iris[iris['Species']==species]
axes[i][j].scatter(x=iris_sub[f2],
y=iris_sub[f1],
label=species,
alpha=0.7)
if i == 3: axes[i][j].set_xlabel(f2)
if j == 0: axes[i][j].set_ylabel(f1)
plt.tight_layout()
plt.show()
axes 도 visible(False) 처리가 가능하다.
tight_layout() 메소드는 서브 플롯간에 올바른 간격을 자동으로 유지
Scatter Plot 사용
점이 많아질수록 점의 분포를 파악하기 어렵다.
1) 투명도 조절
2) 지터링 (jittering) : 점의 위치를 약간씩 변경 (잘 사용 X)
3) 2차원 히스토그램 : 히트맵을 사용하여 깔끔한 시각화
4) Contour plot : 등고선을 사용하여 분포 표현
점의 요소와 인지
색: 연속은 gradient, 이산은 개별 색상
마커: 거의 구별이 힘들다 + 크기가 고르지 않다. (잉크 비례 법칙에 따라 크기가 같아야 하나 각 마커(ex. 네모,세모)는 크기가 다르다.)
크기: 흔히 버블 차트라고 부름, 구별하기는 쉬우나 오용이 쉽다.(각 크기 차이 직관적 파악 어렵다.) 관계 보다는 각 점간 비율에 초점을 둔다면 사용 좋다. SWOT 분석 등에 활용 가능
인과 관계와 상관관계
인관 관계와 상관 관계는 다르다.
상관 관계: x축과 y축이 비슷한 점이 있어서 같이 커질 수 있다
인과 관계: x축 때문에 y축이 변한다.
상관 관계가 있다고 꼭 인과 관계로 연결되는 것은 아니다. 인과 관계는 추측, Domain background 와 같이 제공되는 것.
추세선
추세선을 사용하면 scatter의 패턴을 유추할 수 있음
ETC
그리드를 사용하면 정보가 많이 겹쳐 보인다. 그리드를 사용하면 점이 적은 경우에, 그리고 색은 무채색으로 사용해야 한다.
연속적인 값이 아닐 때는 heat map 또는 bubble chart가 낫다.
'CS > 데이터시각화' 카테고리의 다른 글
Matplotlib Color (0) | 2022.02.07 |
---|---|
Matplotlib 기본기에서 벗어나는 몇가지 팁 (0) | 2022.02.07 |
Matplotlib Line Plot (0) | 2022.02.03 |
Matplotlib Bar Plot (0) | 2022.02.03 |
Matplotlib 기본 (0) | 2022.02.03 |