[U] Week 1 Day 5

나며기·2021년 1월 22일
0

부스트캠프 AI Tech

목록 보기
6/79
post-thumbnail

강의 복습 내용

[DAY 5] 파이썬으로 데이터 다루기

File / Exception / Log Handling

  • Exception
    1) 예상 가능한 예외
    • 발생 여부를 사전에 인지할 수 있는 예외
    • 사용자의 잘못된 입력, 파일 호출 시 파일 없음
    • 개발자가 반드시 명시적으로 정의 해야함
    2) 예상이 불가능한 예외
    • 인터프리터 과정에서 발생하는 예외, 개발자 실수
    • 리스트의 범위를 넘어가는 값 호출, 정수 0으로 나눔
    • 수행 불가시 인터프리터가 자동 호출
  • 예외 처리 (Exception Handling) : 예외가 발생할 경우 후속 조치 등 대처 필요
    1) 없는 파일 호출 → 파일 없음을 알림
    2) 게임 이상 종료 → 게임 정보 저장
    3) 프로그램 = 제품, 모든 잘못된 상황에 대처가 필요
  • try ~ except
try:

	예외 발생 가능 코드

except <Exception Type>:

	예외 발생시 대응하는 코드
  • exception의 종류

    • Built-in Exception: 기본적으로 제공하는 예외
      • IndexError : List의 Index 범위를 넘어갈 때
      • NameError : 존재하지 않은 변수를 호출 할 때
      • ZeroDivisionError : 0으로 숫자를 나눌 때
      • ValueError : 변환할 수 없는 문자/숫자를 변환할 때
      • FileNotFoundError : 존재하지 않는 파일을 호출할 때
  • try ~ except ~ else

try:

	예외 발생 가능 코드
    
except <Exception Type>:

	예외 발생시 동작하는 코드
    
else:

	예외가 발생하지 않을 때 동작하는 코드
  • try ~ except ~ finally
try:

	예외 발생 가능 코드
    
except <Exception Type>:

	예외 발생시 동작하는 코드
    
finally:

	예외 발생 여부와 상관없이 실행됨
  • raise 구문 : 필요에 따라 강제로 Exception을 발생
raise <Exception Type>(예외정보)
  • assert 구문 : 특정 조건에 만족하지 않을 경우 예외 발생
assert 예외조건
  • 파일 (File)

    • 컴퓨터에서 정보를 저장하는 논리적인 단위
    • 파일은 파일명과 확장자로 식별됨
    • 실행, 쓰기, 읽기 등을 할 수 있음
  • 파일의 종류

    • 기본적인 파일 종류로 text 파일과 binary 파일로 나눔
    • 컴퓨터는 text 파일을 처리하기 위해 binary 파일로 변환시킴
    • 모든 text 파일도 실제는 binary 파일, ASCII/Unicode 문자열 집합으로 저장되어 사람이 읽을 수 있음
    Binary 파일Text 파일
    컴퓨터만 이해할 수 있는 형태인 이진(법)형식으로 저장된 파일인간도 이해할 수 있는 형태인 문자열 형식으로 저장된 파일
    일반적으로 메모장으로 열면 내용이 깨져 보임 (메모장 해설 불가)메모장으로 열면 내용 확인 가능
    엑셀파일, 워드 파일 등등메모장에 저장된 파일, HTML 파일, 파이썬 코드 파일 등
  • Python File I/O : 파이썬은 파일 처리를 위해 “open” 키워드를 사용함

