[U stage DAY 1] python basics for AI (1)

먼지감자·2021년 8월 3일
0

AI Boostcamp 2기

목록 보기
1/48

강의 복습 내용

python 1강

1.1 Basic computer

  • OS (operating system)
    우리의 프로그램이 동작할 수 있는 구동 환경

  • 파일 시스템
    os에서 파일을 저장하는 트리구조 저장 체계
    root 디렉토리로부터 시작하는 트리구조

  • 터미널 환경
    mouse가 아닌 키보드로 명령을 입력하여 프로그램을 실행 : CLI (Command Line Interface)

1.2 python

  • 특징
  1. 플랫폼 독립적
    플랫폼 = OS
    한번 프로그램을 작성하면 운영체제에 관계없이 사용 가능
  2. 인터프리터 언어
    소스코드를 바로 실행할 수 있게 지원하는 프로그램 실행 방법
  3. 객체 지향
    실행 순서가 아닌 attribute와 method를 가진 객체 중심으로 프로그램 작성
  4. 동적 타이핑 언어
    프로그램이 실행하는 시점에 사용해야할 데이터에 대한 타입 결정
  5. 처음 C언어로 구현됨
  6. 이해하기 쉬운 문법과 다양한 라이브러리

1.3 Python coding environment

  • anaconda or miniconda
  • vscode
  • jupyter notebook
  • Colab

python 2강

2.1 Variables

  • 변수

    • 프로그램에서 사용하기 위한 특정한 값을 저장하는 공간
    • 선언되는 순간 특정 메모리 영역에 물리적인 공간이 할당됨
    • 변수에는 값이 할당되고, 해당 값은 메모리에 저장됨
  • Basic Operation

    1. 기본자료형
    2. 연산자와 피연산자
      • , -, * , / 같은 기호들을 연산자라고 칭함
    • 연산자에 의해 계산이 되는 숫자들은 피연산자라 칭함
    • “3 + 2” 에서3과2는피연산자, +는연산자임
    • 문자간에도 + 연산이 가능함 -> concatenate
    1. 데이터 형변환
    • int(), float()과 같은 함수로 형변환 가능
    • type()은 데이터 타입 확인 함수
  • list

    • 인덱싱(indexing) / 슬라이싱(slicing)
      인덱싱 : list에 있는 값들은 주소를 가지므로 주소를 사용해 값 호출
      슬라이싱 : list의 주소값을 기반으로 부분 값을 반환

      m = [1,2,3,4]
      # indexing
      print(m[1]) # 2
      
      # slicing
      print(m[1:3]) # [2,3]
    • 리스트 연산

    • 추가와 삭제

    • 다양한 데이터 타입이 하나의 list에 들어감

    • 파이썬은 해당 리스트 변수에는 리스트 주소값이 저장됨

    • 패킹 / 언패킹

    • n차원 list 가능

2.2 Function and Console I/O

  • 함수

    • 어떤 일을 수행하는 코드의 덩어리로, 코드를 논리적인 단위로 분리한 것
    • 캡슐화 : 인터페이스만 알면 타인의 코드 사용 가능
    • parameter vs argument
      parameter : 함수의 입력 값에 해당하는 인터페이스
      argument : 실제 parameter에 대입된 값
  • console in/out

    • input()
      console 창에서 문자열을 입력받는 함수

    • print formatting

    1. $string
    2. format 함수
    3. f string
# 1) %-format
print("I eat %d apples." % 3) # I eat 3 apples.
print("I eat %s apples." % "five") # I eat five apples.
number = 3; day="three"
print("I ate %d apples. I was sick for %s days." # I ate 3 apples. I was sick for three days.
% (number, day))
print("Product: %s, Price per unit: %f." % ("Apple", 5.243)) #Product: Apple, Price per unit: 5.243000.

print()

# 2) str.format()
age = 36; name='Sungchul Choi'
print("I’m {0} years old.".format(age))
print("My name is {0} and {1} years old.".format(name,age))
print("Product: {0}, Price per unit: {1:.3f}.".format("Apple", 5.243))

