본문 바로가기

Python

09. Python 기초 유용한 라이브러리

이번 글에서는 몇 가지 유용한 라이브러리에 대해서 설명하겠습니다.

바로 전 글에서는 기본적으로 Python이 제공해주는 몇 가지 함수들에 대해서 사용 용도 및 예시를 보였는데, 이번에는 Python에서 기본 라이브러리를 제공해 주는 것에 대해서 설명하겠습니다. 기본 함수와 다른 점은 위에 import를 해야 사용이 가능하다는 점입니다. 나머지는 기본 제공 함수처럼 쓰면 쓸 수 있습니다. 그리고 전 블로그에서 파일 열고 입력하는 함수가 빠져있어서 그 부분도 여기서 설명을 먼저 하고 라이브러리에 대해서 설명하겠습니다.

1.     File I/O 코드에서 파일을 읽고 혹은 쓰기 위해서 쓰는 것

코딩을 하다 보면 간단하게 print를 하면 끝나는 경우도 있지만, 뭔가 사람들에게 혹은 개인적으로 데이터를 저장해서 놓을 때 쓰는 경우도 많습니다. 이때 쓰는 함수가 open() 함수입니다. 이 함수를 이용해서 개발자들은 코딩을 통해서 무언가를 파일에 입력을 할 수 있습니다.

일단 생성하는 방법은 open()을 통해서 파일을 생성할 수 있습니다.

f = open("abcd.txt") 이렇게 python 파일을 만들어서 프로그램을 돌리면 오류가 발생할 것입니다. 이유는 abcd.txt 파일이 존재하지 않기 때문입니다. 생성된 파이썬에 있는 폴더에 abcd.txt 파일이 없으면 오류가 발생합니다. 그렇기 위해서는 mode를 바꿔서 open() 함수를 사용해야 합니다.

모드

설명

‘r’

읽기 (기본적으로 모드 값이 없어도 같음)

‘w’

쓰기

‘a’

없으면 파일 생성, 있으면 읽기

‘x’

이미 존재하면 실패, 아니면 생성

‘b’

2진법 모드

‘t’

텍스트 모드

‘+’

업데이트를 위한 디스크 파일 열기

 

저 같은 경우는 아래 4가지는 써본 적이 없어서 잘 모르겠고, 일반적으로 위에 r, w, a만 사용했습니다. 아무래도 a를 쓰는 게 편한데 그 이유는 파일이 있던 없던 상관없이 사용이 가능합니다. 간단한 디버그 값들을 저장해서 볼 때 편하기는 합니다. 하지만 ‘a’도 단점이 있는데, 새로운 값만 보고 싶은 경우에는 파일이 없는 것을 확인을 하고 프로그램을 돌려야 합니다. 안 그러면 있는 파일 뒤에 이어서 내용이 입력되기 때문입니다.

모드를 2개를 써서 사용도 가능합니다. 예를 들어서, ‘r+’이렇게 쓰면 같은 파일을 읽고 쓰는 데 사용이 가능합니다.

open()을 해서 파일 쓰고 읽는 것이 끝나면 꼭 close() 함수를 써서 닫아줘야 합니다. close함수는 무조건 해야 합니다.

이제부터는 기본적으로 자주 사용되는 라이브러리에 대해서 설명을 하겠습니다.

2.     Random 함수 무작위 숫자를 정할 때 사용하는 함수입니다.

random함수도 사용이 많이 됩니다. 아마 전에 UpDown게임 문제와 로또 번호 생성하는 문제를 전 블로그 글에 썼는데, 이때 random함수가 사용이 됩니다.

이 함수를 사용하기 위해서 따로 뭔가를 더 설치를 할 필요는 없습니다. 하지만 프로그램을 쓸 때 import는 하셔야 사용이 가능합니다.

예시

