Python

이동평균에 대하여 (feat. Python)

이전에 평균에 대한 글을 쓴 적이 있다. 그 다음 편으로 예정 되어 있던 이동 평균에 대한 알아보자.

이동평균

통계에서 이동평균은 전체 데이터 집합의 여러 하위 집합에 대한 일련의 평균을 만들어 데이터 요소를 분석하는데 사용되는 계산이다. 금융에서 이동평균은 분석에 일반적으로 사용되는 주식 차트 이다.

  • 이동평균은 기술분석에서 일반적으로 사용되는 주식 지표이다.
  • 주식의 이동 평균을 계산하는 이유는 지속적으로 업데이트되는 평균가적을 생성하여 지정된 기간동안의 가격 데이터를 평활화 하기 위해서이다.
  • 단순 이동평균은 과거의 특정 일수 동안 주저진 가격 세트의 산술 평균이다. 예를들어 15, 30, 100일 또는 200일이 될 수 있다.
  • 결과값이 지연되어 나타나는 경향이 있다.
  • 이동평균의 기간이 길어질 수록 지연이 커진다.
  • 최근값에 더 많은 가중치를 두려면 가중이동 평균이나 지수이동평균을 사용해야한다.

지난번 알아 보았던 평균과 평균 필터는 전체 값중 중간 값을 알수 있기 때문에 유용하지만 전체 샘플의 수가 많으면 최근 값이 평균값에 미치는 영향이 작아 지기때문에 누적 데이터가 많아 질수록 현재의 변화 상태를 반영하지 문하는 문제가 있다.

이 포스트에서 사용된 Raw 데이터는 Bitcoin data at 1-min intervals from select exchanges, Jan 2012 to March 2021에서 다운 받은 데이터 중 최근 365일 데이터를 사용하였다.

Python - Set 과 List 그리고 Tuple

Set(집합) 이란?

Python 내장 데이터 타입이다.

A set object is an unordered collection of distinct hashable objects.

해시 가능한 반복가능 하고 변경 가능하며 중복요소가 없는 데이터 유형의 정렬되지 않은(순서가 지정되지 않은) 컬렉션이다.

일반적으로 포함테스트(a in sets), 중복제거, 교집합, 합집합, 차집합, 대칭차와 같은 수학적 계산에 사용된다.

List, Tuple과의 차이

List, Tuple 은 순서가 있는(ordered) 컬렉션이지만 Set은 순서가 없은 컬렉션이다.

ListTuple의 차이는 가변성에 있다. List은 초기화 이후에 수정 수 있으나 Tuple은 초기화 이후에 수정할 수 없다.

특징

임이의 값이 컬랙션에 포함되어 있는지 테스트 하는 경우 리스트에 비해 월등히 빠른 성능을 보여 준다.

Hash로 관리 되기 때문이다.

Shuffle Algorithm - Fisher-Yates

대표적인 Shuffle(썩기) 알고리즘인 Fisher-Yates 알고리즘에 대해서 알아보자.

Python의 random 모듈에 구현되어 있기 때문에 굳이 별도의 함수로 구현할 필요없아 가져다 쓰기만 하면된다.

from random import shuffle

a = [x for x in range(100)]
b = shuffle(a)
print(b)

CPython에 구현된 shuffle() 함수가 현대적인 Fisher-Yates 알고리즘의 구현이다.