## - padding(여유공간 지정)
print("Product: %5s, Price per unit: %.5f." % ("Apple", 5.243))
print("Product: {0:5s}, Price per unit: {1:.5f}.".format("Apple", 5.243))
print("Product: %10s, Price per unit: %10.3f." % ("Apple", 5.243))
print("Product: {0:>10s}, Price per unit: {1:10.3f}.".format("Apple", 5.243))

## - naming(표시할 내용 변수로 표시하여 입력)
print("Product: %(name)10s, Price per unit: %(price)10.5f." %
{"name":"Apple", "price":5.243})
print("Product: {name:>10s}, Price per unit: {price:10.5f}.".format(name="Apple", price=5.243))

print()

# 3) f-string
name = "Sungchul"
age = 39
print(f"Hello, {name}. You are {age}.")
print(f'{name:20}')
print(f'{name:>20}')
print(f'{name:*<20}')
print(f'{name:*>20}')
print(f'{name:*^20}')
number = 3.141592653589793
print(f'{number:.2f}')

I eat 3 apples.
I eat five apples.
I ate 3 apples. I was sick for three days.
Product: Apple, Price per unit: 5.243000.

I’m 36 years old.
My name is Sungchul Choi and 36 years old.
Product: Apple, Price per unit: 5.243.
Product: Apple, Price per unit: 5.24300.
Product: Apple, Price per unit: 5.24300.
Product: Apple, Price per unit: 5.243.
Product: Apple, Price per unit: 5.243.
Product: Apple, Price per unit: 5.24300.
Product: Apple, Price per unit: 5.24300.

Hello, Sungchul. You are 39.
Sungchul
Sungchul
Sungchul****
****Sungchul
**Sungchul**
3.14

2.3 Conditionals and Loops

  • 조건문
    조건에 따라 특정한 동작을 하게하는 명령어
    파이썬 조건문 예약어 : if, elif, else

    • 삼항 연산자
      조건문을 사용하여 참/거짓 경우 결과를 한줄에 표현
  • 반복문
    정해진 동작을 반복적으로 수행하게 하는 명령문
    for, while 문 사용
    break : 특정조건에서 반복 종료
    continue : 특정조건에서 남은 반복 명령 skip 후 다음으로 넘어감

  • debugging (디버깅)
    코드의 오류를 발견하여 수정하는 과정
    문법적 에러 : 에러메시지 분석
    논리적 에러 : 테스트

2.4 String and advanced function concept

  • string
    시퀀스 자료형으로 문자형 data를 메모리에 저장
    영문자 한 글자는 1byte의 메모리공간 사용 --> 컴퓨터는 1bit 2진수로 데이터를 저장하므로 1byte는 282^8 = 256까지 저장 가능
    컴퓨터는 문자를 2진수로 변환하여 저장

  • 데이터 타입 별 크기

  • stirng 함수

  • raw string
    특수 기호인 \ escape 글자를 무시하고 그대로 출력

raw_string ="이제 파이썬 강의 그만 만들고 싶다. \n 레알"
print(raw_string) # 두줄로 출력

raw_string = r"이제 파이썬 강의 그만 만들고 싶다. \n 레알"
print(raw_string) # 이제 파이썬 강의 그만 만들고 싶다. \n 레알
  • function

    • 함수 호출 방식
    1. 값에 의한 호출(call by value)
      함수에 인자를 넘길때값만 넘김.
      함수 내에 인자값변경시, 호출자에게 영향을 주지 않음

    2. 참조에 의한 호출(c함수에 인자를 넘길때메모리 주소를 넘김.
      함수 내에 인자값변경시, 호출자의 값도 변경됨all by reference)

    3. 객체 참조에 의한 호출(call by object reference)
      파이썬은 객체의 주소가 함수로 전달되는 방식
      전달된 객체를 참조하여 변경 시 호출자에게 영향을 주나,
      새로운 객체를 만들 경우 호출자에게 영향을 주지 않음

    • function type hints
      파이썬의 가장 큰 특징 – dynamic typing
      처음 함수를 사용하는 사용자가 interface를 알기 어렵다는 단점이 있음
      python 3.5 버전 이후로는 PEP 484에 기반하여 type hints 기능 제공

    • function type hints 장점
      (1) 사용자에게 인터페이스를 명확히 알려줄 수 있다.
      (2) 함수의 문서화시 parameter에 대한 정보를 명확히 알 수 있다.
      (3) mypy 또는 IDE, linter 등을 통해 코드의 발생 가능한 오류를 사전에 확인
      (4) 시스템 전체적인 안정성을 확보할 수 있다.

    • docstring

      • 파이썬 함수에 대한 상세스펙을 사전에 작성 -> 함수 사용자의 이행도 UP
      • 세개의 따옴표로 docstring 영역 표시(함수명 아래)
      • vscode 에서 python docstring generator 다운받고 ctrl+shift+p -> docstring 입력하면 손쉽게 작성 가능
    • 코딩 컨벤션

      • 읽기 좋은 코드를 작성하는 규칙
      • 'flake8' 또는 'black' 모듈로 체크
        flake8 test.py or black test.py

