기초 내용을 아는 게 중요한 만큼 기본 중 기본 패키지인 넘파이와 판다스를 다시 remind 해보면서 정리해봤습니다 :)
1. Numpy
import numpy as np
행렬/대규모 다차원 배열 처리에 최적화된 패키지
데이터를 행렬로 구축. 행렬 변환/shape 수정 등에 활용.
뛰어난 속도
머신러닝/딥러닝에서 사용. 특히 딥러닝에서 많이 사용.
1.1 행렬
Input | Output |
matrix = np.array([[(1,2,3),(4,5,6)], [(7,8,9),(10,11,12)]]) | array([[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]]) |
display(matrix.ndim) | 3 #차원 |
matrix.shape | (2,2,3) #개수,행,열 |
matrix.size | 12 #총 원소개수 |
matrix.dtype | dtype('int32') #원소 데이터타입 |
1.2 Methods
Input | Output |
np.zeros((3,3)) np.ones((3,3)) |
array([[0.,0.,0.], [0.,0.,0.], [0.,0.,0.]]) #np.ones는 숫자 1 |
np.zeros_like(matrix) np.ones_like(matrix) |
#matrix와 동일한 틀에 0/1입력 |
np.empty((1,1)) np.full((3,4,2),7) |
# 값을 초기화하지 않고 형태와 타입을 갖는 행렬 생성 # 값이 주어진 수로 가득찬 행렬 생성 |
np.arange(1,2,0.1) | array([1., 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9]) # [1,2)에 0.1 간격으로 |
np.linspace(1,2,9) | array([1., 1.125, 1.25, 1.375, 1.5, 1.625, 1.75, 1.875, 2.]) # [1,2]에 균일한 간격으로 9개 숫자 # Linear Space라고 생각하기 |
x=np.arrange(9).reshape(3,3) np.diag(x) np.trace(x) |
# diag 기존 행렬의 대각선 행렬만 추출 # trace 기존 행렬의 대각선 행렬의 합 추출 |
np.eye(3) | # 단위 행렬 생성 (3*3인데 대각선만 1, 나머지는 0인 행렬) |
1.3 함수
Input | Output |
matrix.reshape(6,1) | ndarray의 형태/차원을 바꿈 변형 전과 후의 차원의 형태는 같아야한다. 이미지 데이터 벡터화 - 이미지는 기본적으로 2차원 혹은 3차원(RGB)이나 트레이닝을 위해 1차원으로 변경하여 사용 됨 |
x.ravel() np.ravel(x, order='F') x.flatten(order='F') |
다차원 배열을 1차원으로 변경 C - row우선 변경 / F - column 우선 변경 |
<random 서브모듈 사용하는 함수> | |
np.random.rand() | 0과 1 사이 랜덤한 ndarray 생성 |
np.random.randn() | 정규분포(norm) 랜덤 ndarray 생성 |
np.random.randint(1,100, size=(5,)) | 특정 정수 사이에서 랜덤 ndarray 생성 |
np.random.seed() | 랜덤한 값을 동일하게 다시 생성하고자 할 때 사용! 사용안하고 rand 함수 사용하면 계속 다른 랜덤값 뽑힘 |
np.random.choice(100, size=(3,4)) np.random.choice(x, size=(2,2), replace=True) |
주어진 1차원 ndarray(x) / 숫자 이하 랜덤 샘플링 |
np.random.uniform(1,3, size=(3,4)) np.random.normal(size=(3,4)) np.random.randn(3,4) |
균등분포 정규분포 무작위분포 |
<연산/통계/집계/any, all/where 함수> |
|
np.add(x,y) np.divide(x,y) |
+ - |
np.mean(x) np.max(x) np.argmax(x) np.var(x) np.median(x) np.std(x) |
평균 최대값 최대값 인덱싱 분산 중앙값 표준편차 |
np.sum(x,axis=None) np.cumsum(x) |
합계 누적합계 |
np.any(조건) np.all(조건) |
한 원소이상 조건 만족 True 모든 원소 조건 만족 True |
np.where(z>0,z,0) | 조건에 따라 선별적으로 값 선택 가능 조건,조건True,조건False |
<역행렬> | |
np.linalg.inv(x) | 역행렬 |
np.linalg.solve(A,B) | Ax=B 형태의 선형대수식에서 x 구하기 |
<배열 결합/분할> | |
np.concatenate((a1,a2,,), axis=0) | axis=0 방향으로 배열들 결합 axis=0 열(수직) 기본값 |
np.vstack | 수직방향 배열 결합 |
np.hstack | 수평방향 배열 결합 |
np.vsplit | 수직방향 배열 분할 |
np.hsplit | 수평방향 배열 분할 |
2. Pandas
import pandas as pd
흔히 DataFrame으로 부르는 테이블 형식의 데이터(엑셀 등)를 불러와 처리할 수 있도록 한 패키지.
데이터 분석과 처리 쉽게 할 수 있게 도와주는 ㄹ아ㅣ브러리
가장 많이 사용!
2.1 Series : dataframe의 한 column
Input | Output |
a = pd.Series([1,2,3], index=['a','b','c']) | Series 정의 # dictionary 자료형 series data로 만들 수 있다. # dictionary key -> series index |
a.values | Series 값 확인 |
a.index | Series 인덱스 확인 |
a.dtypes | Series 자료형 확인 |
2.2 Data Frame
Input | Output |
df.to_csv('파일명.csv') pd.read_csv('파일명.csv', encoding='utf-8') |
파일 저장 파일 불러오기 |
pd.DataFrame(data, index, columns) | 인덱스/칼럼 지정 가능 1. np.array로 data 지정한 후 dataframe 정의 2. dictonary로 data 지정 (+칼럼순서 지정 가능) |
df['열이름'] df.열이름 |
칼럼만 추출. Series 형태 # 단일 열만 가능 |
df[['열이름']] | 칼럼만 추출. DataFrame 형태 # 여러 열 가능 |
df.count() df.열이름.value_counts() df.열이름.unique() |
원소 확인 |
df['추가할 열 이름'] = [값들] df['eastern'] = df.state == 'Ohio' |
열추가. 길이 똑같이 맞춰야한다. |
del df['삭제할 열 이름'] df.drop('삭제할 열 이름', axis=1, inplace=True) |
열삭제. index 기반으로 값 삭제. |
df.info() | DataFrame 정보얻기 |
df.index | DataFrame 행 index |
df.columns | DataFrame 열 index |
df.values | DataFrame 값 |
df.shape | (행개수,열개수) #df.shape[0]/df.shape[1] |
df.size | 총 원소개수(행개수*열개수. 결측치포함) |
df.describe() | 계산가능한 값들에 대한 요약 통계치. 결측치 제외. |
df.copy() | 원본데이터 저장 원본데이터 용량이 커 불러오는 시간이 길 경우 효율적임 |
<결측치> | |
df.isnull() df.isnull().sum() df.isnull().sum().sort_values(ascending=True) |
결측치 유무 |
df.dropna(how='any') | 결측치 하나라도 존재하면 행 삭제 |
df.fillna(value=1) df.fillna(method='pad') |
결측치 다른 값으로 채우기 pad/ffill 앞 방향으로 채우기 bfill 뒷 방향으로 채우기 |
df.replace(to_replace = np.nan, value = 2) | np.nan을 2로 교체 |
df.interpolate(method = 'linear', limit_direction = 'forward') | 앞방향으로 이어지는 값으로 교체 |
<Indexing & Slicing> | |
df.loc['c', 'pop'] df.iloc[2,2] |
실제 인덱스 이름으로 인덱싱 인덱스 숫자로 인덱싱 |
<Query> | |
df.loc[df.year>2011] df.query('year in [2010,2011] & state == "lowa"') |
조건에 맞는 행만 추출 |
a= 'Nevada' df.query('state == @a') |
외부변수 선언 @를 문자 앞에 붙임으로써 참조 가능 |
2.3 Groupby & Pivot Table & Concat & Merging
df.groupby('state')['pop'].agg([('pop_mean','mean')]) df.groupby('state')['year'].agg([('year_diff',lambda x: x.max() - x.min())]) df.groupby('state')['pop'].agg([('pop_mean','mean'),('pop_min','min')]).sort_values(by='pop_min', ascending = True) |
데이터프레임명.groupby('기준 열')['대상 열'].agg([('생성할 열이름','연산 방법')]) |
pd.pivot_table(df, values='pop', index ='state', columns='year', aggfunc=sum, fill_value=0) | 피벗테이블 : 데이터에서 필요한 자료만 뽑아서 새로운 표 작성 aggfunc : sum 초록색 아니면, np.sum 사용해야한다. |
pd.concat([df1, df2], sort=False) | 행 결합 axis=0 |
pd.concat([df1, df2], axis=1) | 열 결합 |
pd.merge(df1, df2, left_on = '', right_on = '', how = '') pd.merge(df1, df2, on = '', how = '') |
공통된 열/인덱스를 기준으로 통합 how='left/rignt/outer/inner' |
2.4 One-hot-encoding
pd.get_dummies(df, columns=['state'])
# get_dummies 하는 이유 수치형 데이터로만 변환을 하게 되면 서로 간의 관계성이 생기게 된다.
# 예를 들어, 월요일을 1, 화요일을 2, 수요일을 3이라고 단순하게 수치형 데이터로 변환하게 되면 해당 데이터들 간 1+2 = 3이라는 관계성이 존재하게 된다.
# 그러나 실제 데이터인 월요일, 화요일, 수요일 간에는 그러한 관계성이 없다!
# 따라서, 사실이 아닌 관계성으로 인해 잘못된 학습이 일어날 수 있으므로 서로 무관한 수, 즉 더미로 만든 가변수로 변환함으로서 그러한 문제를 막아준다!
#판다스(pandas)에서는 손쉽게 더미의 가변수를 만들 수 있도록 get_dummies함수를 제공하고 있다.
'Stay Hungry Stay Foolish > Data Analysis' 카테고리의 다른 글
R studio cloud (2) | 2021.08.19 |
---|---|
Python 프로그래밍 기초 정리 (0) | 2021.02.10 |
댓글