{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 12wk-2: 클래스공부 3단계 – 문제연습\n", "\n", "최규빈 \n", "2023-05-24\n", "\n", "\n", "\n", "# 강의영상\n", "\n", "> youtube:\n", "> \n", "\n", "# imports" ], "id": "7ae36e4c-2452-4516-ab49-f53d378ee8eb" }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "from IPython.core.display import HTML" ], "id": "eca9048c-beb0-40cf-8cdd-026f76aed90f" }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 클래스공부 3단계: 문제연습\n", "\n", "## 암기사항\n", "\n", "***외우세요*** (논리적으로 생각하지 말고)\n", "\n", "`#1` 클래스의 선언: 클래스의 선언은 아래와 같이 하며 클래스의 이름은\n", "대문자로 한다.\n", "\n", "``` python\n", "# 예시1: 좋은사례\n", "class JungKKuckMa:\n", " pass \n", "```\n", "\n", "``` python\n", "# 예시2: 나쁜사례 -- 클래스 이름은 대문자로 시작해야해\n", "class jungkkuckma:\n", " pass \n", "```\n", "\n", "> 딴지: 1. 사실 저거 말고도 선언하는 방법 있는데.. 2. 대문자가 아니어도\n", "> 에러는 안나는데..\n", "\n", "`#2` 클래스의 내용: 클래스의 내용은 메소드만을 정의하는데에만 사용한다.\n", "\n", "``` python\n", "# 예시1: 클래스의 내용을 메소드로만 작성한예시 \n", "class JungKKuckMa:\n", " def method1(self): \n", " blabla\n", " def method2(self): \n", " blabla\n", " def method3(self): \n", " blabla\n", " def method4(self): \n", " blabla\n", " def method5(self): \n", " blabla \n", "```\n", "\n", "``` python\n", "# 예시2: 나쁜사례\n", "class JungKKuckMa:\n", " a=1 \n", " b=1 \n", "```\n", "\n", "> 딴지: 꼭 메소드만 클래스의 내용으로 쓰라는 법은 없음\n", "\n", "`#3` 메소드의 첫번째 입력은 항상 self 로 사용한다.\n", "\n", "> 딴지: 이것도 꼭 그런건 아님\n", "\n", "`#4` `__init__` 메소드는 “클래스 $\\to$ 인스턴스” 시점에 자동으로\n", "실행되는 특수한 메소드이다.\n", "\n", "## 문제풀이\n", "\n", "***각 예제의 조건에 맞는 클래스를 구현하라***\n", "\n", "`-` **예제1** – self는 항상 써야 해\n", "\n", "아래의 조건에 맞는 클래스를 구현하라.\n", "\n", "1. 클래스에는 hello()라는 메소드가 정의되어 있으며, hello()의 기능은\n", " “안녕하세요”를 출력하는 것이다.\n", "\n", "(풀이)" ], "id": "6c4ac90f-9b2f-4ff7-a7cc-06972eaf669c" }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "class Klass: \n", " def hello(self):\n", " print(\"안녕하세요\")" ], "id": "1d1d84b3-ce1c-452f-9db9-a47d42fb0c5d" }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "ins = Klass()" ], "id": "3a0727c6-1bb4-4cc0-b953-50d5b908d1e3" }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "안녕하세요" ] } ], "source": [ "ins.hello()" ], "id": "dc7688af-2e9f-4364-a099-9988e758e183" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` **예제2**– `__init__`의 사용방법\n", "\n", "아래의 조건에 맞는 클래스를 구현하라.\n", "\n", "1. “클래스 $\\to$ 인스턴스”의 과정에서 변수 a가 True 로 초기설정된다.\n", "2. 클래스에는 show()라는 메소드가 정의되어 있으며, show()의 기능은 a의\n", " 값을 print 하는 기능을 한다.\n", "\n", "(풀이)" ], "id": "9be7549b-2878-47e5-aeec-1928f44ea11b" }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "class Klass: \n", " def __init__(self):\n", " self.a = True\n", " def show(self):\n", " print(self.a)" ], "id": "0181e390-15c9-4986-8b5e-91679f71c7c5" }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "ins = Klass()" ], "id": "a62a1285-b2f9-44ed-93e2-3a14f3cc4bdd" }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "True" ] } ], "source": [ "ins.show()" ], "id": "17b7ca86-f705-48ae-bbb4-546375ca6809" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` **예제3**– method의 정의 및 사용\n", "\n", "아래의 조건에 맞는 클래스를 구현하라.\n", "\n", "1. “클래스 $\\to$ 인스턴스”의 과정에서 변수 a가 True 로 초기설정된다.\n", "2. 클래스에는 toggle() 이라는 메소드가 정의되어 있다. 이 기능은 변수\n", " a의 값이 True 이면 False 로, False 이면 True 로 바꾸는 역할을 한다.\n", "3. 클래스에는 show()라는 메소드가 정의되어 있다. 이 기능은 a의 값을\n", " print 하는 기능을 한다.\n", "\n", "(풀이)" ], "id": "5a24818d-f923-4f3e-8246-db64a8187d1c" }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "class Klass: \n", " def __init__(self):\n", " self.a = True\n", " def toggle(self):\n", " self.a = not self.a\n", " def show(self):\n", " print(self.a)" ], "id": "774f52c5-de61-4f35-a771-394405a57b42" }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "ins = Klass()" ], "id": "b83176b4-21f1-4ee9-84cc-1916594808d3" }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "ins.a" ], "id": "7c7e1e31-ec97-427a-bd86-87f68ce80035" }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "ins.toggle()" ], "id": "621e78ea-9194-4fe6-8e93-18391f6d25e5" }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "False" ] } ], "source": [ "ins.show()" ], "id": "891475ef-32eb-475f-84c9-cffdb3eb30f4" }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "False" ] } ], "source": [ "ins.toggle()\n", "ins.toggle()\n", "ins.show()" ], "id": "03f274f7-32c2-4b96-b977-558514b8c68d" }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "True" ] } ], "source": [ "ins.toggle()\n", "ins.toggle()\n", "ins.toggle()\n", "ins.show()" ], "id": "c40e2108-4152-4c35-8520-d80f4f26c3cd" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` **예제4** – method의 정의 및 사용\n", "\n", "아래의 조건에 맞는 클래스를 구현하라.\n", "\n", "1. “클래스 $\\to$ 인스턴스”의 과정에서 변수 a가 0으로 초기설정된다.\n", "2. 클래스에는 up()라는 메소드가 정의되어 있다. up()의 기능은 a의 값을\n", " 1증가시키는 기능을 한다.\n", "3. 클래스에는 show()라는 메소드가 정의되어 있다. show()의 기능은 a의\n", " 값을 print 하는 가능을 한다.\n", "\n", "(풀이)" ], "id": "e0dbf89f-991d-41bd-8161-1900b62ab1a0" }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "class Klass:\n", " def __init__(self):\n", " self.a = 0 \n", " def up(self):\n", " self.a = self.a + 1\n", " def show(self):\n", " print(self.a) " ], "id": "544ad45f-7d7f-4b48-aaf5-497481054c0f" }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "ins = Klass() " ], "id": "ce530d07-4542-46f5-abb5-7575285614ba" }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "0" ] } ], "source": [ "ins.show()" ], "id": "c6b427f7-9cc6-49d9-86aa-cb17349d0a5e" }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "2" ] } ], "source": [ "ins.up()\n", "ins.up()\n", "ins.show()" ], "id": "b0229906-df35-43d8-b172-fca4137b6cdf" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` **예제5** – 외부입력을 사용하는 `__init__`\n", "\n", "아래의 조건에 맞는 클래스를 구현하라.\n", "\n", "1. “클래스 $\\to$ 인스턴스”의 과정에서 변수 a의 값이 사용자가 입력한\n", " 값으로 초기설정된다.\n", "2. 클래스에는 show()라는 메소드가 정의되어 있다. show()의 기능은 a의\n", " 값을 print 하는 가능을 한다.\n", "\n", "(풀이)" ], "id": "cfb880cc-33ae-4a30-985f-1f2069591c44" }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "class Klass:\n", " def __init__(self,value):\n", " self.a = value\n", " def show(self):\n", " print(self.a) " ], "id": "3593fb28-d890-4582-99d7-b825886eb2e9" }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "ins = Klass(397)" ], "id": "21a3b588-f04c-4d31-a2ef-458029a6a59c" }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "397" ] } ], "source": [ "ins.show()" ], "id": "6170bdfe-c1cb-4961-8a0d-c1c771c0a7a2" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` **예제6** – 외부입력을 사용하는 method\n", "\n", "아래의 조건에 맞는 클래스를 구현하라.\n", "\n", "1. “클래스 $\\to$ 인스턴스”의 과정에서 변수 a가 0으로 초기설정된다.\n", "2. 클래스에는 up()라는 메소드가 정의되어 있다. up()의 기능은 a의 값을\n", " 1증가시키는 기능을 한다.\n", "3. 클래스에는 jump()라는 메소드가 정의되어 있다. jump()는 jump_size 를\n", " 입력으로 받으며 a의 값을 jump_size 만큼 증가시키는 기능을 한다.\n", "4. 클래스에는 show()라는 메소드가 정의되어 있다. show()의 기능은 a의\n", " 값을 print 하는 기능을 한다.\n", "\n", "(풀이)" ], "id": "3d0c3365-997b-477b-89bd-9d866a32b8b3" }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "class Klass:\n", " def __init__(self):\n", " self.a = 0\n", " def up(self):\n", " self.a = self.a + 1 \n", " def jump(self,jump_size):\n", " self.a = self.a + jump_size \n", " def show(self):\n", " print('a={}'.format(self.a))" ], "id": "4527d941-d930-473c-ba9a-8a06fa04c268" }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "ins = Klass()" ], "id": "4110b3bd-8f4f-4d56-b3f4-8730cd852ba9" }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "a=0" ] } ], "source": [ "ins.show()" ], "id": "57e6b007-2186-4bd8-ab6a-ba84a795ea68" }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "a=1" ] } ], "source": [ "ins.up()\n", "ins.show()" ], "id": "d3c2862a-dfa6-48b1-a8b9-8a5631561e49" }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "a=102" ] } ], "source": [ "ins.up()\n", "ins.jump(100)\n", "ins.show()" ], "id": "386b1946-e4d7-4e0e-bca5-7d1c451e5653" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` **예제7** – 메소드에서 메소드 사용하기\n", "\n", "아래의 조건에 맞는 클래스를 구현하라.\n", "\n", "1. “클래스 $\\to$ 인스턴스”의 과정에서 변수 a가 0으로 초기설정된다.\n", "2. 클래스에는 up()라는 메소드가 정의되어 있다. up()의 기능은 a의 값을\n", " 1증가시키는 기능을 한다.\n", "3. 클래스에는 jump()라는 메소드가 정의되어 있다. jump()는 jump_size 를\n", " 입력으로 받으며 a의 값을 jump_size 만큼 증가시키는 기능을 한다.\n", "4. 클래스에는 reset()이라는 메소드가 정의되어 있다. reset()는 a의 값을\n", " 0으로 초기화하는 역할을 한다.\n", "5. 클래스에는 show()라는 메소드가 정의되어 있다. show()의 기능은 a의\n", " 값을 print 하는 기능을 한다." ], "id": "21bb8018-205c-4052-8f6b-389a0c8a289f" }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "class Klass:\n", " def __init__(self):\n", " self.a = 0\n", " def up(self):\n", " self.a = self.a + 1 \n", " def jump(self,jump_size):\n", " self.a = self.a + jump_size \n", " def show(self):\n", " print('a={}'.format(self.a))\n", " def reset(self):\n", " self.__init__()" ], "id": "91678750-ca0f-4442-99ad-8bd029ca48ed" }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "ins = Klass()" ], "id": "479317cf-0edb-4b59-aee3-f605a405a4dd" }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "a=0" ] } ], "source": [ "ins.show()" ], "id": "1794e2d5-714a-4165-bb8a-9a766614cf42" }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [], "source": [ "ins.up()\n", "ins.jump(3)\n", "ins.up()\n", "ins.up()\n", "ins.jump(5)" ], "id": "0b55b5ed-1fc8-427c-8082-7051d782034f" }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "a=11" ] } ], "source": [ "ins.show()" ], "id": "8dfe0cfd-fdf8-4380-81cf-638886f461ba" }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "a=0" ] } ], "source": [ "ins.reset()\n", "ins.show()" ], "id": "c896f624-1576-4bea-98d4-291b136c8bc2" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` **예제8:** – 이미지출력\n", "\n", "아래의 코드를 관찰" ], "id": "1d069977-e3ae-40e3-8faf-88f38dbd7850" }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [], "source": [ "url = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/burgerking.png?raw=true'\n", "html_str = ''.format(url=url)\n", "display(HTML(html_str))" ], "id": "b38c7009-8ee2-4e0c-bc69-b894f5972c63" }, { "cell_type": "markdown", "metadata": {}, "source": [ "아래의 조건에 맞는 클래스를 구현하라.\n", "\n", "1. “클래스 $\\to$ 인스턴스”의 과정에서 변수 url이 위에서 제시된 값으로\n", " 초기화된다.\n", "2. 클래스에는 show()라는 함수가 있어서 url에 해당하는 이미지를\n", " 출력해주는 기능을 가진다.\n", "\n", "(풀이)" ], "id": "51066420-78b3-405c-98bd-2a866f186a50" }, { "cell_type": "code", "execution_count": 116, "metadata": {}, "outputs": [], "source": [ "class Klass:\n", " def __init__(self):\n", " self.url = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/burgerking.png?raw=true'\n", " def show(self):\n", " html_str = ''.format(url=self.url)\n", " display(HTML(html_str))" ], "id": "e05b9046-3dc7-443c-bae3-0269be239864" }, { "cell_type": "code", "execution_count": 117, "metadata": {}, "outputs": [], "source": [ "ins = Klass()" ], "id": "edbeedf9-b7da-457a-a8ea-e3aabc5357df" }, { "cell_type": "code", "execution_count": 118, "metadata": {}, "outputs": [], "source": [ "ins.show()" ], "id": "fb1604b4-96eb-454a-a785-ad6b35286ed7" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` **예제9–** 이미지 출력 + 횟수 기록\n", "\n", "1. “클래스 $\\to$ 인스턴스”의 과정에서 변수 url이 위에서 제시된 값으로\n", " 초기화된다.\n", "2. 클래스에는 show()라는 함수가 있어서 (1) url에 해당하는 이미지를\n", " 출력하고 (2) “당신은 이 그림을 $n$번 보았습니다” 를 출력하는 기능을\n", " 한다. 여기에서 $n$은 그림을 본 횟수" ], "id": "fb342077-09c0-408d-bea4-d285daae528d" }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [], "source": [ "class Klass:\n", " def __init__(self):\n", " self.n = 0\n", " self.url = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/burgerking.png?raw=true'\n", " def show(self):\n", " self.n = self.n + 1 \n", " html_str = ''.format(url=self.url)\n", " display(HTML(html_str))\n", " print(\"당신은 이 그림을 {}번 보았습니다.\".format(self.n))" ], "id": "145c6b1e-df79-4bc0-9053-93af671f4aa6" }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [], "source": [ "ins = Klass()" ], "id": "54890adc-3907-44f9-8a8c-fcd87cda7376" }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "당신은 이 그림을 1번 보았습니다." ] } ], "source": [ "ins.show()" ], "id": "9c8ae784-0a7c-47ef-9fff-99b84975a97f" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`-` **예제10** – 여러 인스턴스 동시관리\n", "\n", "예제9에서 만든 클래스를 이용하여 아래의 url에 해당하는 이미지를\n", "출력하라.\n", "\n", "- https://github.com/guebin/PP2023/blob/main/posts/03_Class/JungGGuckMa.jpg?raw=true\n", "\n", ".show()를 이용해 두 이미지를 번갈아 가며 관찰하고 횟수가 올바르게\n", "카운트되는지 확인하라." ], "id": "193c3159-2753-47f8-972f-2d6e82ed955a" }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [], "source": [ "ins1 = Klass()\n", "ins2 = Klass()" ], "id": "343b20cc-a28f-4f56-81b6-907851c2baa6" }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [], "source": [ "ins2.url = 'https://github.com/guebin/PP2023/blob/main/posts/03_Class/JungGGuckMa.jpg?raw=true'" ], "id": "22f92b31-7b3f-4a7d-994b-633484f11feb" }, { "cell_type": "code", "execution_count": 111, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "당신은 이 그림을 1번 보았습니다." ] } ], "source": [ "ins1.show()" ], "id": "f297152c-61b6-4e5b-b53a-73232b5dc4c7" }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "당신은 이 그림을 1번 보았습니다." ] } ], "source": [ "ins2.show()" ], "id": "1820caa4-7c4c-4f4e-8154-2fda7ac87248" }, { "cell_type": "code", "execution_count": 114, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "당신은 이 그림을 3번 보았습니다." ] } ], "source": [ "ins2.show()" ], "id": "3af47881-f97a-4a22-8613-06a901608f0b" }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "당신은 이 그림을 2번 보았습니다." ] } ], "source": [ "ins1.show()" ], "id": "97fe768e-a54f-4d4b-8ec3-4aa5076091d2" }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 숙제" ], "id": "570f42e8-922a-44a7-a058-4699d4a5cb59" }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import yfinance as yf" ], "id": "8f3d283a-4cae-426b-b552-8e50812b04e8" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`1`. Stock 이라는 이름의 클래스를 만들고 아래의 기능을 넣어라.\n", "\n", "**(1) crawling 메소드**: crawling 메소드는 start_date, end_date, code 를\n", "입력으로 받는 함수이며, code 에 대응하는 주식의 주가를 크롤링하는 기능을\n", "가진다. 크롤링된 주식의 가격은 numpy array 형태로 저장되어 있다.\n", "\n", "**hint**: 아래의 코드를 관찰" ], "id": "17b961d1-1d4d-4716-a600-8af0871e38b9" }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[*********************100%***********************] 1 of 1 completed" ] } ], "source": [ "start_date = \"2023-01-01\"\n", "end_date = \"2023-05-02\"\n", "code = \"005930.KS\"\n", "y = yf.download(code, start=start_date, end=end_date)['Adj Close'].to_numpy()" ], "id": "fc45fb24-57d6-45d9-8ffc-0f4e09fddd73" }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(2) smoothing 메소드**: smoothing는 크롤링된 주가\n", "${\\boldsymbol y}=(y_1,\\dots,y_n)$를 아래의 수식을 통하여 $n$회 변환하는\n", "기능을 한다.\n", "\n", "- $\\tilde{y}_1= \\frac{1}{4}(3y_1 + y_2)$\n", "- $\\tilde{y}_i= \\frac{1}{4}(y_{i-1}+2y_i+y_{i+1})$, for\n", " $i=2,3,\\dots,n-1$\n", "- $\\tilde{y}_n= \\frac{1}{4}(y_{n-1}+3y_{n})$\n", "\n", "따라서 smoothing 메소드는 횟수 $n$을 입력으로 받으며 만약에 스무딩횟수\n", "$n=50$ 라면 위의 변환을 50번 수행한다는 의미이다.\n", "\n", "**hint**: 아래의 코드는 스무딩횟수가 50일 경우 계산결과를 나타낸다." ], "id": "9f63da32-102d-4473-b5e4-2a6cdc76fdcc" }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "T = len(y)\n", "M = (np.eye(T) + np.array([abs(i-j)<2 for i in range(T) for j in range(T)]).reshape(T,T))/4\n", "M[0,0] = 3/4; M[-1,-1]= 3/4 \n", "np.linalg.matrix_power(M,50)@y" ], "id": "a30bf3c7-0db0-49c0-b403-255ad9a61fbd" }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(3) plot 메소드**: plot 메소드는 크롤링된 주가와 스무딩결과를 plot\n", "하는 역할을 한다.\n", "\n", "**hint**: 아래의 코드를 관찰" ], "id": "df6197e9-0846-488c-853e-870d0d7fdeaf" }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAD4CAYAAAAO9oqkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAAsT\nAAALEwEAmpwYAABN2UlEQVR4nO3dd3xV9f348dfn3uw9CSGDsPcOQ0EcKOJELSpOtFZbV11t1X5r\nW221jv5qbetCxT1wVhwFBZzsDQYCJCEhA7L3urn3fn5/nJO9IcnNeD8fjzzI/Zxzbt43udz3+Wyl\ntUYIIcTAZnF1AEIIIVxPkoEQQghJBkIIISQZCCGEQJKBEEIIwM3VAZyosLAwHRcX5+owhBCiT9mx\nY0ee1jq8aXmfTQZxcXFs377d1WEIIUSfopRKa6lcmomEEEJIMhBCCCHJQAghBH24z6AlNTU1ZGRk\nUFVV5epQeh0vLy+io6Nxd3d3dShCiF6oXyWDjIwM/P39iYuLQynl6nB6Da01+fn5ZGRkMGzYMFeH\nI4TohfpVM1FVVRWhoaGSCJpQShEaGio1JiFEq/pVMgAkEbRCfi9CiLZ0KBkopYKUUh8qpRKVUgeU\nUqeY5XeaZQlKqScbnP+gUipJKXVQKXVug/JFZlmSUuqBBuXDlFJbzPKVSimPrnyRQgjRlhqHk1V7\nsvgps9jVobhMR/sMngFWa62XmB/UPkqpM4HFwBStdbVSahCAUmo8sBSYAAwB1iqlRpvP8yxwDpAB\nbFNKrdJa7weeAJ7WWr+nlHoBuAl4voteoxBCtKiqxsHKbeks/z6FzKJKZgwN5qNbT3V1WC7RbjJQ\nSgUC84EbALTWNsCmlLoVeFxrXW2W55iXLAbeM8uPKKWSgFnmsSStdYr5vO8Bi5VSB4CzgKvNc14H\n/owkAyFENymtquHNzWms+PEIeWU24ocGMzzcl22pBdQ4nLhb+10Lers68oqHAbnAq0qpXUqpl5VS\nvsBo4DSzeec7pdRM8/woIL3B9RlmWWvloUCR1trepLwZpdQtSqntSqntubm5HXyJPeunn37i1FPr\n7yx27tzJggULXBiREKJWQbmN//fVQU59fD1Prj7IuMgAVt4yhw9vPZUlM6KpqnFyKLvU1WG6REea\nidyA6cCdWustSqlngAfM8hBgDjATeF8pNbzbIgW01suB5QDx8fFt7tf58GcJ7M8q6dKfP35IAH+6\naELb54wfT0pKCg6HA6vVyr333ss//vGPLo1DCNF5X+w9xm8+2ENljYNFEwZz+5kjmRQdWHd8akwQ\nAHvSi5kwJLCVZ+m/OpIMMoAMrfUW8/GHGMkgA/hYG5sob1VKOYEwIBOIaXB9tFlGK+X5QJBSys2s\nHTQ8v8+xWCxMmDCBhIQEDh8+zNChQ5k+fbqrwxJiQPtwRwa/+3AP02KDefyySYyK8G92TmyID0E+\n7uzNKOLq2bEuiNK12k0GWuvjSql0pdQYrfVBYAGwH0gGzgS+MTuIPYA8YBXwjlLqHxgdyKOArYAC\nRimlhmF82C8FrtZaa6XUN8AS4D1gGfDpyb6w9u7gu9OcOXPYsGEDzz33HKtXr3ZZHEIIeHNTKg99\nmsC8kWEsv34GPh4tf+wppZgcHcTu9KKeDbCX6GgvyZ3A20qpvcBU4DFgBTBcKfUT5oe4NiQA72Mk\njNXA7Vprh3nXfwewBjgAvG+eC3A/cK/Z2RwKvNIlr85F5syZwx/+8AcuvfRSoqJa7P4QQvSA5d8n\n89CnCZw9bhAvL4tvNRHUmhodyOGcMips9jbP6wytNdtSCzAaUXqvDg0t1VrvBuJbOHRtK+c/Cjza\nQvmXwJctlKdQP+Kozxs7diyenp7cf//9rg5FiAHraH4Fj32ZyPmTBvPM0mkdGiE0OToIh1OTkFXC\nzLiQLonj3a3p/P6Tffz7qmlcNGVIlzxndxh446d6wDPPPMPf/vY3fH19XR2KEAPW2gPZADywaFyH\nh4pOjjE6jve001SUlFPGqxuOUFxR0+Z5VTUO/rXuMABvbErtUAyuIsmgCyUnJzN27FgqKytZtmyZ\nq8MRYkBbl5jNqEF+xIb6dPiaQf5eDAn0Yk9G6zORy6vt/OL1bTz82X7mPrGex/+XSG5pdYvnvrU5\njeMlVZwzPoJtqYUcONa1Ixy7kiSDLjRixAgSExN55ZU+3eUhRJ9XWlXDlpQCzho3qNPXTokJarNm\n8OiXB0grqODxyyZxxphwXvw+mXlPrOeZtYcb9QuUVtXw7DdJnDYqjKeWTMbTzcIbm1rccbLDPt+b\nxbIVWymqsJ3U87REkoEQot/5/lAedqfm7HERnb52SkwQRwsqKCxv/oG77kA272w5yi2nDWfprFj+\nc/V01t17OmePj+DptYf406oEnE4jIaz4MZXCihp+s3AMQT4eLJ46hP/uyqS4su2mpbb8eDiPXUcL\nCfDq+n1JJBkIIfqddQeyCfJxZ5o5kawzJpsT0fZkFDUqzyur5v6P9jIuMoB7F46uKx8e7sd/rprG\nzacN441Nafzuo73klVXz0g8pnDshgilmDNefEkdljYOPdmSc6Mtie1oh8XEhWCxdvwqxJAMhRL/i\ncGq+OZjDmWMG4XYCawxNigpEKWMmci2tNQ98tI+SSjv/vHIqnm7WRtcopfj9+eO4++xRfLgjg/Of\n+YFym537Fo6pO2diVCDTYoN4c3NaXe2hMwrKbSTllDFjaHCnr+0ISQZCiH5l19FCCitqOGts5/sL\nAPy93BkZ7sdes2agtebJNQdZeyCb3y0aw5jBzWcvg5EQ7j57NL8/fyw5pdVcOjWK0U1mOl9/ylCO\n5JXzY1Jep+PakVYI0GVDXpuSZCCE6FfWJebgZlGcPib8hJ9jcnQQezKKcDo1D3+2n+e/Tebq2bH8\nfG7728beMn8Eq+6Yy6OXTmp27PxJkYT6epxQR/L2tAI8rJa6Zqyu1q/2QBZCiHUHspk1LOSkOlmn\nxgTy0c4MfvXWDr7an81jk3K4KmgPavWbUF0CVcXgGQCXvWhcsOttoyx0JISOYHJkLFitzZ7X083K\nz2ZE8/IPKVTVOPByb35Oa7anFjIxKqBT13SGJAMhRL+RXlDBoewyroiPaf/k1lSXcXrlep52/5B7\n9t/OrxeM4qrij1DffQxeAeAZaPwbOrL+mj3vQuoP9Y8tbjB6ESx923icnwxBsWB1Z+xgf5waMosq\nGRHu16GQqmoc7Mso5sa5cSf+utohyUAI0W+sM2cdn8iQUo78ADtfh8QviK2pwMsjgofPimXZmaOh\n7Am45Hlw82z52mWfQUUB5CeZX4fBK8g4pjWsOBeqyyBqOqcETOZsiw/HsoYzInxch0Lbl1mMzeHs\nts5jkGTgEt9++y0PPfQQEyZMYOnSpcycOZPbbrsNDw8PzjjjDK655hpXhyhEn7QuMYfh4b7EhXVy\nKZgDn8HKa8E7GKYshclXMihmNsuUOYTTr53+B6XAN9T4ip3d+JjWcN6TkLEN0rcwOOElXvaws39n\nNkx5Fuw22P4KDJ4EERPBO6jZ029PNTqPuzMZSAdyN3jxxRdRSvHtt9/WlT377LMopfj6669RSuHn\n50dVVRXR0dF8/PHHLFmyhJdeeolVq1Y1eq7s7GzuuusuJk+ezPTp0/nFL35Beno6QojmUnLLmRod\n1LGT8w7D4bXG96MXwYX/hHsT4cKnIXaO8QHfFSwWmHgZLPob3LwefX86V9v/zPf+FxjHcxJg9QPw\n2gXwxFD45yR462eQttE4XlFAYeIPnBFSSCgl4Oi6FVUbkppBN9i3bx9TpkwhMTGRM844g4qKCl5+\n+WXCw8OZPHky4eHhnH766WRnZ3PvvfcyceJEJk0yRh5YG3Q6JScns2TJEh588EGeeuopPDw8WLdu\nHZdeeikrV65kxIgRrnqJQvRKhRU2Qnw92j7J6YSty2HtnyBoKIxcAFZ3iL+xR2K0ePqQHTyN3ZXm\nsNMh0+C+Q5C9D46bX/lJ4DQ+9J1pm/n98buMc/8OXLUSxizq+ri6/BkFe/fuZenSpSQmJgLwr3/9\ni8svvxyLxUJERAQWi/FrDw4Oprq6mujoaDIyjFmJTqez7nluvfVWXn/9da644go8PIw3+IIFC3jr\nrbe47777ANlzWYhaVTUOKmwOgttKBkVH4Y2LYfX9MPwMo62/q2oAnRAb4sPRgor6Av8IGHk2zLsH\nlqyAX34Pw+YDkOo9nutt97N52pNw/t9h8MRuiUlqBt3gwIEDvPbaa9x2220UFRWxcuVKnn76adav\nXw/Axx9/zJo1aygqKuKOO+5g5syZ3HHHHXzxxRdcdNFFABw6dKiuJvH555/zxz/+keHDh6O15qOP\nPsJisZCXlyd7LgthKjQXb2u1ZpCfDMvPAO2Ei/8N065zSSIAiAnxYXtqIVprVDsxbM628L1zCg/P\nPQM62xfSCf07Gbx6QfOyCZfArJvBVgFvX978+NSrYdo1UJ4P71/f+NiNX7T7I9PT0wkNDWX48OHk\n5OTw1FNPceedd3Lo0KG6pqDLLruMyy67rHGor77a6PGePXuYM2cODoeDhx9+mPXr11NcXMzEicZd\nwahRozhy5AhhYWGy57IQGMs1AAT7tJIMQobDaffChEshOK7nAmtBbIgPpdV2iitrCGotXtP2tALC\n/DyI68RS3CeifycDF9i3b1/dh76/vz+rV69m69at3H333Z3+kLZareTl5TFixAiCgoIICgpi/Pjx\nAOTk5DBokDHdXvZcFgIKy43VQIN9Gkw2q6mCNb+H2b+E8DFGM0wvEB1sfLCnF1S2nwxSC4kfGtJu\nDeJk9e9k0NadvIdP28d9QztUE2hq7969dcngt7/9LaGhoVitVvbt29epDW8mTpzI448/zi9/+UuS\nk5MpLi6muLiYAwcOsG/fPnJychg6dChgJIMbbriB22+/XfZcFgNWs2aiigJ4dymkb4FB44xk0EvE\nhhjJ4GhBBZPaWF4ip6SKowUVXH/K0G6PqX8nAxfYt28fP/vZzwC48MIL68r379/PhAkTOvw848aN\n4+jRoxw8eJA//OEPnHnmmQwfPpyLL76Yv//976xYsaLuXNlzWYj6ZBDs6wFlufDmJZB3CC5/3Wge\n7kViQrwBSC+saPO8z/YeA2DuyLBuj0mSQRd7++23WyzPycnp9HM999xzXHPNNTzxxBPs2LEDMEYL\nZWVlERFRP8NS9lwWor7PIMhRCG9ebIwcunoljDjLxZE15+/lTrCPe+MRRU04nZq3NqcxY2gw4yID\nuj0mGVrai40bN45Vq1bx0UcfMX36dKZMmcLzzz/P5MmTAdlzWYiGCsttBHq74+YTCKEj4NoPe2Ui\nqBUT4kN6G8ngx6Q8juSV90gTEUjNoNeLjo7mhRdeaPFY7Z7LQgiwlxwnyscO7t5w1buuDqddMSE+\nJGQWt3r8jU2phPl5sGji4B6JR5KBEKLvK8/ntrR7yFMhoM9z2fyBzogJ9uGrhOM4nBprk20s0wsq\nWJeYw+1njGy2q1p3kWYiIUTfVlUCb11GmP04q0NdN5Gss2JDfKhxaI6XVDU79vaWoyjg6tmxPRaP\nJIMB5sZXt/LfXZmuDkOIrlFTCe9eBdk/8X9uvyE3dKarI+qwuhFFTfoNqmocrNx2lIXjBzMkyLvH\n4ul3yUDrzm80PRBoralxOPnmYC5f7T/u6nCE6Bpf/hbSNsClL/J59eT2F6nrRRrONWjo873HKKyo\n6bGO41odSgZKqSCl1IdKqUSl1AGl1CkNjt2nlNJKqTDzsVJK/UsplaSU2quUmt7g3GVKqcPm17IG\n5TOUUvvMa/6lTnCqnZeXF/n5+ZIQmtBak5+fT1G18Tgpp8y1AQnRVeb/Bi59kcoxl1JV42x9KYpe\naEiQNxYFGU2SwZubUhk5yI9TRoT2aDwd7UB+BlittV6ilPIAfACUUjHAQuBog3PPA0aZX7OB54HZ\nSqkQ4E9APKCBHUqpVVrrQvOcm4EtwJfAIuB/nX0xtat/5ubmdvbSfs/Ly4sPEisBOJJXjt3hxM3a\n7yqGYqBI2wQxs401hoLjKCgy3tshvie+73FPc7daiAz0blQz2J1exJ6MYh6+eEK3Lz/RVLvJQCkV\nCMwHbgDQWtsAm3n4aeB3wKcNLlkMvKGN2/PNZq0iEjgD+FprXWA+79fAIqXUt0CA1nqzWf4GcAkn\nkAzc3d0ZNmxYZy8bEOwOJ9++fogALzdKquykFVR0eP9VIbrTRzsy+CmrmD9d1MEZ+vtXGYtILnoc\n5vwKMOYYQBuL1PVSsSE+pBdW1j1+Y1Mqvh5WLpve88vKdOTWcBiQC7yqlNqllHpZKeWrlFoMZGqt\n9zQ5PwpouBVXhlnWVnlGC+XNKKVuUUptV0ptl7v/ztmXWUxplZ0rZxobhR/OlqYi0Tu8uvEIr29M\npay6Azt4ZexAf3wzRMfDjPqJlnUrlvahPgMwOpFrawYF5TY+33uMy6ZH4+/V8zWcjiQDN2A68LzW\nehpQDvwZ+D3wx+4LrTmt9XKtdbzWOj48vJ09SUUjG5PzAbhuThwAybmSDITrFVXYSMgqwalh99Gi\ntk8uzqTqzSvItAeQf/HrxuQyU926RH2wZpBbWk2lzcHKbenY7E6u6+GO41odSQYZQIbWeov5+EOM\n5DAM2KOUSgWigZ1KqcFAJhDT4Ppos6yt8ugWykUX2pCUx7jIAGJDfRgS6MXh7FJXhyQEm5LzqR3v\nsS21oPUTtab63etxVJXx8+r7SCzxbHS4tmbQl0YTgTELGSCtoJy3NqcxZ3gIoyP8XRJLu8lAa30c\nSFdK1a7/ugDYqbUepLWO01rHYSSM6ea5q4DrzVFFc4BirfUxYA2wUCkVrJQKxuh4XmMeK1FKzTFH\nEV1P4z4IcZKqahxsTytkrjk6YcQgP5KkZiB6gQ3Jefh6WBkd4cf2tNaTgUPDY7YrudtxF4d0TLPh\nmIXlNpSCQO++04EM9cng9Y1pZBZVsuyUOJfF0tHhJHcCbyul9gJTgcfaOPdLIAVIAl4CbgMwO47/\nAmwzvx6p7Uw2z3nZvCaZE+g8Fq3bnlqIze6sWwZ31CB/knPKcTplCK5wrY1J+cweHsqc4aHsOlqE\n3eFsflLeYV76IYXXs6I4Z/F1uFlUs4lahRU1BHm7N1vWobeLMTe5WbntKIMDvDhnfEQ7V3SfDg0t\n1VrvxhgS2trxuAbfa+D2Vs5bAaxooXw70D27PAt+TMrDzaKYNSwEgJGD/KiscZBZVFl3ZyJETztW\nXElKXjlXz45lUIAXb2xK48Cx0sabvSR+iV55DXtq7ua8iRdyeXw0z36b1KxmUFBh63OdxwBhfh54\nu1uprHFw9exYlw73loHmA8DG5DymxQbh62nk/lERxpBSaSoSrrQhyRjUMHdkGDPjggEaNxXlHkJ/\nfAuHLMPZ5zWTxy6dhFKKmODGwzHBaCYK6WOdx4DxekK8cbcqls6Kaf+CbiTJoJ8rrqhhX2Zxo52S\nRprzC5JkeKlwoY1JeYT6ejAmwp/IQG+igrzZnlpoHKwqgZXXYMOdG8rv4g+XTK+7829pH4CCclu7\newn3VktmRHP7mSMZ5O/l0jhkCet+blNKHlo33jYv2NeDMD8PWZZCuIzWmg3JeZwyIhSL2c4fHxds\njC5yOlH/vRXyk3ks6DE83GNY2KAtPSbEm4JyG2XVdvzM2m5hhY3Jbewl3JvdMn+Eq0MApGbQ721I\nysfHw8qU6KBG5SPC/TicI8NLhWsk55aTXVLNqSPqb1LihwaTU1pNRlEVjDyb46f+mdePxXDt7KF1\nCQPqF3irrR1orSksr+mTfQa9iSSDfqyqxsHne7OYPyocD7fGf+pREX4k5ZTJon7CJTYm5wEwd2T9\nYmzxcSG4YzfmG8TfyDOlZ+LlbuHy+OhG19aOwKlNBuU2BzaHs0/2GfQmkgz6sS/aWAp3ZLgfJVV2\nckurXRBZ1zmcXcrS5ZsoqapxdSiiE348nEdUkHfdXT7AaM9CvvW8j5K9X1JcWcN/d2WyeEpUs76A\npks/F/bRpSh6G0kG/dgbbSyFO8qc5djX+w2+O5TL5pQCdtR2PIpez+HUbE7JZ+7I0PqVOWuqsH64\njGBLOd/m+fPhjgwqaxwtLs0Q5OOOn6cbGeaIotqlKKRmcHIkGfRTtUvhXn/K0BaXwh05yBhRdLiP\nJ4PU/HIAErJa31hc9C4/ZRZTUmVvNKiB1Q9A1i6+GfcI3+YFsOLHI0yPDWJiVPNOYWM4pk+jBd4A\ngvvQ8tW9kYwm6qfe2JiKn6cbl02PbvH4IH9P/L3cOlUzOJxdSmp+/ZA+TzcLp44IdelEmTQznoSs\nEpfFIDpnc4oxv6Cuxrr7HdjxKsy9m5Dhl8HOzWQWVfK7RWNafY6YYG+O5Bk3An11kbreRpJBP5RX\nVs3ne49x1ayYuqF3TSmlGDnIr1PJ4KqXtpBX1riP4YVrp7NoYuRJxXsy6msGkgz6ii1HChge7ls/\nrv74TxB3Gpz1EFMdCjeLIsjHnUUTB7f6HLEhPnx/OBetNQXlRn9RX1ukrreRZNAPrdyWjs3h5Lp2\nFr0aNciP9Ykd2xfCZneSV1bNdXOGcuXMGKpqHCx5YVPdnbkr2OxOMgsr8fGwcrSggpKqGgJcsA68\n6DiHU7MttYALJze4gVj0GNirweqGtxVuOm0YI8L98HSztvo8saE+VNU4yS2rprDchkUhf/uTJH0G\n/Yzd4eStzWnMGxlW1y/QmpGD/Mgrq6aowtbmeVBfFR8z2J+JUYHEx4Xg5+nGseKqLon7RGQWVeLU\ncNbYQQDsl9pBr5d4vITSKjuz4oLhq4cga7dxwK1+SeoHzxvHFfFtL83QcHhpQYWNYB+PRnMRROdJ\nMuhn1iXmcKy4qsXhpE2NGtTxEUW1zUNhfvVV8chAL44VV7Z2SauOF1fx2w/2nPQGO7VNRBdMMu4y\npamo99uSYqw9dGbZF7DxX5C09oSeJ6Zu4lklheV9c5G63kaSQT+zPbUATzdL3d1yW4aGmv+hCttv\n6qkdsRHqV38HNzjQi+OdrBmkF1Rw+Ysb+WBHBg9/tr9T1zaVZnYgzhwWQpifp4wo6gO2HingrMAs\ngr57CEaeDfPuPaHniQ42djk7WlBBQR9dpK63kWTQz6TmVzA01KdDI3wiA43/UFlF7X+g55c130lq\nSKA3WZ1IBkk5ZVz+wiZKKu1cPiOa7w/l1o0saY3N7uS6V7bw/LfJzY6l5lfg5+lGqK8HE4YESDNR\nL6e1JuFIBk86nwbfcLh0OVhO7CPIy91KRIAn6QUVFFXUEOQj/QUnS5JBP5OWX87QUN8OnevtYSXI\nx71Dd/d1zUS+jWsGeWXV2OwtbEjSREJWMVe+uAm708l7t8zhL5dMZHCAF0+uTmxzSYyn1x7ih8N5\nfLEvq9kx47X6oJRiwpAADueUUVXjaDcW4RrJuWVcVv0pIfbjsGQF+DafDNkZMcHGXIOCCpuMJOoC\nkgz6EadTk5ZfQVxoxzesGRzQsXb/gnIbbhZFgHf9ALTIQC+0hpzS9pPJbW/vxMPNwvu/PIVxkQF4\nuVv59YJR7DxaxPrEnBav2ZKSzwvfJePv6UbisdJmH/TGazUS38SoQBxOzSHZ27nX2pxSwLOOxWRf\n8j7Ezjnp54s1l7KWPoOuIcmgH8kuraLa7uxwzQBgSJB3h0YE5ZcZd18NZzNHBhnNTO1dn1dWTVp+\nBTfNG8bw8PoRTpfHRxMX6sNTaw4224KzpKqGe9/fQ2yID3+5ZCJ2p27UQWx3OEkvrKjr95gwJACQ\nTuSeUlXjqFtsrkNyD7H/cAoh/r4MnrygS2KIDvEhq7gKu1NLn0EXkGTQj6TmGR3BcZ1IBh3tBM4v\nb14Vjww0Jg21lwxqP6DHmx/YtdytFu5dOIbE46V8trdxM9CfP03geEkVT185lVPNmap70ovqjh8r\nrqLGoetea0ywD/6ebtKJ3ENe+fEIV7+0hVSzE79N1WXo967i2pT7mBUX3OLyKCei4SJ3UjM4eTLp\nrB85WmD8xxzaiWaiIYFe5JfbqKpx4OXe+iSf/PJqwhqMJAIjkQAcb6eZqfYDekJk83VmLpwUyQvf\nJvO3LxPZlGx0JpdV2/l87zHuWjCK6bHGdoiRgV7sySiqu652WGnta7VYFOOGBEjNoId8tT8bgK2p\nBcSFNb/5+HR3JuH+nsZ+BV/cBwUpPFL9ey5osH/ByYoxRxQBhMi6RCdNagb9SGp+Be5WxZAg7/ZP\nNg02RxRll7R9d19QbiPUr/HdV4CXsXpke6ORErJKiA72JrCFER8Wi+IPF47DalF8czCHbw7msC21\ngPMmDuaOs0bWnTc5OpC9GfV3/bVrJDX8IJowJIDEY6U4nLJHQ3fKKa2qq6VtTy1odrzCZue3H+zl\n+le2suuz52DveySM+hWbneOZPSyky+KIbXDTI+sSnTypGfQjafnlxIT4YO3ETMzapp6soqo2+xpq\n+wya6kgz0/6skro2/ZacOiKMDQ+c1eZzTIkJYk1CNkUVxl63aXnleLlbGORfX1uZMCSQyppUjuSV\nMdKcUCe63jdmh39cqE/9nsUNbEstxOZwckpAAaO3/5mc0Hhed7ucYJ+8uv23u0KEvxceVgs2h1OS\nQReQmkE/kppX0an+AqhPBsdLWm/qqapxUFZtb9ZMVHt9W6ORyqrtHMkrZ8KQk9ufdqq5bWdt7SA1\nv4KhIb6N2p+lE7lnrD2QQ1SQN1fOjCUlr7zZ4oUbk/Jwtyqeu/lsdvvO46KsG/h8Xw6zhoV06ZIR\nFouqm3wmfQYnT2oG/YTWmrT8cmYP71w1fHAHOoFrZx83qxnkJbGQzRwrOArrv4OKfKguhUtfNCYT\nbfgXauf7fOFRwtC9nnDYE9x94eerQSnY9yHkHAD/wRAQBYPGQdDQFiciTYwORCmjE3n+6HDS8ssZ\n1qSteuQgPzzcLCRklXD2uAje2XKUFRuOcO6Ewfz54gmd+r2IllXVOPjhcC5XxMcwa5jRn7M9tbDR\nCqM/JuUxIyaQ4PBI4u/9gKnv7mJNQjazhp3cvIKWRIf4kFZQQYCXfJSdLPkN9hN5ZTbKbY5O1wx8\nPNwI9HbnWEvt/lpDYSo1CVu4x201C3a9BFsz4cbVxoShfe9zXfoTxqnfK5R3MHgFgL0SPHzBw4cC\nFUiW9mBEeARYNGinkQgAjnwHu94yymoFxsA9Pxnf5x40koSnHwFe7owI92NPRpExn6KggjObLLnh\nbrUwJsKfVbuzeH97et3M1Pe3p3P/orF4e7TeQS46ZmNyHlU1ThaMi2BiVCAebha2pxbUJYPCchtR\n2ev5c+haKPsYT79wnr16OmsSslkwrv0lUjprUlQAx4oqu2yE0kAmyaCfSMvv/EiiWkZTj5kMio6C\nV5Dxob59BXxxL0OB260WaipHQORYsJvnzriB1Y6ZPLQ2h09+exHRoU36BWb+gn+lzmR9YQ7brzm7\nPgnUuvjfcOE/oTzP+Lk5CWBrMFTxgxsg77AxQWnshZwyeDz/SynmWEkVNruzxdc6Y2gwr21M5exx\nEdx25giqa5xc9dJm1iVmc+HkIZ3+3YjG1h7IwdfDypzhIXi6WZkSHcj2tPp+g10/JfCE23I83OOM\n9xDgZrVwweTu2fPi7rNHc/uZI9s/UbRLkkE/UTe6ppM1A4AxfhVMzP4UXrwXju2By16CyVfAqHPg\nwn+yvngwt35dxZprFzYeRhgwBK8YN3LZxvFSO9EttAL8lFXC+CEBrd+5WazgH2F8xcxsfGzR45C8\nDg6vhdX382flhp9tCZuSx7b6Wn+3aAw3zx9OlDmiyuHUDA7w4tPdWZIMTpLWmvUHcjhtVHjdXgPx\ncSG89H0KlTYH3m4w7Pu78cCO55WvNVqWuru4Wy24u3Cnvf6kQ79FpVSQUupDpVSiUuqAUuoUpdRT\n5uO9SqlPlFJBDc5/UCmVpJQ6qJQ6t0H5IrMsSSn1QIPyYUqpLWb5SqWU9AZ1Ulp+OVaLIiq448NK\nqSqGt5bwdMZV3FzxMqBg4aP1SwUExUL8jSS7j6Eaj2ZDS4G6YawtLVhXbXdwOLv0xDuPh58O5zwC\nt22EX22gYMIyEnUMn+7OJJRixuV+CQ57o0t8PNzqEgGA1aK4aEok3x7Mobii5sTiEIDRMX+8pKpR\nc8/MuGDsTs3u9CL4/imGle/m3fC7cBs0ynWBihPS0ZT6DLBaaz0WmAIcAL4GJmqtJwOHgAcBlFLj\ngaXABGAR8JxSyqqUsgLPAucB44GrzHMBngCe1lqPBAqBm7rixQ0kqfkVRAV5t3+X5HQanbYAngHg\n5smOmGUsqH6Kqp+vh1PvMJJAA3nl1XhYLS1uodnWxLPD2WXYnbrNYaUdNngigZf8nQ1qBhuS8rjc\n/UdC1twJ/4k3+h2crS9Qt3hqFDUOzf9+OnbycQxgaw9koxSN+mpmxBoDFnamHKdmzwd87JiHZepV\nrgpRnIR2k4FSKhCYD7wCoLW2aa2LtNZfaa1rb8s2A7U7ry8G3tNaV2utjwBJwCzzK0lrnaK1tgHv\nAYuV0X5wFvChef3rwCVd8uoGkNoVPNt0dDMsnw/LzzTa6ZWCpW+TOuU+knVUqxPPCsqMCWctNfX4\ne7rh62FtcTRS3czjrkgGgIebhXFDAnBqWBu4BK5822iX/vR2WH6G8fpaMGFIAMPDfPl0d/OVT0XH\nrTuQw7SYoEZDjAN93BkT4c+W9HI+m/U2D9XcyLxRXTfLWPScjtQMhgG5wKtKqV1KqZeVUk0ba38O\n/M/8PgpIb3AswyxrrTwUKGqQWGrLm1FK3aKU2q6U2p6b27G9ewcCrTVH8spb7y8oz4dP74AV50JF\nIVz0jNFJbBrSzoJzLa1LVEspRWSQd4ujkRKySvD1sJ5QP0ZrpkYbTU5Dw/xh3IVwy3ew5FVjWOvG\nf7ca48VTh7D5SH6nN+MRhpzSKvZlFrNgXETjA1pzm993JKRls/5IBT7+QYxqZ7tV0Tt1JBm4AdOB\n57XW04ByoGF7//8BduDtbomwAa31cq11vNY6Pjw8vLt/XJ9RVFFDaZW95ZpBZSE8OxP2vAtz74I7\ntsKUK8Fa3+RTP9eg5clj+eW2RjucNRUZ6MWxFmoVCWbncVdONJoSEwRQP1taKZh4GdyxzRiZBFCQ\nAnveM4bGmi6eMgSt4fO9Ujs4ET9lGrW8ZstJbH2JxZl/5yz796xJOM7cEaEyzLOP6kgyyAAytNZb\nzMcfYiQHlFI3ABcC1+j6HUoygYa7WUebZa2V5wNBSim3JuWig2oXbWt0B+40x+57B8Np98EvfzA6\nYz2a36W3t/poflk1oW3M8Bwc4NWsz8Dh1Bw4VnLSM4+bmmYuXDdiUJPX4eELfuYNwpbl8MkvYeW1\nUGbUIIeH+zE5OlCaik5Q4nFjn4jRgxss83FsL3z1f1TGnc0HjtOpcWhOHSlNRH1Vu8lAa30cSFdK\njTGLFgD7lVKLgN8BF2utG26iuwpYqpTyVEoNA0YBW4FtwChz5JAHRifzKjOJfAMsMa9fBnzaBa9t\nwEirW7TNrBnkHjT6Bo6a+fuU2yFifCtX1088a60JJb/M1mYyiAzyJqe0mhpH/eSx1PxyKmyOZstW\nn6xhYb6svGUOP5se3fpJ5z4K5/wFDn8Fz82GxC8Ao3awL7OYlNyyLo1pIDh4vJSoIG8CvMzFBqvL\n4MOfg08oXkteqNtCda4kgz6ro6OJ7gTeVkrtBaYCjwH/AfyBr5VSu5VSLwBorROA94H9wGrgdq21\nw+wTuANYgzEa6X3zXID7gXuVUkkYfQivdMWLGyjS8itQCqKDfWD/p0ZnaskxcFS3e22tyECvFlcf\nrbDZqaxxtNtMZOx4Vv/zatcH6qrO44ZmDw9tc7ltLFaY+2v45ffGDOb3roZ9H9bNM/jaXH5ZdNzB\n46WMaVgr+PohyE+Cy5aj/MI5fXQ44yMDGg3rFX1Lhyadaa13A/FNilud9qe1fhR4tIXyL4EvWyhP\nwRhtJE5AWn45QwK98dr5MvzvfoieCVe8AQEdn/U5ONCrxcXq8suMdYnarBnUNjMVVdZ9GCRkFeNu\nVYxy5eqhg8bBL9bChn/BmPMY7OFFbLB3o30RGkrKKSUhq4TFU1scvzBg1TicJOeWNV7+45Q7IHIK\nDJsPwMOLJ8jS4X2cTN3rB1Lzy1nsuw/+9zsYewEsW9WpRAAQGdjyiKDaRepamnDW8Fqo73OoqnHw\n2e4spsUG4+Hm4reYmyec/lujT8FWzqv8Ee/U9S2e+sy6JO5ZubvuNQtDSm45NQ7NmAh/qCgwOuZD\nR8CMG+rO8XSz4uMhCxr0ZZIM+oG0/AqKhpwBF//HqBG4d76qHtlgx7OG8suNpp/WhpZCw4lnRjJ4\ne8tRsoqruHtBL5uFWllEkLWap2yPUrb2iUajjbTWbDtSgFPXr9cvDInHjSa/saFu8Or5xs5lot+R\nZNCXOexUf/47vCsyGBrmB9OvM9rLT0BtU09OSeN+htpmopb2MqgV4GVMPMsqrqSs2s5z3yQxd2Ro\n7xtZEhhF2iX/5TPnKfj9+Bh8sMzoCAUyiyo5bg6PXZcofQoNHTxeiptFMWrnXyA30ah9in5HkkFf\n5XTAf3+F5/YXOc2yr81dyjqitqknq8kQ0fzW9jJoQClVt+PZih+PkF9u47fnjj2peLrLuNjB3Ou4\ng2+H3gUHPoPP7wGo27FrSkwQ3x/Kw2Z3tvU0A8rB46XcErgF6+43Yd49MHKBq0MS3UCSQV/kdBoz\nivd9wAvu1/NDwIUnvQRA06aeWgXlNrzcLfi0sxfAkCBvDh4v5aXvU1g4PoKp5uSw3sbbw8qYiABe\ncV4A130CCx4CYHtqPn6ebtx2xgjKqu1sOZLv4kh7D3vWXu6ueg7iToMz/8/V4YhuIsmgr9EavrgH\n9rzDV4Nu4smyRTx95dQWF5HrjLq9kJvUDPLKqgn19Wx3VungAC9S8sops9n5zblj2jzX1abEBLEn\nvQg97HRjUT6nk4X7H+De0I3MHxWOp5uFdQek3wCgtKqG6rICSnyGwpIVjWaui/5FkkFfYyuDY3tJ\nHvsrbjm6gNvOGMnMuM5tddkSX083ArzcmtUM8s1F6tpTm0wunRbF6IjevRn9lOhASqrsdXtAFJeW\n4qgq4+cF/8R77QPMHxHM2gPZaC1DJQ9ll7LZOZ7d538Gfl2/U5noPSQZ9DWe/uQs+YQlB89iUlQg\nd53ddSN2IgO9m008Kyhve/ZxrYlRgQR4uXHP2aO7LJ7uUru+0Z70IgB2HqvmpprfkjXuJti6nEfK\n/kRJYS6Hsgf4TOUNz2D98f+hcDImsmuXFRG9jySDviLlW3hnKVSV8MCqw1TanTx95dQu3eUpMqj5\nxLP8smpCfNvfsWrhhMHsfOgcYkI6v+1mTxs1yA9vd6uxIQuwLbUAi8VK8KVPweJnGVy4g5c9/h9r\n9x/vkp+ntebF75JJyintkufrEYe/hrV/xpq7H19Pd6I7s2mS6JMkGfQF2fth5XVQlEZhhY31iTn8\ncv4IRnbxUsGR5oigWlpr8stthHWgmQiMvW77AjerhUlRgXUzkbenFjIxKhBvDytMuxa17DM+DPoF\n67povsGx4ir+9r9Eln+f0iXP1+1yDxrrDkVM4EnPXzM6wl9WIh0A+sb/3oGsogDevRLcfeDq90kw\nB7l0RT9BU5GB3uSV2SirNraWKLc5qLY72xxW2ldNiQkkIauE8mo7uzOKmBkXXH9w6CkMmXwGu9KL\nKP/qr8Y+CSfRf1DbHLUhKb/390NUFMC7S8HNE730Hfbm1DBmcNevLyV6H0kGvZnTYdyhlR6Hpe9A\nUEyX7x7WUO3w1Nc3pgLGDmdAm4vU9VVTYoKw2Z18sD0dm91JfJPkeva4CNBOCo7sha/+YCyJXdPy\nfg/t2ZNh/M0yiyo5WlDRztkudnST8X678m2y1SCKK2sYO7h3DwgQXUOSQW9WnG7sV3zBPyB6BmCs\nBjok0Ivgbrhbnx4bzNnjBvHCd8kUVdjIM5ei6Mhoor5mSnQQACs2pAIQPzS40fEJQwKICPDhMZ/f\nwVl/gL3vw4pFUJROZ+1JL6pravsxKe+k4j4ZGYUVTPjj6rq+khaNvQDu2guxs+uWoRgjyWBAkGTQ\nmwXHGTt4Tb+urighq5jxXbxhTEP3LRxDWbWdF75Lqa8Z9MNmouhgb0J9PThaUMHwMN9mtR+lFPNH\nh7ExpQDHvN/AVe9CfjK8srBTNQSHU7Mvs5jzJkYyOMCLjUmum8y2J72YcpuDDS0lpB/+AYnmgsLm\nJkEHzQ1tpGYwMEgy6I1yEmHdI+CwGxu+mypsdlLyyruliajWuMgALp4yhNc2HuHAMePOsD82Eyml\n6oaYxscFt3jO3JFhFFfWGE1zY86DW741Ns6pXQiwA+3/KblllFXbmRoTxNyRYWxMzsPpoqWej+QZ\nQ2VrmxrrbHsF1j0MB79oVHwwu5SIAE+CfPrfzYBoTpJBL1Bpc/DmplQyCivAVmEsoLbzTagsaHTe\ngWOlaN09/QUN3XvOaOwOzQvfJQP9s2YA9U1FTfsLap0yIhQwOn4BCBtp7LcM8NPH8M6VRodrG2qb\nZKbEBDF3ZCiFFTXsN5NsT0vJNbZHrd14CDA2Q/riPhh1bv0e0iZjQxvpPB4oJBn0Ao98nsBDnyZw\nxlPfsum5m9G5B+Gy5c1mfO6v7TyO6t4JQENDfblyZgzlNge+Hta2dxXrw84aO4ghgV6c1sq6ToP8\nvRgT4d9ys0p1CSSvh+fnQuqPrf6MPRlF+Hu6MTzMt25LyBafrwek5BnJIC2/gpKqGkj+Bj76hbEZ\n0uWvgdW97twKm51D2aXdfuMheg9JBi729f5s3t2azrVzYnl8TBKnFH3Oc/aL+M3OkGbDEBOySgjy\ncWeIufRDd/r1glF4uVsI6Yedx7UmRQey8cEFdSu2tuTUkaFsSy1ots8DM26AX3xtNBm9diGsf9Ro\n1mtiT3oxk2MCsVgUEQFejBzkx4bknu830FqTkltWtxPdgawSSPkGQkfB1SvBo/Fkwa1HCowN7s3a\nkej/JBm4UE5pFfd/tJfxkQH88dxhLMl+hpohM8madi8f7sioG5JYKyGrhAlDAnpkAlBEgBd/vHAC\nV82K7faf1ZvNGxlGtd3JzqOFzQ8OmWbsszz1avj+SaOm0EBVjYMDx0rqmqNqn2/rkXyq7U2SSzcr\nKLdRUmXnwimReFFtNBWd/TDctAZ8mjeTbUzOx8NqIX5o189nEb2TJAMX0Vpz/4d7Ka+288zSqXh4\n+8F1H+N+xQp+d/5EPKwWPt2dWXd+jcPJweOlTOjGkURNXT07ltvOaHWr6wFh1rAQrBbVetOOpx9c\n8hzc9DWMXmiUZe4Ep4P9x0qwO3VdRzXAqSNCqapxsutoUbfH3lBtE9Fi9SPfev2GY6mJoBR4tjxS\n6MfDeUwfGmTMyhYDgiQDF3lry1G+OZjLg+eNZZTVXAMncgoExRLo7c6ZY8P5fO+xuk3Gk3LKsDmc\n0obbw/y93JkSHVjfidwKHT2T8mq7MQ9hxSJYsYjUAzsBGu3tMGdEKBYFG3u43+BITil3WD9h3Obf\nku8Zw7bc1v/rF5Tb2H+shHm9bac60a0kGbhAcm4Zj36xn/mjw7k+JheenQW73mp0zuKpUeSWVrM5\nxfgQqh0BIsmg580bGcbejCKj07UFFTY716/YyqmPryfdEQIX/xvyDnHxpiv4q8/7RHjWXxfg5c7k\n6KCenXxWVcKUTXfyG/cP0JMuZ82UZ/gp19FqU9Ums0+j121bKrqVJIOTsD21oG4dn46qcTi5+73d\neLtbeWrxCCz//RUERMO4ixudd9bYQfh5utU1FSVkFePtbmVYWNcuTifad+rIMJwaNrfQ8VtSVcOy\nFVvZkGRslXnfB3txTLoC7tjG126nc63zv/DsHGPIsGneyDD2ZBRT2kpy6XLf/o2RhT/wH8+bsVy2\nnDHREdidmkPHW16i+8ekPPw93ZjczaPWRO8iyeAEFVfWcMWLm/j1u7s6tfjYM2sPsy+zmL9dNomI\nzY9BQbLR5uzV+I7fy93KuRMG87+fjlNV4yAhq4Sxkf5YLbJ6ZE+bFhuEt7uVjU2SQUG5jWte2sKu\no0X8+6rp/PWSiWxNLeDF75MpsgRxa9lNfDj9NTj1zvrROke3MH9UGA6n5tPdWd0XtN0GxRnG92f+\nnnt8/sbeqKWgVF3tstnkM9PG5DxmDw/tM6vQiq4hf+0TlF5QgVPD+sQc3t5ytEPXbE8t4Llvk7h8\nRjSLvBJg28sw53YYdlqL5y+eOoTSKjvfJOZwwBxJJHqep5uVmcNCGnUi70kvYunyTRzMLmX59TO4\nYHIkl02P4oJJkfzjq0O8s9V4TwwZfxrM+ZVxUeYOWLGQmV9fyi8jDvKfdQebD1ntCkd+gBfmGauP\nOh043P34X3Esw8J9AYgN8cHP063x5DNTekEFafkVzB0pQ0oHGkkGJyij0FifZmioD3/9Yj/JuW3v\nilVaVcM97+8mOtiHP108AWzlED2rbkP2lpw6IpQwPw+e/TaJ0mp7j44kEo3NHRHK4ZwyVu3J4pqX\nN7P42Q1kl1Tz2g0zOWtsBGAscfHopRMJ9fPgydUHUQomRjf4mw2eDIufQ1UV82Dxw7xffRt733kI\nqrtg0xutIeU7eO8aeP1CsFfBWQ+BxUpGYQU1Ds0Is4nRYlGMjwxosWawMdlIeHOlv2DAkd2tT1Bm\nkZEMXrxuBkuXb+aelbv56NZTcbdayCmp4pUfj7ApJb9u+ZqiShuZhZV88KtTjM3rxy82+gnamDPg\nZrVwwaRIXt+UBkjnsSvVfjj++t1dhPt78vvzx3L17KHG37KBIB8P/t/lU7n2lS2MCPcjwKt+Vi9W\nd5h2DUy+AvZ/Stnn/2bskdcosd1PgCdwdDP4hEHoiDbfF4047MYm9QdWwfvXg3cInP4AzLu7bg2l\n2mGltTUDgPFDAli5LR2HUzdqetyQlE+4vyejunjjJNH7dSgZKKWCgJeBiYAGfg4cBFYCcUAqcIXW\nulAZM6KeAc4HKoAbtNY7zedZBvzBfNq/aq1fN8tnAK8B3sCXwF26l+8CklFYga+HlTER/vzt0knc\n+vZO/vL5fpxa8/72DOwOJ7OHhdaN0w739+SuBaOZ4dgH2w7DjJ+Dpf2K2cVTo3h9UxpWi+r1G833\nZ+MjA7hl/nBiQ3xYMiO6zSU65o0K45HFEwj0dm/5BKs7TFqCM+QcTvv3apZtOs69CwPh83shJwEC\nYyA6HoJijaUixl1kXHfgM6MWUVFgNDmlbzVWtD3jAWNtoUtfhPGXgHvjGeq1axIND6tPBhOGBFBZ\n4+BIXnndjnlaazYm5zFvZJjsbDYAdbRm8AywWmu9RCnlAfgAvwfWaa0fV0o9ADwA3A+cB4wyv2YD\nzwOzlVIhwJ+AeIyEskMptUprXWieczOwBSMZLAL+10WvsVtkFFYSFeyNUorzJkWyZEY0b2xKw8Nq\n4Wczovnl/OHENfjPB0B1GTx/B1jcYeo1YGl/X9npsUHEhHjj6+HWb9cI6gssFsXvzx/X4fOvPyWu\n3XMmRgUyb9IoXv7xCNefGkfYlW8ae12nfAPH9kLiFzAuoz4Z/Pc2Y00kMEagxcyCwZOMx+5eMGVp\niz8nJbeMAC+3RjvW1TY5JmQV1yWDg9ml5JXZZEjpANVuMlBKBQLzgRsAtNY2wKaUWgycYZ72OvAt\nRjJYDLxh3tlvVkoFKaUizXO/1loXmM/7NbBIKfUtEKC13myWvwFcQi9PBpmFlUQH16/n8sjiCUyL\nDeLscRFEBLSydtD6vxiTkm78X/0yyO1QSvGfq6Z3RciiF7p34WhWJxzn2W+S+NNFE4wmopk3GQed\nTrA32DvhF2vB6gGeAeDb8Q7eI3nlDA/3a3S3PyrCDw+rhf1ZJSyeGgUYs45B+gsGqo7UDIYBucCr\nSqkpwA7gLiBCa33MPOc4EGF+HwU03A4qwyxrqzyjhfJmlFK3ALcAxMa6ds2cjMKKRuvg+3i4cc3s\noa1fcHQzbHkRZt0CQ0/p1M9quJyB6F9GhPtxuVmrnB4bzEVThtQftFjAo0HtMnzMCf2MlNzyZgvO\nuVstjB7sR0JWCZlFlbz0fQrvbTvK6Ai/usXsxMDSkdFEbsB04Hmt9TSgHKNJqI5ZC+j2Nn6t9XKt\ndbzWOj48PLy7f1yriitrKKmyEx3cwf80DjusutNoC17wx+4NTvQ5/3fBOGYMDebX7+1i5baODVPu\nqPJqO8dLqhge7tvs2ITIQLYeKeD0J7/hrc1pXDh5CC9fP7NLf77oOzpSM8gAMrTWW8zHH2Ikg2yl\nVKTW+pjZDJRjHs8EYhpcH22WZVLfrFRb/q1ZHt3C+b1WpjmsNCrIp50zTVY3OO9JsLgZC5sJ0YC/\nlzuv3ziLX761g/s/2kd5tYOfzxvWJc99pHYkUQsz1+ePDufzvVlcHh/LzfOHS41ggGu3ZqC1Pg6k\nK6Vq66gLgP3AKmCZWbYM+NT8fhVwvTLMAYrN5qQ1wEKlVLBSKhhYCKwxj5UopeaYI5Gub/BcvVLt\nsNIO1Qyc5qSiEWe2OrlMCG8PKy9dP4NFEwbzyOf7eeXHI13yvLXJoKWawQWTI0l4ZBF/vniCJALR\n4UlndwJvK6X2AlOBx4DHgXOUUoeBs83HYIwGSgGSgJeA2wDMjuO/ANvMr0dqO5PNc142r0mml3ce\nZxQa68y0mwycTnjzEvj+790flOjzPN2s/OfqacwfHc6/1x/GZnee9HPWDiuNC22eDIRoqENDS7XW\nuzGGhDa1oIVzNXB7K8+zAljRQvl2jDkMfUJGYSXe7tZGQ/VatOtNOPI9TLqiZwITfZ6b1cKNp8Zx\n42vb+OFwLgvGRTQ6nl5QwV3v7eKZpdOICWm/mfJInrG7mexLINojy1GcgIzCiro5Bq0qy4GvH4Kh\n82DatT0XnOjz5o0KI9jHvcWF7F7dkMrOo0WsT8xp4crmUvLKGdZ0vosQLZBkcAIyiyrbbyJa/SDU\nVMJF/+z40gJCYAz7PH9SJF/vzzY2zDFV2Ox8sMMYnb0nvajN58gqquThzxLYn1XCqAgZtCDaJ8ng\nBGQUtpMMClNh/6cw714IG9VjcYn+Y/HUKCprHKw9kF1X9t9dWZRW2YkK8mZ3RlGL12UVVfK7D/dw\n+lPf8OamNBZPjeL2Mwf21qWiY2Shuk4qq7ZTVFHTaPZxM8FxcOtGY20ZIU5A/NBghgR68enuLBZP\njUJrzRubUhkfGcB5Ewfz/74+RHFlTbP1j37zwR52pBVyzeyh/OK0YW2/T4VoQGoGnVQ/x6CVmkFB\nivFv+OhmC4YJ0VEWi+KiqUP4/lAuBeU2th4pIPF4KctOHcrU2CAA9mU0XoK6vNrOttQCbpgbx58v\nniCJQHSKJINOanNYae5B+M8s2PpSD0cl+qPFU6KwOzVf7jvGG5vSCPR25+IpUUyOCgJgT5Omoq2p\nBdQ4tGxkL06INBN1Uu2mNs3uurSGz+8x1pIZf0nPByb6nXGR/owc5Mcbm1JJyS3n5/OG4e1hxdvD\nyvAwX3Y36UTemJSHh9VC/NAQ1wQs+jSpGXRSRmEFnm4WwvyazDHY/TakbYBzHgE/162bJPoPpRSL\npwzhUHYZDq25tsFCiFNigtjbpGawISmf6UODZE6BOCGSDDops6iy+RyDslxY838QeypMu851wYl+\n5+KpxiqmZ40ZRGxofW10SnQg2SXVHC+uAiC/rJr9x0qkiUicMGkm6qSMJvsYAJCbCG6expyCDuxe\nJkRHDQ315R9XTGF6bHCj8tplzXenF7EocDCbUvIBZGMaccLkk6uTWpxjMOw0uHvfCa83L0RbLpse\n3WzXvHGRAbhbVV0n8oakfPw93ZgcFeiCCEV/IMmgEypsdgrKbfXDSm0VsOstY0E6N0/XBicGFC93\nK+MiA+pmIm9IymP28FDcrPJfWpwYeed0QmZhk6Wrv3scPr0dju1yYVRioJoSHcTejGKO5ldwtKCC\nuSM7vhWmEE1JMuiERsNKM3fCxv8YHcZRM1wcmRiIJkcHUlZt541NqQDSeSxOiiSDTqidcBbjb4H/\n3gZ+EbDwry6OSgxUU81O5He2HmWQvycjB8mCdOLESTLohIyiSjysFsJ3/BNyD8DF/wLvIFeHJQao\n4eF++Hm6UWFzMHdkWNtLqgvRDhla2gkZheYcg5FngtUKo85xdUhiALNaFJOiAtmUks+pI6S/QJwc\nqRl0wtH8CqPzeNh8OOsPrg5HiLpF6+ZKf4E4SVIz6KDSqhrOy1lOfEwA6FmyYY3oFW4+bTgz44IZ\nIhvai5MkNYMOOrzxU35lWcVQX7skAtFrhPh6cNbYiPZPFKIdkgw6ojiTMRvv4zAxBF32d1dHI4QQ\nXU6SQXscdvjoJiz2Kl6O/BOe3jJ8TwjR/0gyaE/WLnTmDu633cSIcdNcHY0QQnQLSQbtiZnJV2d9\nySrnXOaOkBEbQoj+SZJBa9K3wu53AVib5UGQjzvjhwS4OCghhOgeMrS0JTkH4O3LwScUPeESNiTl\nccrwUKwWGUUkhOifOlQzUEqlKqX2KaV2K6W2m2VTlVKba8uUUrPMcqWU+pdSKkkptVcpNb3B8yxT\nSh02v5Y1KJ9hPn+Sea3rPnUL0+DNS8HNC677mNRiJ1nFVbJpiBCiX+tMM9GZWuupWut48/GTwMNa\n66nAH83HAOcBo8yvW4DnAZRSIcCfgNnALOBPSqna7ZueB25ucN2iE31BJ6U400gENRVw3ScQHMeP\nSXmArAgphOjfTqbPQAO1jeiBQJb5/WLgDW3YDAQppSKBc4GvtdYFWutC4GtgkXksQGu9WWutgTeA\nS04irhOXtBbKsuHqDyBiPAAbk/IYEuhFXKhPOxcLIUTf1dE+Aw18pZTSwIta6+XA3cAapdTfMZLK\nqea5UUB6g2szzLK2yjNaKO8ZTifkHYRB42D69cbicwHGJuQOp2ZTSj5nj4uQFSGFEP1aR2sG87TW\n0zGagG5XSs0HbgXu0VrHAPcAr3RTjHWUUreY/RPbc3NzT+7JtIa0jfD2z+ClBUYTkVJ1iQBgf1YJ\nRRU10kQkhOj3OpQMtNaZ5r85wCcYbf7LgI/NUz4wywAygZgGl0ebZW2VR7dQ3lIcy7XW8Vrr+PDw\n8I6E3lxVMWx+Hp6bA6+eBxnb4ZyHGyWBWt8fNhKOLA8shOjv2k0GSilfpZR/7ffAQuAnjD6C083T\nzgIOm9+vAq43RxXNAYq11seANcBCpVSw2XG8EFhjHitRSs0xRxFdD3zadS+xiYp8WP0AePjB4mfh\nvkSYdXOzxecqbQ5e35jKrGEhDArw6rZwhBCiN+hIn0EE8InZZu4GvKO1Xq2UKgOeUUq5AVUYI4cA\nvgTOB5KACuBGAK11gVLqL8A287xHtNYF5ve3Aa8B3sD/zK/uETIcfr3L+LcNr29KJae0mv9cPb3N\n84QQoj9QxgCevic+Pl5v3769W567uLKG+U9+w7TYIF67cVb7FwghRB+hlNrRYIpAHVmOogUvfZ9C\ncWUNv1k4xtWhCCFEj5Bk0ERuaTUrNhzhwsmRTIwKdHU4QgjRIyQZNPHsN0lU253cJ7UCIcQAIsmg\ngcyiSt7eksYV8dEMC/N1dThCCNFjJBk0sO1IATUOzbJT41wdihBC9ChJBg3klVUDEBno7eJIhBCi\nZ0kyaCCvzIaH1UKAl2zzIIQYWCQZNJBfVk2on4csSieEGHAkGTSQZyYDIYQYaCQZNJBfbiPMz9PV\nYQghRI+TZNBAXmk1ob6SDIQQA48kA5PWmrxyG2H+0kwkhBh4JBmYSqvt2OxOwqRmIIQYgCQZmPLL\nbABSMxBCDEiSDEy1E86kz0AIMRBJMjDlm8lARhMJIQYiSQam3NpmIplnIIQYgCQZmGprBsG+kgyE\nEAOPJANTXlk1wT7uuFvlVyKEGHjkk8+UX2YjVPoLhBADlCQDU15ZtfQXCCEGLEkGJqkZCCEGMkkG\nptyyasIlGQghBihJBkC13UFplZ1QGUkkhBigJBnQcCkKqRkIIQYmSQbUJwOpGQghBipJBkBeubkU\nhdQMhBADVIeSgVIqVSm1Tym1Wym1vUH5nUqpRKVUglLqyQblDyqlkpRSB5VS5zYoX2SWJSmlHmhQ\nPkwptcUsX6mU6tFb9LxSMxnIInVCiAGqMzWDM7XWU7XW8QBKqTOBxcAUrfUE4O9m+XhgKTABWAQ8\np5SyKqWswLPAecB44CrzXIAngKe11iOBQuCmk39pHZdfLstXCyEGtpNpJroVeFxrXQ2gtc4xyxcD\n72mtq7XWR4AkYJb5laS1TtFa24D3gMVKKQWcBXxoXv86cMlJxNVpeaXVeLtb8fFw68kfK4QQvUZH\nk4EGvlJK7VBK3WKWjQZOM5t3vlNKzTTLo4D0BtdmmGWtlYcCRVpre5PyZpRStyiltiultufm5nYw\n9Pbly3aXQogBrqO3wvO01plKqUHA10qpRPPaEGAOMBN4Xyk1vJviBEBrvRxYDhAfH6+76nnzyqpl\nUxshxIDWoWSgtc40/81RSn2C0eSTAXystdbAVqWUEwgDMoGYBpdHm2W0Up4PBCml3MzaQcPze0Re\nmY2oIO+e/JFCCNGrtNtMpJTyVUr5134PLAR+Av4LnGmWjwY8gDxgFbBUKeWplBoGjAK2AtuAUebI\nIQ+MTuZVZjL5Blhi/shlwKdd9go7QBapE0IMdB2pGUQAnxj9vLgB72itV5sf6CuUUj8BNmCZ+cGe\noJR6H9gP2IHbtdYOAKXUHcAawAqs0FonmD/jfuA9pdRfgV3AK132CtvhdGoKym2y3aUQYkBrNxlo\nrVOAKS2U24BrW7nmUeDRFsq/BL5s5WfM6kC8Xa6osgaHUxMqNQMhxAA24Gcg1253KTUDIcRANuCT\nQa6ZDKRmIIQYyAZ8MqhdpE72MhBCDGQDPhnk1dUMJBkIIQauAZ8M8stsWC2KIG93V4cihBAuM+CT\nQV5ZNSG+HlgsytWhCCGEy0gyKJM5BkIIIclAZh8LIcTASwZ/X3OQ1zYcodLmACC/vFq2uxRCDHgD\nagF/h1OzI62QTSn5/Ht9Ej+fN4y8UmkmEkKIAZUMrBbFu7fMYeuRAp79Jomn1hwEZFipEEIMqGRQ\na9awEGYNm8VPmcV8siuTCydHujokIYRwqQGZDGpNjApkYlSgq8MQQgiXG3AdyEIIIZqTZCCEEEKS\ngRBCCEkGQgghkGQghBACSQZCCCGQZCCEEAJJBkIIIQCltXZ1DCdEKZULpJ3g5WFAXheG0xV6Y0wg\ncXVGb4wJemdcvTEmGBhxDdVahzct7LPJ4GQopbZrreNdHUdDvTEmkLg6ozfGBL0zrt4YEwzsuKSZ\nSAghhCQDIYQQAzcZLHd1AC3ojTGBxNUZvTEm6J1x9caYYADHNSD7DIQQQjQ2UGsGQgghGpBkIIQQ\nYmAlA6XUIqXUQaVUklLqARfGsUIplaOU+qlBWYhS6mul1GHz32AXxBWjlPpGKbVfKZWglLrL1bEp\npbyUUluVUnvMmB42y4cppbaYf8uVSimPnoqpQWxWpdQupdTnvSimVKXUPqXUbqXUdrOsN7y3gpRS\nHyqlEpVSB5RSp7j4fTXG/B3VfpUope7uJb+re8z3+k9KqXfN/wPd/t4aMMlAKWUFngXOA8YDVyml\nxrsonNeARU3KHgDWaa1HAevMxz3NDtyntR4PzAFuN39HroytGjhLaz0FmAosUkrNAZ4AntZajwQK\ngZt6MKZadwEHGjzuDTEBnKm1ntpgXHpveG89A6zWWo8FpmD83lwWl9b6oPk7mgrMACqAT1wZE4BS\nKgr4NRCvtZ4IWIGl9MR7S2s9IL6AU4A1DR4/CDzownjigJ8aPD4IRJrfRwIHe8Hv7FPgnN4SG+AD\n7ARmY8zGdGvpb9tDsURjfFicBXwOKFfHZP7cVCCsSZlL/35AIHAEc8BKb4mrQRwLgQ29ISYgCkgH\nQjC2Jf4cOLcn3lsDpmZA/S+5VoZZ1ltEaK2Pmd8fByJcGYxSKg6YBmzBxbGZzTG7gRzgayAZKNJa\n281TXPG3/CfwO8BpPg7tBTEBaOArpdQOpdQtZpmr31vDgFzgVbNZ7WWllG8viKvWUuBd83uXxqS1\nzgT+DhwFjgHFwA564L01kJJBn6GN9O+yMb9KKT/gI+BurXVJw2OuiE1r7dBGdT4amAWM7cmf35RS\n6kIgR2u9w5VxtGKe1no6RnPo7Uqp+Q0Puui95QZMB57XWk8DymnS/OKq97zZ9n4x8EHTY66Iyeyj\nWIyRQIcAvjRvUu4WAykZZAIxDR5Hm2W9RbZSKhLA/DfHFUEopdwxEsHbWuuPe1NsWusi4BuManKQ\nUsrNPNTTf8u5wMVKqVTgPYymomdcHBNQd2eJ1joHow18Fq7/+2UAGVrrLebjDzGSg6vjAiNp7tRa\nZ5uPXR3T2cARrXWu1roG+Bjj/dbt762BlAy2AaPMXnkPjKrhKhfH1NAqYJn5/TKM9voepZRSwCvA\nAa31P3pDbEqpcKVUkPm9N0YfxgGMpLDEFTFprR/UWkdrreMw3kfrtdbXuDImAKWUr1LKv/Z7jLbw\nn3Dxe0trfRxIV0qNMYsWAPtdHZfpKuqbiMD1MR0F5iilfMz/j7W/q+5/b7miw8ZVX8D5wCGMNuf/\nc2Ec72K0B9Zg3DXdhNHmvA44DKwFQlwQ1zyMavFeYLf5db4rYwMmA7vMmH4C/miWDwe2AkkYVXxP\nF/0tzwA+7w0xmT9/j/mVUPse7yXvranAdvPv+F8g2NVxYTTB5AOBDcp6w+/qYSDRfL+/CXj2xHtL\nlqMQQggxoJqJhBBCtEKSgRBCCEkGQgghJBkIIYRAkoEQQggkGQghhECSgRBCCOD/A8fJswOEUbDi\nAAAAAElFTkSuQmCC\n" } } ], "source": [ "plt.plot(y,label=r'$y$')\n", "plt.plot(np.linalg.matrix_power(M,50)@y,'--',label=r'$M^{50}@y$')\n", "plt.legend()" ], "id": "c8b97a37-6246-47b2-b642-708abcc53f1e" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(풀이)`" ], "id": "9bdef8c5-3f6d-4995-a904-749914836212" }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [], "source": [ "class Stock: \n", " def __init__(self):\n", " self.y = None\n", " self.sy = None\n", " def crawling(self,code,start_date,end_date):\n", " self.y = yf.download(code, start=start_date, end=end_date)['Adj Close'].to_numpy()\n", " def smoothing(self,n):\n", " T = len(self.y)\n", " self.n = n\n", " M = (np.eye(T) + np.array([abs(i-j)<2 for i in range(T) for j in range(T)]).reshape(T,T))/4\n", " M[0,0] = 3/4; M[-1,-1]= 3/4 \n", " self.sy = np.linalg.matrix_power(M,50)@self.y\n", " def plot(self):\n", " plt.plot(self.y,label=r'$y$')\n", " plt.plot(self.sy,'--',label=r'$M^{}@y$'.format(self.n))\n", " plt.legend() " ], "id": "e3afad0b-28c7-47ea-8dbd-4888c5d5a971" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`2`. 1에서 만든 Stock 클래스에서 kakao 인스턴스를 생성하라. 생성된 kakao\n", "인스턴스에서 crawling 메소드를 이용하여 아래의 조건에 맞는 주식을\n", "긁어오라.\n", "\n", "- code: ‘035720.KS’ (카카오)\n", "- start_date = “2023-01-01”\n", "- end_date = “2023-05-26”\n", "\n", "이후 .smoothing 메소드를 이용하여 $n=50$회 스무딩하고 .plot 메소드를\n", "이용하여 결과를 시각화하라.\n", "\n", "(사용예시)" ], "id": "cb2c0d59-70bb-46f4-947e-cfe1f025c632" }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [], "source": [ "kakao = Stock()" ], "id": "804200cf-beed-4c82-bac9-16241ec1ed8c" }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[*********************100%***********************] 1 of 1 completed" ] } ], "source": [ "kakao.crawling(code='035720.KS',start_date='2023-01-01',end_date='2023-05-26')" ], "id": "d305076c-1cb7-4570-a34a-46e94a9b8c63" }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [], "source": [ "kakao.smoothing(50)" ], "id": "27d51838-e0a7-4f79-ad85-e4b3fe455105" }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "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\nOiBomqZppv8HguuaDmUrDOUAAAAASUVORK5CYII=\n" } } ], "source": [ "kakao.plot()" ], "id": "92084d10-f9ca-40e1-80dd-da8bdd48d70c" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(풀이)` 사용예시가 곧 풀이임\n", "\n", "`3`. LinearRegression 이라는 이름의 클래스를 만들고 아래의 기능을\n", "넣어라.\n", "\n", "**(1)** “클래스 $\\to$ 인스턴스” 인 시점에 길이가 $n$인 numpy array\n", "${\\bf x}=(x_1,\\dots,x_n)$, ${\\bf y}=(y_1,\\dots,y_n)$을 입력으로 받아\n", "내부에 저장한다.\n", "\n", "**(2) fit 메소드**: fit은 내부에 저장된 ${\\bf x}$, ${\\bf y}$를 이용하여\n", "$\\hat{\\bf y}=(\\hat{y}_1,\\dots,\\hat{y}_n)$을 계산하는 역할을 한다. 계산은\n", "아래의 수식을 이용한다.\n", "\n", "$$\\hat{\\bf y}= {\\bf X}({\\bf X}^T {\\bf X})^{-1}{\\bf X}^T {\\bf y}, \\quad {\\bf X}=\\begin{bmatrix} 1 & x_1 \\\\ 1 & x_2 \\\\ \\dots \\\\ 1 & x_n \\end{bmatrix}$$\n", "\n", "**hint** 아래의 코드를 관찰하라." ], "id": "48005433-3dfe-4011-907a-ee63f0677ea4" }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "x = np.array([0.00983, 0.01098, 0.02951, 0.0384 , 0.03973, 0.04178, 0.0533 ,\n", " 0.058 , 0.09454, 0.1103 , 0.1328 , 0.1412 , 0.1497 , 0.1664 ,\n", " 0.1906 , 0.1923 , 0.198 , 0.2141 , 0.2393 , 0.2433 , 0.3157 ,\n", " 0.3228 , 0.3418 , 0.3552 , 0.3918 , 0.3962 , 0.4 , 0.4482 ,\n", " 0.496 , 0.507 , 0.53 , 0.5654 , 0.582 , 0.5854 , 0.5854 ,\n", " 0.6606 , 0.7007 , 0.723 , 0.7305 , 0.7383 , 0.7656 , 0.7725 ,\n", " 0.831 , 0.8896 , 0.9053 , 0.914 , 0.949 , 0.952 , 0.9727 ,\n", " 0.982 ])\n", "y = np.array([0.7381, 0.7043, 0.3937, 0.1365, 0.3784, 0.3028, 0.1037, 0.3846,\n", " 0.706 , 0.7572, 0.2421, 0.232 , 0.9855, 1.162 , 0.4653, 0.6791,\n", " 0.6905, 0.6865, 0.9757, 0.7665, 0.9522, 0.4641, 0.5498, 1.1509,\n", " 0.5288, 1.1195, 1.1659, 1.4341, 1.2779, 1.1648, 1.4002, 0.7472,\n", " 0.9142, 0.9658, 1.0707, 1.4501, 1.6758, 0.8778, 1.3384, 0.7476,\n", " 1.3086, 1.7537, 1.5559, 1.2928, 1.3832, 1.3115, 1.3382, 1.536 , \n", " 1.9177, 1.2069])" ], "id": "1bb05e4e-3739-4a9f-adae-9d0574526f84" }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "n = len(x)\n", "X = np.stack([np.ones(n),x],axis=1)\n", "yhat = X@np.linalg.inv(X.T@X)@X.T@y " ], "id": "5caa77e4-e376-4ecb-9668-60cf16f8cba6" }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(3) plot 메소드**:c\n", "\n", "**hint** 아래의 코드를 관찰하라." ], "id": "ce8c2de1-62d9-4aa5-b0e8-ed1e3aff368a" }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "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\nK9rvJESKAAAAAElFTkSuQmCC\n" } } ], "source": [ "plt.plot(x,y,'o',label=r'$(x_i,y_i)$')\n", "plt.plot(x,yhat,'--',label=r'$(x_i,\\hat{y}_i)$')\n", "plt.legend()" ], "id": "7af03974-3371-423f-a4c6-9f0eac99bac1" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(풀이)`" ], "id": "44dd0357-e052-40cd-8987-a5acc81a1b21" }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [], "source": [ "class LinearRegression: \n", " def __init__(self,x,y):\n", " self.x = x\n", " self.y = y \n", " def fit(self):\n", " n = len(self.x)\n", " self.X = np.stack([np.ones(n),self.x],axis=1)\n", " self.yhat = self.X@np.linalg.inv(self.X.T@self.X)@self.X.T@self.y \n", " def plot(self):\n", " plt.plot(self.x,self.y,'o',label=r'$(x_i,y_i)$')\n", " plt.plot(self.x,self.yhat,'--',label=r'$(x_i,\\hat{y}_i)$')\n", " plt.legend()" ], "id": "4fc635e3-f48e-4404-83d1-b4960457bb26" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`4`. LinearRegression 을 이용하여 아래의 자료에 대한 분석을 진행하라. 즉\n", "`.fit()` 을 이용하여 $\\hat{y}_i$ 를 계산하고 `.plot()`을 이용하여 결과를\n", "시각화하라." ], "id": "d787b2d8-7e40-42c5-9ac6-536be72b75b5" }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [], "source": [ "x = np.array(\n", " [0.007, 0.008, 0.008, 0.011, 0.037, 0.047, 0.059, 0.07 , 0.072,\n", " 0.075, 0.078, 0.08 , 0.082, 0.11 , 0.114, 0.117, 0.133, 0.15 ,\n", " 0.161, 0.163, 0.172, 0.208, 0.209, 0.221, 0.229, 0.231, 0.234,\n", " 0.235, 0.249, 0.251, 0.256, 0.269, 0.269, 0.273, 0.275, 0.298,\n", " 0.305, 0.309, 0.34 , 0.362, 0.371, 0.374, 0.382, 0.387, 0.388,\n", " 0.394, 0.395, 0.397, 0.401, 0.404, 0.419, 0.433, 0.436, 0.466,\n", " 0.481, 0.492, 0.495, 0.508, 0.511, 0.512, 0.554, 0.57 , 0.574,\n", " 0.575, 0.584, 0.6 , 0.601, 0.615, 0.618, 0.623, 0.629, 0.633,\n", " 0.646, 0.65 , 0.654, 0.662, 0.673, 0.686, 0.702, 0.744, 0.754,\n", " 0.766, 0.772, 0.781, 0.798, 0.8 , 0.807, 0.836, 0.837, 0.871,\n", " 0.873, 0.877, 0.879, 0.889, 0.891, 0.902, 0.904, 0.923, 0.952,\n", " 0.981]\n", ")" ], "id": "c5d04bb0-c051-4751-b8bb-776f51ad391e" }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [], "source": [ "y = np.array(\n", " [4.004, 4.189, 5.483, 4.902, 5.174, 4.468, 4.95 , 4.463, 5.476,\n", " 4.446, 4.764, 5.244, 4.357, 4.796, 5.464, 4.196, 5.244, 4.868,\n", " 5.358, 4.493, 4.831, 4.716, 4.929, 4.588, 4.718, 4.389, 4.985,\n", " 4.266, 4.291, 3.697, 4.248, 4.88 , 5.126, 4.563, 4.131, 4.728,\n", " 4.168, 4.584, 3.953, 4.747, 3.592, 5.023, 4.601, 3.904, 4.092,\n", " 4.37 , 3.922, 4.145, 4.576, 4.25 , 4.051, 3.616, 4.634, 3.496,\n", " 4.631, 4.025, 4.197, 4.226, 4.808, 3.676, 3.834, 3.197, 4.36 ,\n", " 3.547, 3.956, 3.522, 4.26 , 3.443, 3.97 , 4.068, 4.186, 3.262,\n", " 3.452, 3.946, 3.875, 3.444, 3.501, 3.959, 3.843, 2.679, 3.266,\n", " 3.506, 2.916, 3.714, 4.007, 2.795, 3.329, 2.756, 3.72 , 2.381,\n", " 2.798, 3.035, 3.492, 3.22 , 3.073, 3.85 , 3.233, 3.396, 3.264,\n", " 2.986]\n", ") " ], "id": "65929f40-7fe4-4248-b326-27f5424aaa4d" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(풀이)`" ], "id": "205dbc9c-a8a2-4503-809f-486aba0cd12b" }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "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\nY6MAAAAASUVORK5CYII=\n" } } ], "source": [ "linreg = LinearRegression(x,y)\n", "linreg.fit()\n", "linreg.plot()" ], "id": "9c9d75e4-272e-4a07-8374-68a1e3a931a9" } ], "nbformat": 4, "nbformat_minor": 5, "metadata": { "kernelspec": { "name": "python3", "display_name": "Python 3", "language": "python" }, "language_info": { "name": "python", "codemirror_mode": { "name": "ipython", "version": "3" }, "file_extension": ".py", "mimetype": "text/x-python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.16" } } }