피보나치 수열과 황금비율 파이썬 코딩
피보나치 수열은 자연과 예술, 심지어 금융 시장까지 영향을 미치는 특별한 수학적 패턴입니다. 이번 포스팅에서는 파이썬 코딩을 통해 피보나치수열에 대한 이해의 폭을 넓혀보겠습니다. 목표는 주식이나 코인의 기술적 분석에 피보나치수열을 활용하는 것입니다만, 파이썬 코딩을 통해 일단은 기초부터 다져보겠습니다. 피보나치 수열, 황금비율, 이를 시각화하는 코드까지 차근차근 진행합니다.
글의 순서
피보나치 수열과 황금비율
피보나치수열 파이썬 코딩
황금비율 계산 파이썬 코딩
피보나치수열과 황금비율 시각화
피보나치 수열과 황금비율
피보나치 수열은 1, 1, 2, 3, 5, 8, 13, 21, …과 같은 수열로, 앞의 두 수를 더해 다음 수를 만드는 규칙을 따릅니다. 맨 처음엔 1, 1 이라는 두 개의 숫자로 시작합니다.
이 수열은 단순한 숫자의 나열로 보일 수 있지만, 자연계의 다양한 현상에 숨어 있는 패턴을 나타내기도 합니다. 예를 들어,
▶해바라기 씨앗의 나선
▶소라 껍질의 나선형 구조
▶파인애플의 돌기 배열
뿐만 아니라, 피보나치수열은 황금비율(1.618…)과도 밀접한 연관이 있습니다. 황금비율은 피보나치 수열의 두 인접한 항을 나눈 값이 점점 수렴하는 비율로, 예술과 건축에서 아름다움의 기준으로 자주 등장합니다.
피보나치 수열 파이썬 코딩
먼저, 파이썬을 사용해 피보나치 수열을 생성하는 코드를 작성해 보겠습니다. 실습코드 01은 피보나치수열을 생성하는 간단한 함수를 보여줍니다. 파이썬 자료구조 중 리스트(list)를 이용해서 첫 번째, 두 번째 값인 1과 1을 초기값으로 설정한 후 여기에 피보나치 수열의 요소를 하나씩 추가하는 방식입니다. append() 함수를 활용합니다.
append()는 리스트의 끝에 요소를 추가하므로, 기존 리스트를 직접 수정하는 방식입니다. 실습코드 01에서는 리스트의 요소가 숫자이지만, 이 요소는 리스트, 숫자, 문자열 등 어떤 데이터 형태이든 가능합니다.
|
def generate_fibonacci(n): """피보나치 수열 생성 함수""" fib_sequence = [1, 1] # 초기값 for i in range(2, n): fib_sequence.append(fib_sequence[i-1] + fib_sequence[i-2]) return fib_sequence # 피보나치수열 생성 n = 10 # 수열 길이 fib_sequence = generate_fibonacci(n) print("Fibonacci Sequence:", fib_sequence) |
|
Fibonacci Sequence: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55] |
황금비율 계산 파이썬 코딩
피보나치 수열에서 두 인접한 수를 나누면 황금비율에 점점 가까워집니다. 이를 실습코드 02에 나타내었습니다. 여기서도 실습코드 01에서와 마찬가지로 append 함수를 활용합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
def generate_fibonacci(n): """피보나치 수열 생성 함수""" fib_sequence = [1, 1] # 초기값 for i in range(2, n): fib_sequence.append(fib_sequence[i-1] + fib_sequence[i-2]) return fib_sequence def calculate_golden_ratios(fib_sequence): """황금비율 계산 함수""" golden_ratios = [] for i in range(1, len(fib_sequence)): golden_ratios.append(fib_sequence[i] / fib_sequence[i-1]) return golden_ratios # 피보나치수열 생성 n = 10 # 수열 길이 fib_sequence = generate_fibonacci(n) # 황금비율 계산 golden_ratios = calculate_golden_ratios(fib_sequence) print("Golden Ratios:", golden_ratios) |
|
Golden Ratios: [1.0, 2.0, 1.5, 1.6666666666666667, 1.6, 1.625, 1.6153846153846154, 1.619047619047619, 1.6176470588235294] |
피보나치 수열과 황금비율 시각화
실습코드 01, 02에서 총 10개의 element코딩 결과를 숫자로 확인해 보았습니다. 그런데, 단순히 숫자로 보는 것보다는 시각적으로 확인하는 것이 훨씬 이해가 빠릅니다. 아래 코드는 피보나치수열과 황금비율의 변화를 그래프로 시각화 합니다. 피보나치수열을 만드는 부분, 황금비율을 계산하는 부분은 실습코드 01, 02와 동일합니다. 여기서는 그래프 파일을 저장하기 위해 그림파일의 이름과 경로를 설정하는 방법, 한 번에 2개의 그래프를 그리는 방법, 두 그래프의 x 축을 동일하게 만드는 방법을 유심히 봐 주시기 바랍니다..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
import matplotlib.pyplot as plt from matplotlib.ticker import MaxNLocator file_name_only = 'golden_ratio.png' file_path = 'E:/_투잡맨/커피마시며_tech/파이썬/code/Fibo/' file_name = file_path + file_name_only # 피보나치수열 생성 함수 def generate_fibonacci(n): fib_sequence = [1, 1] # 초기값 for i in range(2, n): fib_sequence.append(fib_sequence[i-1] + fib_sequence[i-2]) return fib_sequence # 황금비율 계산 함수 def calculate_golden_ratios(fib_sequence): golden_ratios = [] for i in range(1, len(fib_sequence)): golden_ratios.append(fib_sequence[i] / fib_sequence[i-1]) return golden_ratios # 피보나치수열 생성 및 황금비율 계산 n = 10 # 수열의 길이 fib_sequence = generate_fibonacci(n) golden_ratios = calculate_golden_ratios(fib_sequence) # 피보나치수열 출력 print("Fibonacci Sequence:", fib_sequence) print("Golden Ratios:", golden_ratios) # 시각화 fig, axs = plt.subplots(2, 1, figsize=(12, 10), sharex=True) # 피보나치수열 시각화 axs[0].plot(range(1, n+1), fib_sequence, marker='o', label="Fibonacci Numbers", color='blue') axs[0].set_title("Fibonacci Sequence", fontsize=16) axs[0].set_ylabel("Fibonacci Number", fontsize=14) axs[0].grid(True) axs[0].legend(loc='best') axs[0].xaxis.set_major_locator(MaxNLocator(integer=True)) # x축 간격을 1로 설정 # 황금비율 시각화 axs[1].plot(range(2, n+1), golden_ratios, marker='o', label="Golden Ratio", color='orange') axs[1].axhline(1.618, color='red', linestyle='--', label="Golden Ratio (1.618)") axs[1].set_title("Golden Ratio Convergence", fontsize=16) axs[1].set_xlabel("Index", fontsize=14) axs[1].set_ylabel("Ratio", fontsize=14) axs[1].grid(True) axs[1].legend(loc='best') axs[1].xaxis.set_major_locator(MaxNLocator(integer=True)) # x축 간격을 1로 설정 # 간격 조정 및 저장 plt.subplots_adjust(hspace=0.1) plt.savefig(file_name, dpi=200) plt.show() |
마치며 …
피보나치 수열은 단순한 수학적 패턴을 넘어 자연, 예술, 그리고 금융 시장에서 그 존재감을 드러내는 특별한 법칙입니다. 이번 포스팅에서는 피보나치수열과 황금비율의 이론적 이해에서 출발해, 이를 파이썬 코딩으로 구현하고 시각화해 보았습니다.
피보나치수열과 황금비율은 단순히 흥미로운 패턴이 아니라, 기술적 분석을 포함한 다양한 분야에서 강력한 도구로 활용됩니다. 앞으로 주식, 코인 등 금융 시장의 기술적 분석에서도 이 특별한 패턴이 어떻게 적용될 수 있는지 실습해 보도록 하겠습니다.
함께 참고하면 좋은 글
▶ 피보나치 수열과 황금비율
▶ 파이썬 프로그래밍 시작 (8) 자료구조(Data Structure) : 리스트
▶ 파이썬 프로그래밍 시작 (11) 연습문제 : 자료구조
▶ 사용빈도 높은 파이썬 함수 : sorted, list 함수
▶ 파이썬 주식 데이터 분석 : FDR 패키지 활용
참고자료
Ted English Subtitles, Arthur Benjamin: The magic of Fibonacci number [Eng Sub]