1. 곡선의 접선 

  - 미분계수란 y=f(x)의 접선의 기울기 

 

2. 윤곽 추출하기 

  - 명암차가 급격한 곳을 보고 영영과 영역의 관계를 파악 = 윤곽을 파악 

  - 값의 변화를 보는 방법 = 뺄셈 

%matplotlib inline
import matplotlib.pyplot as plt
from PIL import Image

src_img = Image.open('sample.png') #이미지를 읽어들인다
plt.imshow(src_img)
plt.show()

width, height = src_img.size #이미지의 크기를 조정한다 

dst_img = Image.new('RGB', (width, height)) #출력을 위해 영역 할당

src_img = src_img.convert("L") #컬러에서 흑백으로 전환해라 

#윤곽을 추출하는 방법
for y in range(0, height-1):
    for x in range(0, width-1):
        diff_x = src_img.getpixel((x+1, y)) - src_img.getpixel((x, y))
        diff_y = src_img.getpixel((x, y+1)) - src_img.getpixel((x, y))
        diff = diff_x + diff_y
            
        #출력 
        if diff >=20:
            dst_img.putpixel((x, y), (255, 255, 255))
        else:
            dst_img.putpixel((x, y), (0, 0, 0))
            
plt.imshow(dst_img)
plt.show()

Intro. 적분

  - 면적을 다룸 

  - 미분을 거꾸로 연산한 것 

 

 

1. 변화 쌓기 

  - 25세까지 얼마의 금액을 받을 수 있을까? / 40대가 되면 얼마나 받을 수 있을까? 에 대한 답을 아래 그래프에서

    찾을 수 있음

  - y축의 값을 높여 그래프를 확대한 것 

  - 즉 20~24세까지 받은 연봉의 합계는 높이로 표시됨 = 적분의 기본 

 

 

2. 적분하기 

 

 

2-2. 막대그래프의 너비와 오차의 관계 

너비 면적
1 55
0.5 52.5
0.1 50.49999
0.01 50.049999
0.001 50.005

 

 

3. 정적분, 부정적분 

 

  - 40세에서 49세까지 받을 수 있는 급여의 합계, 즉 특정한 구간의 합계를 구하는 방법 = 정적분 

  - 적분할 범위를 지정하지 않은 식의 합계 = 부정적분

 

 

5. 적분의 공식

1) -3~3까지 x^2 + 2x + 5의 적분을 python으로 구하기 

① 적분할 식을 F( ) 함수로 정의하고, 이 함수에 인수(-3, 3)을 넣어 계산하는 방법

>>> def F(x):
...     return 1/3*x**3 + x**2 + 5*x
...
>>> a = F(-3)
>>> b = F(3)
>>> b - a
48.0

 

② SciPy에 포함된 integrate 모듈에 정의된 quad( ) 함수를 이용해 정적분을 구하는 방법 

>>> from scipy import integrate
>>> def func(x):
...     return x**2 + 2*x + 5
...
>>> integrate.quad(func, -3, 3)
(47.999999999999, 5.32907051820075e-13)

  - quad 함수는 두 개의 값을 반환하는데, 그 중 첫번째로 반환하는 값이 정적분을 통해 구한 값 

Intro. 미분 

  - 미세한 부분

  - 연속으로 변화하는 값의 매우 미세한 부분에 주목해서 그 변화하는 모습을 조사하는 작업 

 

 

1. 변화율 

  - y값의 변화량 / x 값의 변화량

  - x와 y값의 변화량에 대한 비율 

 

 

2. 미분계수

  - 직선 AB의 기울기 

  - (f(a+h) - f(a)) / h

  - 점 B를 점 A로 가까워지도록 옮기면 h의 값은 한 없이 0에 가까워 질 것 

  - 극한까지 매우 가까이 옮겼을 때 lim를 취한다고 하고, 이것을 미분계수라고 함 

  - 단순히 설명하자면, 미분 계수 : 어떤 점에서의 변화율

  - 이러한 미분계수, 어떤 점에서의 변화율을 그래프로 나타낸 것 = 미분 그래프, 미분한 결과 

 

 

