아이공의 AI 공부 도전기

[Edwith] '부스트캠프 AI Tech 3기 Pre-Course' - '꼭 알아야 하는 파이썬 기초 지식' 파트 정리

 

다른 파트 정리를 보고 싶다면 아래 링크를 확인하세요

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

 

[부스트캠프 AI Tech 3기] Pre-Course

부스트코스 무료 강의

www.boostcourse.org

 

꼭 알아야 하는 파이썬 기초 지식 - 최성철 교수님

https://www.edwith.org/onlyboostcampaitech3/joinLectures/329908

 

https://www.edwith.org/onlyboostcampaitech3/joinLectures/329908

 

www.edwith.org

 

최성철 교수님께서 강의를 해주심.

 

1) Python Object Oriented Programming

 

객체 지향 프로그래밍 언어, Object Oriented Programming (OOP)

 

클래스 class 와 실제 구현체인 instance로 나눔

 

class 이름 짓기

파이썬 함수/변수명에 snake_cae를 사용

파이썬 Class명에는 CamelCase 사용: 띄어쓰기 부분에 대문자

 

https://corikachu.github.io/articles/python/python-magic-method

 

파이썬 더블 언더스코어: Magic Method | Corikachu

파이썬에서 __를 달고있는 메소드들에 대해서 살펴봅시다.

corikachu.github.io

 

__는 특수한 예약함수나 변수 그리고 함수명 변경(맨글링)으로 사용

ex) __main__, __add__, __str__, __eq__

 

 

객체 지향 언어의 특징

Inheritance / Polymorphism / Visibility

 

상속 Inheritance

 

super()를 통해 부모 클래스의 내용을 가져옴.

 

다형성 Polymorphism

 

가시성 Visibility

객체의 정보를 볼 수 있는 레벨을 조절하는 것

누구나 객체 안의 모든 변수를 볼 필요가 없음

 

다른 말로 Encapsulation

 

 

 

Decorate

일급함수

 

Inner Function: 함수 안의 또 다른 함수

closures : inner function을 return 값으로 반환

2) Module and Project

 

파이썬은 대부분의 라이브러리가 이미 다른 사용자에 의해서 구현되어 있음

 

남이 만든 프로그램 쓰는 법

객체 < 모듈

 

Module

- 어떤 대상의 부분 혹은 조각

- 프로그램에서 사용하는 작은 프로그램 조각들

- 프로그램을 모듈화시키면 다른 프로그램이 사용하기 쉬움

 

https://developers.facebook.com/

 

Facebook for Developers

Show Slide 1Show Slide 2Show Slide 3Show Slide 4Show Slide 5 META로 빌드하기 Facebook의 추천 플랫폼으로 고객과 소통하고 효율을 높여보세요. Messenger 플랫폼 편리하고 개인적인 사용자 경험을 통해 잠재 고객을

developers.facebook.com

 

Built-in Module인 Random

패키지 - 모듈을 모아놓은 단위, 하나의 프로그램

 

파이썬의 .py 파일을 import해서 호출

import 시 해당 파일의 모든 코드를 메모리로 로딩

 

 

파이썬 실행시 __pycache__가 생김. 이는 컴파일러

 

namespace

- 모듈을 호출할 때 범위 정하는 방법

 

 

 읽기 편한 코드를 위해서는 어디서 왔는지에 대한 설명을 정확히 밝혀야 함.

 

Built-in Module

 

import random
import time
import urllib.request #웹
import counter

 

패키지 Package

 

 

 virtualenv / conda

 

conda create -n [name] python=3.x

 

conda activate [name]

conda install [package name]

 

3) File / Exception / Log Handling

 

Exception

프로그램 사용할 때 예상치 못한 많은 일(예외)들이 생김

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

 

Built-in Exceptions — Python 3.10.2 documentation

In Python, all exceptions must be instances of a class that derives from BaseException. In a try statement with an except clause that mentions a particular class, that clause also handles any exception classes derived from that class (but not exception cla

docs.python.org

 

 숫자가 아닌 값을 넣으면 예외 처리

 

assert일 때 True / False에 대한 값을 보고 예외 처리를 진행함.

사전에 잘 쓰고 있는지 확인하는 절차

 

File Handling

 

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 Handling

 

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()

 

4) Python Data Handling

 

csv, 웹(html), XML, JSON

 

Comma Separate Value (CSV)

 

