디지털미디어랩 머신러닝 여름캠프

2주차(3) : Python 패키지 사용하기, numpy 다루기

참고 자료

패키지 임포트

  • 패키지가 설치되어 있다고 바로 파이썬에서 사용할 수 있는 것은 아니다.
  • 패키지를 사용하려면 해당 패키지를 파이썬에서 사용할 수 있도록 설정하는 명령을 실행해야 한다.
  • 파이썬에서 패키지를 사용하도록 설정하는 것을 패키지 임포트(import)라고 한다.
  • 패키지를 임포트하려면 다음 명령을 실행한다.
import 패키지이름

또는

import 패키지이름 as 패키지별명

패키지 내용 살펴보기

  • 임포트된 패키지 안의 내용을 살펴보려면 다음 명령을 사용한다.
    dir(패키지이름 또는 패키지별명)
    예를 들어 numpy 패키지를 np라는 별명으로 임포트한 경우에는 다음과 같이 패키지 안에 포함된 함수 등을 출력할 수 있다.
In [ ]:
import numpy as np
print(dir(np))

선택적 임포트

  • 패키지를 임포트할 때 다음과 같이 특정한 명령어들만 선택적으로 임포트하는 것도 가능하다.
from 패키지이름 import 명령어

또는

from 패키지이름 import 명령어1, 명령어2, 명령어3
In [ ]:
from numpy import arange
arange(10)

Numpy 배열

  • 리스트는 속도가 느리고 메모리를 많이 차지함.
  • 더 적은 메모리를 사용해서 빠르게 데이터를 처리하려면 배열(array)을 사용해야 한다.
  • 배열은 같은 자료형의 데이터를 정해진 갯수만큼 모아놓은 것이다. 배열은 다음과 같은 점에서 리스트와 다르다.
    1. 모든 원소가 같은 자료형이어야 한다.
    2. 원소의 갯수를 바꿀 수 없다.
  • 파이썬은 자체적으로 배열 자료형을 제공하지 않는다.
  • 따라서 배열을 구현한 다른 패키지를 임포트해야 한다.
  • 파이썬에서 배열을 사용하기 위한 표준 패키지는 NumPy(보통 "넘파이"라고 발음한다)이다.
  • Numpy는 수치해석용 Python 패키지이다.
  • Numpy의 배열 연산은 C로 구현된 반복문.

1차원 배열 만들기

In [ ]:
import numpy as np

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(a)
print(type(a))

벡터화 연산

  • 배열의 장점은 각 원소에 대한 연산을 한 번에 처리하는 벡터화 연산(vectorized operation)을 지원한다는 점이다.
  • 예를 들어 다음과 같은 데이터를 모두 2배 해야 하는 경우를 생각하자.
In [ ]:
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

반복문을 활용하면 다음과 같이 바꿀 수 있다.

In [ ]:
for i in a:
    a[i] *= 2
    
print(a)

그러나 numpy 배열을 할용하면 더 쉽게 구현이 가능하다.

In [ ]:
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x = np.array(a)

print(x * 2)
print(a * 2)

벡터화 연산은 모든 수학적 연산에 적용된다.

In [ ]:
a = np.array([1, 2, 3])
b = np.array([10, 20, 30])

print(2*a + b)

부울 연산 또한 적용된다.

In [ ]:
a = np.array([25, 50, 75, 40, 90, 100, 95])
b = np.array([25, 60, 90, 25, 100, 75, 60])

print(a == b)
print(a > b)
print(a > 50)

부울 연산을 배열 전체에 적용하고 싶으면 all() 또는 any() 를 활용한다.

all : 모두 True이면, True

any : 하나라도 True이면, True

In [ ]:
print( np.all(a > 50) )
print( np.any(a > 50) )

부울연산로 반환된 배열로 인덱싱을 할 수도 있다.

In [ ]:
print(a>50)
print(a[a>50])

print(b)
b[b<50] = 100
print(b)

통계 패키지

  • 간단한 통계 연산을 해주는 패키지
In [ ]:
import statistics as stat
print(dir(stat))
In [ ]:
a = np.array([25, 50, 75, 40, 90, 100, 95])
b = [25, 50, 75, 40, 90, 100, 95]

print(stat.mean(a), stat.stdev(a))
print(stat.mean(b), stat.stdev(b))

연습문제 3. 결측값 대치

  • 룡이는 자동차 인터페이스 실험을 진행하였다.
  • 실험이 끝나고 통계분석을 하려고 하는데 이상하게도 수행시간이 0초인 데이터들이 발견되었다.
  • 실험자는 수행시간이 0초인 데이터들은 결측값이라 가정하고, 나머지 데이터들의 평균으로 대치하고자 한다.
In [ ]:
data = {"이름" : ["실험자1", "실험자2", "실험자3", "실험자4", "실험자5", "실험자6", "실험자7", "실험자8"],
       "수행시간" : [1.55, 0.0, 2.87, 5.96, 2.89, 0.0, 6.5, 3.4]}