티스토리 뷰
1. Numpy
1) Numpy (Numerical Python)
- Python에서 벡터, 행렬 등 수치 연산 수행하는 선형대수 라이브러리
- 벡터 및 행렬 연산에 있어 매우 편리 기능 제공
- 데이터 분석을 할 때 사용되는 라이브러리인 Pandas와 Matplotlib의 기반
- 기본적으로 array(행렬) 단위로 데이터 관리. 이에 대한 연산 수행
2) Array 정의 및 사용
(1) 정의
(2) .shape / .ndim / .size : 배열의 모양 / 차원 수 / 원소 개수
- 각 차원 = '축(axis)', 축의 개수 = '랭크(rank)'
- shape = 각 차원(축)의 크기(길이)
(3) .dtype : 자료형
- array는 모든 원소가 같은 자료형 가짐
- 자료형 직접 지정해줄 수 있음 By dtype 옵션 or .astype()
- Numpy에서 사용되는 자료형 (자료형 뒤의 숫자는 비트 크기)
int(8, 16, 32, 64) | 부호가 있는 정수 |
uint(8, 16, 32, 64) | 부호가 없는 정수 |
float(16, 32, 64, 128) | 실수 |
complex(64, 128, 256) | 복소수 |
bool | 불리언 |
string | 문자열 |
object | 파이썬 오브젝트 |
unicode | 유니코드 |
(4) zeros[ones] : 입력받은 형태만큼 인자가 0[1]으로 채워진 행렬 만듦
(5) arrange : 범위 지정 (파이썬의 range와 비슷)
(6) reshape(행 수, 열 수) : 개수 유지하면서 재배열
가로줄 = 행, 세로줄 = 열
reshape(-1) : 원래 배열의 길이와 남은 차원으로부터 추정하여 재배열
① 2차원 배열 : shape = (행, 열)
array_reshaped.shape = (2, 4) → (4, -1) = (4, 2) & (-1, 4) = (2, 4)
② 3차원 배열 : shape = (차원, 행, 열)
array4.shape = (2, 3, 2) → (2, 2, -1) = (2, 2, 3)
array4는 2개의 (3행, 2열) 2차원 배열로 이루어진 3차원 배열
3) Array 연산
(1) 원칙적으로 shape 같아야 연산 가능 ← 각 array의 같은 자리에 있는 값들끼리 element-wise 연산
① 평균 : np.mean(arr)
② 덧셈 : arr1 + arr2 OR np.add(arr1, arr2)
③ 뺄셈 : arr1 - arr2 OR np.subtract(arr1, arr2)
④ 곱셈 : arr1 * arr2 OR np.multiply(arr1, arr2)
※ 내적곱 : .dot
⑤ 나눗셈 : arr1 / arr2 OR np.divide(arr1, arr2)
⑥ 최댓값 : np.maximum(arr1, arr2)
(2) BroadCasting : 서로 크기가 다른 numpy array 연산 가능하게 함, 스칼라와도 가능
차원이 같을 경우, 작은 배열이 큰 배열의 모양으로 확대되어 shape을 같게 맞춰준 후 element-wise 연산
※ 차원이 다를 경우, 차원이 작은 쪽의 shape이 우측 정렬했을 때 완전히 포개어지는 경우만 Broadcasting 가능
* keepdims = True를 통해 보완 가능
4) Array 인덱싱
- 원소의 index는 0부터 시작
- 각 차원에 대해 슬라이싱 가능
(슬라이스된 배열은 원 데이터와 동일한 데이터 가리키므로 변경 시 원 데이터도 변경됨)
(1) 1차원 데이터 인덱싱
(2) 2차원 데이터 인덱싱
(3) Boolean array 인덱싱 : Boolean array를 인덱스에 넣어 True인 원소만 접근 가능
(4) Integer array 인덱싱 : Integer array를 인덱스에 넣어 지정된 인덱스의 원소에 접근
ndarray.flatten() : n차원 배열을 1차원 배열로 만드는 메서드
5) 자주 쓰이는 Numpy 함수
※ axis
" axis = 0 : 가장 바깥 차원 방향, axis = 1 : 그 다음 차원 방향 "
[2차원 행렬]
ex) (2, 3) 행렬 = (3,) 벡터 2개 있는 것 → 2가 3보다 큰 차원
axis = 0 (수평축) : 행(row) 방향, 즉 위에서 아래로 연산 → 행(row) 숫자 사라짐
axis = 1 (수직축) : 열(col) 방향, 즉 왼쪽에서 오른쪽으로 연산 → 열(column) 숫자 사라짐
[3차원 행렬]
ex) (3, 2, 4) 행렬 = (4,) 벡터 2개로 이루어진 (2, 4) 행렬이 3개 있는 것 → 3(가장 바깥 차원) > 2 > 4
axis = 0 : 가장 바깥 차원인 채널(channel) 방향으로 연산
(1) concatenate(arr1, arr2, axis = 0) : 결합
※ 가로, 세로 결합에 따라 row, column 갯수가 맞아야 결합 가능
axis = 0 → 행(row)을 기준으로 (가로줄로) 결합
axis = 1 → 열(column)을 기준으로 (세로줄로) 결합
(2) split(arr, n) : n개로 분할
(3) sum : 원소별 합
axis = 0 : 행(row)방향, 즉 위에서 아래로 합 → 행(row) 숫자 사라짐
axis = 1 : 열(column)방향, 즉 왼쪽에서 오른쪽으로 합 → 열(column) 숫자 사라짐
※ keepdims = True : 행 or 열 숫자 사라지는 부분에 1을 채워 넣어 차원이 축소되는 것 방지→ Broadcasting 가능
(4) cumsum : 원소별 누적합
(5) delete(arr, obj, axis=None) : 요소 삭제
arr : 삭제할 배열
obj : 몇 번째를 삭제 (인자로 배열도 가능)
axis : 어느 축에서 삭제
- axis = 0 : 행 제거, axis = 1 : 열 제거
- axis 지정해주지 않으면 배열이 flatten 되고 지정한 obj 요소가 삭제됨
(6) insert(arr, obj, values, axis=None) : 값을 추가
- axis 지정해주지 않으면, 배열이 flatten 되고 obj 인덱스에 values 가 추가됨
- values를 단순 스칼라 값으로 넣어주면, 동일한 값으로 채워짐
* 서로 다른 값들로 채우고 싶다면(배열 넣고싶다면), values를 axis의 shape에 맞춰 배열 넣어주기
(7) append(arr, values, axis=None): 값을 추가
insert : 특정 인덱스(obj)에 원하는 배열(values) 삽입
append : 마지막 인덱스에 원하는 배열(values) 삽입
- axis를 명시하면, values의 차원 수와 arr의 차원 수가 동일해야함 (빈 차원도 맞춰 줘야함)
- axis 지정해주지 않으면, 배열이 flatten 되고 마지막 부분에 values 추가됨 (차원 달라도O)
2. Pandas
1) Pandas
- Python에서 사용하는 데이터분석 라이브러리
- 행과 열로 이루어진 데이터 객체 만들 수 있음
- 크게 2가지 데이터 타입 존재 (Series, DataFrame)
2) Series
- Series : Index와 Value로 이루어진 데이터 타입 (1차원)
(1) pd.Series([ ], index = [ ]) : 생성
① 값만 넣기 : index 지정 안하면 자동으로 0부터 숫자
② 딕셔너리로 생성 : index도 한번에 원하는 것으로 설정 가능
(2) 확인 Method
① .values : 값 확인
② .index : 인덱스 확인
③ .dtypes : 자료형 확인
+) .name : 전체 Series명 / Index명 설정 가능
.index : index 변경 가능
(3) Indexing
- Index로 Indexing : .<Index 명> or ['<Index 명>']
- 여러개 한번에 Indexing 가능 (Index명 or Index 번호로 가능)
- Offset Index (슬라이싱) 사용 가능
(4) Data Filtering
(5) Series 연산
(6) Series 변형
① .concat
② .drop
(7) Series 결측치(NaN) 처리
.notnull() OR.dropna() : NaN 제외한 나머지 값들만 남김
.fillna(Series.mean()) : NaN 제거한 자리에 평균값 채워넣음
2) DataFrame
- DataFrame : Index와 Value와 Column으로 이루어진 데이터 타입 (2차원)
- Column은 Series로 이루어짐, 엑셀의 테이블 형태와 유사
- column : 열(세로) / row : 행(가로)
(1) DataFrame 생성 순서
① columns 생성 : pd.DataFrame(columns=[" ", " "])
② 데이터 채우기 : 각 column에 대해 리스트 or 딕셔너리로 생성
+) 위와 같이 index를 옵션으로 지정할 수 있으며,
아래와 같이 set_index로 특정 column을 index로 지정할 수도 있음
(2) DataFrame 인덱싱 (접근)
- Column명 / 조건 / Index(행) 슬라이싱으로 접근 ..... df["A":"A"]
- Index로 바로 접근 X .....df["A"] (X)
- loc : Index 명으로 바로 접근 ..... df.loc["A"]
- iloc : Index 자리수로 접근 (0부터 시작) ..... df.iloc[0]
(3) DataFrame 추가, 변경, 삭제, 병합
① 추가, 변경
loc : Index 지정해서 변경, 추가 가능, 특정 부분만 변경 가능
df["<column명>"][<Index>] : 특정 부분만 변경 가능
② 삭제
drop(<Index> , inplace=True, axis=0) : Row(행, 가로줄) 삭제
- drop 함수는 원본데이터를 변형하지 않으므로 새로운 데이터 변수 할당해줘야함
- inpace=True 옵션 : 원본데이터 자체를 변경할 수 있음 (해당 데이터프레임에서 삭제)
- axis=0 옵션 : Row 삭제 (default 옵션)
reset_index() : Index 재정렬 (drop=True 옵션 주면 삭제된 Index 저장 X)
- drop=True 옵션 안주면 원래 index 였던 것들이 index라는 새로운 column으로 추가됨
drop("<Column명>" , inplace=True, axis=1) : Column(열, 세로줄) 삭제
③ 병합
pd.concat([df1, df2], axis=0, join='outer', ...) : 단순 병합
- axis=0 : 행으로 결합
- axis=1 : 열로 병합 → 행의 index가 다른 경우에는 NaN 값 반환
- join 옵션 : 결합 방법 지정 (default = 'outer')
join = 'outer' : 합집합 (나와있는 모든 원소 표시)
join = 'inner' : 교집합 (두 데이터에서 공통적으로 있는 부분만 표시)
pd.merge(left_df, right_df, how='inner', on='<Column명>') : 두 데이터의 공통 항목(key값)을 기준으로 병합
- how 옵션 : 결합 방법 지정 (default = 'inner')
how = 'outer' : key 값이 한 데이터프레임에만 있어도 표시
how = 'inner' : 두 데이터에서 key 값이 공통적으로 있는 것만 표시
how = 'left' : 왼쪽 df의 'on' 기준으로 그대로 두고 ,오른쪽df에서 겹치는 부분만 가져와 병합
how = 'right' : 오른쪽 df의 'on' 기준으로 그대로 두고, 왼쪽 df에서 겹치는 부분만 가져와 병합
→ 값이 없는 경우에는 NaN 값 반환
(4) 데이터 읽기, 저장
pd.read_csv('<filepath>', usecols=["c1", "c2 ", "c3 "], nrows=10, index_col = "c1") : 데이터 읽기
- usecols : 사용할 컬럼들
- nrows : 가져올 행의 개수
- index_col : 인덱스로 지정할 컬럼명
.to_scv("<저장할 파일명>", index = True) : 다시 데이터 저장
- index = False로 하지 않으면 기존 인덱스가 새로운 컬럼으로 저장됨
.shape : 데이터의 row, column 길이 확인
.columns : 컬럼명 확인
.head() : 데이터 맨 앞부분 확인 (default 5개, 개수 지정 가능)
.tail() : 데이터 맨 뒷부분 확인 (default 5개, 개수 지정 가능)
.astype('<dtype>') : 데이터 타입 변경
.info() : NaN, 데이터 타입, 전체 데이터 수 등 정보 확인
.describle() : '수치형' 통계값 확인
(5) Pandas 함수
apply : (사용자 지정) 함수 적용
lambda : 사용자 지정 함수 간단하게 만들 수 있음
sort_values(by='<칼럼명>', ascending = True) : 원하는 칼럼을 선택해 그것을 기준으로 오름차순 정렬
null 값 확인 및 처리
.isnull() : null 값 확인
.notnull() : null 값 아닌 것 확인
.sum() : 해당 값 개수 세기
결측치 제거
.dropna() : 하나라도 null값 있으면 해당행 전체 삭제
.dropna(how='all') : 전체가 다 null여야 해당행 삭제
.dropna(inplace=True) : null drop한 채로 저장
.dropna(axis=1) : null값인 칼럼(열) 자체를 다 삭제
.unique() : 특정 열이 어떤 값들로 구성되어 있는지 확인
.value_counts() : unique 값들이 각각 얼마나 있는지 확인
.groupby("<칼럼명>").size() : size를 통해 해당 칼럼의 데이터를 모은 후 개수 확인
- 특정 열(들)을 기준으로 데이터프레임을 묶어주는 함수
- 2가지 칼럼 기준으로 groupby 가능
- 기준 칼럼, mean() 구하는 칼럼 지정 가능
- .agg 통해 다양한 통계 낼 수 있음 (min, max, mean, sum, median)
'Data > Analytics' 카테고리의 다른 글
[DA] WordCloud (0) | 2022.02.10 |
---|---|
[DA] NLP Pipeline - NLTK & KoNLPy (0) | 2022.02.09 |
[DA] FE (Feature Engineering) (0) | 2022.01.18 |
[DA] EDA & 시각화 (0) | 2022.01.17 |