f = open("<파일이름>", "접근 모드")
f.close()
파일 열기 모드설명
r읽기모드 - 파일을 읽기만 할 때 사용
w쓰기모드 - 파일에 내용을 쓸 때 사용
a추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용
  • Pickle
    • 파이썬의 객체를 영속화(persistence)하는 built-in 객체
    • 데이터, object 등 실행중 정보를 저장 → 불러와서 사용
    • 저장해야하는 정보, 계산 결과(모델) 등 활용이 많음
  • 로그 남기기 - Logging
    • 프로그램이 실행되는 동안 일어나는 정보를 기록을 남기기
    • 유저의 접근, 프로그램의 Exception, 특정 함수의 사용
    • Console 화면에 출력, 파일에 남기기, DB에 남기기 등등
    • 기록된 로그를 분석하여 의미있는 결과를 도출 할 수 있음
    • 실행시점에서 남겨야 하는 기록, 개발시점에서 남겨야하는 기록
  • print vs logging
    • 기록을 print로 남기는 것도 가능함
    • 그러나 Console 창에만 남기는 기록은 분석시 사용불가
    • 때로는 레벨별(개발, 운영)로 기록을 남길 필요도 있음
    • 모듈별로 별도의 logging을 남길 필요도 있음
    • 이러한 기능을 체계적으로 지원하는 모듈이 필요함 (logging 모듈)
  • logging level
    • 프로그램 진행 상황에 따라 다른 Level의 Log를 출력함
    • 개발 시점, 운영 시점 마다 다른 Log가 남을 수 있도록 지원함
    • DEBUG > INFO > WARNING > ERROR > Critical
    • Log 관리시 가장 기본이 되는 설정 정보
    • debug : 개발시 처리 기록을 남겨야하는 로그 정보를 남김
    • info : 처리가 진행되는 동안의 정보를 알림
    • warning : 사용자가 잘못 입력한 정보나 처리는 가능하나 원래 개 발시 의도치 않는 정보가 들어왔을 때 알림
    • error : 잘못된 처리로 인해 에러가 났으나, 프로그램은 동작할 수 있음을 알림
    • critical : 잘못된 처리로 데이터 손실이나 더이상 프로그램이 동 작할 수 없음을 알림
  • configparser
    • 프로그램의 실행 설정을 file에 저장함
    • Section, Key, Value 값의 형태로 설정된 설정 파일을 사용
    • 설정파일을 Dict Type으로 호출후 사용
  • argparser
    • Console 창에서 프로그램 실행시 Setting 정보를 저장함
    • 거의 모든 Console 기반 Python 프로그램 기본으로 제공
    • 특수 모듈도 많이 존재하지만(TF), 일반적으로 argparse를 사용
    • Command-Line Option 이라고 부름

