[KT AIVLE 3기] 데이터 시각화
데이터 시각화는 실무에서 정말 필수다. 발표할 때 ppt를 잘 만들어야 하듯이, 데이터를 시각화하여 한 눈에 알아볼 수 있도록 보여주는 것은 매우 중요하다. matplotlib으로 간단한 시각화에 대해 배워보자.
matplotlib
matplotlib은 matlab을 사용해 봤다면 쉽게 사용할 수 있는 라이브러리다.
아니어도 쉽게 배울 수 있으니 아래에서 한번 살펴보자.
환경 준비
1) 라이브러리
import pandas as pd import numpy as np import matplotlib.pyplot as plt # matplotlib의 pyplot을 불러오는 것
2) 데이터
공기 질 정보를 불러오겠다.
path = 'https://raw.githubusercontent.com/DA4BAM/dataset/master/airquality_simple2.csv' data = pd.read_csv(path) data['Date'] = pd.to_datetime(data['Date']) data.info()

기본 차트 그리기
이제 차트를 그려보자.
차트 그리기
plt.plot(data['Temp']) # Temp의 차트를 그린다 plt.show() # 화면에 띄우기

x축이 뭔지, y축이 뭔지, 아무것도 알 수가 없다. 심지어 코드를 작성한 나도 x축이 뭔지 모르겠다. 그냥 그래프구나, 하고 이해할 수 없는 그림이 되는 것이다.
x축, y축 지정하기
# (1) plt.plot(data['Date'], data['Temp']) # x축을 Date, y축을 Temp로 지정 plt.show() # (2) plt.plot('Date', 'Temp', data = data) # data에 있는 Date를 x축, Temp를 y축으로 지정 plt.show()

기본 차트 꾸미기
x축, y축 이름 지정 및 차트 타이틀
plt.plot(data['Date'], data['Temp']) plt.xticks(rotation = 20) # x축 값들 방향을 20도 틀어서 표시 plt.xlabel('Date') # x축 이름 plt.ylabel('Temperature') # y축 이름 plt.title('Daily Temperature') # 타이틀 plt.show()

선 스타일 조정
plt.plot(data['Date'], data['Temp'] ,color='cyan' # 색 , linestyle='dashdot' # 라인스타일 , marker='>') # 마커(모양) plt.xlabel('Date') plt.ylabel('Temperature') plt.title('Daily Temperature') plt.xticks(rotation=20) plt.show()

여러 그래프 겹쳐서 그리기
그래프를 한 화면에 여러 개를 그려야 할 때가 있다. 한번 그려보자. 이럴 때는 plt.plot()을 여러개 해주면 된다.
# 첫번째 그래프 plt.plot(data['Date'], data['Ozone'], color='red', linestyle='dotted', marker='o') # 두번째 그래프 plt.plot(data['Date'], data['Temp'], color='cyan', linestyle='-', marker='^') plt.xlabel('Date') plt.ylabel('Ozone') plt.title('Daily Air Info') plt.xticks(rotation=45) # 한번에 보여주기 plt.show()

범례 & 그리드 추가
차트에 label 값을 추가하여 어떤 그래프인지 알려줄 수 있다. 범례는 legend로 추가한다.
plt.plot(data['Date'], data['Ozone'], color='red', linestyle='dotted', marker='o', label = 'Ozone') plt.plot(data['Date'], data['Temp'], color='cyan', linestyle='-', marker='^', label = 'Temp') plt.xlabel('Date') plt.title('Daily Air Info') plt.legend(loc = 'upper right') # loc: 위치 plt.grid() plt.xticks(rotation=20) plt.show()

추가 기능들
df.plot()
데이터프레임을 바로 plot할 수 있다.
data.plot(x = 'Date', y = ['Temp', 'Ozone'], title = 'Daily Air Info') plt.legend() plt.grid() plt.show()

축 범위 조정 - xlim, ylim
xlimit, ylimit으로 해석하면 이해하기 쉽다.
dict1 = {'v1': [1,2,3,4,5], 'v2': [2,4,6,3,2], 'v3':[9,6,1,6,2]} plt.plot('v1', 'v3', 'rs-', data = dict1, label = 'v3') plt.plot('v1', 'v2', 'cyan', data = dict1, label = 'v2') plt.xlim(0, 6) plt.ylim(0, 5) plt.grid() plt.show() ############# 축 범위 조정 dict1 = {'v1': [1,2,3,4,5], 'v2': [2,4,6,3,2], 'v3':[9,6,1,6,2]} plt.plot('v1', 'v3', 'rs-', data = dict1, label = 'v3') plt.plot('v1', 'v2', 'cyan', data = dict1, label = 'v2') plt.xlim(0, 6) plt.ylim(0, 10) plt.grid() plt.show()


그래프 크기 조정 - .figure(figsize=)
default size는 (6.4, 4.4)
plt.figure(figsize = (3, 2))
크기 조정은 예시 그림 없이 넘어가겠다.
수평선, 수직선, 텍스트 추가
dict1 = {'v1': [1,2,3,4,5], 'v2': [2,4,6,3,2], 'v3':[9,6,1,6,2]} plt.plot('v1', 'v3', 'rs-', data = dict1, label = 'v3') plt.plot('v1', 'v2', 'cyan', data = dict1, label = 'v2') plt.xlim(0, 6) plt.ylim(0, 10) plt.axhline(4.2, color = 'pink', linestyle = ':') plt.axvline(2.5, color = 'grey', linestyle = '--') plt.text(1.1, 2.5, 'graph') plt.grid() plt.show()

이처럼 다양한 기능이 많으니 잘 활용해서 보기 좋은 그래프를 그려보자.
subplot
subplot은 여러 그래프를 나눠서 그릴 수 있는 유용한 기능이다.
plt.subplot(row, column, index)
row는 행 수, column은 열 수, index는 순서(몇 번째)를 나타낸다.
dict1 = {'v1': [1,2,3,4,5], 'v2': [2,4,6,3,2], 'v3':[9,6,1,6,2]} plt.subplot(2,1,1) plt.plot('v1', 'v3', 'rs-', data = dict1, label = 'v3') plt.subplot(2,1,2) plt.plot('v1', 'v2', 'cyan', data = dict1, label = 'v2') plt.xlim(0, 6) plt.ylim(0, 10) plt.grid() plt.tight_layout() plt.show()

여러 차트들
직선 차트 뿐만 아니라 히스토그램, 산점도 등도 다 그릴 수 있다.
히스토그램
plt.hist(data['Temp']) plt.show()

Density plot
import seaborn as sns sns.kdeplot(data['Temp']) plt.show()

Boxplot
plt.boxplot(data['Temp']) plt.show()
산점도
plt.scatter(data['Temp'], data['Ozone']) plt.show()

Barplot
data['Weekday'] = data['Date'].dt.weekday sns.barplot(x='Weekday',y='Ozone', data = data) plt.show()

'AIVLE' 카테고리의 다른 글
[KT AIVLE 3기] 이변량분석 (0) | 2023.02.10 |
---|---|
[KT AIVLE 3기] 단변량분석 (0) | 2023.02.09 |
[KT AIVLE 3기] 시계열 데이터 처리 (0) | 2023.02.09 |
[KT AIVLE 3기] 데이터 처리 - day 1 (0) | 2023.02.08 |
[KT AIVLE 3기] Python - Numpy & Pandas (0) | 2023.02.07 |