본문 바로가기

Study/AI

AI와 데이터 분석을 위한 python 프로그래밍 기초 #1

인공지능의 개요

인공지능, 머신러닝, 딥러닝의 관계

 

 

머신러닝의 사용

- 분류

- 예측

- 패턴탐지

 

데이터의 속성

- 숫자로 측정된 특성

  수치(numeric)

 

- 범주로 측정된 특성

  범주적(categorical): 구간을 통해서 구분 (high / medium / low)

- 명목적(nominal): 이름이 있는 데이터 (예: 남성/여성)

  범주형 변수가 순서화된 리스트

 

크게는 수치형 or 범주형으로 분류

 

기계 학습 알고리즘의 종류

- 지도 학습기(supervised learner)

  예측 모델(predictive model)

  : 정답을 알려주는 것 (target lable) / 이렇게 label을 붙이는 것이 레이블링

 

- 자율 학습기(unsupervised learner)

  기술 모델(descriptive model)

 

학습 결과의 활용

Historical Data -> Data minig -> Model

 Traning data habe all values specified

학습 m

___________

추론

New data item -> Model -> class: accepted, Probability

 

인공지능에 왜 파이썬을 사용하는가?

- 프로그래밍이 단순

> 쓰기 쉽고, 읽기 쉽고, 유지보수 하기 쉬움

 

- 머신러닝 라이브러리가 있음

> 풍부한 머신러닝 라이브러리와 프레임워크

> Scikit-learn, tensorflow, CNTK, pytorch, ...

> 인공지능 태스크에 필요한 다양한 프레임워크들로 이미 생태계가 구성되어 있음

 

- 메모리를 대신 관리함

- 파이썬이 느려도 상관 없음

 

인공지능을 위한 파이썬 학습 플로우

- 데이터 분석

> 파이썬 기초 -> NumPy -> Pandas, Matplotlib

 

- 머신러닝

> 파이썬 기초 -> NumPy -> Scikit-learn

 

- 딥러닝

> 파이썬 기초 -> NumPy -> Tensorflow

 

NumPy는 수치 연산을 배열이나 행렬로 다루게 되며 간단하게 연산 처리 가능

 

파이썬은 인공지능 태스크 수행을 위한 도구일 뿐, 어려운 기술 및 용어에 압도 당하지 말고 해야 할 태스크에 집중

파이썬 기초 구문을 잘 몰라도 NumPy를 사용하면 훨씬 편해짐

 

파이썬 언어의 역사

 

파이썬의 종류

 

파이썬의 특징 - 장점

코드의 단순성과 표준성

이식성이 좋음

객체 지향 언어

> 프로그램은 '객체'로 구성되어 있는데 객체란 데이터와 기능이 결합된 하나의 대상임

> 다른 객체지향 언어들에 비해 매우 강력하고 쉬운 방법으로 객체 지향 지원

 

확장 가능한 라이브러리

 

파이썬을 사용하면 안 되는 경우

고성능

> 파이썬은 인터프리터 언어이므로 C++과 같은 컴파일 언어보다 느림. 실시간 처리와 같은 최고의 성능이 필요한 경우 저수준의 언어로 개발하는게 나음.

 

멀티 쓰레드

cPython의 경우에는, 

> GIL 인해 멀티 스레드를 지원하지 않으므로 멀티 스레드 기능이 필요한 경우 다른 언어로 개발하는게 나음.

 

다양한 파이썬 개발 환경

통합 개발 환경

인터렉티브 개발 환경

Jupyter Notebook은 입출력만 담당하고 code 실행, 결과는 IPython에서 처리함

 

해석기 + GUI(IDLE)

 

 

파이썬 실습 환경 구축

 

기본 자료형과 구문

파이썬 코드의 구조

특징1. 파이썬의 문접은 아주 간결하고 가독성이 좋다.

> 코드블록을 들여쓰기로 구분하여 소스 코드가 한눈에 들어오기 때문에 공동 작업이 편하다.

 

특징2. 파이썬의 자료형은 동적(Dynamic)이다.

입력한 값을 바로 출력에 사용할 수 있다.

변수의 자료형을 선언할 필요 없다.

자료형의 변환은 생성자 함수 사용

> 수치형 [int, float, complex] , 시퀀스형 [list, tuple, str],  사전형 [dict], set

 

특징3. 동적인 자료형

변수를 정의할 때 자료형을 선언하지 않음

그럼에도 불구하고 type-safe (연산할 때)

