머신러닝의 주요 알고리즘은 선형대수와 통계등에 기반한다.
넘파이
Numpy는 파이썬에서 선형대수 기반의 프로그램을 쉽게 만들 수 있도록 만든 패키지로 ,
루프를 사용하지 않고 대량 데이터의 배열 연산을 가능하게 하여 , 빠른 배열 연산 속도를 보장하는 것이 특징이다.
데이터 타입 : ndarray -> np.array([1,2,3])
ndarray내의 데이터 타입은 그 연산의 특성상 같은 데이터의 타입만 가능하다.
ndarray type변경 -> astype('int32')
ndarray를 편리하게 생성하기
파이썬의 표준함수 range와 유사한 기능 -> np.arange(10) : [0,1,2,3,4,5,6,7,8,9]
np.zeros((3,2)) -> [[0,0],
[0,0],
[0,0],]
np.ones-> 1로 채우기
ndarray를 특정 차원 및 크기로 변환하는 것 : reshape(행,열) -> 보통 reshape(-1,열)로 사용을 많이함
행렬의 정렬
np.sort() : 원 행렬을 유지하면서 정렬된 행렬을 반환
ndarray.sort(): 원 행렬 자체를 정렬한 형태로 변환하며 반환값은 None
np.argsort(): 정렬행렬의 원본 인덱스를 ndarray형으로 반환
행렬의 내적 : np.dot(A,B)
전치행렬 (행렬의 행과 열의 위치를 교환 한 것) : np.transpose()
판다스
pandas는 파이썬에서 데이터 처리를 위해 존재하는 가장 인기 있는 라이브러리로
핵심개체는 여러개의 행과 열로 이루어진 2차원 데이터를 담는 DataFrame이다.
Series는 Index와 단 하나의 컬럼으로 이루어진 데이터세트
여러개의 Series가 모인것이 DataFrame
딕셔너리 -> 데이터프레임 : Key가 컬럼명, value가 컬럼데이터로 변환
DataFrame의 컬럼추가 및 수정
df['새로운 컬럼명'] = '초기값 할당'
혹은 기존 컬럼들을 가지고 새로운 컬럼 생성
df['Family_No'] = df['Sibsp'] + df['Parch']+1
DataFrame의 데이터 삭제
df.drop('컬럼명' , axis=1) : 원하는 컬럼 삭제
df.drop(['컬럼1','컬럼2','컬럼3'],axis=1) : 원하는 컬럼들 삭제
df.drop('인덱스', axis=0) : 원하는 인덱스 삭제
DataFrame에서 Index객체 추출
df.index
index객체의 값은 변경불가 , 오직 식별용으로만 사용한다.
df.reset_index(): 기존 인덱스는 'index'라는 컬럼으로 추가하고 ,새로운 인덱스를 연속 숫자형으로 할당
보통 인덱스가 연속된 int숫자형이 아닐경우 사용한다.
DataFrame의 []에 들어갈 수 있는 것은
1) 컬럼명을 지정해 컬럼 지정 연산에 사용하거나 2) 불린 인덱스 용도로만 사용
loc : 칼럼 명칭 기반 인덱싱 -> loc(index값,컬럼명)
df[df['age']>60][['Name','Age']].head(3) == df.loc[df['age']>60,['Name','Age']].head(3)
Dataframe의 정렬 - sort_values()
sort_values(by=['특정컬럼명'],ascending=True) - 기본 오름차순
Aggregation적용
df[['Age','Fare']].mean()
groupby적용
df.groupby('컬럼명').agg()
ex) df.groupby('Pclass')['Age'].agg([max,min])
결측값 채우기 : fillna()
df['Age'] = df['Age'].fillna(df['Age'].mean())
apply lambda
lambda x(입력값) : x**2(입력 인자를 기반으로 한 계산식 = 반환값)
df['Name_len'] = df['Name'].apply(lambda x:len(x))
df['child_adult'] = df['Age'].apply(lambda x : 'Child' if x <15 else 'Adult')
df['Age_cat'] = df['Age'].apply(lambda x : 'Child' if x <15 else ('Adult' if x<=60 else 'Elderly'))
else if가 많이 나오거나 switch case문 같은 경우는 별도의 함수를 만들자