Python data handling

  • Comma Separate Value
    • CSV, 필드를 쉼표(,)로 구분한 텍스트 파일
    • 엑셀 양식의 데이터를 프로그램에 상관없이 쓰기 위한 데이터 형식이라고 생각하면 쉬움
    • 탭(TSV), 빈칸(SSV) 등으로 구분해서 만들기도 함
    • 통칭하여 character-separated values (CSV) 부름
    • 엑셀에서는 “다름 이름 저장” 기능으로 사용 가능
    • Text파일 형태로 데이터 처리시 문장 내에 들어가 있는 “,” 등에 대해 전처리 과정이 필요
    • 파이썬에서는 간단히 CSV파일을 처리하기 위해 csv 객체를 제공함
    • CSV 객체 활용
      • delimiter (default = ,) : 글자를 나누는 기준
      • lineterminator (default = \r\n) : 줄 바꿈 기준
      • quotechar (default = ") : 문자열을 둘러싸는 신호 문자
      • quoting (default = QUOTE_MINIMAL) : 데이터 나누는 기준이 quotechar에 의해 둘러싸인 레벨
  • Web
    • World Wide Web(WWW), 줄여서 웹이라고 부름
    • 우리가 늘 쓰는 인터넷 공간의 정식 명칭
    • 팀 버너스리에 의해 1989년 처음 제안되었으며, 원래는 물리학자들간 정보 교환을 위해 사용됨
    • 데이터 송수신을 위한 HTTP 프로토콜 사용, 데이터를 표시하기 위해 HTML 형식을 사용
    • Web은 어떻게 동작하는가?
      1) 요청 : 웹주소, From, Header 등
      2) 처리 : Database 처리 등 요청 대응
      3) 응답 : HTML, XML 등으로 결과 반환
      4) 렌더링 : HTML, XML 표시
    • HTML(Hyper Text Markup Language)
      • 웹 상의 정보를 구조적으로 표현하기 위한 언어
      • 제목, 단락, 링크 등 요소 표시를 위해 Tag를 사용
      • 모든 요소들은 꺾쇠 괄호 안에 둘러 쌓여 있음
      • 모든 HTML은 트리 모양의 포함관계를 가짐
      • 일반적으로 웹 페이지의 HTML 소스파일은 컴퓨터가 다운로드 받은 후 웹 브라우저가 해석/표시
    • 왜 웹을 알아야 하는가?
      • 정보의 보고, 많은 데이터들이 웹을 통해 공유됨
      • HTML도 일종의 프로그램, 페이지 생성 규칙이 있음 : 규칙을 분석하여 데이터의 추출이 가능
      • 추출된 데이터를 바탕으로 하여 다양한 분석이 가능
    • 정규식 (regular expression)
      • 정규 표현식, regexp 또는 regex 등으로 불림
      • 복잡한 문자열 패턴을 정의하는 문자 표현 공식
      • 특정한 규칙을 가진 문자열의 집합을 추출
      • 문법 자체는 매우 방대, 스스로 찾아서 하는 공부 필요
      • 필요한 것들은 인터넷 검색을 통해 찾을 수 있음
      • 기본적인 것을 공부 한 후 넓게 적용하는 것이 중요
  • XML
    • 데이터의 구조와 의미를 설명하는 TAG(MarkUp)를 사용하여 표시하는 언어
    • TAG와 TAG사이에 값이 표시되고, 구조적인 정보를 표현할 수 있음
    • HTML과 문법이 비슷, 대표적인 데이터 저장 방식
    • 정보의 구조에 대한 정보인 스키마와 DTD 등으로 정보에 대한 정보(메타정보)가 표현되며, 용도에 따라 다양한 형태로 변경가능
    • XML은 컴퓨터(예: PC ↔ 스마트폰)간에 정보를 주고받기 매우 유용한 저장 방식으로 쓰이고 있음
    • XML도 HTML과 같이 구조적 markup 언어
    • 정규표현식으로 Parsing이 가능함
    • 그러나 좀 더 손쉬운 도구들이 개발되어 있음
    • 가장 많이 쓰이는 parser인 beautifulsoup으로 파싱
    • BeautifulSoup
      • HTML, XML등 Markup 언어 Scraping을 위한 대표적인 도구
      • lxml 과 html5lib 과 같은 Parser를 사용함
      • 속도는 상대적으로 느리나 간편히 사용할 수 있음
  • JSON
    • JavaScript Object Notation
    • 원래 웹 언어인 Java Script의 데이터 객체 표현 방식
    • 간결성으로 기계/인간이 모두 이해하기 편함
    • 데이터 용량이 적고, Code로의 전환이 쉬움
    • 이로 인해 XML의 대체제로 많이 활용되고 있음
    • Python의 Dict Type과 유사, key:value 쌍으로 데이터 표시
    • json 모듈을 사용하여 손 쉽게 파싱 및 저장 가능
    • 데이터 저장 및 읽기는 dict type과 상호 호환 가능
    • 웹에서 제공하는 API는 대부분 정보 교환 시 JSON 활용
    • 페이스북, 트위터, Github 등 거의 모든 사이트
    • 각 사이트 마다 Developer API의 활용법을 찾아 사용
    • JSON 파일의 구조를 확인 → 읽어온 후 → Dict Type처럼 처리
    • Dict Type으로 데이터 저장 → josn모듈로 Write

마스터 클래스

마스터 소개

  • Python Basic For AI의 최성철 교수님 (가천대학교 산업경영공학과 교수님, 전 삼성전자 종합기술원 CTO 전략팀)

