반응형
모듈(Module), 패키지(Package)
- 모듈: 변수, 함수, 클래스를 모아놓은 .py 확장자 파일
- .py 파일: 마크다운이나 셀같은 정보는 없고 순수한 파이썬 코드만 존재
- .ipynb 파일: 데이터분석가(과학자)들이 파이썬 언어와 데이터로 작업하고 실험할수 있도록 도와주는 Interactive 한 개발 환경에서 실행되는 파일
- 패키지: 모듈의 기능을 폴더별로 정리한 개념
- 패키지생성: 기능별로 폴더를 정리하는것과 비슷한 개념
# 모듈 불러오기
import <모듈명>
# 패키지에서 모듈 불러오기
from <패키지명> import <모듈명>
# 모듈 안에 함수와 클래스 불러오기
from <모듈명> import <함수 or 클래스>
# 별칭 주기
import <모듈명> as <별칭>
sys,os 모듈 사용해 보기
import sys,os
sys.path
['',
'/content',
'/env/python',
'/usr/lib/python37.zip',
'/usr/lib/python3.7',
'/usr/lib/python3.7/lib-dynload',
'/usr/local/lib/python3.7/dist-packages',
'/usr/lib/python3/dist-packages',
'/usr/local/lib/python3.7/dist-packages/IPython/extensions',
'/root/.ipython']
os.getcwd()
sys.version
- cpu 개수 확인하기
os.cpu_count()
2
- 폴더 만들기
- 폴더가 이미 있을 경우 에러가 발생
os.mkdir("data")
os.mkdir("/content/data/files")
- 폴더 또는 파일명 변경하기
os.rename("data","data2")
- 폴더 삭제하기
os.rmdir("data2/files")
- 폴더 존재 여부 확인
os.path.isdir("data1") , os.path.isdir("data2")
(False, True)
- 파일 존재 여부 확인
os.path.isfile("demo.py")
True
- 파일 및 폴더 존재 여부 확인
os.path.exists("data2") , os.path.exists("demo.py")
(True, True)
- 파일 삭제하기
os.remove("demo.py")
random 모듈 사용해보기
import random
- random 함수
- 0~1 사이에 랜덤한 실수를 반환한다.
random.random()
0.8370654726828246
- uniform 함수
- 두개의 숫자 사이의 랜덤한 실수를 반환한다.
random.uniform(1,10)
6.119992584470131
- randint 함수
- 2개의 숫자사이의 랜덤한 정수를 반환한다.
random.randint(0,5)
5
- randrange 함수
- start,stop,step 으로 만들어지는 정수 중에 랜덤값을 반환한다.
random.randrange(20)
6
random.randrange(1,3)
1
random.randrange(0,10,2)
8
- choice 함수
- 시퀀스 자료형에서 랜덤하게 하나의 요소를 선택해서 반환
lst = [1,2,3,4,5,6]
random.choice(lst)
6
- sample 함수
- 시퀀스 자료형에서 랜덤하게 두번째 인수의 개수로 선택해서 반환
lst = [1,2,3,4,5,6]
random.sample(lst,2)
[5, 1]
- shuffle 함수
- 요소의 순서를 랜덤하게 변경한다.
lst = [1,2,3,4,5,6]
random.shuffle(lst) # 원본을 변경한다.
lst
[2, 4, 1, 3, 6, 5]
random.shuffle("안녕하세요 반갑습니다.")
random.seed(42)
lst = [1,2,3,4,5,6]
random.shuffle(lst)
lst
[4, 2, 3, 5, 1, 6]
collections 모듈
- 파이썬의 내장 자료 구조
- 기존 자료구조를 확장하여 제작된 파이썬 내장모듈
deque
from collections import deque
dq = deque()
dq
deque([])
- append
dq.append(100)
dq
deque([100])
- appendleft
- 인자로 넣은 값을 왼쪽 부터 추가
dq.appendleft(300)
dq
deque([300, 100])
lst = [100]
lst.insert(0,300)
lst
[300, 100]
- 디큐 객체 생성시 반복가능한 객체를 인자로 넣어도 된다.
dq = deque(range(10))
dq
deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- rotate
- dq 객체 안에 요소를 회전 한다.
dq.rotate()
dq
deque([9, 0, 1, 2, 3, 4, 5, 6, 7, 8])
dq = deque(range(10))
dq.rotate(5)
dq
deque([5, 6, 7, 8, 9, 0, 1, 2, 3, 4])
dq[-1] # 인덱싱 지원
4
dq[:] # 슬라이싱은 지원 안한다.
- 속도도 비교해 봅시다.
%%timeit
dq = deque()
for i in range(1000000):
dq.append(i)
10 loops, best of 5: 97.4 ms per loop
%%timeit
lst = []
for i in range(1000000):
lst.append(i)
10 loops, best of 5: 108 ms per loop
%%timeit
lst = [ i for i in range(1000000)]
10 loops, best of 5: 68.7 ms per loop
defaultdict
- 딕셔너리의 단점으로 없는 key 접근시 에러가 발생하는 단점을 보완
- 딕셔너리에 없는 key에 접근시 지정한 기본값을 이용하여 key,value 를 생성
d = {}
d["key1"]
from collections import defaultdict
default_dict = defaultdict(lambda:0)
default_dict["key1"]
0
default_dict
defaultdict(<function __main__.<lambda>>, {'key1': 0})
dict(default_dict)
{'key1': 0}
d = {
"key1" : 0,
"key2" :1
}
defaultdict(lambda:0,d)
defaultdict(<function __main__.<lambda>>, {'key1': 0, 'key2': 1})
defaultdict 활용방법
- 딕셔너리 예시
tup_list = [
("경제","10시 경제기사"),
("정치","10시 정치기사"),
("사회","10시 사회기사"),
("경제","14시 경제기사"),
("정치","15시 정치기사"),
]
news_dict = {}
for k,v in tup_list:
if news_dict.get(k) is None:
news_dict[k] = []
news_dict[k].append(v)
news_dict
{'경제': ['10시 경제기사', '14시 경제기사'],
'사회': ['10시 사회기사'],
'정치': ['10시 정치기사', '15시 정치기사']}
news_dict = defaultdict(list)
for k,v in tup_list:
news_dict[k].append(v)
news_dict
defaultdict(list,
{'경제': ['10시 경제기사', '14시 경제기사'],
'사회': ['10시 사회기사'],
'정치': ['10시 정치기사', '15시 정치기사']})
OrderedDict
- 순서를 가진 딕셔너리 객체
- key, value 생성한 순서대로 저장된다.
from collections import OrderedDict
order_dict = OrderedDict()
order_dict["사과"] = 200
order_dict["딸기"] = 100
order_dict["포도"] = 500
for k,v in order_dict.items():
print(k,v)
사과 200
딸기 100
포도 500
Counter
- 시퀀스 자료형의 데이터의 값의 개수를 딕셔너리 형태로 반환
from collections import Counter
Counter("aaabbc")
Counter({'a': 3, 'b': 2, 'c': 1})
counter = Counter({"사과":3,"포도":2,"딸기":1,"참외":4})
counter
Counter({'딸기': 1, '사과': 3, '참외': 4, '포도': 2})
- most_common
- values 를 기준으로 내림차순 정렬하여 key,value 를 튜플에 담고 리스트에 담아 반환
counter.most_common()
[('참외', 4), ('사과', 3), ('포도', 2), ('딸기', 1)]
- elements
- value의 갯수 만큼 key를 반복할수있는 객체를 반환
for i in counter.elements():
print(i)
사과
사과
사과
포도
포도
딸기
참외
참외
참외
참외
파이썬 속도 향상을 위한 팁
- 단순하게 반복해서 데이터를 담아야하는 경우
# bad
lst = []
for i in range(1,1000):
if i % 2 == 0:
lst.append(i)
# good
lst = [i for i in range(1,1000) if i % 2 == 0 ]
- 여러개의 변수를 초기화 할때...
# bad
a = None
b = 0
c = ""
# good
a,b,c = None,0,""
- 컬랙션에 있는 문자열을 연결할때
# bad
lst = [
("A반","90점"),
("B반","88점"),
("C반","95점")
]
for s1,s2 in lst:
print(f"{s1} {s1}")
A반 A반
B반 B반
C반 C반
# good
for s in lst:
print(" ".join(s))
A반 90점
B반 88점
C반 95점
- 함수 호출은 컴퓨팅 비용이 많이 든다.
# bad
%%timeit
def square(n):
return n**2
square_list = []
for i in range(1000000):
square_list.append(square(i))
1 loop, best of 5: 398 ms per loop
# good
%%timeit
def square():
square_list = []
for i in range(1000000):
square_list.append(i**2)
return square_list
square()
1 loop, best of 5: 352 ms per loop
- 모듈을 불러올때...
Counter()
Counter()
반응형
'python' 카테고리의 다른 글
[python]파이썬 - 정규표현식 (0) | 2023.01.26 |
---|---|
[python]파이썬 - 제너레이터(Generator) (0) | 2023.01.25 |
[python]파이썬 - 오류 예외처리 (0) | 2023.01.24 |
[python]파이썬 - 클래스class2 (0) | 2023.01.24 |
[python]파이썬 - 클래스class (0) | 2023.01.24 |
댓글