3. 미분하기 

 - 함수 f(x)의 도함수 

 

 

4. 미분공식

f(x) f'(x)
k (상수) 0
x 1
x^n nx^(n-1)

 

 

4-2. f(x) = x^3 + 3x^2 + 3x + 1이 f'(x) = 3x^2 + 6x + 3이 되는지 numpy 배열을 이용해 확인하기 

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-10, 10, 0.1) #x값 입력

y = x**3 + 3*x**2 + 3*x + 1 #원래 함수 입력
plt.plot(x,y)
plt.grid(color='0.8')
plt.show

y2 = 3*x**2 + 6*x + 3 #원래 함수의 도함수 입력
plt.plot(x,y2)
plt.grid(color='0.8')
plt.show()

 

 

5. 도함수가 알려주는 것 

 

  ① 함수의 극값 

     - 곡선의 정점과 바닥 

     - 극소 : 골짜기의 바닥, 극대 : 산의 정점

     - f'(x)가 0이 될 때의 x의 위치 → 변화 x 

     

  ② f'(x)의 극대점 

    - f(x)가 가장 크게 변화하는 지점 

    

  ③ 도함수의 극값 

    - f''(x)이 0인 값 → f'(x)의 극값 → f(x)의 변화율이 가장 큰 지점 

        => 변곡점

 

 

 

1. 두 개의 그래프 (곡선, 꺾은선)

 

1) 나이에 따라 연봉이 얼마나 오르는지에 관한 그래프 

 - 곡선 : 연봉이 일정하지 않은 경우

 - 꺾은선 : 연봉이 일정하게 오르거나 내려가는 경우 

 

  -  우리가 알고 싶은 것 : 절정을 정확히 알기 

 

① 주어진 그래프 그리기 

 

 

 

② 차분 그래프 그리기 : 인접한 두 개의 연도에 대한 연봉의 차를 구하고 그 그래프 그리기 

%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd

dat = pd.read_csv('salary.csv', encoding='UTF-8')

x = dat['나이']
y = dat['연봉']

cnt = len(dat) #데이터의 개수를 세기

diff_y = [] #연봉의 차를 구하는 것이므로 델타 y, 즉 y의 차분 구하는 명령문
for i in range(0, cnt-1):
    diff_y.append(y[i+1] - y[i]) 
    
plt.plot(x[1:], diff_y) #왜 x를 첫 요소를 건너뛰고 두 번째 요소부터 그려야 하는지?
plt.grid(color='0.8')
plt.show()

 

2) 두 개의 그래프 차이, 즉 차분 그래프를 그리면서 우리가 알 수 있는 것 

  - 차분이 0이 되는 곳에 선을 그으면 연봉이 절정을 이루는 곳과 동일 

  - 차분이 0이라는 뜻 : 변화가 없음 → 연봉 그래프가 평탄한 부분

  - 차분 그래프를 이용하면 정점을 확실히 알 수 있음 

  - 52세까지는 순탄하게 연봉이 오르는 것 처럼 보이지만, 차분 그래프를 그리면 37세 전후로 절정을 이루고,

    그 후로 연봉이 늘기는 하지만 증가량은 매년 조금씩 줄고 있음을 알 수 있음

1. 기타 명령문 = 소문자, 마우스 위치나 도형 = 대문자 

'cf' 카테고리의 다른 글

1. python 메모  (0) 2021.02.19

1. 코딩 명령문 

# 1 - 라이브러리 가져오기 
import pygame #pygame 불러오기
from pygame.locals import * #import 안에 모든 필요한 것을 불러오겠다(?)
import math #math 함수 불러오기
import random #random 함수 불러오기

# 2 - 게임 초기화(의 의미?)
pygame.init() #pygame 시작하는 함수
width, height = 640, 480 #초기 창 크기 지정
screen = pygame.display.set_mode((width, height)) 
FPS = 60 #초당 프레임 60으로 지정
fpsClock = pygame.time.Clock() #프레임 시간 관련한 함수 

