부스트캠프 AI Tech 4기
(Data Viz) Scatter Plot 실습
쉬엄쉬엄블로그
2023. 6. 12. 12:28
728x90
이 색깔은 주석이라 무시하셔도 됩니다.
!pip install matplotlib==3.3.2
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
1. 기본 Scatter Plot
1-1. scatter()
기본
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)
ax.scatter(x, y)
ax.set_xlim(0, 1.05)
ax.set_ylim(0, 1.05)
plt.show()
1-2. Scatter Plot의 요소
- 색 (color)
- 모양 (marker)
- 크기 (size)
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()
2. 정확한 Scatter Plot
- 이론적인 부분은 다른 라이브러리를 사용하는 것이 더 편리 (통계와 차트 seaborn에서 더 상세)
- 붓꽃 데이터셋을 사용하여 시각화
- 상관관계와 봐야 하는 것 3가지(클러스터, 값의 차이, 이상치)
- 어떻게 커스텀할 수 있는지
iris = pd.read_csv('./Iris.csv')
iris.head()
iris.describe(include='all')
- 꽃받침의 길이와 너비의 관계를 살피기 위해 산점도 그리기
fig = plt.figure(figsize=(7, 7))
ax = fig.add_subplot(111)
ax.scatter(x=iris['SepalLengthCm'], y=iris['SepalWidthCm'])
plt.show()
- 특정 조건에 따라 색을 다르게 하기
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()
꽃의 종류에 따라 구분하여 그리기
- 색을 위와 같이 반복문과 조건문으로 구분할 수도 있지만 범례를 사용할 예정이므로 세 번 나눠 그리는 편이 더 편리
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()
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['PetalLengthCm'],
y=iris_sub['PetalWidthCm'],
label=species)
ax.legend()
plt.show()
- 시각적인 주의를 주기 위해서 선을 사용할 수도 있음
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['PetalLengthCm'],
y=iris_sub['PetalWidthCm'],
label=species)
ax.axvline(2.5, color='gray', linestyle=':')
ax.axhline(0.8, color='gray', linestyle=':')
ax.legend()
plt.show()
- 다양한 관점으로 그리기
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()
출처: 부스트캠프 AI Tech 4기(NAVER Connect Foundation)