본문 바로가기
네이버 부스트캠프 AI Tech/Deep Learning Basics

[부스트캠프 AI Tech] Python Basics for AI

by 중앙백 2022. 1. 17.

* 개념 정리도 중요하지만 cmder, jupyter, vscode에 익숙해지는게 우선일 듯.

 

  1. OS(Operating System, 운영체제)는 프로그램이 동작할 수 있는 구동 환경을 의미
  2. 파일 시스템 : OS에서 파일을 저장하는 트리 구조 저장체제
  3. 터미널 : mouse가 아닌 키보드로 명령을 입력하고 프로그램을 실행. Command Line Interface

 

Python은 플랫폼 독립적인 인터프리터 언어이다.
  • 플랫폼 독립적인 : OS에 상관없이 한 번 프로그램을 작성하면 사용 가능.
  • 인터프리터 언어 : 통역기를 사용하는 언어. 소스코드를 바로 실행할 수 있게 지원하는 프로그램 실행방법

 

Python은 객체 지향 동적 타이핑 언어.
  • 객체 지향 : 실행 순서가 아니라 단위모듈(객체)를 중심으로 프로그램을 작성하는 방식.
  • 동적 타이핑 언어 : 실행하는 시점에 프로그램이 사용해야 할 데이터에 대한 타입을 결정하는 방식.

 

비교할 때 is 연산 사용 주의.
  • is 연산은 메모리의 주소를 비교하기 때문에 문제가 발생가능.
a = [1, 2, 3]
b = a[:]
a is b # False

a = [1, 2, 3]
b = a
a is b # True

 

 

Python에서 함수는 객체 참조에 의한 호출(call by object reference) 방식이다.
  1. Call by Value : 값에 의한 호출. 함수에 인자를 넘길 때 값만 넘김. 함수 내 인자값 변경시 호출자에게 영향 없음.
  2. Call by Reference : 참조에 의한 호출. 함수에 인자를 넘길 때 메모리 주소를 넘김. 함수 내 인자값 변경시 호출자 값도 변경.
  3. Call by Object Reference : 객체 참조에 의한 호출. 객체의 주소가 함수로 전달되는 방식. 전달된 객체를 참조하여 변경시 호출자에게 영향을 주지만 새로운 객체를 만들 경우 영향 주지 않음.
def spam(eggs):
    eggs.append(1)
    eggs = [2,3]

ham = [0]
spam(ham)

# ham = [0, 1]
# eggs = [2, 3]

 

파이썬 기본 데이터 구조
  1. 스택(stack) : 선입후출(LIFO : Last In First Out). 리스트로 구현 가능. append & pop()
  2. 큐(queue) : 선입선출(FIFO : First In First Out). 리스트로 구현 가능. append & pop(0)
  3. 튜플(tuple) : 값 변경 불가능한 리스트.
  4. 집합(set) : 값을 순서없이 저장. 중복 불허하는 자료형.
  5. 사전(dictionary) : Key, Value 순서쌍으로 저장
  6. Collection 모듈
    deque : queue를 지원하는 모듈. 리스트에 비해 효율적
    defaultdict : dict type의 값에 기본값을 지정. 신규값 생성시 사용
    Counter : sequence type의 data element 개수를 dict 형태로 반환
    namedtuple : 튜플 형태로 data 구조체를 저장하는 방법. 저장되는 data의 variable을 사전에 지정해서 저장.

 

Pythonic code
  • split : string type의 값을 기준값으로 나눠서 list로 전환
  • join : 리스트 내 문자열을 하나의 문자열로 합침
  • list comprehension : 기존 리스트로 간단히 다른 리스트를 만드는 기법. for loop 구문보다 효율적.
[i for i in range(10)] #  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • enumerate : list에서 번호와 element를 동시에 추출
  • zip : 두 개의 리스트를 병렬적으로 추출
  • lambda : 함수 이름없이 함수처럼 쓸 수 있는 익명함수
  • map : 두 개 이상의 list에도 함수를 적용가능하게 함. list comprehension으로 대체 가능.
def f(x): return x + 5

ex = [1,2,3,4,5]
list(map(f, ex)) # map 
[f(value) for value in ex] # list comprehension
  • reduce : list에 똑같은 함수를 적용해서 통합.
from functools import reduce
print(reduce(lambda x, y : x + y, [1,2,3,4,5])) # 15
  • iterable object : sequence형 자료형에서 데이터를 순서대로 추출하는 object.
  • generator : iterable object를 특수한 형태로 사용해주는 함수로서 element가 사용되는 시점에 값을 메모리에 반환.
    yield를 사용해 한 번에 하나의 element만 반환함. [ ] 가 아닌 ( ) 로 표현함. 메모리를 적게 차지.
def generator_list(value):
    result = []
    for i in range(value):
        yield i
        
generator_list(50) # 

gen_ex = (n * n for n in range(50)) # ()를 이용한 표현

 

function passing argument
  • keyword argument : 함수에 입력되는 parameter를 인용해서 직접 argument를 입력
  • default argument : parameter에 기본값을 지정. 따로 입력하지 않으면 기본값이 입력됨.
  • variable-length asterisk(가변인자) : 변수의 개수가 정해지지 않은 경우, asterist(*) 기호로 표현. 튜플 타입으로 변환.
  • keyword variable-length : **로 표현. dict 타입으로 변환.