위에 그림처럼 하면 random 숫자가 생성되는 것을 확인할 수 있습니다. 이때 random.random()이라는 함수는 0~1 사이에 있는 수를 무작위로 뽑아서 결과로 줍니다. 그런데 여기서 random이라고 쓰는 게 너무 길기 때문에 쓰기 불편할 수도 있습니다. 그래서 Python의 경우 random이라는 이름 대신 다른 이름을 쓸 수 있게끔 만들어 주었습니다.

예시

이렇게 할 경우 random대신에 abc라고 쓰면 가능하게 만들어 주는 것입니다. 물론 코드상에는 문제는 없지만 abc라고 쓰시면 안 됩니다. 나중에 다른 사람들과 일을 하는데, abc random이라고 알 수가 없기 때문에 이름을 정할 때는 나름 규칙 혹은 누가 봐도 random이라는 것을 알 수 있게끔 이름을 정해야 합니다.

자 그럼 random.random() 함수는 0~1 사이의 수만 결과로 주는데, 만약 정수의 값으로만 0~9로 나오는 것을 만들려면 어떻게 해야 할까요?

random.random()에서 생성된 수에 10을 곱한 다음 뒤에 소수점 자리를 버림을 하면 됩니다.

혹은 -10~9까지에서 정수를 랜덤으로 뽑고 싶다 이러는 경우에는 어떻게 해야 할까요?

이것도 위와 마찬가지로 하시면 됩니다.

이렇게 하시면 무작위 숫자가 -10~9 사이의 정수 값이 나옵니다.

결국 사용하는 방법은 일단 random() 함수가 0부터 1 사이의 수를 생성하니까 일단 총범위의 크기를 같게 만듭니다. 위의 경우 20 정도니까 20random에서 생성하는 수에 곱합니다. 그 후 범위를 이동을 시켜서 -10~9가 되도록 만들면 됩니다. 위의 예시 경우에는 0~20까지 범위를 늘린 다음에 -10만큼 해서 -10~9가 print 되게끔 만들었습니다.

그런데 매번 이렇게 하면 귀찮고 실수도 할 수 있으니까 그냥 이런 게 있다 하고 넘어가시면 됩니다. 학원에서인가 이렇게 설명을 해준 사람이 있어서 이런 내용도 있다고 추가해서 넣었습니다.

잘 생각해 보면 Python에서 이런 귀찮은 생각을 안 해도 사용이 가능한 함수가 있을 것 같다는 느낌이 오지 않나요? 왜냐하면 Python은 개발자를 위해서 나온 코드이다 보니까 별의별 함수가 다 있습니다. 위에 같은 경우를 대신해서 Python은 정수의 범위를 지정해주면 그 사이의 숫자 중 하나를 무작위로 결과를 주는 함수가 있습니다.

randint(a, b) 함수인데 이 함수는 ab사이(a b도 포함)의 정수 숫자 중에서 무작위로 하나 뽑아서 결과로 주는 함수입니다.

예시

이 위의 경우에는 random_num은 영 혹은 일 만 나오게 되는 것입니다. 왜냐하면 범위가 (0,1)이기 때문에 그 범위에서 가능한 정수는 0과 1 뿐이기 때문입니다. 이것을 사용하면 0,1만 나오기 때문에 동전 토스하는 문제에서 사용이 가능합니다. (동전 토스의 경우의 수가 2개밖에 안되니까…) 그리고 마찬가지로 주사위 굴리는 문제 또한 사용이 가능합니다. randint(1,6) 이렇게 해서 사용을 하면 주사위 경우의 수만 나오기 때문에 사용이 가능합니다. 뭐 로또 번호 생성인 경우에는 randint(1,45) 이렇게 해서 쓰면 될 것이고, UpDown문제에서 1~100 사이 숫자 중 고르는 것이니까 이 경우에는randint(1,100) 이렇게 해서 쓰면 됩니다.

여기서 random을 자주 사용되는 함수를 알려드리겠습니다.

함수

설명

randint(a,b)

위에 설명한 것처럼 a, b 사이에 존재하는 정수 중 랜덤

random()

0~1 사이의 수 중 랜덤(여기서 0은 포함 1은 포함이 안됩니다.)

randrange(a,b,step)

a, b사이에 있는 정수 중 랜덤

여기서 stepoptional입니다.

 

제가 step설명이 너무 어려워서 그냥 예시를 보여드리겠습니다. 위의 경우에서는 random 범위가 0부터 20까지 인데 step2이므로 0,2,4,8,…. 20중에서 랜덤으로 하나 뽑아서 결과로 출력합니다.

 

3.     Graph 그리는데 필요한 라이브러리 matplotlib입니다.

아마도 제일 많이 사용하는 라이브러리 중 하나라고 생각합니다. 값들을 시각화시켜서 쉽게 볼 수 있게 만들어 주는 라이브러리이기 때문에 정말 많이 사용되고 있습니다. 하지만 아쉽게도 이것을 사용하기 위해서는 라이브러리 matplotlib를 설치해야 합니다. 설치는 무지하게 쉽습니다. 전에 블로그에 써 놓았지만, 가서 귀찮을 테니 여기서 간단하게 설명하겠습니다.

일단 cmd창을 열어서, 아래의 입력을 넣으면 끝이 납니다.

>>pip install matplotlib

이렇게 설치가 끝나면 아까 위에서 랜덤을 쓸 때 import를 한 것처럼 import 해서 쓰면 데이터를 시각화를 할 수가 있습니다. 여기서 import 하는 방식이 한 가지는 아닙니다.

a.     import matplotlib.pyplot as plt

b.     from matplotlib import pyplot as plt

plt는 그냥 이름인 것을 알고 있다고 믿고 앞에 부분을 설명하겠습니다. a의 경우에는 matplotlib.pyplot를 사용하겠다는 것이고 b의 경우에는 matplotlib에 있는 pyplot를 사용하겠다는 것인데 결국 같은 말이고 뭘 써도 상관이 없습니다. 일반적으로 위에 2 방법을 구글링 하면 보게 될 텐데 뭘 쓰던 자기가 편한 대로 하시면 됩니다. plt도 사람들이 자주 사용하는 이름입니다. Pyplot를 줄여서 plt라고 쓰는 게 좋아 보여서 그런지 plt라고 자주 쓰니 이것은 외워놓으면 좋을 것 같습니다. 하지만 꼭 그렇다고 해서 자신의 코드에 꼭 plt라고 쓸 필요는 없습니다. 더 좋은 표현이 있으면 그 표현을 쓰면 됩니다.

Plot을 할 때 많은 optional 기능이 많은 데, 예를 들어서 그래프에 색깔을 다르게 할 수도 있고, Marker의 모양을 지정할 수도 있고, X_Label, Y_Label, 제목을 추가도 가능하고, 그래프 그림 저장도 가능하고, legend를 추가할 수도 있고 등등 정말 많은 기능들이 있습니다. 하지만 여기서는 plot 하는 부분을 모두 설명은 안 하겠습니다. 전에 쓴 블로그 중에서 plot에 대해서 자세히 쓴 글이 있으니 그것을 참고해서 plot을 공부 혹은 자료로 쓰시면 됩니다. 

 

이렇게 해서 제가 생각할 때 Python에서 알고 있으면 좋을 것 같은 것에 대해서 설명이 끝났습니다. 라이브러리도 랜덤과 그래프의 설명이 있었고, 처음에는 파일을 생성을 해서 읽고 혹은 쓰기를 가능하게 하는 함수에 대해서 설명했습니다. 이 부분은 작은 프로젝트를 하면서 많이 사용되는 것들입니다. 더 큰 프로젝트 가면 더 자주 쓸 수도 있습니다. 꼭 잘 이해하고 자기 것으로 만들어서 즐거운 코딩 합시다!