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(10) if i % 2 == 0] | cs |
여기서는 result 0,2,4,6,8
for 문 2가지
1 2 | word_1 = "Hello", word_2="World" result = [i+j 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 | f = 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 | d = defaultdict(object) d = defaultdict(lamda:0) | cs |
없는 키값을 지정시 디폴트 값으로 지정해줄 수 있음
4) Counter
Sequence type의 data element들의 갯수를 dict 형태로 반환
1 2 | c= Counter() c = Counter("gallahad") | cs |
print(c) # Counter({'a':3, ...})
*********** 2-8. Linear algebra codes ***********
1) Vector를 표현하는 방법 : List 외에도 다양하게 있음
1 2 3 | u = [1,1] v = [2,3] z = [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 | u = [1,2,3] v = [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 |