def asterist_test(a, b, *args): # variable-length
    return a + b + sum(args)

print(asterist_test(1,2,3,4,5)) # 15



def kwargs_test(**kwargs): # keyword variable-length
    print(kwargs)
    print(type(kwargs)) 
    
kwargs_test(firts=3, second = 4, third=5)


print(*[1,2,3,4]) # unpacking # 1 2 3 4

ex = ([1,2],[3,4],[5,6],[5,6]) # unpacking
for value in zip(*ex):
    print(value) #(1,3,5,5) (2,4,6,6)
  • cf) asterisk는 tuple, dict 자료형에 들어있는 값을 unpacking하는 용도로도 사용

 

Naming rule in Python

snake_case : 함수명/변수명

CamelCase : 클래스명

 

객체 지향 프로그래밍 (OOP : Object-Oriented Programming)
  • 객체는 속성(Attribute)과 행동(Action)을 가지고 각각 변수(variable)와 함수(method)로 표현한다.
  • 객체 지향 프로그래밍은 클래스(class)와 그 구현체인 인스턴스(instance)로 나뉨
  • Attribute 추가는 __init__, self를 사용
    __init__ : 객체 초기화 함수
    self : 생성된 인스턴스 자신
  • Method 구현은 함수와 비슷하지만 self를 추가해야 한다는 차이 존재

* OOP에서 알면 좋을 3가지

  1. Inheritance(상속) : 부모클래스의 속성/method를 물려받는 자식클래스 생성 가능
  2. Polymorphism(다형성) : 같은 이름 메소드의 내부로직을 다르게 작성
  3. Visibility(가시성) : 객체 정보를 볼 수 있는 레벨을 조절. 모든 사람이 모든 변수를 볼 필요가 없기 때문. __로 구현

 

* Decorate(@)

  1. 파이썬 함수는 first-class object(일급객체). 일급객체란 변수나 데이터 구조에도 할당이 가능한 객체를 뜻함.
    즉 파이썬 함수를 parameter/return값으로 사용 가능하다.
  2. inner function : 파이썬에서는 함수 내에 또 다른 함수를 정의할 수 있다.
  3. decorator : 복잡한 함수식을 간단히 할 수 있음.

 

모듈 & 패키지
  • 모듈(Module) : 작은 프로그램 조각들로, 모듈을 모아 하나의 프로그램을 만든다.
  • 패키지(Package) : 모듈을 모아놓은 단위. 하나의 프로그램

* 모듈 namespace

  • import 모듈 (as 별칭)
  • from 모듈 import 함수/클래스 (as 별칭)
  • from 모듈 import *  : 모든 함수/클래스 호출

 

가상환경 설정하기(Virtual Environment)
  • 프로젝트 진행시 필요한 패키지만 설치하는 환경
  • 패키지 관리도구 : virtualenv, conda
conda create -n my_project python=3.9 # 가상환경이름 # 파이썬 버전
conda activate my_project # 가상환경 실행
conda install matplotlib # 패키지설치
conda install tqdm 
conda deactivate # 가상환경 종료

 

예외 처리 (Exception)
  • 예상 가능한 예외 : 개발자가 명시적으로 처리해야 한다. → if/else문으로 처리
  • 예상 불가능한 예외 : 인터프리터 과정에서 발생하는 예외. → Exception Handling
  • Exception 처리 해주면 중간에 코드가 멈추지 않아 안정적이다.
try:
    <예외 발생 가능 코드>
except <Exception Type>:
    예외 발생시 대응하는 코드
else:
    예외가 발생하지 않을 때 동작하는 코드
finally:
    예외 발생 여부와 무관하게 동작하는 코드

 

  • raise 구문 : 필요에 따라 강제로 예외 발생
  • assert 구문 : 특정 조건에 만족하지 않을 경우 예외 발생
raise <Exception Type>


assert <예외 조건>

 

Logging
  • 프로그램이 실행되는 동안 일어나는 정보를 기록 남기기
  • Log level : DEBUG > INFO > WARNING > ERROR > CRITICAL

(cf) print로 기록을 남기고 싶을 수 있다. but print문은 console창에만 남겨져 분석시 사용 불가.

 

CSV
  • CSV(Comma Separate Values, Character - ), TSV(Tab - ), SSV(Single Space -)
  • CSV 객체로 CSV 처리 가능 → 추후에는 Pandas로 csv를 다룰 예정

 

HTML(Hyper Text Markup Language) & XML(eXtensible Markup Langauge)
  • 웹상의 정보를 구조적으로 표현하는 언어
  • TAG로 둘러싸임.
  • 정규식 표현을 통해 원하는 정보 찾는 연습 요망.

 

정규식(Regular expression)
  • regexp, regex 로 표현
  • 복잡한 문자열 패턴을 정의하는 문자 표현 공식
  • 특정한 규칙을 가진 문자열 집합을 추출.
  • www.regexr.com에서 연습

댓글