[U] Week 1 Day 3

나며기·2021년 1월 20일
0

부스트캠프 AI Tech

목록 보기
4/79
post-thumbnail

강의 복습 내용

[DAY 3] 파이썬 기초 문법 II

Python Data Structure

  • 스택 (Stack)
    • 나중에 넣은 데이터를 먼저 반환하도록 설계된 메모리 구조
    • Last In First Out (LIFO)
    • Data의 입력을 Push, 출력을 Pop이라고 함
    • 리스트를 사용하여 스택 구조를 구현 가능
    • push를 append(), pop을 pop()를 사용
  • 큐 (Queue)
    • 먼저 넣은 데이터를 먼저 반환하도록 설계된 메모리 구조
    • First In First Out (FIFO)
    • Stack과 반대되는 개념
    • 파이썬은 리스트를 사용하여 큐 구조를 활용
    • put를 append(), get을 pop(0)를 사용
  • 튜플 (tuple)
    • 값의 변경이 불가능한 리스트
    • 선언시“[]”가 아닌“()”를사용
    • 리스트의 연산, 인덱싱, 슬라이싱 등을 동일하게 사용
  • 집합 (set)
    • 값을 순서없이 저장, 중복 불허 하는 자료형
    • set 객체 선언을 이용하여 객체 생성
    • 수학에서 활용하는 다양한 집합연산 가능
  • 사전 (dictionary)
    • 데이터를 저장 할 때는 구분 지을 수 있는 값을 함께 저장
    • 구분을 위한 데이터 고유 값을 Identifier 또는 Key 라고함
    • Key 값을 활용하여, 데이터 값(Value)를 관리함
    • key와 value를 매칭하여 key로 value를 검색
    • 다른 언어에서는 Hash Table 이라는 용어를 사용
    • {Key1:Value1, Key2:Value2, Key3:Value3 ...} 형태
  • collections
    • List, Tuple, Dict에 대한 Python Built-in 확장 자료 구조(모듈)
    • 편의성, 실행 효율 등을 사용자에게 제공함
    • 아래의 모듈이 존재함
      • from collections import deque
      • from collections import Counter
      • from collections import OrderedDict
      • from collections import defaultdict
      • from collections import namedtuple
  • collections - deque
    • Stack과 Queue를 지원하는 모듈
    • List에 비해 효율적인 = 빠른 자료 저장 방식을 지원함
    • rotate, reverse등 Linked List의 특성을 지원함
    • 기존 list 형태의 함수를 모두 지원함
    • deque는 기존 list보다 효율적인 자료구조를 제공
    • 효율적 메모리 구조로 처리 속도 향상
  • collections - OrderedDict
    • Dict와 달리, 데이터를 입력한 순서대로 dict를 반환함
    • 그러나 dict도 python 3.6부터 입력한 순서를 보장하여 출력함
    • Dict type의 값을, value 또는 key 값으로 정렬할 때 사용 가능
  • collections - defaultdict
    • Dict type의 값에 기본 값을 지정, 신규값 생성시 사용하는 방법
  • collections - Counter
    • Sequence type의 data element들의 갯수를 dict 형태로 반환
    • Dict type, keyword parameter 등도 모두 처리 가능
    • Set의 연산들을 지원함
    • word counter의 기능도 손쉽게 제공함
  • collections - namedtuple
    • Tuple 형태로 Data 구조체를 저장하는 방법
    • 저장되는 data의 variable을 사전에 지정해서 저장함