자료형 생성자를 이용해 형 변환 가능

 

특징4. 세미클론(;)과 역슬래쉬(\)

파이썬 코드는 한 줄에 한 문장을 쓰는 것이 가장 좋다.

문장이 길어져서 여러 줄에 걸쳐 써야 할 경우 역슬래쉬(\)로 연결

한 줄에 여러 문장을 써야 할 경우 세미콜론(;)으로 문장 사이를 구분

 

클론 : 은 절을 구분하는 기호

 

파이썬 스크립트의 실행 순서

Python file (*.py) -> Bytecode (*.pyc) -> Interpreter (uses *.pyc file)

 

파이썬의 기본 구성

함수(Function): 입력과 출력을 가지며 연산을 수행한다.

메소드(Method): Object에서 호출되는 함수의 형태로 객체에 내장되어 객체를 위해 작동한다.

객체(Object): 상태나 행위를 가지는 하나의 구조화된 집합을 말하며 소프트웨어에서 상태는 variable, 행위는 method로 지칭할 수 있다.

모듈(Module)

패키지(Package)

 

파이썬 프레임 워크

Scientific and Numeric: SciPy, Pandas, IPython

AI 분야(데이터사이언스, 머신러닝, 딥러닝): NumPy, Matplotlib, Scikit-learn, Tensorflow, PyTorch

 

모듈

모듈: 파일 단위로 구성된 별도의 네임스페이스임

표준 라이브러리는 모듈 단위로 나뉘어짐

모듈의 멤버들은 전역 네임스페이스로 import 할 수 있음

import된 모듈에 이름 지정 가능

 

import

from: 어느 디렉토리로 부터~

 

파이썬 내장 함수

 

help() 함수 활용법

파이썬 쉘에서 help() 함수를 실행시킨 후 다양한 카테고리 확인 가능

안에 객체 입력

 

식별자와 키워드

식별자는 어떤 대상을 유일하게 식별 및 구별할 수 있는 이름을 뜻하며 파이썬의 식별자는 유니코드 형식을 취함

파이썬의 식별자 선언 규칙

 

단일 언더스코어(_)로 시작하는 식별자는 private이라는 의미이다.

두 개 언더스코어(__)로 시작하는 식별자는 strong private이라는 의미이다.

 

변수

변수란? '변하는 수'라는 뜻을 가지며 값을 저장할 수 있는 메모리상의 공간을 의미

변수의 특징

 

변수와 값 대입

변하는 값을 보관하는 기억장소인 변수와 값인 상수가 매핑되어 시스템의 메모리가 형성됨

 

파이썬의 자료형

자료가 가지는 형 (메모리) 으로 데이터의 구조와 자료형이 가질 수 있는 값, 그리고 그 자료형에 적용할 수 있는 연산 등을 결정한다.

파이썬 프로그래밍에서 모든 것은 객체이기 때문에 데이터 유형은 실제로 클래스이며, 변수는 이 클래스의 인스턴스(객체)이다.

 

Data types

- Numbers: Integer - Boolean / Float Point / Complex (복소수)

- None

- Sequences: Strings / Tuple / List

- sets

- Mappings: Dictionary

 

수치형 (Numbers)

수치를 관리하는 자료형

 

불리언 (Boolean)

불리언 자료형: True, False

 

조건 연산자

- 불리언 논리 연산자: not, and , or

- 비트와이즈 불리언 연산자: &, |, ^

- 비교 연산자: ==, !=, <, <=, >, >=, is, is not, in, not in

 

문자열 (str)

문자들의 집합

문자열 '', "" / """ ...엔터까지 가능 """

raw 문자열은 인용부호 앞에 (r)을 붙여 정의

byte 문자열은 인용부호 앞에 (b)을 붙여 정의

 

연산자

산술 연산자

비트 연산자

대입 연산자

 

실습: 기본 구문 및 수학메소드

근의 공식 python으로 나타내기

x1 =(-b + math.sqrt(b**2 - 4*a*c)) / (2*a)
x2 =(-b - math.sqrt(b**2 - 4*a*c)) / (2*a)

 

 

시퀀스 자료형

(리스트, 튜플, 문자열)

 

시퀀스 자료형

종류: 문자열, 리스트, 튜플, 등

특징

> 여러 객체를 저장

> 순서 있음

> 인덱스를 사용해 참조 가능

 

시퀀스형의 공통 연산

색인: s[k]