#키 입력 체크
keys = [False, False, False, False] #현재 우리는 키보드를 움직이지 않고 있으므로 false
playerpos=[100,100] #플레이어의 위치 설정 

#플레이어 위치(버니)
acc=[0,0] #뒷 배경등 모두 0, 0으로 위치 설정 
arrows=[] #화살 리스트 설정 
badtimer=100 
badtimer1=0
badguys=[[640, 100]] #적의 위치 설정 
healthvalue = 194 #pH, 즉 체력바 크기 설정 
pygame.mixer.init() #pygame 업데이트 

# 3 - 영상 로드하ㅣ기 
player = pygame.image.load("resources/images/dude.png") #플레이어의 이미지 로드 
grass = pygame.image.load("resources/images/grass.png") #잔디 이미지 로드
castle = pygame.image.load("resources/images/castle.png") #성 이미지 로드 
arrow = pygame.image.load("resources/images/bullet.png") #화살 이미지 로드 
badguyimg1 = pygame.image.load("resources/images/badguy.png") #적 이미지 로드 
badguyimg=badguyimg1
healthbar = pygame.image.load("resources/images/healthbar.png") #체력바 이미지 로드
health = pygame.image.load("resources/images/health.png") #체력 이미지 로드 (빨간색)
gameover = pygame.image.load("resources/images/gameover.png") #게임오버 문구 로드 
youwin = pygame.image.load("resources/images/youwin.png") #이겼다는 문구 로드 

# 3.1 = 오디오 불러오기 
hit = pygame.mixer.Sound("resources/audio/explode.wav") #적을 맞췄을때 효과음 로드 
enemy = pygame.mixer.Sound("resources/audio/enemy.wav") #적이 오는 효과음 로드 
shoot = pygame.mixer.Sound("resources/audio/shoot.wav") #화살 쏠 때 효과음 로드
hit.set_volume(0.05) #적을 맞췄을 때 소리의 크기를 설정
enemy.set_volume(0.05) #적이 등장할때 소리의 크기를 설정
shoot.set_volume(0.05) #화살 쏠 때 소리의 크기를 설정
pygame.mixer.music.load("resources/audio/moonlight.wav") #배경음악 로드 
pygame.mixer.music.play(-1, 0.0) #배경음악을 반복재생
pygame.mixer.music.set_volume(0.25) #배경음악의 크기를 설정 

# 4 - 루핑 계속하기 
running = 1 #딱 한번 게임을 진행함(게임오버되면 다시 시작할 수 있게 자동 재생이 아님)
exitcode = 0 
while running: #게임이 진행되는 동안 
    badtimer-=1 #시간은 점점 줄어듦
    
    # 5 - clear the screen before drawing it again 
    screen.fill(0) #게임이 진행될 때 배경을 채움 