python 3강

3.1 Python Data Structure

  • 스택과 큐(stack & queue with list)

    • 스택
      last in first out : 먼저 들어간게 나중에 나옴
      list를 사용하여 구현, 입력(push) : append(), 출력(pop) : pop()


    • first in first out : 먼저 넣은게 먼저 나옴
      list를 사용하여 구현, 입력(put) : append(), 출력(get) : pop()

  • 튜플과 집합(tuple & set)

    • 튜플
      값 변경 불가, 선언 시 () 사용
      변경되지 않아야 할 데이터 저장에 사용

    • 집합
      값을 순서없이 저장, 중복 불허, 선언 시 {} 사용
      다양한 집합 연산 가능 (union: |, intersection: &, difference: -)

  • 사전(dictionary)
    데이터(value)를 저장 할 때는 구분 지을 수 있는 값(key)을 함께 저장
    hash table
    .items() / .keys() / .values()

  • Collection 모듈
    List, Tuple, Dict에 대한 Python Built-in 확장 자료 구조(모듈)

    • deque : stack, queue 지원
    • Counter : Sequence type의 data element들의 갯수를 dict 형태로 반환
    • OrderDict : Dict와 달리, 데이터를 입력한 순서대로 dict 반환
    • defaultdict : Dict type에 기본 값을 지정, 신규값 생성 시 사용
    • namedtuple : Iuple 형태로 Data 구조체 저장, 저장되는 data의 variable을 사전에 지정해서 저장

3.2 Pythonic code

  • split & join
  • list comprehension
  • enumerate & zip
  • lambda & map & reduce
  • generator
    iterable object를 특수한 형태로 사용해준다. yeild를 사용해 한번에 하나의 element만 반환하여 element가 사용되는 시점에 값을 메모리에 반환한다.
def generator_list(value):
	result = []
    for i in range(value):
    	yield i

list comprehension과 유사한 형태로 generator 형태의 list 생성, generator expressoin 이라는 이름으로 부르며 일반적인 iterator에 비해 훨씬 작은 메모리 용량 사용
[] 대신 () 를 사용하여 표현

gen_ex = (n*n for n in range(500))
print(type(g)) #generator

중간과정에서 loop이 중단될 수 있을떄나 list 타입의 데이터를 반환해주는 함수는 generator로 만들면 읽기 쉽다.

  • 가변인자 (variable-asterisk)
    • 개수가 정해지지 않은 변수를 함수의 parameter로 사용하는 법
    • Keyword arguments와 함께, argument 추가가 가능
    • Asterisk(*) 기호를 사용하여 함수의 parameter를 표시함
    • 입력된 값은 tuple type으로 사용할 수 있음
    • 가변인자는 오직 한 개만 맨 마지막 parameter 위치에 사용가능
    • *args
      기존 파라미터 이후에 나오는 값을 tuple로 저장함.
      def asterisk_test(a, *args):
      	print(a, args)
      	print(type(args))
      asterisk_test(1,2,3,4,5,6) 

      1 (2, 3, 4, 5, 6)
      <class 'tuple'>

    • *kargs
      asterisk(
      ) 두개를 사용, 입력된 값은 dict type으로 사용 가능
      가변인자는 오직 한 개만 기존 가변인자 다음에 사용
      def asterisk_test(a, **kargs):
        print(a, kargs)
        print(type(kargs))
      asterisk_test(1, b=2, c=3, d=4, e=5, f=6)

