[Visualization] Python Visualization 1

3 분 소요

Python Visualization

준비

클라우드 환경에서는 시각화 라이브러리가 기본적으로 제공되어 있다. 아래 코드를 통해 설치여부를 확인할 수 있다.


$ pip list | grep matplotlib 

$ pip list | grep seaborn

혹시 설치가 되어 있지 않다면 아래 명령어를 사용해 설치도 가능하다.


$ pip install matplotlib 

$ pip install seaborn

막대그래프

1. 데이터 정의

import matplotlib.pyplot as plt
%matplotlib inline

#그래프 데이터 
subject = ['English', 'Math', 'Korean', 'Science', 'Computer']
points = [40, 90, 50, 60, 100]

%matplotlib inline은 IPython에서 사용하는 매직 메소드이다. IPython 매직 명령어 정리

2. 축그리기

# 축 그리기
fig = plt.figure() #도화지(그래프) 객체 생성
ax1 = fig.add_subplot(1,1,1) #figure()객체에 add_subplot 메소드를 이용해 축 그리기


만약 fig = plt.figure()만 입력하면, <Figure size 432x288 with 0 Axes>로 객체만 생성된다. figure()는 도화지로 괄호 안에 figsize = ()를 넣어 도화지의 크기를 지정할 수 있다. add_subplot 메소드를 통해 축을 그릴 수 있다.


fig = plt.figure(figsize=(5,2))
ax1 = fig.add_subplot(1,1,1)


add_subplot(행, 열, 인덱스 순서) 메소드를 통해 도화지안에 여러개의 그래프 축을 만들 수 있다.


fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,4)

3. 그래프 그리기

막대그래프는 bar 메소드로 쉽게 그릴 수 있다.


# 그래프 데이터 
subject = ['English', 'Math', 'Korean', 'Science', 'Computer']
points = [40, 90, 50, 60, 100]

# 축 그리기
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)

# 그래프 그리기
ax1.bar(subject,points)
<BarContainer object of 5 artists>

4. 그래프 요소 추가

label, title

x라벨, y라벨, 제목을 추가하기 위해서는 xlabel() 메소드와 ylabel() 메소드 title() 메소드를 이용한다.


plt.xlabel('Subject')  

plt.ylabel('Points')  

plt.title("Yuna's Test Result")  

# 그래프 데이터 
subject = ['English', 'Math', 'Korean', 'Science', 'Computer']
points = [40, 90, 50, 60, 100]

# 축 그리기
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)

# 그래프 그리기
ax1.bar(subject, points)

# 라벨, 타이틀 달기
plt.xlabel('Subject')
plt.ylabel('Points')
plt.title("Yuna's Test Result")
Text(0.5, 1.0, "Yuna's Test Result")

선 그래프

1. 데이터 정의

과거 아마존 주가 데이터를 이용해 선 그래프를 그려보자.

AMZN.csv

from datetime import datetime
import pandas as pd
import os

#그래프 데이터 
data = pd.read_csv(csv_path ,index_col=0, parse_dates=True)
price = data['Close']

# 축 그리기 및 좌표축 설정
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
price.plot(ax=ax, style='black')
plt.ylim([1600,2200])
plt.xlim(['2019-05-01','2020-03-01'])

# 주석달기
important_data = [(datetime(2019, 6, 3), "Low Price"),(datetime(2020, 2, 19), "Peak Price")]
for d, label in important_data:
    ax.annotate(label, xy=(d, price.asof(d)+10), #주석을 달 좌표(x,y)
                xytext=(d,price.asof(d)+100), #주석 텍스트가 위차할 좌표(x,y)
                arrowprops=dict(facecolor='red')) #화살표 추가 및 색 설정

# 그리드, 타이틀 달기
plt.grid()
ax.set_title('StockPrice')

# 보여주기
plt.show()

plot 사용하기

plt.plot()명령으로 그래프를 그리면 matplotlib은 가장 최근의 figure객체와 그 서브플롯을 그리고 서프플롯이 없다면 하나 생성한다.

