공실이의 개발 블로그
[Python] 데이터 시각화 - Matplotlib and Seaborn 본문
Matplotlib vs Seabron 관계 파악하기
[Seaborn] 정형 데이터만 시각화 가능하다. (Pandas 라이브러리에 쉽게 접근하기 위해 Matplotlib에서 파생된 라이브러리이며 리턴 값은 Matplotlib로 나타난다.
- 장점
- 코드가 짧다
- Matplotlib과 비교해 색감이 부드럽고 전반적으로 디자인이 이쁘다
- 신뢰 구간, 밀도 함수 등 통계 시각화 명령어를 보유하고 있어, 통계 데이터 시각화에 유리하다
- 단점
- 그릴 수 없는 그림이 있고 수정이 Matplotlib보다 어려워서 자유도가 낮다
- Matplotlib을 모르면 세부 수정을 할 수 없다 (결국 Matplotlib을 호출해서 사용하게 됨)
[Matplotlib] 이미지 데이터 및 정형 데이터까지 시각화가 가능하다.
- 장점
- 웬만하면 다 그릴 수 있다 - interactive, 3D, animation 기능
- 생태계가 넓다 - 수치(numpy, scipy), 머신러닝(scikit-learn), 지리(geopandas) 등
- 사용자가 많다
- 단점
- 기본적으로 디자인이 평범하다
- 표준어가 2개이다
결론적으로 Matplotlib를 더 중점적으로 공부하는 것이 중요하다!
시각화
[Matplotlib]
import matplotlib as mpl
import matplotlib.pyplot as plt
# matplotlib 그릴 때, 객체지향으로 그린다!
# 기본 문법 - "fig,ax"라는 두개의 변수 선언 "plt.subplots()" 함수 사용
# "fig"는 전체적인 그림을 나타내며 "ax"는 실제 그래프가 그려질 객채로 구분
fig, ax = plt.subplots()
plt.show()
# 세부 옵션 사용을 위해 선언
fig,ax = plt.subplots(figsize = (10,6))
plt.show()
# 데이터 생성 및 세부 옵션 사용
dates = [
'2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04', '2021-01-05',
'2021-01-06', '2021-01-07', '2021-01-08', '2021-01-09', '2021-01-10'
]
min_temperature = [20.7, 17.9, 18.8, 14.6, 15.8, 15.8, 15.8, 17.4, 21.8, 20.0]
max_temperature = [34.7, 28.9, 31.8, 25.6, 28.8, 21.8, 22.8, 28.4, 30.8, 32.0]
fig,ax = plt.subplots(figsize = (10,6))
ax.plot(dates, min_temperature, label = 'Min Temp')
plt.show()
객체화를 하여 시각화를 진행하면 자유도가 높아진다.
자유도라 함은 데이터 수정이 자유롭고 여러 형태의 그래프를 보여줄 수 있다는 것.
fig,ax = plt.subplots(nrows=2,ncols=2,figsize = (10,8))
ax[0,0].plot(dates, min_temperature, label = 'Min Temp')
ax[0,0].set_title('a[0,0]')
ax[0,1].boxplot(temp)
ax[0,1].set_title('a[0,1]')
ax[1,0].plot([1,2,3])
ax[1,0].set_title('a[1,0]')
ax[1,1].plot(dates, max_temperature, label = 'Max Temp')
ax[1,1].set_title('a[1,1]')
plt.show()
테슬라와 애플의 연도별 Close 지수 시각화
fig, ax = plt.subplots(figsize = (10,6))
ax.plot(TSLA['Close'], label='Tesla')
ax.plot(AAPL['Close'], label='Apple')
ax.legend() # 범례
#title - 그래프 타이틀
ax.set_title('Tesla and Apple')
#xlabel - X축 라벨
ax.set_xlabel('Y e a r')
#ylabel - Y축 라벨
ax.set_ylabel('C l o s e')
plt.show()
[Seaborn]
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset('tips')
tips.head()
# 결과
----------------------------------------------------------------------
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
----------------------------------------------------------------------
fig,ax = plt.subplots(nrows=2,ncols=1)
ax[0].plot([1,2,3])
ax[0].set_title('matplotlib plot')
sns.histplot(x='tip',data=tips, ax=ax[1])
ax[1].set_title("seaborn histplot")
plt.tight_layout()
plt.show()
# 막대 그래프
fig,ax = plt.subplots()
ax = sns.countplot(x='day',data=tips, order = tips['day'].value_counts().index)
# order = 리스트 형식으로 들어가며 value_counts().index 는 내림차순 정렬
# patches.Rectangle 함수의 내장 메소드를 사용하여 데이터 추출 과정
for p in ax.patches:
# print(p, type(p))
height = p.get_height()
ax.text(x = p.get_x() + p.get_width()/2,
y = height-5,
s=height,
ha='center',
color = 'white',
size = 12)
ax.set_ylim(0,100)
plt.show()
'Python' 카테고리의 다른 글
[Python] List Comprehension 이해하기 (1) | 2023.04.13 |
---|