# 잔디를 그린다
    for x in range(int(width/grass.get_width()) + 1): #잔디의 너비를 설정해줌
        for y in range( int(height/grass.get_height()) + 1): #잔디의 높이를 설정해줌 
            screen.blit(grass,(x*100,y*100)) #blit은 위치를 지정해주는 명령문

    # 성을 배치
    screen.blit(castle,(0,30)) #첫 번째 성의 위치 지정 
    screen.blit(castle, (0, 135)) #두 번째 성의 위치 지정 
    screen.blit(castle, (0, 240)) #세 번째 성의 위치 지정
    screen.blit(castle, (0,345)) #네 번째 성의 위치 지정
    
    # 6 - draw the screen elements # 칸 맞춰줘야 이동 : x
    
     # 6.1 - Set player position and rotation 
    position = pygame.mouse.get_pos() #마우스 위치가 화살 위치가 되도록 지정
    angle = math.atan2(position[1]-(playerpos[1]+32),position[0]-(playerpos[0]+26)) #화면의 앵글 설정
    playerrot = pygame.transform.rotate(player, 360-angle*57.29) #토끼가 마우스를 쳐다보는대로 고개를 돌리기 설정
    playerpos1 = (playerpos[0]-playerrot.get_rect().width/2, playerpos[1]-playerrot.get_rect().height/2)
    screen.blit(playerrot, playerpos1) #화면을 우리가 지정해준 위치로 지정
    
     # 6.2 - Draw arrows
    for bullet in arrows: #화살에 대한 모든 함수 불러오기
        index = 0 #0으로 이름 지정
        velx=math.cos(bullet[0])*10 #x의 위치 지정
        vely=math.sin(bullet[0])*10 #y의 위치 지정
        bullet[1]+=velx #화살의 위치를 x로 지정
        bullet[2]+=vely #화살의 위치를 y로 지정 
        if bullet[1]<-64 or bullet[1]>640 or bullet[2]<-64 or bullet[2]>480:#만약 1번 화살이 640보다 작으면 
            arrows.pop(index) #화살이 만나 없어지게 설정 
        index+=1 #그러면 인덱스 0에서 1이 추가됨
        for projectile in arrows: 
            arrow1 = pygame.transform.rotate(arrow, 360-projectile[0]*57.29) #화살 1의 방향을 돌아가도록 설정
            screen.blit(arrow1, (projectile[1], projectile[2]))
            
             # 6.3 - 오소리 그리기 
    if badtimer==0: #오소리가 등장하는 그 구간을 0으로 일단 지정 
        badguys.append([640, random.randint(50, 430)]) #적이 무작위하게 등장하도록 설정
        badtimer=100-(badtimer1*2) #오드타이머가 몇 번 돌았는지에 대한 식 
        if badtimer1>35: #만약 오드타이머가 35보다 더 뛰었다면 
            badtimer1=35 #딱 그만큼의 구간만큼 오소리가 등장하도록 지정 
        else:
            badtimer1+=5 # #만약 오드타이머가 35보다 더 안돌았다면 더 많은 구간의 오소리가 등장하도록 지정
    index=0 #오소리 위치 업데이트 
    for badguy in badguys: #오소리의 모든 함수에서 
        if badguy[0]<-64: #오소리가 화면 밖에 얼마나 나왔는지 점검 
            badguys.pop(index)
        badguy[0] -= 7 
        
        # 6.3.1 - 오소리가 성을 공격하게 만들기  
        badrect = pygame.Rect(badguyimg.get_rect()) 
        badrect.top=badguy[1] 
        badrect.left=badguy[0]
        if badrect.left<64: #오소리의 값이 64보다 작으면 
            healthvalue -= random.randint(5,20) #오소리를 삭제하고 게임의 상태 값을 5~20사이의 임의의 값으로 줄임 (더 느린 화면 만들기)
            badguys.pop(index) #상태 업데이트 
            
             #6.3.2 - 충돌 여부 점검 
        index1=0 #상태 업데이트 
        for bullet in arrows: #화살의 모든 함수에서 
            bullrect=pygame.Rect(arrow.get_rect())
            bullrect.left=bullet[1] 
            bullrect.top=bullet[2]
            if badrect.colliderect(bullrect): #화살을 반복해서 쏘게 하기 
                acc[0]+=1 #충돌하는지 확인
                badguys.pop(index) #충돌, 업데이트 
                arrows.pop(index1) #충돌, 업데이트 
            index1+=1
            
        # 6.3.3 - Next bad guy
        index+=1
    for badguy in badguys:
        screen.blit(badguyimg, badguy)
        
          # 6.4 - 시계 그리기 
    font = pygame.font.Font(None, 24) #24사이즈로 지정된 기본 pygame 글꼴 사용 
    survivedtext = font.render(str((90000-pygame.time.get_ticks())/60000)+":"+str((90000-pygame.time.get_ticks())/1000%60).zfill(2), True, (0,0,0))
    textRect = survivedtext.get_rect() #텍스트 변수 만들기 
    textRect.topright=[635, 5] #텍스트 위치 
    screen.blit(survivedtext, textRect) #텍스트 업데이트 
    
     # 6.5 - 체력바 만들기 
    screen.blit(healthbar, (5,5)) #체력바 위치 설정 
    for health1 in range(healthvalue):
        screen.blit(health, (health1+8,8)) #체력바 업데이트 
        
    # 7 - 화면 업데이트 
    pygame.display.flip() #화면 업데이트 
    fpsClock.tick(FPS) #시간 설정 
    
    # 8 - 이벤트를 통한 루프 구현 
    for event in pygame.event.get():
        # 이벤트가 x버튼인지 먼저 확인
        if event.type==pygame.QUIT: 
            # 만약 게임이 끝나지 않았다면 
            pygame.quit()
            exit(0)
            # 키를 누를 때
        if event.type == pygame.KEYDOWN:
            if event.key==K_w:
                keys[0]=True #위와 
            elif event.key==K_a:
                keys[1]=True #왼쪽
            elif event.key==K_s:
                keys[2]=True #아래쪽
            elif event.key==K_d:
                keys[3]=True #오른쪽으로 화살을 쏜다
            #키를 뗄 때
        if event.type == pygame.KEYUP:
            if event.key==pygame.K_w: #위와
                keys[0]=False
            elif event.key==pygame.K_a: #인쪽과
                keys[1]=False
            elif event.key==pygame.K_s: #아래쪽과
                keys[2]=False
            elif event.key==pygame.K_d: #오른쪽으로 화살을 쏘지 않음 
                keys[3]=False
                # 9 - Move player 플레이어 움직이게 하기
    if keys[0]:
        playerpos[1]-=5
    elif keys[2]:
        playerpos[1]+=5
    if keys[1]:
        playerpos[0]-=5
    elif keys[3]:
        playerpos[0]+=5
    if event.type==pygame.MOUSEBUTTONDOWN:#마우스를 아래로 누른다면 
        position=pygame.mouse.get_pos() #위치가 바뀌고
        acc[1]+=1 #화살을 쏜다 
        arrows.append([math.atan2(position[1]-(playerpos1[1]+32),position[0]-(playerpos1[0]+26)),playerpos1[0]+32,playerpos1[1]+32])

   # 10 - Win/Lose check #승패를 확인하기 
    if pygame.time.get_ticks()>=90000:
        running=0 #게임이 계속 진행되고 있고
        exitcode=1 
    if healthvalue<=0: #체력이 0보다 작다면 
        running=0 #게임은 계속 진행되지만 
        exitcode=0 #텍스트 문구가 뜸 (game over)
    if acc[1]!=0: 
        accuracy=acc[0]*1.0/acc[1]*100
    else:
        accuracy=0
        
