본문 바로가기

Archived(CSE Programming)/Machine Learning

Chap 1~2. Pythonic Code

2-1. Pythonic code


이해도, 효율, 간지

책 추천 - effective python (길벗 책)

파이썬을 여행하는 히치하이커를 위한 안내서


2-2. Split & Join


1)

Split 함수 - String Type의 값을 나눠서 List형태로 반환

문자열.split(원하는 기준) -> 문자 리스트로 반환


언팩킹 -> a, b, c = example.split()

각각 a,b,c에 값 넣기


2)

Join 함수 - String List를 합쳐 하나의 String으로 반환

문자열 = ''.join(문자 리스트)


*********** 2-3. List Comprehensions ***********

기존 List를 사용하여 간단히 다른 List를 만드는 기법

포괄적인 List, 포함되는 List 라는 의미로 사용됨


1
result = [i for i in range(10)]
cs

이런식으로 활용할 경우 result 안에 0~9 가 들어간 리스트


필터 활용

1
result = [i for i in range(10if i % 2 == 0]
cs

여기서는 result 0,2,4,6,8


for 문 2가지

1
2
word_1 = "Hello", word_2="World"
result = [i+for i in word_1 for j in word_2]
cs

word_1에서 한 글자 + word_2에서 한 글자

(카르테시안 곱에서도 활용 가능)


2차원 배열 만들기

리스트 안에 리스트 요소로 넣어 만들기

1
stuff = [[w.upper(), w.lower(), len(w)] for w in words]
cs


2-4. Enumerate & Zip

1)

Enumerate - List의 Element를 추출할 때 번호를 붙여서 추출

1
2
for i,v in enumerate(['tic''toc''toc']:
    print(i,v)
cs


2)

Zip - 두 개의 List 값을 병렬적으로 추출

1
2
3
4
aList = ['a1','a2','a3']
bList = ['b1','b2','b3']
for a,b in zip(aList, bList):
    print(a,b)
cs

같은 인덱스 끼리 묶어서 출력

// 출력 결과 a1 b1 a2 b2 a3 b3


2-5. Lambda & MapReduce

1)

Lambda - 함수 이름 없이 함수처럼 쓸 수 있는 익명함수

1
2
= lambda x, y : x+y
print(f(1,2)) # 출력결과 3
cs


python 3 부터는 권장하지 않으나 여전히 많이 쓰임


2) 

Map Fucntion - Sequence 자료형(list, tupple) 각 element에 동일한 function을 적용함


1
2
3
ex = [1,2,3,4,5]
f= lambda x: x**2
print(list(map(f,ex)) # [1,4,9,16,25]
cs

list를 붙여야 결과값이 나옴

Map에서 lambda 는 if를 사용하면 반드시 else를 써줘야 함


그러나 Map function보다는

[value ** 2 for value in ex] 이런식의 사용이 권장됨


3) 

Reduce - Map function과 달리 List에 똑같은 함수를 적용해서 통합


1
2
from functools import reduce
print(reduce(lambda x, y : x+y, [1,2,3,4,5]))
cs

# 결과 15 , 리스트에서 원소 하나씩 이동하면서 결과값을 하나 출력


2-6. Asterisk

Asterisk - 흔히 알고 있는 * 를 의미함

단순 곱셈, 제곱 연산, 가변 인자 활용 등 다양하게 활용


1
2
3
4
def asterisk_test(a, *args):
    print(a,args)
    print(type(args))
asterisk_test(1,2,3,4,5,6# 1,(2,3,4,5,6) Tupple
cs


b=2, c=3, d=4, e=5, f=6 과 같은 dict 타입


1
2
3
4
def asterisk_test(a, **kargs):
    print(a,kargs)
    print(type(kargs))
asterisk_test(1,b=2,c=3,d=4,e=5,f=6# 1, {b:2, c:3, ...} Dict
cs


asterisk_test(1, *(2,3,4,5,6)) 를 써서 호출하면

*를 통해 자동으로 언팩킹하게 됨


2-7. Collections

자료구조를 제공해주는 파이썬 모듈

1) Deque

1
2
3
from collections import deque
deque_list = deque()
deque_list.qppendleft(10)
cs


2) OrderedDict

Dict와는 달리 데이터를 입력한 순서대로 Dict를 반환

순서대로 저장한다는 장점 때문에 사용성 높음


3) defualtdict

1
2
= defaultdict(object)
= defaultdict(lamda:0)
cs

없는 키값을 지정시 디폴트 값으로 지정해줄 수 있음


4) Counter 

Sequence type의 data element들의 갯수를 dict 형태로 반환

1
2
c= Counter()
= Counter("gallahad")
cs

print(c) # Counter({'a':3, ...})


*********** 2-8. Linear algebra codes ***********

1) Vector를 표현하는 방법 : List 외에도 다양하게 있음


1
2
3
= [1,1]
= [2,3]
= [3,5]
cs


2) Vector의 덧셈

1
2
result = [sum(t) for t in zip(u,v,z)]
print(result)
cs


3) Scalar-Vector product

1
2
3
= [1,2,3]
= [4,5,6]
result = [sum(z) *4 for z in zip(u,v)]
cs


4) Matrix를 표현하는 방법 : Two-dimensional list로 표현


1
2
3
4
matrixA = [[3,5],[4,5]]
matrixB = [[5,8],[2,3]]
result = [[sum(row) for row in zip(*t)] 
        for t in zip(matrixA,matrixB)]
cs


Transpose

1
2
matrixA=[[1,2,3],[4,5,6]]
result = [[element for element in t] for t in zip(*matrixA)]
cs


2-9. News Categorization

비슷한 카테고리의 뉴스를 묶어주는 알고리즘

유사하다 = 두 점이 가깝다


2차원 표에서 [1,2]  [3,4] 와 같은 점으로 표현해서 두 거리를 표현하기


하나의 단어를 Vector로 만들기 위해서 Vector의 Index로 인식

Bag of words = 단어 별로 인덱스를 부여해서 한 문장의 단어의 개수를 Vector 표현


두 점 사이의 거리

1) 피타고라스 정리를 통해 거리 구하기

2) 두 점 사이의 각도(Cosine Simularity)


데이터 셋이 크면 클 수록

문서에서는 Cosine Simularity가 잘맞음


**프로세스

파일을 불러오기

파일을 읽어서 단어사전 만들기

단어별로 index 만들기

만들어진 인덱스로 문서별로 Bag of words vector 생성

비교하고자 하는 문서 비교하기

측정


import os

os.listdir(dir_name)을 통해서 파일 리스트 가져오기

os.path.join(dir_name,file_name) 을 통해 폴더명과 파일 명 정리

Corpus(단어사전) 만들기 + 단어별 index 만들기

단어들을 통해 Vector 만들기 

우리가 분석하고자 하는 뉴스의 단어들이 있는 인덱스들만 저장한 리스트를 만든다!

'Archived(CSE Programming) > Machine Learning' 카테고리의 다른 글

Chap 5-3. Visualization & Handling  (0) 2019.02.20
Chap 5-2. Pandas  (0) 2019.02.20
Chap 5-1. Numpy  (0) 2019.02.18
Chap 4. Machine Learning Overview & An understanding of data  (0) 2019.02.18
Chap 3. Assignment  (0) 2019.02.18