슬라이싱: s[strat:end:step]

연결: s1 + s2

반복: s * number_of_repeat

멤버십 테스트: member in sequence

길이 정보: len(sequence)

 

리스트

mutable: 요소의 치환이 가능

리스트는 가장 보편적인 시퀀스 형임

lst = [4, 3, 2.0, 0, 'peter']

> 모든 파이썬 객체가 다 들어갈 수 있음

 

리스트에 요소를 추가하는 메소드

> append(), extend(), insert()

> extend()는 똑같은 시퀀스 구조가 와야지 붙을 수 있음

> insert(index, value)

 

리스트에서 요소를 삭제하는 메소드

> remove, pop()

> remove(값을 기준으로 삭제), 하나씩 삭제되고 중복되는 경우 제일 앞에 있는 값 먼저 삭제됨

 

리스트 내포

다른 리스트로부터 새로운 리스트 생성

조건 추가

다중의 for 또는 if절 사용 가능

 

튜플

튜플은 요소의 치환이 불가능한(immutable) 리스트

함수의 입출력 변수와 같이 변경되지 않도록 보호하는 용도로 사용t = (1, 2, 'sam)

 

문자열

문자열은 요소로 문자만을 가질 수 있으며 치환이 불가능함(immutable)immutable 하기 때문에 문자열 연산의 결과를 다른 변수에 치환해야 함에 주의문자열 연산자- split- find- replace

 

실습: 시퀀스 슬라이싱

 

딕셔너리 (Dictionary)

key: value의 형태로 매핑하는 자료형딕셔너리의 특징> key-value 쌍의 치환 및 삭제 기능 (mutable)> 딕셔너리는 정렬되지 않은 key-value의 쌍이다.> 딕셔러니에 새로운 key를 입력할 때 반드시 value도 함께 입력해야 한다.> value의 값은 변경 가능하지만 key는 변경할 수 없다.> key를 색인하면 value를 리턴하는 구조를 가진다.> 딕셔너리는 대소문자를 구분한다.> 파이썬으로 구조화된 자료를 처리할 때 딕셔너리를 사용하면 된다.

 

딕셔너리의 주요 함수

keys(): key들을 모아놓은 리스트를 리턴values(): value들을 모아놓은 리스트를 리턴items(): 쌍을 튜플로 모아놓은 리스트를 리턴clear(): 모든 내용을 삭제get(key): 지정된 key의 value를 리턴has_key(key): 해당하는 key가 있는지 조사하여 참, 거짓으로 리턴

 

집합 (set)

set은 고유한 요소들로 구성된 집합을 생성set의 특징> set은 중복되지 않는 요소들의 모임으로 임의의 순서를 가진다.> 공집합은 {}가 아닌 set() 함수로 만듬. ({} 딕셔너리)> 선언은 set()안에 요소들을 나열하거나 시퀀스 데이터를 입력> 집합 연산인 차집합, 교집합, 합집합, 대칭차집합 연산을 지원

 

set의 주요 함수

 

list, str, tuple, set, dict의 형 변환

객체처럼 여러 요소를 포함하는 자료형을 iterable object라 하며 이들 사이에서 형 변환이 가능하다.

 

dict은 조금 주의해서 사용 해야함 - key:value 쌍이 있어야 함

 

실습: 범주형 열의 카테고리 집합 구하기

 

표춘 출력 함수 print()

 

print()의 출력 서식

print() 함수는 문자열에서 사용하는 escape sequence를 함께 사용할 수 있다.print("[flags][width].[precision]type" % (value))

 

- flags: %로 지정하여 포매팅을 시작함을 알림- width: 출력될 value의 전체 자릿수 지정- precision: 소수점 이하 자릿수 지정- type: 출력될 value의 데이터 형을 나타냄

 

format() 함수를 이용한 출력 포맷팅

 

표준 입력 함수 input()

사용자의 입력을 Python shell 창에서 받는 기능을 표준 입력(standard input)이라 함

 

 

제어문과 반복문

조건문: if, elif, else문

흐름 제어

 

반복문: while문

while 조건문:            명령문1else: (생략 가능)            명령문2

 

반복문: for문

in 연산자 뒤의 반복 가능한 객체에 의하여 순차적으로 반복이 이루어짐

 

for 변수 in 순서형 자료(iterable object):            명령문1else:            명령문2

 

range() 함수

내장함수 range를 사용하여 정수 시퀀스를 만들 수 있다.rane(start, stop, step)