상세 컨텐츠

본문 제목

06. matplotlib - 다양한 차트

데이터 분석/시각화

by 알파고제로 2023. 11. 3. 08:49

본문

■ Bar chart

  • Bar chart는 막대그래프로 x의 값이 연속적이 아니라 카테고리 값인 경우 bar(), barh()를 이용해 그린다.
    막대를 그릴 때 alpha를 이용해 투명도 지정 가능
    (0: 완전 투명, 1: 완전 불투명)
  • xerr이나 yerr 값을 지정하면 error bar를 추가할 수 있다.
# 세로 막대 그래프
import matplotlib
import matplotlib.pyplot as plt
import numpy as np

labels = ['Seoul', 'Busan', 'Incheon', 'Gwangju', 'Jeju']
y = [20, 34, 30, 35, 27]
x = np.arange(len(y))

plt.title("Bar Chart")
plt.bar(x, y)
plt.xticks(x, labels)

plt.xlabel('City')
plt.ylabel('Frequency')

plt.show()

 

 Pie chart

  • 파이차트는 이산적인 데이터를 카테고리 별 값의 상대적인 비교를 할 때 유용하다.
pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6,
                         shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True,
                         wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False,
                         *, normalize=None, data=None)
주요 인자
- x : 파이 차트의 각각의 데이터 값(wedge)의 크기
- explode : (default : None) 각 wedge의 비율을 지정하는 배열
- labels : 레이블 각 wedge에 대한 레이블을 제공하는 일련의 문자열
- colors : 색상 배열 유사, (default : None), 원형 차트가 순환하는 일련의 색상
- autopct : (default : None), wedge 위에 표시할 레이블.
  형식 문자열인 경우 레이블은 fmt % pct 표시한다.
- shadow : bool값을 이용해 각 파이에 그림자를 표시하여 입체적으로 출력 (default : False)
- startangle : float, (default=0)
  원형의 시작 부분을 각도로 표시. 해당 각도에서부터 반시계방향으로 회전하면서 wedge를 표시
- counterclock : bool, default : True
  데이터가 그려지는 방향을 시계 방향(True) 또는 반시계 방향(False)인지 지정
# 파이 차트 

import numpy as np
import matplotlib.pyplot as plt

labels = ['Seoul', 'Daegu', 'Busan', 'Incheon']
sizes  = [22, 15, 36, 10]
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
explode = (0, 0, 0.1, 0)
plt.title("Pie Chart")

plt.pie(sizes, explode=explode, labels=labels, colors=colors,
	autopct='%1.1f%%’, shadow=True, startangle=90)

plt.axis('equal')
plt.show()

 

■ Histogram

  • 자료의 분포를 몇 개의 구간으로 나눈 후 각 구간에 속하는 데이터의 빈도수를 표로 나타낸 것을 도수분포표(frequency table)라고 한다.
  • 히스토그램은 도수 분포표에서 구간별 빈도수를 막대 그래프로 나타낸 것이다.
  • matplotlib의 hist()를 이용해 히스토그램을 그릴 수 있다.
  • hist() 함수는 히스토그램을 그려주고 해당 데이터를 반환한다.
hist(x, bins=None, range=None, density=False, weights=None, cumulative=False,
               bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None,
               log=False, color=None, label=None, stacked=False, *, data=None, **kwargs)
주요 인자
- X : 히스토그램을 그릴 데이터
- Bins : 구간의 수(default : 10)
- orientation= : 히스토그램을 그릴 방향 horizonta값을 주면 가로 히스토그램이 그려진다.
- Histtype : 히스토그램의 타입 ‘step’값을 주면 테두리만 나타난 형태로 그려진다.
- Color : 히스토그램의 색상
# 히스토그램 

np.random.seed(0)
x = np.random.randint(0,1000, 50)
plt.title("Histogram Sample")
arrays, bins, patches = plt.hist(x, bins=10)

plt.show()

 

■ Boxplot

  • boxplot은 많은 데이터에서 데이터 집합의 범위와 중앙값 등 통계 수치 값을 확인하고자 하는 목적으로 사용한다. 
  • 이상치(outlier)가 있는지 검사하기 수월하다.
  • boxplot으로 확인할 수 있는 통계적 수치는 아래와 같이 다섯가지이다.
    1. 최솟값 : 제 1사분위에서 1.5 IQR1을 뺀 위치.
    2. 제 1사분위(Q1) : 중앙값 기준으로 하위 50% 중의 중앙값, 전체 데이터 중 하위 25%에 해당하는 값 
    3. 제 2사분위(Q2) : 50%의 위치로 중앙값(median)을 의미. 데이터의 정 가운데 순위에 해당하는 값
    4. 제 3사분위(Q3) : 중앙값 기준으로 상위 50% 중의 중앙값, 전체 데이터 중 상위 25%에 해당하는 값
    5. 최댓값 : 제 3사분위에서 1.5 IQR을 더한 위치
      ※(Interquartile range의 약어이며 제3분위 - 제1분위의 값을 의미)
  • 최솟값과 최댓값을 넘어가는 위치에 있는 값을 이상치(Outlier)라고 부른다.
boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None,
   patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None,
   meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None,
   boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None,
   capprops=None, whiskerprops=None, manage_ticks=True, autorange=False,
   zorder=None, *, data=None)
