소개
이 랩에서는 숨겨진 하위 구조와 즉시 명확하지 않은 패턴을 잠재적으로 드러낼 수 있는 방식으로 대량의 시계열 데이터를 효율적으로 시각화하고 시각적으로 매력적인 방식으로 표시하는 방법을 보여줍니다.
VM 팁
VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접근하십시오.
때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한 사항으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.
학습 중 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.
필요한 라이브러리 임포트
이 단계에서는 이 랩에 필요한 라이브러리를 임포트합니다.
import time
import matplotlib.pyplot as plt
import numpy as np
데이터 생성
이 단계에서는 더 많은 수의 랜덤 워크 "노이즈/배경" 시계열 아래에 묻혀 있는 여러 개의 사인파 "신호" 시계열을 생성합니다. 우리는 편향되지 않은 가우시안 랜덤 워크와 사인파 신호를 생성할 것입니다.
## 재현성을 위해 랜덤 상태 고정
np.random.seed(19680801)
## 일부 데이터 생성; 1D 랜덤 워크 + 작은 비율의 사인파
num_series = 1000
num_points = 100
SNR = 0.10 ## 신호 대 잡음비 (Signal to Noise Ratio)
x = np.linspace(0, 4 * np.pi, num_points)
## 편향되지 않은 가우시안 랜덤 워크 생성
Y = np.cumsum(np.random.randn(num_series, num_points), axis=-1)
## 사인파 신호 생성
num_signal = round(SNR * num_series)
phi = (np.pi / 8) * np.random.randn(num_signal, 1) ## 작은 랜덤 오프셋
Y[-num_signal:] = (
np.sqrt(np.arange(num_points)) ## 랜덤 워크 RMS 스케일링 팩터
* (np.sin(x - phi)
+ 0.05 * np.random.randn(num_signal, num_points)) ## 작은 랜덤 노이즈
)
선 그래프로 데이터 시각화
이 단계에서는 생성된 데이터를 선 그래프로 시각화합니다.
## `plot` 과 작은 `alpha` 값을 사용하여 시계열을 플롯합니다.
## 이 보기에서는 겹치는 시계열이 너무 많아서 사인파 동작을 관찰하기가 매우 어렵습니다.
## 또한 너무 많은 개별 아티스트를 생성해야 하므로 실행하는 데 시간이 약간 걸립니다.
tic = time.time()
plt.plot(x, Y.T, color="C0", alpha=0.1)
toc = time.time()
plt.title("alpha 를 사용한 선 그래프")
plt.show()
print(f"{toc-tic:.3f} sec. elapsed")
2D 히스토그램으로 데이터 시각화 - 로그 색상 스케일
이 단계에서는 여러 시계열을 히스토그램으로 변환합니다. 숨겨진 신호가 더 잘 보일 뿐만 아니라 훨씬 더 빠른 절차입니다. (x, y) 점을 로그 색상 스케일로 2D 히스토그램에 플롯합니다.
tic = time.time()
## 각 시계열의 점 사이를 선형 보간합니다.
num_fine = 800
x_fine = np.linspace(x.min(), x.max(), num_fine)
y_fine = np.concatenate([np.interp(x_fine, x, y_row) for y_row in Y])
x_fine = np.broadcast_to(x_fine, (num_series, num_fine)).ravel()
## (x, y) 점을 로그 색상 스케일로 2D 히스토그램에 플롯합니다.
## 노이즈 아래에 어떤 종류의 구조가 있다는 것이 분명합니다.
## vmax 를 조정하여 신호를 더 잘 보이게 할 수 있습니다.
cmap = plt.colormaps["plasma"]
cmap = cmap.with_extremes(bad=cmap(0))
h, xedges, yedges = np.histogram2d(x_fine, y_fine, bins=[400, 100])
pcm = plt.pcolormesh(xedges, yedges, h.T, cmap=cmap,
norm="log", vmax=1.5e2, rasterized=True)
plt.colorbar(pcm, label="## points", pad=0)
plt.title("2D 히스토그램 및 로그 색상 스케일")
plt.show()
toc = time.time()
print(f"{toc-tic:.3f} sec. elapsed")
2D 히스토그램으로 데이터 시각화 - 선형 색상 스케일
이 단계에서는 선형 색상 스케일로 데이터를 시각화합니다.
## 동일한 데이터이지만 선형 색상 스케일 사용
pcm = plt.pcolormesh(xedges, yedges, h.T, cmap=cmap,
vmax=1.5e2, rasterized=True)
plt.colorbar(pcm, label="## points", pad=0)
plt.title("2D 히스토그램 및 선형 색상 스케일")
plt.show()
요약
이 랩에서는 숨겨진 하부 구조와 즉시 명확하지 않은 패턴을 잠재적으로 드러낼 수 있는 방식으로 많은 수의 시계열을 효율적으로 시각화하고 시각적으로 매력적인 방식으로 표시하는 방법을 배웠습니다. 우리는 더 많은 수의 랜덤 워크 "노이즈/배경" 시계열 아래에 묻혀 있는 여러 개의 사인파 "신호" 시계열을 생성했으며, 선형 플롯과 로그 및 선형 색상 스케일을 사용한 2D 히스토그램으로 데이터를 시각화했습니다.