np.linspace(0, 10, 100)을 통해 0에서 10까지 균등한 간격으로 100개의 숫자를 만들어 그래프를 그려보자.

plt.plot()의 인자로 x데이터, y데이터, 마커옵션, 색상 등의 인자를 이용할 있다.


import numpy as np
x = np.linspace(0, 10, 100) #0에서 10까지 균등한 간격으로  100개의 숫자를 만들라는 뜻입니다.
plt.plot(x, np.sin(x),'o')
plt.plot(x, np.cos(x),'--', color='black') 
plt.show()


서브 플롯도 plt.subplot을 이용해 추가할 수 있다.


x = np.linspace(0, 10, 100) 

plt.subplot(2,1,1)
plt.plot(x, np.sin(x),'orange','o')

plt.subplot(2,1,2)
plt.plot(x, np.cos(x), 'orange') 
plt.show()

linestyle, marker옵션


라인 스타일은 plot()의 인자로 변경이 가능하다.


x = np.linspace(0, 10, 100) 

plt.plot(x, x + 0, linestyle='solid') 
plt.plot(x, x + 1, linestyle='dashed') 
plt.plot(x, x + 2, linestyle='dashdot') 
plt.plot(x, x + 3, linestyle='dotted')
plt.plot(x, x + 0, '-g') # solid green 
plt.plot(x, x + 1, '--c') # dashed cyan 
plt.plot(x, x + 2, '-.k') # dashdot black 
plt.plot(x, x + 3, ':r'); # dotted red
plt.plot(x, x + 4, linestyle='-') # solid 
plt.plot(x, x + 5, linestyle='--') # dashed 
plt.plot(x, x + 6, linestyle='-.') # dashdot 
plt.plot(x, x + 7, linestyle=':'); # dotted

Pandas로 그래프 그리기


Pandas도 plot() 메소드를 통해 여러 가지 그래프를 그릴 수 있다.

  • label : 그래프의 범례이름.

  • ax : 그래프를 그릴 matplotlib의 서브플롯 객체.

  • style : matplotlib에 전달할 ‘ko–‘같은 스타일의 문자열

  • alpha : 투명도 (0 ~1)

  • kind : 그래프의 종류: line, bar, barh, kde

  • logy : Y축에 대한 로그스케일

  • use_index : 객체의 색인을 눈금 이름으로 사용할지의 여부

  • rot : 눈금 이름을 로테이션(0 ~ 360)

  • xticks, yticks : x축, y축으로 사용할 값

  • xlim, ylim : x축, y축 한계

  • grid : 축의 그리드 표시할 지 여부

data가 DataFrame일 때 plot 메소드 인자

  • subplots : 각 DataFrame의 칼럼을 독립된 서브플롯에 그린다.

  • sharex : subplots=True면 같은 X축을 공유하고 눈금과 한계를 연결한다.

  • sharey : subplots=True면 같은 Y축을 공유한다.

  • figsize : 그래프의 크기, 튜플로 지정

  • title : 그래프의 제목을 문자열로 지정

  • sort_columns : 칼럼을 알파벳 순서로 그린다.

fig, axes = plt.subplots(2, 1)
data = pd.Series(np.random.rand(5), index=list('abcde'))
data.plot(kind='bar', ax=axes[0], color='blue', alpha=1)
data.plot(kind='barh', ax=axes[1], color='red', alpha=0.3)
<AxesSubplot:>

df = pd.DataFrame(np.random.rand(6,4), columns=pd.Index(['A','B','C','D']))
df.plot(kind='line')
<AxesSubplot:>

정리

  1. fig = plt.figure(): figure 객체를 선언해 도화지 펼치기

  2. ax1 = fig.add_subplot(1,1,1) : 축을 그리기

  3. ax1.bar(x, y) 축안에 어떤 그래프를 그릴지 메소드를 선택한 다음, 인자로 데이터를 넣기

  4. 그래프 타이틀 축의 레이블 등을 plt의 여러 메소드 grid, xlabel, ylabel 을 이용해서 추가하기

  5. plt.savefig 메소드를 이용해 저장

그래프 요소 명칭

댓글남기기