# 11 - Win/Lose display #승패시 화면
if exitcode==0: #졌을때의 화면 
    pygame.font.init() 
    font = pygame.font.Font(None, 24) #폰트의 크기를 24로 하겠음 
    text = font.render("Accuracy: "+str(accuracy)+"%", True, (255,0,0)) #폰트의 색 설정
    textRect = text.get_rect()
    textRect.centerx = screen.get_rect().centerx #폰트의 크기 설정 
    textRect.centery = screen.get_rect().centery+24 #폰트의 크기 설정 
    screen.blit(gameover, (0,0)) #게임 오버 뜨기
    screen.blit(text, textRect) #업데이트 
else: #진게 아니라면 = 이긴거라면 
    pygame.font.init() 
    font = pygame.font.Font(None, 24) #폰트의 크기 설정 
    text = font.render("Accuracy: "+str(accuracy)+"%", True, (0,255,0)) #폰트의 색 설정 
    textRect = text.get_rect()
    textRect.centerx = screen.get_rect().centerx #폰트의 크기 설정 
    textRect.centery = screen.get_rect().centery+24 #폰트의 크기 설정 
    screen.blit(youwin, (0,0)) #you win이라는 문구 뜨게 하기 
    screen.blit(text, textRect)
while 1: #게임이 계속 진행되는 동안에는 (마지막 마무리 이벤트 함수)
    for event in pygame.event.get(): 
        if event.type == pygame.QUIT:#만약 게임이 끝난다면  
            pygame.quit() #게임을 그만둘 때 
            exit(0) #게임이 끝난다 
    pygame.display.flip() #마지막 총 업데이트 

 

2. 잘못된 영상

 

 

 

3. 토끼게임

 

 

 