사전 질문 답변

  1. AI에 분야가 많은 것으로 알고 있는데, 구체적으로 어떤 분야가 있는지 궁금합니다.
  • 데이터 종류 : 텍스트, 이미지, 정형데이터, 사운드, 3D 이미지 등
  • AI 종류 : classification, clustering, recommendation, Reinforcement learning, 생성 등
  • 데이터 종류와 AI 종류에 따라 다양한 분야에서 활용
  • 예전에는 텍스트와 이미지를 구분했으나, 최근에는 경계가 많이 무너진 상태
  1. 만약 AI를 더 공부하고 싶어서 대학원을 간다면, 어떤 것을 더 준비해야 할까요?
  • 수학 : 선형대수, 미적분, 통계학, 수리통계, 해석학, 선대미적분
  • 전산 : 데이터 스트럭쳐, os, 코딩, Excel, 데이터베이스, 모델링 등
  • 교수님의 개인적인 선호도로는 수학보다는 코딩을 중요하게 여김
  • 교수님이 산업공학과 출신이어서 그런지, 실제 문제 해결을 위한 코딩을 더 중요하게 여김
  1. 수학을 배운지 오래된 학생인데 AI를 제대로 배우기 위해서는 선형대수, 미적분, 기초통계학에 대한 지식이 있어야 된다고 들었습니다. 지금부터 공부하려고 하는데 세 과목을 어느 수준으로 공부해야 앞으로 과정을 따라가기가 수월할까요?
  • 이상적으로는 교재의 모든 연습 문제를 풀어보면 좋다.
  • 현실적으로는 논문을 읽고 수식을 이해할 정도의 수학 능력이면 된다.
  1. 강화학습을 활용한 자율주행이나 게임인공지능 분야에 관심이 많습니다.

    1) 강화학습이 쓰이는 분야는 어디가 있나요?

    • 게임 RL, Offline RL 등

    2) AI 분야의 데이터 엔지니어를 희망하면 수학은 어느정도 해야 할까요?

    • 앞에서 언급한 대답과 동일

    3) 강화학습과 딥러닝 비교시 산업별 장단점은 무엇인가요?

    • 엄밀하게는 다르지만, 꼭 다르게 구분 지을 필요는 없음

    4) 강화학습 프로젝트 경험이 있으신가요?

    • 생략
  2. AI에서 특별히 많이 쓰이는 pythonic 코드가 있을까요? Str 함수 외에도 궁금합니다.

  • 수업에서 언급한 내용은 거의 다 기본적으로 사용되는 pythonic 코드이다.
  • 단, 네임드 튜플은 거의 안 쓰이고 있다.
  1. 데이터 사이언티스트와 머신러닝 엔지니어는 어떻게 다른지 알고 싶습니다.
  • 엄밀한 용어에 대한 정의가 없기 때문에, 구분을 하기 어려우나 채용 공고를 확인하면 명확히 알 수 있다.
  • 데이터 사이언티스트 : 데이터를 분석하고 보고서를 작성하는 능력, ML/DL Modeling
  • 머신러닝 엔지니어 : ML/DL에 대한 이해, 논문을 구현하는 능력과 end to end의 파이프라인을 만든 능력, 리소스 관리가 중요, 업무 특성상 주니어보다는 시니어가 선호됨
  • Full Stack Deep Learning 강의를 추천
  1. 교수님이 현재 부스트캠프 수강생이라면, 캠프 과정을 따라가는 것 이외에 무엇을 하실지 궁금합니다.
  • IT -> mobile -> AI, 전기차 -> 자율주행차 -> VR, AR(메타버스, 디지털 트윈) 순으로 발전함
  • 앞으로는 VR, AR이 중요할 것이며, 여기서 강화학습이 필요할 것이라고 생각함
  1. 교수님께서 읽기 좋은 코드를 강조해 주셨는데, 읽기 좋은 코드는 꼭 간결해야 하나요? 너무 간결한 코드는 오히려 읽기 힘든 느낌이 있는데, 간결성과 가독성이 부딪힐 경우 어떤 것을 우선시 해야 할까요?
  • 코드의 길이가 길고 짧은 것이 중요하지 않음
  • 평소 코드를 작성할 때, 가독성이 좋은 코드를 작성할 수 있도록 노력해야함
  • 가독성이 좋지 못하면, 입사 후 힘들어짐
  • 변수명을 간결하게 작성하는 것이, 읽기 좋은 코드의 첫 걸음임
  1. AI 서비스를 만들기 위해 필요한 엔지니어링 기술을 배우고 싶습니다. 빅데이터 처리에 스파크를 쓰는 것처럼, 배우면 좋을 기술 스택이 있을까요?
  • 탑 티어의 IT회사에서는 스파크를 기본적으로 사용함
  • 기본적인 사용 방법만 알아도 도움이 됨
  1. AI 관련 서비스를 만들 때, Django/Flask가 주로 사용되나요?
    또한 DB는 어떤 것을 사용하는지 궁금합니다.
  • 크게 사용할 일은 없겠으나, 기본 소양으로 생각됨
  1. 미래에 AutoML이 발전한다면 모델링도 AutoML이 해결해줄 것이라 예상하시나요? AutoML이 발전함에 따라 AI 엔지니어의 수요가 점점 줄 것 같은데, AI 엔지니어로서 어떻게 대비해야 할까요?
  • 앞으로 10년간은, AutoML이 AI 엔지니어를 대체하지 않을 것이라고 생각함