Pythonic code

  • split : string type의 값을 “기준값”으로 나눠서 List 형태로 변환
  • join : String으로 구성된 list를 합쳐 하나의 string으로 반환
  • list comprehension
    • 기존 List 사용하여 간단히 다른 List를 만드는 기법
    • 포괄적인 List, 포함되는 리스트라는 의미로 사용됨
    • 파이썬에서 가장 많이 사용되는 기법 중 하나
    • 일반적으로 for + append 보다 속도가 빠름
  • enumerate : list의 element를 추출할 때 번호를 붙여서 추출
  • zip : 두 개의 list의 값을 병렬적으로 추출함
  • lambda
    • 함수 이름 없이, 함수처럼 쓸 수 있는 익명함수
    • 수학의 람다 대수에서 유래함
    • Python 3부터는 권장하지는 않으나 여전히 많이 쓰임
    • 어려운 문법
    • 테스트의 어려움
    • 문서화 docstring 지원 미비
    • 코드 해석의 어려움
    • 이름이 존재하지 않는 함수의 출현
    • 그래도 많이 쓴다...
  • map
    • 두 개 이상의 list에도 적용 가능함, if filter도 사용 가능
    • python3 는 iteration을 생성 -> list을 붙여줘야 list 사용 가능
    • 실행시점의 값을 생성, 메모리 효율적
  • reduce : map function과 달리 list에 똑같은 함수를 적용해서 통합
  • lambda, map, reduce는 간단한 코드로 다양한 기능을 제공
  • 그러나 코드의 직관성이 떨어져서 lambda나 reduce는 python3에서 사용을 권장하지 않음
  • Legacy library나 다양한 머신러닝 코드에서 여전히 사용중
  • iterable objects
    • Sequence형 자료형에서 데이터를 순서대로 추출하는 object
    • 내부적 구현으로 iter와 next가 사용됨
    • iter()와 next() 함수로 iterable 객체를 iterator object로 사용
  • generator
    • iterable object를 특수한 형태로 사용해주는 함수
    • element가 사용되는 시점에 값을 메모리에 반환
      : yield를 사용해 한번에 하나의 element만 반환함
    • list comprehension과 유사한 형태로 generator형태의 list 생성
    • generator expression이라는 이름으로도 부름
    • [] 대신 ()를 사용하여 표현
    • 일반적인 iterator는 generator에 반해 훨씬 큰 메모리 용량 사용
    • list 타입의 데이터를 반환해주는 함수는 generator로 만들어라!
      : 읽기 쉬운 장점, 중간 과정에서 loop 이 중단될 수 있을 때!
    • 큰 데이터를 처리할 때는 generator expression을 고려하라!
      : 데이터가 커도 처리의 어려움이 없음
    • 파일 데이터를 처리할 때도 generator를 쓰자
  • passing arguments
    • Keyword arguments : 함수에 입력되는 parameter의 변수명을 사용, arguments를 넘김
    • Default arguments : parameter의 기본 값을 사용, 입력하지 않을 경우 기본값 출력
    • Variable-length arguments
  • 가변인자 (variable-length)
    • 개수가 정해지지 않은 변수를 함수의 parameter로 사용하는 법
    • Keyword arguments와 함께, argument 추가가 가능
    • Asterisk(*) 기호를 사용하여 함수의 parameter를 표시함
    • 입력된 값은 tuple type으로 사용할 수 있음
    • 가변인자는 오직 한 개만 맨 마지막 parameter 위치에 사용가능
    • 가변인자는 일반적으로 *args를 변수명으로 사용
    • 기존 parameter 이후에 나오는 값을 tuple로 저장함
  • 키워드 가변인자 (Keyword variable-length)
    • Parameter 이름을 따로 지정하지 않고 입력하는 방법
    • asterisk(*) 두개를 사용하여 함수의 parameter를 표시함
    • 입력된 값은 dict type으로 사용할 수 있음
    • 가변인자는 오직 한 개만 기존 가변인자 다음에 사용
  • asterisk
    • 흔히 알고 있는 *를 의미함
    • 단순 곱셈, 제곱 연산, 가변 인자 활용 등 다양하게 사용됨
    • unpacking a container
      • tuple, dict 등 자료형에 들어가 있는 값을 unpacking
      • 함수의 입력값, zip 등에 유용하게 사용가능

피어 세션 정리

강의 리뷰 및 Q&A

  • Python Data Structure
  • Pythonic code

피어 세션의 방향성에 대한 나의 제안

1. PyTorch 스터디

  • 예상 일정 : 스터디 활동 (2 ~ 3주)
  • 예상 난이도 : 하
  • 장점 : PyTorch 예습
  • 단점 : 포트폴리오X

2. Kaggle 대회 참가

새로운 대회 참가

  • 예상 일정 : EDA (1 ~ 2주) -> Modeling
  • 예상 난이도 : 상
  • 장점 : 메달 획득 가능, 실전 감각 향상
  • 단점 : 현재 적합한 대회가 없음 (Kaggle, Dacon, 공모전 등)

종료된 대회 참가

  • 예상 일정 : EDA (1 ~ 2주) -> Review (2 ~ 3주) <-> Modeling (2 ~ 3주)
  • 예상 난이도 : 중
  • 장점 : Kaggle 연습, 참고 자료 존재
  • 단점 : 메달 획득 불가능

3. Coursera + Kaggle

4. [자연어 처리] BERT 논문 리뷰 및 라이브러리 제작

5. [자연어 처리] GPT-1, GPT-2, GPT-3 논문 리뷰

결론

Kaggle의 Competition에 참가해보는 것으로 피어 세션의 방향성이 정해졌습다.
이를 통해 자연어 처리와 빅데이터 처리 그리고 모델 최적화를 경험해보는 것이 주된 목적입니다.
그래서 내일 피어 세션 시간까지, 해당 목적에 적합한 Kaggle의 Competition을 찾기로 했습니다.

총평

어느 정도 피어 세션의 방향성이 정해졌습니다.
조원들과 이야기를 나눈 덕분에, 모두가 만족할 수 있을 만한 방향성이 정해졌다고 생각합니다.
이제 적합한 Competition만 찾는다면, 모든 준비를 끝마치게 됩니다.
가능하다면 이번 주 내에 모든 준비를 마치고, 다음 주부터는 본격적으로 시작하려고 합니다.
조원들 모두가 실력도 있고 의욕도 있기에, 앞으로 하게 될 활동들이 기대됩니다.

오늘보다 더 성장한 내일의 저를 기대하며, 내일 뵙도록 하겠습니다.

읽어주셔서 감사합니다!

profile
PLUS ULTRA

0개의 댓글