- CSV, 필드를 쉼표(,)로 구분한 텍스트 파일
- 엑셀 양식의 데이터를 프로그램에 상관없이 쓰기 위한 데이터 형식이라고 생각하면 쉬움
-탭(TSV), 빈칸(SSV) 등으로 구분해서 만들기도 함
-통칭하여 character-separated values (CSV) 부름
-엑셀에서는 “다름이름저장” 기능으로 사용가능

Web

- World Wide Web(WWW), 줄여서 웹이라고 부름
- 우리가 늘 쓰는 인터넷 공간의 정식명칭
- 팀버너스리에 의해 1989년 처음 제안되었으며, 원래는 물리학자들간 정보교환을 위해 사용됨
- 데이터 송수신을 위한 HTTP 프로토콜 사용, 데이터를 표시하기 위해 HTML 형식을 사용

 

 

HTML(Hyper Text Markup Language)

 

-웹상의 정보를 구조적으로 표현하기 위한 언어
-제목, 단락, 링크 등 요소 표시를 위해 Tag를 사용
-모든 요소들은 꺾쇠 괄호 안에 둘러쌓여 있음
<title> Hello, World </title> #제목요소, 값은Hello, World
-모든 HTML은 트리 모양의 포함 관계를 가짐
-일반적으로 웹페이지의 HTML 소스파일은 컴퓨터가 다운로드 받은 후 웹브라우저가 해석/표시

 

 

beautifulsoup을 통해서도 정보를 뽑을 수 있음.

정규식은 방대하기 때문에 필요에 따라 찾아 사용

 

https://regexr.com/

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

https://www.google.com/googlebooks/uspto-patents-grants-text.html

 

USPTO Patent Grant Full Text

USPTO Bulk Downloads: Patent Grant Full Text Full text of USPTO patent grants: 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000, 1999, 1998, 1997, 1996, 1995, 1994, 1993, 1992, 1991, 1990, 1989, 1988, 1987, 198

www.google.com

 

urllib을 통해 웹에 있는 것을 가져옴

python에서는 import re를 통해 도입함.

search - 한 개만 찾기, findall - 전체 찾기

추출된 패턴은 tuple로 반환

XML (eXtensible Markup Language)

 

-데이터의 구조와 의미를 설명하는 TAG(MarkUp)를 사용하여 표시하는 언어
-TAG와 TAG사이에 값이 표시되고, 구조적인 정보를 표현할 수 있음
-HTML과 문법이 비슷, 대표적인 데이터 저장방식

-정보의 구조에 대한 정보인 스키마와 DTD 등으로 정보에 대한 정보(메타정보)가 표현되며, 용도에 따라 다양한 형태로 변경가능
-XML은 컴퓨터(예: PC ↔ 스마트폰)간에 정보를 주고받기 매우 유용한 저장방식으로 쓰이고 있음

 

https://www.crummy.com/software/BeautifulSoup/

 

Beautiful Soup: We called him Tortoise because he taught us.

 

www.crummy.com

 

conda install lxml

conda install -c anaconda beautifulsoup4=4.5.1

 

JSON

- Java Script Object Notation
- 원래 웹 언어인 Java Script의 데이터 객체 표현방식
-간결성으로 기계/인간이 모두 이해하기 편함
-데이터 용량이 적고, Code로의 전환이 쉬움
-이로인해 XML의 대체제로 많이 활용되고 있음

 

 

5) Numpy

 

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 반환

 

 

reshape

 

flatten

 

Indexing

 

Slicing

 

 

arange

ones, zeros, empty 및 기타 명령어

np.zeros(), np.ones(), np.empty()

torch와 같은 명령어

 

np.ones_like(ndarray)

np.identity()

np.eye()

np.diag()

 

random sampling

sum, mean, std 및 기타 operation

np.sum()

np.mean()

np.std()

concatenate(vstack, hstack)

 

 np.newaxis는 새로운 축을 제공

 

 

 

Dot product

 

transpose

 

broadcasting

 

 

All, any

 

comparison operation - np.logical_and, logical_not, logical_or

np.where

argmax, argmin

 

boolean index

fancy index

loadtxt, savetxt

 

6) Pandas 1

- 구조화된 데이터의 처리를 지원하는 Python 라이브러리
- panel data -> pandas
- 고성능 array 계산 라이브러리인 numpy와 통합하여, 강력한 “스프레드시트” 처리기능을 제공
- 인덱싱, 연산용함수, 전처리함수 등을 제공함
- 데이터 처리 및 통계 분석을 위해 사용

 

 

 

7) Pandas 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0000

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading