본문 바로가기
언어/PYTHON

파이썬 모듈들

by 이민우 2021. 1. 21.
728x90
반응형

Numpy

  • 과학 계산을 위한 파이썬 패키지
  • 다차원 배열을 위한 기능과 선형대수 연산, 푸리에 변환 같은 고수준 수학함수 포함
  • 유사 난수 (Pseudo) 포함
  • scikit-learn에서 Numpy 배열을 기본 데이터 구조로 사용한다.
#--numpy--#
#계산과학분야에 이용하는 핵심 라이브러리
#고성능의 다차원 배열 객체와 이를 다룰 도구 제공
import numpy as np

a = np.array([1,2,3,4,5])
print(type(a)) #<class 'numpy.ndarray'>
print(a.shape) #(5,)
print(a[0], a[1]) #[1 2]
print(a) #[1 2 3 4 5]
a[0] = 10
print(a) #[10 2 3 4 5]

a = np.zeros((2,2)) #2*2 크기의 모든 원소가 0인 배열 생성
print(a)
a = np.ones((2,2)) #2*2 크기의 모든 원소가 1인 배열 생성
print(a)
a = np.full((2,2), 5) #2*2 크기의 모든 원소가 5인 배열 생성
print(a)
a = np.eye(2) #2*2의 단위행렬 생성
print(a)
a = np.random.random((2,2)) #무작위 2*2 행렬 생성
print(a) #근데 소수로 나옴 0~1
a - np.random.randn(2, 2) #2*2의 평균이 0, 표준편차가 1인 가우시안 표준정규분포 생성
print(a)

#슬라이싱 가능
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a)
print(a[1][:]) #[4 5 6]

#연산도 가능
b = np.array([[3,2,1],[6,5,4],[9,8,7]])
print(a+b)
print(np.add(a, b))

print(a-b)
print(np.subtract(a, b))

print(a*b)
print(np.multiply(a, b))

print(a/b)
print(np.divide(a, b))

print(np.sqrt(a)) #요소별 제곱근

#벡터의 내적. (1차원 * 1차원)
#행렬과 벡터의 곱도 가능 (2차원 * 1차원)
#행렬곱도 가능 (2차원 * 2차원)
a = np.array([1,2])
b = np.array([3,4])
print(a.dot(b))
print(np.dot(a,b))

#기타 연산
print(np.sum(a))
c = np.array([[1,2,3],[4,5,6]])
print(np.sum(c, axis=0)) #각 열에 대한 합산 [5 7 9]
print(np.sum(c, axis=1)) #각 행에 대한 합산 [6 15]

print(c.T) #전치

 

SciPy

  • 과학 계산용 함수를 모아놓은 파이썬 패키지
  • 고성능 선형대수, 함수 최적화, 신호 처리, 특수한 수학 함수와 통계분포 등 제공
  • scikit-learn에서 알고리즘 구현시 SciPy 함수를 많이 사용함.

 

 

matplotlib

  • 과학 계산용 그래프 라이브러리
  • 선 그래프, 히스토그램, 산점도 등 고품질 그래프를 그려줌
#--matplotlib--#
#각종 그래프 출력
import numpy as np
import matplotlib.pyplot as plt

# 사인과 코사인 곡선의 x,y 좌표를 계산
x = np.arange(0, 3 * np.pi, 0.1)
y = np.sin(x)

# matplotlib를 이용해 점들을 그리기
plt.plot(x, y)
plt.show()  # 그래프를 나타나게 하기 위해선 plt.show()함수를 호출해야만 합니다.

#한 그래프에 두 곡선 그리기
# 사인과 코사인 곡선의 x,y 좌표를 계산
x = np.arange(0, 3 * np.pi, 0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)

# matplotlib를 이용해 점들을 그리기
plt.plot(x, y_sin)
plt.plot(x, y_cos)
plt.xlabel('x axis label')
plt.ylabel('y axis label')
plt.title('Sine and Cosine')
plt.legend(['Sine', 'Cosine'])
plt.show()

#두 그래프 동시 출력
# 사인과 코사인 곡선의 x,y 좌표를 계산
x = np.arange(0, 3 * np.pi, 0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)

# 높이가 2이고 너비가 1인 subplot 구획을 설정하고,
# 첫 번째 구획을 활성화.
plt.subplot(2, 1, 1)

# 첫 번째 그리기
plt.plot(x, y_sin)
plt.title('Sine')

# 두 번째 subplot 구획을 활성화 하고 그리기
plt.subplot(2, 1, 2)
plt.plot(x, y_cos)
plt.title('Cosine')

# 그림 보이기.
plt.show()

 

pandas

  • 데이터 처리와 분석을 위한 파이썬 라이브러리
  • DataFrame 구조를 기반으로 만들어졌음 (테이블 형태라서 엑셀 데이터에 좋음)
  • 테이블을 수정하고 조작하는 다양한 기능을 제공
  • Numpy는 전체 배열의 원소 타입이 동일해야 하는데 pandas는 달라도 됨
  • SQL, 엑셀, CSV 파일 등 다양한 파일과 데이터베이스에서 데이터를 읽을 수 있음.
#--pandas--#
# 데이터 분석을 위한 라이브러리
# dataframe 형태로 변환하여 데이터 처리
import pandas as pd

df = pd.DataFrame(np.array([[1,2],[3,4]]))
print(df.shape, len(df.index), df) #(2,2) 2
#  0 1
#0 1 2
#1 3 4 이렇게 출력
print((list(df.columns))) #[0,1]

df = pd.DataFrame({"A":[1,4,7], "B":[2,5,8], "C":[3,6,9]}) #행이름을 A,B,C로
print(df['A']) #행 조회 1 4 7

#추가
print(df)
df = df.set_index('A')
print(df) #A행 추가
df = df.append(pd.DataFrame(data=np.array([1,2,3]), columns = [7]))
print(df) #7행 추가

#삭제
df.drop('B', axis=1, inplace=True) #axis가 1이면 열, 0이면 행
print(df)
df.drop(0, axis=0, inplace=True)
print(df)

 

math

  • 자주 사용되는 기본적인 수학기능을 포함한 라이브러리
  • 팩토리얼, 제곱근, 최대공약수 등을 계산해주는 기능을 포함함
#--math--#
import math
x = 100.5
print(math.ceil(x)) #올림 : 101
print(math.floor(x)) #내림 : 100
print(math.fabs(x)) #절대값 100.5
print(math.factorial(3)) #팩토리얼 6
print(math.comb(5,2)) #5c2 10
print(math.fmod(5,3)) #5%3 = 2
print(math.fsum([1,2,3,4])) #sum = 9
print(math.sqrt(9)) #3
print(math.isfinite(99)) #무한이나 NAN인가?
print(math.isinf(999)) #무한인가?
print(math.isnan(999)) #NAN인가?

#cos, sin, tan은 물론 acos, asin, atan, atan2로 아크 코사인 사인, 탄젠트 가능
#dist로 거리 반환 가능
#math.pi = 3.141592...
#math.e = 2.718281...
#math.inf = 무한
#math.nan = not a number

 

bisect

  • 이진 탐색을 쉽게 구현할 수 있게 도와줌
#--bisect--#
#이진탐색 구현해줌
import bisect
nums = list(range(0,10))
n = 5
print(bisect.bisect(nums, n)) #그냥 구하기(right과 비슷) 6
print(bisect.bisect_left(nums, n)) #왼쪽 인덱스 구하기 : 그 자리 출력 5
print(bisect.bisect_right(nums, n)) #오른쪽 인덱스 구하기 : 그 다음 자리 출력 6

bisect.insort(nums, 4) #4를 삽입
print(nums)
#얘도 right이 있고 left가 있는데 동일값 존재시 오른쪽에 넣을거냐, 왼쪽에 넣을거냐 차이.

 

heapq

  • 힘을 활용한 우선순위 큐 기능 구현시 사용
  • O(NlogN)의 오름차순 정렬 제공
  • PriorityQueue 라이브러리가 별도 존재하나 얘가 더 빠름.
#--heapq--#
# 힙을 구현해줌
import heapq
heap = []

#삽입
heapq.heappush(heap, 5)
heapq.heappush(heap, 3)
heapq.heappush(heap, 1)
heapq.heappush(heap, 9)
print(heap) #[1, 5, 3, 9]

#삭제
heapq.heappop(heap)
print(heap) #[3, 5, 9]
#굳이 삭제하지 않고 최소값 얻기
print(heap[0])

#근데 그냥 선언하면 최소힙이고
#최대힙으로 하려면
heap = []
num = [5,3,1,9]
for i in num : heapq.heappush(heap, (-i, i)) #(a,b)면 a가 우선 순위, b가 값이라 자동으로 최대 힙이 됨
print(heap) #근데 대신 같이 들어감 그래서 부를 때 heapq.heappop(heap)[1]로 불러야함.

 

itertools

  • 반복되는 데이터를 처리하는 기능을 포함한 라이브러리

 

sys

  • 파이썬 인터프리터가 제공하는 변수들과 함수들을 직접 제어할 수 있게 해주는 모듈
#--sys--#
#파이썬 인터프리터가 제공하는 변수와 함수를 직접 사용하게 해주는 모듈
import sys

print(sys.argv) #cmd창에서 실행했을 경우 현 py 파일의 경로와 args 입력값 출력
#sys.exit() #강제로 스크립트 종료

l = [1,2,3]
sys.getsizeof(l) #메모리 출력

print(sys.path) #파이썬 모듈들이 저장된 위치

 

pickle

  • 객체의 형태를 그대로 유지하며 파일에 저장하고 불러올 수 있게 하는 모듈
  • dump 함수를 이용해 객체를 그대로 저장한다.
#--pickle--#
#객체의 형태를 그대로 유지하며 파일에 저장하고 불러오는 모듈
import pickle
f= open('test.txt', 'wb')
d = {1:'a', 2:'b'}
pickle.dump(d, f) #쓰기
f.close()

f = open('test.txt', 'rb')
d = pickle.load(f) #읽어오기
print(d) #{1: 'a', 2: 'b'}

 

os

  • 환경 변수나 디렉터리, 파일 등의 OS 자원을 제어할 수 있게 해주는 모듈
#--os--#
#환경 변수나 디렉터리, 파일 등의 os 자원을 제어할 수 있게 하는 모듈
import os
print(os.environ) #내 시스템의 환경변수값 확인
print(os.environ['path']) #dic 형태라 이렇게 호출 가능.

#디렉터리 위치 변경
os.chdir('C:\Program files (x86)') #이러면 해당 위치로 현재 디렉터리가 변한다.

#디렉터리 위치 돌려받기
print(os.getcwd()) #C:\Program files (x86)

#시스템 명령어 호출
print(os.system("dir")) #dir 명령어 실행하기

#실행한 시스템 명령어의 결과값 돌려받기
f = os.popen("dir")
print(f.read())

#os.mkdir("name") #디렉터리 생성
#os.rmdir("name") #디렉터리 삭제 (비어있어야 삭제 가능)
#os.unlike("file") #파일 삭제
#os.rename("name_beore", "name_after") #이름 변경

 

shutil

  • 파일을 복사해주는 모듈
#--shutil--#
#파일을 복사해주는 파이썬 모듈
import shutil
#shutil.copy("test.txt", "test_copy.txt") #test.txt 파일을 복사한 test_copy.txt 파일 생성

 

glob

  • 디렉터리에 있는 파일들의 리스트화
#--glob--#
#디렉터리에 있는 파일들을 리스트로 만들기
import glob
g = glob.glob('C:\Program files (x86)')
print(g)

 

tempfile

  • 파일을 임시로 만들어 사용
#--tempfile--#
#파일을 임시로 만들어 사용
import tempfile

file = tempfile.mkstemp() #중복되지 않는 임시 파일의 이름 만들기
print(file) #무작위 이름이 생성됨

file = tempfile.TemporaryFile() #임시 저장 공간으로 사용할 파일 객체를 돌려줌 (wb)가 디폴트값
file.close() #파일 객체는 close 하면 자동으로 사라짐

 

time

  • 시간과 관련된 모듈
#--time--#
import time
print(time.time()) #1970년 1월 1일 0시 0분 0초를 기준으로 지난 시간을 초단위로 알려줌
print(time.localtime(time.time())) #연 월 일 시 분 초의 형태 변환 #time.struct_time(tm_year=2021, tm_mon=1, tm_mday=21, tm_hour=17, tm_min=17, tm_sec=12, tm_wday=3, tm_yday=21, tm_isdst=0)
print(time.asctime(time.localtime(time.time()))) #좀 알아보기 쉬운 형태로 변환 Thu Jan 21 17:17:40 2021
print(time.ctime()) #굳이 파라미터 안넣고 간편하게 표시 Thu Jan 21 17:18:22 2021
print(time.strftime('%Y %m %d', time.localtime(time.time()))) #2021 01 21 포맷지정
print(time.sleep(1)) #시간 간격 두기 1초간 대기 if) sleep(10)이면 10초간 대기
  • strftime 약어들
포맷코드 설명
%a 요일 줄임말 Mon
%A 요일 Monday
%b 달 줄임말 Jan
%B January
%c 날짜와 시간을 출력함 06/01/01 17:22:21
%d (day) [01,31]
%H 시간(hour)-24시간 출력 형태 [00,23]
%I 시간(hour)-12시간 출력 형태 [01,12]
%j 1년 중 누적 날짜 [001,366]
%m [01,12]
%M [01,59]
%p AM or PM AM
%S [00,59]
%U 1년 중 누적 주-일요일을 시작으로 [00,53]
%w 숫자로 된 요일 [0(일요일),6]
%W 1년 중 누적 주-월요일을 시작으로 [00,53]
%x 현재 설정된 로케일에 기반한 날짜 출력 06/01/01
%X 현재 설정된 로케일에 기반한 시간 출력 17:22:21
%Y 년도 출력 2001
%Z 시간대 출력 대한민국 표준시
%% 문자 %
%y 세기부분을 제외한 년도 출력 01

 

calender

  • 달력 모듈
#--calander--#
#달력 보기
import calendar
print(calendar.calendar(2020)) #달력을 cmd에 출력해줌
calendar.prcal(2020) #마찬가지
calendar.prmonth(2020, 12) #12월 달력만

print(calendar.weekday(2020,12,31)) #해당 요일의 정보 0 월요일 ~ 6 일요일 #4

print(calendar.monthrange(2020,12)) #입력받은 달의 1일이 무슨 요일인지? 그 달이 며칠까지 있는지? (1,31)

 

 

random

  • 난수를 발생시키는 모듈
#--random--#
#난수 추출
import random
print(random.random()) #0~1
print(random.randint(1,10)) #1~10 (10포함)
data = [1,2,3,4,5]
print(random.choice(data)) #무작위 선택
print(data, end= ' ')
random.shuffle(data) #섞기
print(data)

 

webbrowser

  • 자신의 시스템에서 사용하는 기본 웹 브라우저가 자동으로 실행되게 하는 모듈
#--webbrowser--#
#웹 브라우저를 자동으로 실행하는 모듈
import webbrowser
webbrowser.open("http://www.naver.com") #네이버 실행
#그런데 위에는 webbrowser가 이미 실행중이면 그 창의 url을 바꾼다
webbrowser.open_new("http://google.com") #얘가 새 창에서 열기

 

threading

  • 스레드를 만들어주는 모듈
#--threading--#
#스레드 만들어주는 모듈
import threading
#import time

def long_task() :
    for i in range(5) :
        time.sleep(0.5) #0.5초 대기
        print(i)

threads = []
for i in range(5) :
    t = threading.Thread(target = long_task) #long_task 실행
    threads.append(t)

for t in threads : t.start() #스레드 실행

 

728x90
반응형

'언어 > PYTHON' 카테고리의 다른 글

Python range float  (0) 2021.02.15
Lambda를 활용한 Activate Function  (0) 2021.02.12
PYTHON 정리  (0) 2021.01.18