본문 바로가기

카테고리 없음

Chapter 1 넘파이 , 판다스

머신러닝의 주요 알고리즘은 선형대수와 통계등에 기반한다. 

 

넘파이

 

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문 같은 경우는 별도의 함수를 만들자 

def get_category(age):
    cat = ''
    if age <=5cat='Baby'
    elif age<=12cat='Child'
    elif age<=18cat='Teenager'
    elsecat = 'Adult'
    return cat

# lambda 식에 위서 생성한 get_catergory를 반환값으로 지정
# get_category(X)는 입력값으로 'Age'컬럼 값을 받아 해당하는 cat 반환
 
df['Age_cat'] = df['Age'].apply(lambda x: get_category(x))