1. www.raywenderlich.com 

 

Beginning Game Programming for Teens with Python

This is a post by Tutorial Team Member Julian Meyer, a 13-year-old python developer. You can find him on Google+ and Twitter. Have you ever wondered how video games are created? It’s not as complicated as you might think! In this tutorial, you’ll creat

www.raywenderlich.com

 

2. 위 사이트에 들어가서 pygame을 검색하고, "Beginning Game Programming for Teens with Python"게시글을 찾기

  - 토끼 게임을 만드는데 필요한 이미지와 소리를 다운받기

 

3. 프로젝트 파일에 압축 풀고, 제대로 폴더가 생겼는지 확인하기 

'pygame > 02. 토끼게임 만들기' 카테고리의 다른 글

2. 토끼 게임 만들기  (0) 2021.02.23

1. 왜 1~256까지 범위를 설정하면, 255까지 (즉, 1을 빼고) max 범위를 설정해야 하는가?

  - 1이 아닌 0부터 시작하기 때문임 

  - python같은 코딩 프로그램에선 (컴퓨터의 세계에선) 1이 아닌 늘 0으로 시작하는 것을 명심해야 함

 

 

2. 괄호의 의미들 

 

1) [ ] : 리스트

  - 순서대로 저장하는 시퀀스이자 변경 가능한 목록(Mutable List)

 

2) { } : 딕셔너리

  - 딕셔너리는 리스트의 각 항목의 빈도수를 세는데 편리

  - 키/값 구조로 이뤄진 딕셔너리

  - 키와 값의 쌍 구조를 가지고 있는 자료 구조 

 

 

3) ( ) : 튜플

  - 소괄호 ()를 이용하여 요소들을 묶음

  - 리스트와 다르게 변수에 대입 가능 

 

 

 

3. 파이썬 계층 구조

 

 

 

4. 슬라이싱 : 위치를 지정하면 해당 위치의 배열 포인터를 얻게 되며 이를 통해 연결된 객체를 찾아 실제 값을 찾는 것

 

문법

결과

설명

S[1:4]

녕하세

인덱스 1에서(0부터 시작) 4 이전까지(4는 포함하지 않는다) 표현한다.
4개를 의미하는 게 아니므로 유의해야 한다.

S[1:-2]

녕하

인덱스 1에서 -2 이전까지(-2는 포함하지 않는다) 표현한다.
뒤에서부터는 음수로 접근이 가능하다.

S[1:]

녕하세요

문자열의 시작 또는 끝은 생략 가능하다.

S[:]

안녕하세요

둘 다 생략하면 사본을 리턴한다.
파이썬은 a=b와 같은 형태로 할당하면 변수의 값이 할당되는 것이 아니라 a 변수가 b 변수를 참조하는 형태가 된다.
참조가 아닌 값을 복사하기 위해[:]를 사용할 수 있으며,
이 방식은 문자열이나 리스트를 복사하는 파이썬다운 방식(Pythonic Way)이기도 하다.

S[1:100]

녕하세요

인덱스가 지나치게 클 경우 문자열의 최대 길이만큼만 표현된다.
S[1:] 과 동일하다.

S[-1]

마지막 문자(뒤에서 첫 번째)

S[-4]

뒤에서 4번째

S[:-3]

안녕

뒤에서 3개 글자 앞까지

S[-3:]

하세요

뒤에서 3번째 문자에서 마지막까지

S[::1]

안녕하세요

1은 기본값으로 동일하다.

S[::-1]

요세하녕안

뒤집는다.

S[::2]

안하요

2칸씩 앞으로 이동한다.

 

 

'cf' 카테고리의 다른 글

2. pygame  (0) 2021.02.23

1. 난수 : 수를 나열하는 데에 규칙성이 없고 각각의 수가 등장하는 횟수가 거의 같은 모습의 수

>>> import random #random모듈을 불러오기
>>> rand = [] #난수를 넣을 리스트 생성
>>> for i in range(10): #난수 10개를 만들 것 
...   rand.append(random.randint(0,100)) #0~100의범위에서 난수를 생성
...
>>> rand #난수는?
[35, 0, 9, 24, 3, 51, 43, 10, 36, 44]

 

 

 

