공실이의 개발 블로그

[Python] 데이터 시각화 - Matplotlib and Seaborn 본문

Python

[Python] 데이터 시각화 - Matplotlib and Seaborn

박공실캔따개 2023. 4. 17. 17:32

 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