[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 |