[파이썬 개념 10] 모듈과 라이브러리
파이썬에는 다른 사람이 미리 만들어 둔 코드 묶음이 아주 많습니다. 이것을 가져다 쓰는 방법이 import 입니다.
pandas, scikit-learn 같은 데이터 분석 · 머신러닝 도구도 모두 이렇게 가져다 씁니다.
1. 모듈, 패키지, 라이브러리
| 말 | 뜻 | 예 |
|---|---|---|
| 모듈 | 함수와 값을 모아 둔 파이썬 파일 하나 | math, random |
| 패키지 | 모듈 여러 개를 묶은 폴더 | sklearn.tree |
| 라이브러리 | 패키지와 모듈을 모아 놓은 큰 도구 상자 | pandas, scikit-learn |
일상에서는 세 말을 섞어 씁니다. "남이 만든 코드 묶음을 가져다 쓴다" 는 것만 기억하면 됩니다.
2. import 하는 네 가지 방법
import 모듈
import math
print(math.sqrt(16))
print(math.pi)
실행 결과
4.0
3.141592653589793
math.sqrt 는 "math 모듈 안의 sqrt 함수" 라는 뜻입니다. 점(.)은 "~의" 로 읽으면 됩니다.
import 모듈 as 별명
이름이 길면 짧은 별명을 붙입니다. 데이터 분석에서는 정해진 별명을 다 같이 씁니다.
import math as m
print(m.sqrt(25))
실행 결과
5.0
| 관례 | 뜻 |
|---|---|
import pandas as pd |
pandas 를 pd 로 |
import numpy as np |
numpy 를 np 로 |
import matplotlib.pyplot as plt |
그래프 도구를 plt 로 |
from 모듈 import 이름
필요한 것만 꺼내 오면 앞에 모듈 이름을 붙이지 않아도 됩니다.
from math import sqrt, gcd
print(sqrt(9), gcd(12, 18))
실행 결과
3.0 6
scikit-learn 은 주로 이 모양으로 씁니다.
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
sklearn.tree 는 "sklearn 패키지 안의 tree 모듈" 이고, 거기서 DecisionTreeClassifier 하나를 꺼내 온다는 뜻입니다.
가져오지 않고 쓰면
print(sqrt(16))
실행 결과
NameError: name 'sqrt' is not defined
import 는 그 노트북(또는 파일)에서 쓰기 전에 한 번 실행해야 합니다. Colab 에서 이 오류가 나면 맨 위의 import 셀을 실행했는지 확인합니다.
3. 자주 쓰는 표준 모듈
파이썬을 설치하면 함께 들어 있는 모듈입니다.
math: 수학
| 함수 | 하는 일 | 예 | 결과 |
|---|---|---|---|
math.sqrt(x) |
제곱근 | math.sqrt(2) |
1.414… |
math.ceil(x) |
올림 | math.ceil(2.1) |
3 |
math.floor(x) |
내림 | math.floor(2.9) |
2 |
math.gcd(a, b) |
최대공약수 | math.gcd(12, 18) |
6 |
math.pi |
원주율 | 3.14159… |
import math
students, seats = 91, 45
print(math.ceil(students / seats)) # 필요한 버스 수
print(round(math.pi * 3 ** 2, 2)) # 반지름 3인 원의 넓이
실행 결과
3
28.27
random: 무작위
import random
random.seed(1) # 같은 결과가 나오게 고정
print(random.randint(1, 6)) # 1~6 중 하나 (주사위)
print(random.choice(["가위", "바위", "보"]))
nums = [1, 2, 3, 4, 5]
random.shuffle(nums)
print(nums)
실행 결과
2
보
[4, 2, 5, 3, 1]
random.seed(숫자) 를 쓰면 실행할 때마다 같은 순서로 무작위 값이 나옵니다. 머신러닝 코드의 random_state=0 도 같은 역할입니다. 결과를 다시 만들 수 있게 하는 것입니다.
4. 점(.)의 정체: 객체와 메서드
지금까지 이런 코드를 많이 보았습니다.
words = "a b c".split()
words.append("d")
print("python".upper(), words)
실행 결과
PYTHON ['a', 'b', 'c', 'd']
"a b c" 라는 문자열에게 .split() 을, words 라는 리스트에게 .append() 를 시킨 것입니다.
파이썬의 값은 모두 객체이고, 객체마다 할 줄 아는 기능이 있습니다. 이 기능을 메서드라고 합니다.
| 모양 | 읽는 법 |
|---|---|
math.sqrt(16) |
math 모듈의 sqrt 함수 |
words.append("d") |
words 객체에게 append 를 시킨다 |
df.head() |
df 객체에게 앞부분을 보여 달라고 한다 |
model.fit(X, y) |
model 객체에게 X, y 로 학습하라고 한다 |
어떤 기능이 있는지는 dir() 로 볼 수 있습니다.
print([m for m in dir([]) if not m.startswith("_")])
실행 결과
['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
5. 객체 만들기: 머신러닝 모델의 흐름
머신러닝 라이브러리는 객체를 만들고, 그 객체에게 일을 시키는 흐름으로 씁니다.
from sklearn.tree import DecisionTreeClassifier
# 공부 시간, 수면 시간 → 통과(1) / 미통과(0) 아주 작은 예제
X = [[1, 5], [2, 6], [6, 7], [7, 8], [3, 4], [8, 6]]
y = [0, 0, 1, 1, 0, 1]
model = DecisionTreeClassifier(max_depth=1, random_state=0) # 1) 객체 만들기
model.fit(X, y) # 2) 학습시키기
print(model.predict([[5, 7], [2, 8]])) # 3) 예측시키기
print(model.score(X, y)) # 4) 채점시키기
실행 결과
[1 0]
1.0
DecisionTreeClassifier(...): 결정트리 객체를 하나 만든다. 괄호 안은 설정값.model.fit(X, y): 그 객체에게 데이터로 학습하라고 시킨다.model.predict(...): 새 데이터를 맞혀 보라고 시킨다.model.score(...): 정확도를 물어본다.
모델이 결정트리에서 다른 것(로지스틱 회귀, KNN, 랜덤포레스트)으로 바뀌어도 1번 줄만 바뀌고 2~4번은 같습니다. 그래서 이 네 줄 모양을 익혀 두면 새 모델이 나와도 겁먹지 않아도 됩니다.
6. 설치가 필요한 라이브러리
math, random 은 파이썬에 들어 있지만, pandas 나 scikit-learn 같은 라이브러리는 원래 따로 설치해야 합니다.
- Colab 에는 데이터 분석과 머신러닝에 쓰는 라이브러리가 대부분 이미 설치되어 있어서 바로
import하면 됩니다. - 내 컴퓨터에서는 터미널에
pip install pandas처럼 설치합니다. - Colab 에서 없는 라이브러리를 쓰려면 셀에
!pip install 이름을 실행합니다. 앞의!는 "파이썬 코드가 아니라 명령어" 라는 표시입니다.
설치되지 않은 것을 가져오려 하면 이런 오류가 납니다.
import pureum_magic
실행 결과
ModuleNotFoundError: No module named 'pureum_magic'
7. 내 함수를 모듈처럼
내가 만든 함수도 .py 파일에 저장해 두면 다른 곳에서 import 해서 쓸 수 있습니다.
모듈은 특별한 것이 아니라 함수를 모아 둔 파이썬 파일일 뿐입니다.
# mytools.py 라는 파일에 저장해 두면
def average(nums):
return sum(nums) / len(nums)
# 같은 폴더의 다른 코드에서
import mytools
print(mytools.average([80, 90, 100]))
정리
| 모양 | 뜻 |
|---|---|
import math |
math 를 가져와 math.이름 으로 쓴다 |
import pandas as pd |
별명 pd 로 쓴다 |
from math import sqrt |
sqrt 만 꺼내 와 바로 쓴다 |
객체.메서드() |
그 객체에게 일을 시킨다 |
model = 모델() → fit → predict → score |
머신러닝 네 줄 |
- import 는 쓰기 전에 한 번 실행한다.
- 점(
.)은 "~의" 또는 "~에게 시킨다" 로 읽는다. - 모델이 바뀌어도 fit, predict, score 의 모양은 같다.
확인 문제
import numpy as np다음에 numpy 의mean함수는 어떻게 부르나요?from math import ceil과import math의 차이는 무엇인가요?- 다음 코드에서 객체를 만드는 줄과 학습시키는 줄은 각각 어느 줄인가요?
from sklearn.neighbors import KNeighborsClassifier model = KNeighborsClassifier(n_neighbors=3) model.fit(X_train, y_train) print(model.score(X_test, y_test))
연습해 보기
- 1132 버스 몇 대
- 1133 분수 약분하기
- 함수 글의 연습 문제(1043, 1047, 1062)를 함수로 짠 뒤, 그 함수들을
mytools처럼 한곳에 모아 보세요.
확인 문제 정답
np.mean(...)from math import ceil은ceil(2.1)처럼 바로 쓰고,import math는math.ceil(2.1)처럼 모듈 이름을 붙여 씁니다.- 객체 만들기는 둘째 줄
model = KNeighborsClassifier(...), 학습은 셋째 줄model.fit(...)입니다. 결정트리와 줄 모양이 같습니다.
댓글 0
로그인하면 댓글을 쓸 수 있습니다.