주요 인자
- x : 히스토그램을 그릴 데이터
- Bins : 구간의 수(default : 10)
- orientation= : 히스토그램을 그릴 방향 horizonta값을 주면 가로 히스토그램이 그려진다.
- Histtype : 히스토그램의 타입 ‘step’값을 주면 테두리만 나타난 형태로 그려진다.
- Color : 히스토그램의 색상
# 기본적인 boxplot 그리기

import matplotlib.pyplot as plt

data = [1, 1, 5, 7, 9, 10, 10, 11, 12, 16, 20, 36, 39, 41, 45, 46, 48, 54, 100]

plt.title('Basic Plot')
plt.boxplot(data, )

plt.show()

 

■ Scatter plot

  • 산점도(scatter plot)은 직교 좌표계를 이용해 두 개 변수 간의 상관관계를 나타내는 플롯이다.
scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,
              vmin=None, vmax=None, alpha=None, linewidths=None,
              verts=<deprecated parameter>, edgecolors=None, *, plotnonfinite=False,
              data=None, **kwargs)
주요 인자
- x, y : 플롯을 그릴 데이터. float값, shape (n, )
- S : 마커의 크기설정. 기본크기는 rcParams['lines.markersize'] ** 2
- c 
      -
플롯의 색상설정. array 등으로 표현할 수 있다
      -
cmap 이나 norm을 사용하여 색에 매핑할 n개의 숫자로 표현하며 RGB, RGBA 값을 가진 2차원배열 사용가능하다. 기본값          은  rcParams["axes.prop_cycle"]
- marker: 마커 스타일 설정. default: 'o', rcParams["scatter.marker"] 설정할 수 있다.
# 스캐터플롯의 작성

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(1234)
N = 50
x = np.random.rand(N) # 평균 0, 표준편차 1인 난수 발생
y = np.random.rand(N)

plt.scatter(x, y)

plt.show()

 

■ imshow

  • 그림을 표현하는 픽셀 값을 가진 image 데이터처럼 행과 열을 가진 행렬 형태의 2차원 데이터는 imshow()를 이용하여 플롯을 그릴 수 있다.
# keras에서 제공하는 mnist 데이터를 이용하여 이미지 플롯 출력

# keras 패키지가 설치되어 있어야 한다. : pip install keras
from keras.datasets import mnist

import numpy as np
import matplotlib.pyplot as plt

# Data load
(X_train, y_train), (X_test, y_test) = mnist.load_data()

plt.imshow(X_test[0])
plt.title("Correct : " + str(y_test[0]))
plt.show()

관련글 더보기

댓글 영역