다른 파트 정리를 보고 싶다면 아래 링크를 확인하세요
1) 인공지능(AI) 맛보기 : https://aigong.tistory.com/334
2) 꼭 알아야 하는 파이썬 기초 지식 : https://aigong.tistory.com/344
3) 핵심만 담은 AI를 위한 수학 지식 : https://aigong.tistory.com/345
4) 인공지능 본격 탐구: 딥러닝 기초 : https://aigong.tistory.com/346
개인적인 호기심때문에 본 강좌를 수강하게 되었습니다. 해당 코스의 boostcourse를 보며 제가 중요하다고 판단된 내용 중 일부만 간단히 정리하는 공간으로 마련하였습니다. 이 내용으로 공부를 하신다기보다 그냥 이런게 있구나 정도로만 판단하시면 좋겠고 모든 저작권은 Edwith / boostcourse / boostcamp 그리고 강연해주신 분들(최성준, 임성빈, 최성철)께 있습니다.
https://www.boostcourse.org/onlyboostcampaitech3
https://www.edwith.org/onlyboostcampaitech3/joinLectures/329908
최성철 교수님께서 강의를 해주심.
객체 지향 프로그래밍 언어, Object Oriented Programming (OOP)
클래스 class 와 실제 구현체인 instance로 나눔
class 이름 짓기
파이썬 함수/변수명에 snake_cae를 사용
파이썬 Class명에는 CamelCase 사용: 띄어쓰기 부분에 대문자
https://corikachu.github.io/articles/python/python-magic-method
__는 특수한 예약함수나 변수 그리고 함수명 변경(맨글링)으로 사용
ex) __main__, __add__, __str__, __eq__
객체 지향 언어의 특징
Inheritance / Polymorphism / Visibility
상속 Inheritance
super()를 통해 부모 클래스의 내용을 가져옴.
다형성 Polymorphism
가시성 Visibility
객체의 정보를 볼 수 있는 레벨을 조절하는 것
누구나 객체 안의 모든 변수를 볼 필요가 없음
다른 말로 Encapsulation
Decorate
일급함수
Inner Function: 함수 안의 또 다른 함수
closures : inner function을 return 값으로 반환
파이썬은 대부분의 라이브러리가 이미 다른 사용자에 의해서 구현되어 있음
남이 만든 프로그램 쓰는 법
객체 < 모듈
- 어떤 대상의 부분 혹은 조각
- 프로그램에서 사용하는 작은 프로그램 조각들
- 프로그램을 모듈화시키면 다른 프로그램이 사용하기 쉬움
https://developers.facebook.com/
Built-in Module인 Random
패키지 - 모듈을 모아놓은 단위, 하나의 프로그램
파이썬의 .py 파일을 import해서 호출
import 시 해당 파일의 모든 코드를 메모리로 로딩
파이썬 실행시 __pycache__가 생김. 이는 컴파일러
namespace
- 모듈을 호출할 때 범위 정하는 방법
읽기 편한 코드를 위해서는 어디서 왔는지에 대한 설명을 정확히 밝혀야 함.
import random
import time
import urllib.request #웹
import counter
virtualenv / conda
conda create -n [name] python=3.x
conda activate [name]
conda install [package name]
프로그램 사용할 때 예상치 못한 많은 일(예외)들이 생김
Exception : 예상 가능한 예외 / 예상이 불가능한 예외
1) 예상 가능한 예외 - if문으로 해결
- 발생 여부를 사전에 인지할 수 있는 예외
- 개발자가 반드시 명시적으로 정의해야함
2) 예상 불가능한 예외 - 예외 처리로 해결
- 인터프리터 과정에서 발생하는 예외, 개발자 실수(?)
- 리스트의 범위를 넘어가는 값 호출, 정수 0으로 나눔
- 수행 불가시 인터프리터가 자동 호출
예외 처리 (Exception Handling)
- 예외가 발생할 경우 후속 조치 등 대처 필요
-- 없는 파일 호출 -> 파일 없음을 알림
-- 게임 이상 종료 -> 게임 정보 저장
프로그램 = 제품, 모든 잘못된 상황에 대처가 필요
try ~ except 문법 (if문과 비슷)
try: 예외 발생 가능 코드
except <Exception Type>:
예외 발생시 대응하는 코드
else:
예외가 발생하지 않을 때 동작하는 코드
finally:
예외 발생 여부와 상관없이 실행
# try ~ except 방법
try:
예외 발생 가능 코드
except <Exception Type>:
예외 발생시 대응하는 코드
else:
예외가 발생하지 않을 때 동작하는 코드
finally:
예외 발생 여부와 상관없이 실행
for i in range(10):
try:
print(i, 10//i)
except ZeroDevisionError:
print("Error")
https://docs.python.org/3/library/exceptions.html
숫자가 아닌 값을 넣으면 예외 처리
assert일 때 True / False에 대한 값을 보고 예외 처리를 진행함.
사전에 잘 쓰고 있는지 확인하는 절차
text/binary file
text 파일: 문자열 형식으로 저장된 파일, 메모장으로 열면 내용 확인 가능
ex) HTML 파일, python 코드 파일
binary 파일: 이진법 형식으로 저장된 파일, 메모장에서 내뇽이 깨져 보임
ex) 엑셀, 워드
Python File I/O
상대 경로 기반으로 파일 이름을 작성
with와 띄어쓰기를 통해 활용하기도 함.
실행 시 한 줄 씩 읽어오기
~.readline()
w: write mode
encoding="utf8" 혹은 "utf16"이 표준
os 모듈
# a라는 디렉토리를 현재 경로에 생성
os.makedir("a")
try:
os.makedir("a")
except FileExistsError as e:
print("Already created")
# a라는 dir이 있느지 확인 True/False
os.path.exists("a")
#os가 다를 때마다 구분하는 기준자가 다르기 때문에 os.path.join을 활용함.
os.path.join("a", "c.txt")
import shutil
source = "c.txt"
dest = os.path.join("a", "c.txt")
shutil.copy(source, dest) # 파일 복사 함수
최근에는 shutil보다 pathlib를 활용
pathlib는 path를 객체로 다룸
이를 통해 directory 접근에 용이함
import pathlib
cwd = pathlib.Path.cwd()
list(cwd.parent.parents)
list(cwd.glob("*"))
Pickle
객체를 파일로 저장하고 불러오기. 이때의 저장은 binary
응용 : list에 저장해놓고 해당 내용을 파일로 변환 후 list 비우기
클래스도 가능
Logging - 로그 남기기
-프로그램이 실행되는 동안 일어나는 정보를 기록을 남기기
-유저의접근, 프로그램의 Exception, 특정함수의 사용
-Console 화면에 출력, DB에 파일에 남기기
-기록된 로그를 분석하여 의미있는 결과를 도출할 수 있음
-실행시점에서 남겨야하는 기록, 개발시점에서 남겨야하는 기록
실행 시점 / 개발 시점
print로도 기록을 남길 수 있지만 Console 창에만 남기는 기록은 분석 시 사용 불가하다
python logging level이 warning부터 나오게 되어있음
import logging
logging.basicConfig(level=logging.DEBUG)
logger.setLevel(loggign.ERROR)
실제 프로그램 실행 시 여러 설정 필요
데이터 파일 위치 / 파일 저장 장소 / Operation Type 등
1) configparser
- Section, Key, value 값의 형태로 설정된 설정 파일을 사용
- 설정파일을 Dict Type으로 호출 후 사용
2) argparser
-Console 창에서 프로그램 실행시 Setting 정보를 저장함
-거의 모든Console 기반 Python 프로그램 기본으로 제공
-특수모듈도 많이 존재하지만(TF), 일반적으로 argparse를 사용
-Command-Line Option 이라고부름
logging.Formatter()을 통해 log의 결과값의 format을 지정해줄 수 있음.
logging.config.fileConfig('~.conf')
logger = logging.getLogger()
csv, 웹(html), XML, JSON
- CSV, 필드를 쉼표(,)로 구분한 텍스트 파일
- 엑셀 양식의 데이터를 프로그램에 상관없이 쓰기 위한 데이터 형식이라고 생각하면 쉬움
-탭(TSV), 빈칸(SSV) 등으로 구분해서 만들기도 함
-통칭하여 character-separated values (CSV) 부름
-엑셀에서는 “다름이름저장” 기능으로 사용가능
- World Wide Web(WWW), 줄여서 웹이라고 부름
- 우리가 늘 쓰는 인터넷 공간의 정식명칭
- 팀버너스리에 의해 1989년 처음 제안되었으며, 원래는 물리학자들간 정보교환을 위해 사용됨
- 데이터 송수신을 위한 HTTP 프로토콜 사용, 데이터를 표시하기 위해 HTML 형식을 사용
-웹상의 정보를 구조적으로 표현하기 위한 언어
-제목, 단락, 링크 등 요소 표시를 위해 Tag를 사용
-모든 요소들은 꺾쇠 괄호 안에 둘러쌓여 있음
<title> Hello, World </title> #제목요소, 값은Hello, World
-모든 HTML은 트리 모양의 포함 관계를 가짐
-일반적으로 웹페이지의 HTML 소스파일은 컴퓨터가 다운로드 받은 후 웹브라우저가 해석/표시
beautifulsoup을 통해서도 정보를 뽑을 수 있음.
정규식은 방대하기 때문에 필요에 따라 찾아 사용
https://www.google.com/googlebooks/uspto-patents-grants-text.html
urllib을 통해 웹에 있는 것을 가져옴
python에서는 import re를 통해 도입함.
search - 한 개만 찾기, findall - 전체 찾기
추출된 패턴은 tuple로 반환
-데이터의 구조와 의미를 설명하는 TAG(MarkUp)를 사용하여 표시하는 언어
-TAG와 TAG사이에 값이 표시되고, 구조적인 정보를 표현할 수 있음
-HTML과 문법이 비슷, 대표적인 데이터 저장방식
-정보의 구조에 대한 정보인 스키마와 DTD 등으로 정보에 대한 정보(메타정보)가 표현되며, 용도에 따라 다양한 형태로 변경가능
-XML은 컴퓨터(예: PC ↔ 스마트폰)간에 정보를 주고받기 매우 유용한 저장방식으로 쓰이고 있음
https://www.crummy.com/software/BeautifulSoup/
conda install lxml
conda install -c anaconda beautifulsoup4=4.5.1
- Java Script Object Notation
- 원래 웹 언어인 Java Script의 데이터 객체 표현방식
-간결성으로 기계/인간이 모두 이해하기 편함
-데이터 용량이 적고, Code로의 전환이 쉬움
-이로인해 XML의 대체제로 많이 활용되고 있음
Numerical Python
파이썬의 고성능 과학 계산용 패키지
Matrix와 Vector와 같은 Array 연산의 사실상의 표준
일반 List에 비해 빠르고, 메모리 효율적
반복문 없이 데이터 배열에 대한 처리르 지원
선형대수 관련 다양한 기능 제공
conda install numpy
ndarray - np.array
numpy는 하나의 데이터 type만 배열에 넣을 수 있음
shift+tab을 통해 docs 확인 가능
numpy는 순차적으로 메모리에 저장하지만 python은 그렇지 않음.
array.shape : dim 반환
array.dtype : type 반환
np.zeros(), np.ones(), np.empty()
torch와 같은 명령어
np.ones_like(ndarray)
np.identity()
np.eye()
np.diag()
np.sum()
np.mean()
np.std()
np.newaxis는 새로운 축을 제공
- 구조화된 데이터의 처리를 지원하는 Python 라이브러리
- panel data -> pandas
- 고성능 array 계산 라이브러리인 numpy와 통합하여, 강력한 “스프레드시트” 처리기능을 제공
- 인덱싱, 연산용함수, 전처리함수 등을 제공함
- 데이터 처리 및 통계 분석을 위해 사용
0000