12~. 이후 질문들은 빠르게 진행되어 기록하지 못했습니다...

라이브 Q&A

  1. AI를 공부하고 관련 직종에 취직하기 위해서는 아무래도 대학원 석사과정을 밟는 것이 거의 필수적인가요??
  • 석사 과정이 필수는 아니지만, 하는게 좋다고 생각함
  1. 학부 졸업생인데요, AI 엔지니어를 하기 위해서는 부스트캠프 마치고 대학원도 생각해보는게 좋을까요? 웹 개발 경험이 있는데, 하고싶은건 백엔드와 AI 개발을 같이 하는 경험을 하고 싶지만, 대학원이 필요하다면 어떻게 해야할지 고민이 됩니다ㅠㅠ
  • AI 엔지니어를 목표로 한다면 석사까지는 필요할 것 같음
  1. 하나의 프로젝트를 완성시키는 데 있어 필요한 역량이 정말 다양한 것으로 알고 있습니다. Boostcamp 에서 배우게 되는 교육과정 외에도, 훌륭한 AI엔지니어가 되기 위해 꼭 이 분야의 공부를 추천한다! 하시는 것이 있을까요?
  • 견문을 넓히는 차원에서, 다양한 분야의 기술에 대해서 공부해보는 것이 좋을 것 같음
  1. 실제 서비스 개발시 파이썬이 쓰이는 영역이 어디까지인가요? 보통 AI모델 학습까지만 사용하나요?
  • 모델에는 파이썬을 사용하지만, 서비스를 위한 제품 개발에는 C++ 또는 Java를 사용함
  1. 대학원에 진학할때 랩실을 고르는 기준에 어떤것이 중요할까요?
  • 교수님께서는 별다른 기준없이, 합격한 곳을 갔음
  • 재미있게 다닐 수 있느냐가 가장 중요
  1. 강의에서 문자열 출력시 format function (i.e. "{0} and {1}".format(..))을 많이 사용하시던데, fstring을 잘 사용하지 않으시는 이유가 format function을 사용하시는걸 더 선호하셔서인가요? 아니면 다른 특별한 이유가 있을까요?
  • 무조건 fstring을 사용하는 것이 좋다. 안 쓰면 욕하는 곳도 있다고 한다.
  1. 강의에서는 기본적인 pop() append() 연산에서도 deque가 속도가 더 빠르게 나왔는데, appendleft(),popleft()도 아닌데 어떻게 이런 결과가 나오는지 궁금합니다. list가 일정 크기가 넘어갈때마다 overallocate되는 과정을 거쳐서인가요?
  • 추후 링크 제공
  1. 파이프라인 짜는 능력을 어떻게 키울 수 있을까요? (코딩적인 능력 포함)
  • 프로젝트를 통한 경험이 가장 중요
  1. 석사를 하는데에 필요한 비용등 고려해서 이러한 캠프를 찾고 혼자 공부하는데 아무래도 석사랑 차이가 많이 날까요?
  • 석사의 장점은 네트워킹이라고 생각한다.
  1. return 된 값을 값을 할당하지 않고 1회성으로 사용할 때 메모리에 올라가는지?
  • 메모리에 올라간다.
  1. 취업을 위해서는 어떤 것을 준비하고 학습하는게 좋을까요?
  • 포트폴리오를 만드는 것이 가장 중요함
  1. 파이써닉한 코드를 최대한 짜려고 하다 보니 가독성이 매우 떨어지더라고요.. 다른 사람이 읽기 좋은 코드를 작성하는 것과 상충하는 것 같아요. 제가 다시 읽고 이해하기도 불편하고요. 무조건 파이써닉한 코드만 짜는 것이 좋은 지 궁금합니다!
  • Team By Team
  1. AI 접목한 클라우드인프라기술쪽에 눈여겨둘 기술이 있으면 소개해주시면 감사하겠습니다.
  • AWS와 같은 기술은 기본적으로 사용할줄 알아야 한다.
  1. 스파크는 파이썬, 스칼라, 자바 중에 어떤 언어로 하는게 좋을까요?
  • 파이썬
  1. 백엔드와 AI 기술의 결합은 쉽게 생각이 되는데, 프론트엔드와 결합은 어떤식으로 존재할까요?
  • 아직은 잘 모르겠음
  1. pickle 과 json 의 용량차이는 없나요?
  • pickle이 더 작을 것 같음

