목차
연속적인 값이 아닌 개별적인 값을 가지는 데이터를 이산 데이터라고 하는데, 이러한 데이터를 가시화하기 위해사용되는 matplotlib 라이브러리의 stem() 함수의 사용법에 대해 정리해 보려고 합니다. stem() 함수는 진동데이터를 FFT 한 후에 결과값을 가시화할 때도 사용됩니다. FFT의 결과값을 변환하는 예시를 보려면 아래 링크를 참고하시기 바랍니다.
https://lifelong-education-dr-kim.tistory.com/entry/Python-numpy-FFT-IFFT-사용하기-주기분석
1. 이산데이터란?
이산 데이터(Discrete Data)는 연속적인 값을 가지지 않고, 개별적인 값을 가지는 데이터를 말합니다. 이산 데이터는 한정된 값들 중에서만 존재하며, 보통 정수 형태로 표현됩니다. 연속적인 범위에서의 측정이 아니라, 개별적인 지점에서 값을 가지므로, 이산 데이터는 숫자 사이의 값이 존재하지 않습니다.
예를 들어, 주사위를 던지는 경우를 생각해 보면, 주사위의 눈금은 1부터 6까지의 정수 값만을 가집니다. 이는 이산 데이터의 예시입니다. 다른 예로는 학생의 성적을 생각해 볼 수 있습니다. 성적은 일정 범위의 숫자로 표현되지만, 실제로는 정수 형태로 표현되는 경우가 많습니다. 따라서 성적도 이산 데이터입니다.
이산 데이터는 주로 카운트, 빈도, 이벤트 발생 횟수, 카테고리, 상태 등을 표현하는 데 사용됩니다. 이산 데이터를 다룰 때는 연속 데이터와는 다른 통계적 분석 방법이 적용될 수 있습니다.
반대로, 연속 데이터(Continuous Data)는 무한한 범위에서 측정되는 데이터를 말합니다. 예를 들어, 온도, 시간, 길이, 무게 등은 연속 데이터의 예시입니다. 연속 데이터는 숫자 사이의 무수히 많은 값들을 가지며, 실수 형태로 표현됩니다.
2. stem() 함수를 사용하는 경우
plt.stem 함수는 matplotlib 라이브러리에서 제공하는 함수로, 이산 데이터의 분포를 시각화하기 위해 사용됩니다. 특히, 이산적인 값을 갖는 시계열 데이터, 신호 데이터, 확률 분포 등을 표현하는 데 유용합니다. plt.stem 함수는 각 데이터 포인트를 수직선 형태로 그려줌으로써 데이터의 분포를 시각적으로 표현합니다.
아래는 stem함수를 사용하기 적절한 데이터 타입들입니다.
이산 시계열 데이터
시간에 따라 변하는 이산적인 값을 가지는 시계열 데이터를 시각화할 때 plt.stem 함수를 사용할 수 있습니다. 예를 들어, 주식 가격이나 기상 데이터에서 시간별로 측정된 온도, 수익률 등을 표현하는 데 사용될 수 있습니다.
신호 처리
디지털 신호 처리에서 plt.stem 함수는 이산 시간에서의 신호를 표현하는 데 사용됩니다. 예를 들어, 음성 신호 처리나 센서 데이터에서 특정 이벤트의 발생 시간을 표시하는 데 유용합니다.
확률 분포
이산 확률 분포를 시각화할 때 plt.stem 함수를 사용할 수 있습니다. 예를 들어, 이산 확률 변수의 확률 질량 함수를 그래프로 표현할 때 사용됩니다.
스파이크 표현
신경과학에서는 신경세포의 스파이크를 시각화하는 데 plt.stem 함수를 사용할 수 있습니다. 각 스파이크를 수직선 형태로 표현하여 시간적인 특성을 시각화할 수 있습니다.
이외에도 데이터의 분포를 강조하고자 할 때 plt.stem 함수를 사용할 수 있습니다. 예를 들어, 이산 데이터의 특정 값들을 강조하여 시각적으로 나타낼 때 유용합니다.
요약하면, plt.stem 함수는 이산 데이터의 분포와 시간적인 특성을 시각화하는 데 사용되며, 이산 시계열 데이터, 신호 처리, 확률 분포, 스파이크 표현 등 다양한 분야에서 유용하게 적용될 수 있습니다.
3. plt.stem() 사용 설명
stem() 함수의 기본 사용형태
stem([locs,] heads, linefmt=None, markerfmt=None, basefmt=None,
bottom=0, label=None, use_line_collection=False, **kwargs)
아래 인자들에 대한 각 설명을 하였습니다. 기본인자들 중 x값과 y값은 필수 입력값이며, 나머지는 그래프를 꾸며주는 역을 해주는 인자들입니다.
기본 인자들
[locs, ] : 데이터의 x축 값으로, 이산 데이터의 위치를 지정합니다. 리스트 또는 배열 형태로 입력해야 합니다.
head : 데이터의 y축 값으로, 이산 데이터의 높이(값)를 지정합니다. 리스트 또는 배열 형태로 입력해야 합니다.
linefmt : 마커를 연결하는 선의 형식을 지정합니다. 기본값은 None으로 선이 그려지지 않습니다. 예를 들어, 'r-'는 빨간색 실선을 의미합니다.
markerfmt : 마커의 형식을 지정합니다. 기본값은 None으로 마커가 표시되지 않습니다. 예를 들어, 'bo'는 파란색 동그라미 마커를 의미합니다.
basefmt : 기준선의 형식을 지정합니다. 기본값은 None으로 기준선이 그려지지 않습니다. 예를 들어, 'g--'는 녹색 점선을 의미합니다.
추가 인자들
bottom: 데이터의 y축 값 중 최소값을 지정합니다. 기본값은 0입니다.
label: 데이터를 식별하기 위한 레이블을 지정합니다.
use_line_collection: matplotlib 3.3 이상의 버전에서 사용 가능한 인자로, True로 설정하면 선 및 마커를 LineCollection 객체로 그립니다. 기본값은 False입니다.
**kwargs: 추가적인 키워드 인자를 받을 수 있습니다. 예를 들어, color='red'와 같이 사용하여 마커 및 선의 색상을 지정할 수 있습니다.
4. 인자값을 비교할 수 있는 예제 코드
아래는 stem() 함수 내에 있는 인자들의 값을 변경시킬 경우 어떠한 결과가 나타나는지에 대한 예제코드입니다. 잘 확인해 보시고 잘 응용해서 사용하시는데 도움이 됐으면 합니다.
import matplotlib.pyplot as plt
import numpy as np
# 데이터 생성
x = np.linspace(0.5, 2.5, 10)
y = np.random.rand(10)
# subplot 설정
fig, axs = plt.subplots(3, 2, figsize=(10, 12))
# linefmt, markerfmt, basefmt 조합 시각화
axs[0, 0].stem(x, y, linefmt='r-', markerfmt='bo', basefmt='g--')
axs[0, 0].set_title("linefmt='r-', markerfmt='bo', basefmt='g--'")
# linefmt, markerfmt 조합 시각화
axs[0, 1].stem(x, y, linefmt='b-', markerfmt='ro')
axs[0, 1].set_title("linefmt='b-', markerfmt='ro'")
# linefmt, basefmt 조합 시각화
axs[1, 0].stem(x, y, linefmt='g-', basefmt='r--')
axs[1, 0].set_title("linefmt='g-', basefmt='r--'")
# markerfmt, basefmt 조합 시각화
axs[1, 1].stem(x, y, markerfmt='co', basefmt='m--')
axs[1, 1].set_title("markerfmt='co', basefmt='m--'")
# linefmt만 설정한 경우 시각화
axs[2, 0].stem(x, y, linefmt='y-')
axs[2, 0].set_title("linefmt='y-'")
# markerfmt만 설정한 경우 시각화
axs[2, 1].stem(x, y, markerfmt='ks')
axs[2, 1].set_title("markerfmt='ks'")
# 그래프 간 간격 조정
plt.tight_layout()
# 그래프 출력
plt.show()
5. 마치며
오늘은 이산데이터를 가시화하기 위해 사용하는 matplotlib의 stem함수에 대해 정리해 보았습니다. 데이터 분석을 하는 경우 분석 전 또는 분석 후 결과를 확인하기 위해 가시화 방법을 결정해야 합니다. stem 함수를 사용하기 위한 경우에 대해서도 같이 설명을 했으니 참고하시면 좋겠습니다. 또한, 마지막에는 stem 인자의 각 변화에 대한 예제 코드로 그 결과가 어떻게 나오는지도 확인했습니다.
댓글