%matplotlib inline #jupiter computer 시작하기
import matplotlib.pyplot as plt #pyplot을 plt로 불러오기
import pandas as pd #pandas를 pd로 불러오기
dat = pd.read_csv('score.csv', encoding='UTF-8') #데이터 불러오기
plt.scatter(dat['수학'], dat['과학']) #pyplot에 포함된 scatter함수 사용 (점을 그려라)
plt.axis('equal')
plt.show()
2. 공분산과 상관관계
- 공분산 = ((x-x의 평균)x(y-y의 평균)의 합계)/ 데이터의 개수
- 양수일 경우, x와 y가 모두 평균값보다 크거나 작은 경우
- 음수일 경우, x와 y 중 한 값은 크거나 작은 경우
>>> import numpy as np
>>> import pandas as pd
>>> dat = pd.read_csv('score.csv', encoding='UTF-8')
>>> correlation = np. corrcoef(dat['수학'], dat['과학'])
#직접 공분산이나 표준편차를 구하지 않아도 상관관계 계수 구하는 함수를 이용해 구할 수 있음
>>> correlation[0,1] #상관계수
0.827685316489
- 공분산은 두 데이터의 관계를 나타내지만 단위가 정해지지 않아 (스마트폰 사용 시간), (학력)같이 다른 데이터를 계산하는 경우 표준화 작업이 필요함 = 상관관계
- 철수와 사장님이 김밥집에서 일할 때 철수의 김밥 모양이 제각각이었음. 그래서 무게를 재 보니 사장님과 철수 모두 100g으로 동일한 무게가 나왔음
- 그러나 도수분포도를 보면 철수가 만든 김밥이 크기가 고르지 않다는 사실을 알 수 있음
사장님
94
105
107
106
88
철수
117
84
95
72
132
>>> import numpy as np #numpy모듈을 np로 불러오겠음
>>> owner = [94, 105, 107, 106, 88] #사장님의 데이터 지정
>>> mean = np.mean(owner) #평균을 구해라
>>> sum = 0 #답(멀어진 정도의합계)을 넣을 변수를 초기화한다(?)
>>> for d in owner: #모든 데이터에 대해
... sum = sum + (d-mean) #데이터-평균의 합계를 구한다
...
>>> sum
0.0
- 평균에서 멀어진 정도, 각각의 멀어진 정도를 모두 더하면 전체적인 멀어진 정도를 구할 수 있음
- 모든 데이터를 평탄하게 만든 값이 평균값이므로 이 평균값의 차를 모두 더하면 당연히 0이 될 것
- 데이터 값의 평균을 제곱한 값을 데이터 개수로 나누면 분산을 구할 수 있음
>>> sum = 0
>>> for d in owner:
... sum = sum + (d - mean)**2 #데이터-평균을 제곱한 값
...
>>> sum
290.0
(여기서의 sum = sum + (d-mean)**2
>>> import math #math 함수를 불러오겠음
>>> variance = sum/5 #분산을 구하라
>>> stdev = math.sqrt(variance) #표준편차(제곱한 값을 되돌리기 위해 루트로 계산한 값)
>>> variance, stdev #분산, 표준편차를 표시해라
(58.0, 7.615773105863909)
분산
표준편차
사장님
58
8
철수
476
22
2. 표준 점수
- 표준화 = (데이터-평균)/표준편차
- 표준점수 = ((점수-평균)/표준편차)*10 + 50
4월
9월
점수
320점
430점
평균
278점
388점
표준편차
60
60
>>> def dev_value(score, mean, stdev): #dev_value(함수의 인수), 함수의 인수는 점수, 평균값, 표준편차임
... return (score - mean) / stdev * 10 + 50 #표준 점수를 계산하라
...
>>> dev_value(320, 278, 60) #4월의 표준 점수를 계산하라
57.0
>>> dev_value(430, 388, 60) #9월의 표준 점수를 계산하라
57.0
- 굳이 myimage가 아니어도 됨. 그런데 pycharm에 넣기 편하게 이름을 변경한 것.
- jpg 형식의 파일만 되고(jpeg안됨) 파일명에 상관없이 함수에는 꼭 .jpg를 넣어야 함
② 사진 파일을 꼭! pycharm 프로젝트 파일 폴더에 함께 넣어준다.
- 경로를 꼭 이렇게 설정해야지 pycharm으로 불러올 수 있음
2)
import pygame
pygame.init()
#윈도우 창의 크기 설정하기
display_width = 800
display_height = 500
#우리의 화면이 우리가 설정한 저 변수에 따라 크기가 지정되도록 명령문 입력
ourScreen = pygame.display.set_mode((display_width, display_height))
#넣고 싶은 이미지를 myImg라는 변수로 지정하여 명령문 입력
myImg = pygame.image.load('123.jpg')
#함수를 지정해주는 것. 우리가 화면에 나타내려면 blit을 해주어야 함
def myimge(x,y):
ourScreen.blit(myImg,(x, y))
#첫 이미지의 위치 정해주기
x = (display_width * 0.1)
y = (display_height * 0.1)
finished = False
while not finished:
for event in pygame.event.get():
if event.type == pygame.QUIT:
finished = True
#우리의 원래 화면색 지정하기
ourScreen.fill((186, 231, 242))
myimge(x,y)
pygame.display.flip()
pygame.quit()
quit()
2. 창에 소리 넣기
1)우리가 넣을 음악 파일을 준비해야 함 (mp3파일)
- 이미지와 똑같이 프로젝트 폴더에 넣어야 함
- 음악 파일 명은 영문or숫자로 해야 함
import pygame
pygame.init()
#노래를 불러오는 명령문
pygame.mixer.music.load('노래명.mp3')
pygame.mixer.music.play(0) #음악이 몇 번 재생되는지 지정하는 명령문(0 = 1번, -1 = 반복재생)
display_width = 800
display_height = 500
ourScreen = pygame.display.set_mode((display_width, display_height))
myImg = pygame.image.load('123.jpg')
def myimge(x,y):
ourScreen.blit(myImg,(x, y))
x = (display_width * 0.1)
y = (display_height * 0.1)
finished = False
while not finished:
for event in pygame.event.get():
if event.type == pygame.QUIT:
finished = True
ourScreen.fill((186, 231, 242))
myimge(x,y)
pygame.display.flip()
pygame.quit()
quit()
import pygame #pygame 모듈을 불러와라
pygame.init #pygame을 시작하는 명령문 (ex.%matloplib inline)
ourScreen = pygame.display.set_mode((1400,2000))
#우리의 화면을 ourScreen이라는 변수로 지정한 뒤 뒤에 크기를 지정해 줌
pygame.display.set_caption('정아린') #내가 띄울 윈도우 창의 이름을 지정하는 것
#이벤트 명령 지정
finish = False:
for event in pygame.event.get():
if event.type == pygame.QUIT:
finish = True
pygame.display.flip()
#update를 하는 명령문, update라고 해도 되는데 여기서는 그냥 flip이라고 함 (왜?) 책을 주르륵 넘기는거 생각!
2. 게임 루프 개념 구현하기
1) 기본적 원리
① Handle events : 내가 이벤트를 만들어서 명령문을 넣어줌 (ex. 몬스터에 닿았을 때)
② Update game state : 그 게임을 업데이트 해주어야 함 (그래야 바뀐것을 확인해야 하니까) (ex.플레이어의 pH가 낮아짐)
③ Draw screen : 화면에 띄워라 (ex. 플레이어가 화면을 통해 볼 수 있음)
2) 사각형 만들기
import pygame
pygame.init
ourScreen = pygame.display.set_mode((400,300))
pygame.display.set_caption('정아린')
finish = False:
for event in pygame.event.get():
if event.type == pygame.QUIT:
finish = True
pygame.draw.rect(ourScreen, (R, G, B), pygame.Rect(20, 20, 60, 60))
#우리 화면에 rect(사각형)그려라. 그리고 RGB값을 통해 배경색을 변경해라(저기엔 0~255까지의 수를 넣어주면 됨)
#사각형의 위치 변경 : 앞의 두 좌표 (단위는 pixel), 사각형의 크기 변경 : 뒤에 두 좌표
#(255, 255, 255는 흰색/ 0, 0, 0은 검은색임)
pygame.display.flip()
3) 스페이스바를 누르면 사각형의 색이 변경되도록 하기
import pygame
pygame.init
ourScreen = pygame.display.set_mode((400,300))
pygame.display.set_caption('정아린')
finish = False:
colorBlue = True #화면 색을 RGB가 아닌 변수로 지정
while not finish:
for event in pygame.event.get():
if event.type == pygame.QUIT:
finish = True
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
#이벤트 지정 : keydown, 즉 키보드 나타내는 모듈에서 스페이스 키를 누를 때
colorBlue = not colorBlue #이벤트가 일어나면 그 원상태 유지가 되지 않음
if colorBlue: color = (0, 128, 255) #조건문 사용 : colorBlue의 원상태의 색 지정
else : color = (255, 255, 255) #아니라면 이 색으로 변경될 것 (즉 이벤트 발생 시)
pygame.draw.rect(ourScreen, (R, G, B), pygame.Rect(20, 20, 60, 60))
pygame.display.flip()
4) 사각형이 방향키에 따라 움직이도록 하기
import pygame
pygame.init
ourScreen = pygame.display.set_mode((400,300))
pygame.display.set_caption('정아린')
finish = False:
colorBlue = True
x = 30
y = 30 #사각형의 처음 위치 지정
clock = pygame.time.Clock() #시간 관련 함수 사용할 때 항상 clock사용. 초 당 프레임 지정 가능
while not finish:
for event in pygame.event.get():
if event.type == pygame.QUIT:
finish = True
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
colorBlue = not colorBlue
pressed = pygame.key.get_pressed()
if pressed[pygame.K_UP]: y -= 3
if pressed[pygame.K_DOWN]: y += 3
if pressed[pygame.K_LEFT]: x -= 3
if pressed[pygame.K_RIGHT]: x += 3
#키보드에 따라 위치가 변하도록 각각 지정
ourScreen.fill((0, 0, 0))
#사각형에 따라 움직여야 하기 때문에 기존 사각형을 지워야 함
if colorBlue: color = (0, 128, 255)
else : color = (255, 255, 255)
pygame.draw.rect(ourScreen, (R, G, B), pygame.Rect(x, y, 60, 60))
#사각형의 위치를 x와 y라는 변수로 설정. 멈춰있는 것이 아니라 연속적으로 움직여야 하기 때문
pygame.display.flip()
clock.tick(60) #기존 속도가 너무 빠르기 때문에 초당 60프레임으로 지정해주는 것
1. 경우의 수 : 1에서 10까지의 자연수 중 2의 배수 또는 3의 배수는 몇 개가 있을까?
1) 확률에서의 곱셈법칙 이용 '또는' : a x b
>>> A = { 2, 4, 6, 8, 10 } #2의 배수인 집합 A를 지정
>>> B = { 3, 6, 9 } #3의 배수인 집합 B를 지정
>>> len( A | B) #A와 B의 합집합의 원소를 구하라
7 #7가지
2. 순열 : nPr = n x (n-1) x (n-2) x (n-3) x ··· (n-r+1)
1) 1~5 범위에 있는 숫자를 사용하여 만들 수 있는 세 자리 숫자는?
>>> import itertools #반복자 함수(순열이나 조합) itertools를 불러온다
>>> num = { 1, 2, 3, 4, 5 } #데이터를 정의한다
>>> A = set(inertools.permutations(num, 3)
#데이터 num에 있는 값 중에서 세 개를 선택하는 순열로 집합을 생성
>>> len(A) #집합 A의 원소 수를 나타내라
60 #1 ~ 5 범위의 있는 숫자를 사용하여 만들 수 있는 세 자리 숫자의 개수
>>> for a in A: #A에 있는 모든 원소에 접근하는 루프 (루프 : 명령의 집합)
... print(a) #A의 원소를 나타내라
...
(1, 2, 3)
(1, 2, 4)
(1, 2, 5)
~중략~
(5, 4, 1)
(5, 4, 2)
(5, 4, 3)
3. 팩토리얼 : n! = n x (n-1) x (n-2) x (n-3) x ··· x 3 x 2 x 1 = nPn
1) 순열을 이용해 푸는 방법
>>> num = {1, 2, 3, 4, 5} #데이터를 정의한다
>>> A = set(intertools.permutations(num, 5)) #num중에서 다섯 개를 선택하는 순열
>>> len(A) #A에 있는 원소 수
120
2) 팩토리얼을 이용해 푸는 방법
>>> import math #math 함수를 불러온다
>>> math.factorial(5) #5! 구하는 명령문
120
4. 중복 순열 : n(파이)r = n ^r
>>> num = {1, 2, 3, 4, 5} #데이터를 정의한다
>>> A = set(intertools.product(num, num, num))
#중복순열이므로 단순 숫자로 표시하지 않음
#num에서 세 개를 선택하는 중복순열 명령문
>>> len(A) #집합 A에 있는 원소 수
125
>>> for a in A: #집합 A에 있는 모든 원소에 접근하는 루프
... print(a)
...
(1, 1, 1)
(1, 1, 2)
(1, 1, 3)
~중략~
(5, 5, 3)
(5, 5, 4)
(5, 5, 5)
5. 조합 : nCr = nPr / r!
1) 1~5까지의 숫자 중 세개의 숫자를 선택하는 경우
>>> num = { 1, 2, 3, 4, 5 } #데이터 정의
>>> A = set(intertools.combinations(num, 3)) #num에 있는 숫자 중에서 세 개를 선택하는 조합
>>> len(A) #조합의 가짓수 확인
10
>>> for a in A #집합 A에 있는 모든 원소에 접근하는 루프
... print(a) #모든 원소 조합을 나타내라
...
(2, 3, 5)
(1, 2, 3)
(1, 3, 5)
(1, 4, 5)
(1, 2, 4)
(1, 3, 4)
(2, 4, 5)
(3, 4, 5)
(2, 3, 4)
(1, 2, 5)
2) 두 주사위에서 서로 다른 숫자가 나오는 경우
>>> dice = {1, 2, 3, 4, 5, 6} #주사위의 숫자를 지정
>>> A = set(intertools.combinations(dice, 2)) #dice에서 두 개의 숫자를 선택하는 조합
>>> len(A) #조합의 가짓수 학인
15
>>> A = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } #집합 A 지정
>>> B = { 1, 3, 2, 4, 5, 7, 6, 8, 10, 9 } #집합 B 지정
>>> A == B #두 집합이 같은가?
True
>>> A #집합 A를 나타내라
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
>>> A.add(10) #집합 A에 원소 10을 추가해라
>>> A #업데이트된 집합 A를 나타내라
{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } #10이 추가된 것을 확인할 수 있음
>>> len(A) #집합 A의 원소수를 조사하는 명령어
10 #집합 A에 포함된 원소는 총 10개
2. 전체 집합과 부분 집합
>>> U = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } #집합 U를 정의 : 전체 집합
>>> A = { 2, 4, 6, 8, 10 } #집합 A를 정의 : 집합 U의 부분 집합
>>> A <= U #집합 A가 집합 U에 포함되는지 확인하는 명령문
True
3. 교집합
>>> A = { 2, 4, 6, 8, 10 } #집합 A를 지정
>>> B = { 3, 6, 9 } #집합 B를 지정
>>> A & B #집합 A와 B의 교집합을 구하는 명령어
{6} #원소 6만이 교집합에 포함되는 것을 알 수 있음
4. 합집합
>>> A = { 2, 4, 6, 8, 10 } #집합 A를 지정
>>> B = { 3, 6, 9 } #집합 B를 지정
>>> A | B #집합 A와 B의 합집합을 구하는 명령어
{2, 3, 4, 5, 6, 8, 9, 10} #합집합
5. 차집합
>>> A = { 2, 4, 6, 8, 10 } #집합 A 지정
>>> B = { 3, 6, 9 } #집합 B 지정
>>> A - B #집합 A에서 집합 B의 원소를 제외해라
{ 2, 4, 8, 10 }
>>> B - A #집합 B에서 집합 A의 원소를 제외해라
{3, 9}
6. 대칭차 : 두 집합에 있는 모든 원소에서 공통된 원소를 제외한 것
>>> A = { 2, 4, 6, 8, 10 } #집합 A 지정
>>> B = { 3, 6, 9 } #집합 B 지정
>>> A ^ B #집합 A와 집합 B의 대칭차를 구하라
{ 2, 3, 4, 8, 9, 10 }
7. 공집합 : 두 집합의 교집합이 없을 때 (공통된 원소가 없을 때)
>>> X = { 1, 2, 3 } #집합 X 지정
>>> Y = { 4, 5, 6 } #집합 Y 지정
>>> X & Y #집합 X와 Y의 교집합을 구하라
set( ) #둘이 공통된 원소가 없으므로 공집합