후기

유쾌한 교수님이셔서 그런지 마스터 클래스를 듣는 내내 즐거웠습니다.
마스터 클래스에서 교수님의 말씀을 통해 강화학습의 전망에 대해서 생각해볼 수 있었고, 캠퍼들의 질문을 통해 많은 사람이 수학으로 고민하고 있다는 것을 알게 되었습니다.
1시간 남짓 짧은 시간이었지만, 생각보다 몰입했던 마스터 클래스였습니다.

피어 세션 정리

강의 리뷰 및 Q&A

  • File / Exception / Log Handling
  • Python data handling

마스터 클래스 리뷰

  • 수학 공부 방법과 범위에 대해서 리뷰

피어 세션 개선 사항

  • 피어 세션 시작 전, 모든 강의 수강하기
  • 모르는 것, 중요한 것, 알려줄 것 중 최소 하나 정도를 준비하여, 모더레이터 주도하에 지식 공유를 진행하자
  • 개인 학습 또는 프로젝트를 통한 지식 공유를 진행하자
  • 과제 프리뷰와 리뷰를 하자
  • 주간 일정
월요일화요일수요일목요일금요일
과제 리뷰과제 프리뷰, 지식 공유과제 리뷰과제 프리뷰, 지식 공유TBD

총평

부스트캠프의 1주차를 마쳤습니다.
1주차 수업을 수강하기 전에는 Python에 대해서 많은 것을 알고 있다고 생각했습니다.
하지만, 1주차를 마치고 되돌아보니 저는 Python에 대해서 전혀 모르고 있었습니다.
Python 기초 수업이라고 무시했었는데, 정말 큰코다칠뻔 했습니다.
부스트캠프는 이제 시작이고 벌써부터 설레발치는거 같지만, 이번 1주차 수업을 듣고 나니 부스트캠프를 수료한 뒤에는 엄청 성장할 수 있을 것이라고 확신했습니다.
지금의 설렘과 열정이 지치지 않고 끝까지 갔으면 좋겠습니다.

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

읽어주셔서 감사합니다!

profile
PLUS ULTRA

0개의 댓글