1 {'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
<class 'dict'>

python 4강

4.1 Python Object Oriented Programming

  • python은 OOP . OOP는 객체 개념을 프로그램으로 표현할 때 속성은 변수(variable), 행동은 함수(method)로 표현

  • 변수명과 class명, 함수명은 짓는 방식이 존재함.
    함수/변수 : snakecase, 띄어쓰기 부분에 ''를 추가
    클래스 : CamelCasem, 띄어쓰기 부분에 대문자

  • 파이썬에서 __의 의미
    특수한 예약함수나 변수, 함수명 변경(맨글링)으로 사용

class Student:
    def __init__(self, name, marks):
        self.name = name
        self.marks = marks
        # self.gotmarks = self.name + ' obtained ' + self.marks + ' marks'

    def gotmarks(self):
        return self.name + ' obtained ' + self.marks + ' marks'


st = Student("Jaki", "25")
print(st.name)
print(st.marks)
print(st.gotmarks())

st.name = "Anusha"
print(st.name)
print(st.gotmarks())

'''
Jaki
25
Jaki obtained 25 marks
Anusha
Anusha obtained 25 marks
'''

위처럼 클래스를 구현하면 속성 gotmark를 변경하는 것이 힘들기때문에 Python property decorator를 사용하면 함수 gotmarks를 속성처럼 사용할 수 있음.

@property
def gotmarks(self):
   return self.name + ' obtained ' + self.marks + ' marks'

https://www.journaldev.com/14893/python-property-decorator

  • first-class objects
    변수나 데이터 구조에 할당이 가능한 객체, 파이썬의 함수를 파라미터로 전달하거나 리턴값으로 사용하는 것이 가능함
  • inner function
    함수 내에 또 다른 함수가 존재
    closures : inner function을 return 값으로 반환
def tag_func(tag, text):
    text = text
    tag = tag 
    def inner_func():
    return '<{0}>{1}<{0}>'.format(tag, text) 
    return inner_func
h1_func = tag_func('title', "This is Python Class") 
p_func = tag_func('p', "Data Academy")
  • decorator function
    복잡한 closure함수를 간단하게 구현함.
def star(func):
    def inner(*args, **kwargs):
        print("*" * 30)
        func(*args, **kwargs)
        print("*" * 30)
    return inner

def percent(func):
    def inner(*args, **kwargs):
        print("%" * 30)
        func(*args, **kwargs)
        print("%" * 30)
    return inner

@star
@percent
def printer(msg):
    print(msg)
printer("Hello")
'''
******************************
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Hello
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
******************************
'''

4.2 Module and Project

module : 프로그램에서는 작은 프로그램 조각들, 프로그램을 모듈화시키면 다른 프로그램이 사용하기 쉬움
package : 모듈을 모아놓은 단위, 하나의 프로그램
package 만드는 순서
1. 기능들을 세부적으로 나눠 폴더로 만듬

2. 각 폴더별로 필요한 모듈 구현

3. 폴더별로 init.py 구성

4. main.py 파일 만들기

python 5강

5.1 File / Exception / Log Handling

5.2 Python data handling


피어 세션

  • 기본 규칙 및 출결 규칙 정하기

  • 5주간 통계학 스터디 진행
    - Mathematics for machine learning part 1 chapter 6
    - 한 챕터씩 발표 진행 및 질의 응답

  • 매일 학습 기록 꼼꼼히 남기기

  • 이틀 동안 python 관련 내용 빠르게 학습하고 AI Math 를 자세히 공부하기

학습관련 질문

없음

학습 회고

AI Boostcamp의 첫 날, 많은 양의 강의를 빠르게 듣고 학습 정리까지 해야해서 쉽지는 않을 것 같다.
같은 목표를 가지고 모인 사람들이다 보니 관심사가 겹쳐 함께 공부하기에는 최고의 환경이다.

profile
ML/AI Engineer

0개의 댓글