본문 바로가기
Stay Hungry Stay Foolish/Data Analysis

Python packages - Numpy & Pandas

by HANNI하니 2021. 2. 13.

기초 내용을 아는 게 중요한 만큼 기본 중 기본 패키지인 넘파이와 판다스를 다시 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

댓글