2. 난수를 사용할 때 주의할 점

  - Rn+1 = (a x Rn + b)mod c

  - Rn : 난수, Rn+1 : Rn보다 한 수 뒤에 난수

  - a, b, c : 양수 / c>a, c>b를 만족하는 정수

  - mod : 나눗셈의 나머지를 구하는 연산자

  - c로 나눈 나머지를 이용해 난수를 만들기 때문에 이 식으로 생성되는 난수는 0 ~ c-1의 범위에 있게 됨 

 

  - 시험삼아 a=4, b=7, c=9로 지정하고 난수의 초깃값을 1로 설정하여 계산했을 때 

>>> a = 4
>>> b = 7
>>> c = 9
>>> rn = 1 #난수의 초깃값 1로 설정 
>>> rand = [] #난수 넣을 리스트 생성
>>> for i in range(20): #20개 선택
...  rn = ((a * rn + b) % c) #난수를 생성한다
...  rand.append(rn) 
...
>>> rand
[2, 6, 4, 5, 0, 7, 8, 3, 1, 2, 6, 4, 5, 0, 7, 8, 3, 1, 2, 6]

  - 계산식이 생성하는 난수는 어떠한 규칙이 존재함 

1. 이동 평균 

- 사용하는 경우 : 2019년 3월에서 5월까지의 서울 일별 평균 기온. 봄에서 이른 여름까지 기온이 변화한 내용을 파악하고 싶을 때 이동평균 사용

%amtplotlib inline #jupiter computer 시작하기 
import matplotlib.pyplot as plt #pyplot을 plt로 불러오기
import pandas as pd #pandas를 pd로 불러오기
import numpy as np #numpy를 np로 불러오기

dat = pd.read_csv('temperature.csv', encoding='UTF-8') #csv 데이터 불러오기
n = len(dat) #데이터의 수를 세어라
x = range(1, n+1) #x축값 (1 ~ 데이터 수)

y = dat['평균기온'] #y축 값(평균기온)
plt.plot(x,y) #그래프를 그려라

 

 

 

2. 회귀직선

- 사용하는 경우 : 기온이 27도를 넘으면 아이스크림이 잘 팔린다, 운동하는 습관이 없는 사람은 비만인 경향이 있다 등과 같이 과거에 나타난 통계 데이터를 다루면서 미래를 예측하는 경우 

 

1) 기온과 주스의 판매량

기온(x) 23 24 28 24 27 21 18 25 28 20
주스의
판매량(y)
37 22 62 32 74 16 10 69 83 7

 

>>> import numpy as np #numpy를 np로 불러오겠음
>>> mean_x = np.mean(x) #x의 평균값을 구하라 
>>> mean_y = np.mean(y) #y의 평균값을 구하라
>>> cov = np.mean((x-mean_x)*(y-mean_y)) #x와 y의 공분산을 구하라 

>>> var_x  = np.var(x) #x의 분산 지정

>>> a = cov/var_x #기울기:x와y의 공분산 / x의 분산
>>> b = mean_y - (a * mean_x) #절편 : y의 평균 - (기울기 x x의 평균)

① %matplotlib inline 

    import matplotlib.pyplot as plt ←pyplot을 plt로 불러오겠음

    import numpy as np ← numpy를 np로 불러오겠음

 

② x = np.array([23, 24, 28, 24, 27, 21, 18, 25, 28, 20]) #x축 배열 : 기온

    y = np.array([37, 22, 62, 32, 74, 16, 10, 69, 83, 7]) #y축 배열 : 주스의 판매량

 

③ a, b = np.polyfit(x, y, 1) # 회귀직선 그리기 

    y2 = a * x + b #직선의 방정식

    print('기울기: {0}, 절편: {1}'.format(a,b)) #기울기와 절편을 표시 

    

④ plt.scatter(x,y) #산포도 나타내기

    plt.plot(x, y2) #회귀직선을 그려라 

    plt.show()

 

 

+ Recent posts