'numpy'에 해당되는 글 4건

Code/머신러닝 in Python

판다스(pandas) 인덱스

반응형

 

인덱스(Index) 는 DataFrame, Series의 레코드를 고유하게 식별하는 객체이다.

 

# Index 객체 추출
indexes = titanic_df.index

- .index : RangeIndex(start=0, stop=891, step=1)으로 결과가 나오며 인덱스의 처음과 끝값을 range형태로 알려준다.

            식별성 데이터를 1차원 array로 가지고 있으며, 단일값 반환 및 슬라이싱도 가능하다.

            하지만, indexes[6] = 0 과 같이 한번 만들어진 DataFrame, Series, Index 객체는 함부로 변경할 수 없다.

 

 

series_fair = titanic_df['Fare']
print(series_fair.max())
print(series_fair.min())
print(sum(series_fair))

- 'Fare' 컬럼을 Series 형태로 뽑아서 저장하고 숫자로 된 데이터들은 max(), min(), sum() 등과 같은 연산 함수를 적용할 수 있다.

 

 

titanic_reset_df = titanic_df.reset_index(inplace=False)
print(titanic_reset_df)

- .reset_index() : 인덱스를 새로 만들어주는 함수로 0부터 시작하게 된다. 기존의 인덱스는 새로운 index라는 칼럼으로 titanic_df의 데이터 프레임에 추가된다. 또한 inplace = False를 통해 기존 데이터 프레임에 영향을 주지 않는다.

- 주로 인덱스가 연속된 int 숫자형 데이터가 아닐 경우에 사용한다.

 

 

 

- DataFrame 에서 [] 연산자

넘파이에서는  행의 위치, 열의 위치, 슬라이싱 범위 등 지정해 데이터를 가져올 수 있음

하지만 DataFrame 바로 뒤에 있는 [ ]의 안에 들어갈 수 있는 값은 컬럼명 문자, 또는 인덱스로 변환 가능한 표현식 = 칼럼을 지정할 수 있는 연산자

 

 

print(titanic_df['Pclass'].head(2))
print(titanic_df[0])

- 첫번째 프린트는 컬럼명 문자로 접근하여 출력이 가능하나, 두번째 프린트문에서는 숫자로 접근했고 해당 칼럼이 존재하지 않기 때문에 오류가 발생하게 된다.

- 하지만 판다스의인덱스 형태로 변환 가능한 표현식은 숫자도 가능 (예. titanic_df[0:2]) 하지만 비추천합니다.

 

 

titanic_df[titanic_df['Pclass'] == 3].head(3)

- 위와 같은 불린 인덱싱 표현도 가능하다. 'Pclass'가 3인 행만 추출하여 보여줄 수 있다.

 

 

 

 

명칭 기반 인덱싱과 위치 기반 인덱싱의 구분

- 명칭(label) 기반 인덱싱 : 칼럼의 명칭을 기반으로 위치를 지정하는 방식. '칼럼 명' 같이 명칭으로 열 위치를 지정하는 것

- 위치(position) 기반 인덱스  : 0을 출발점으로 하는 가로축, 세로축 좌표를 기반으로 행과 열 위치를 기반으로 데이터 지정. 따라서 행과 열 값으로 정수가 입력됨

 

data = {'name':['홍길동', '이순신', '김아무개'],'Age' :[20,40,35]}
data_df = pd.DataFrame(data,index = ['one','two','three'])

# data_df를 reset_index()로 새로운 숫자형 인덱스
data_df = data_df.reset_index() # -> 0부터 새로 인덱싱
data_df = data_df.rename(columns = {'index':'old_index'}) # index -> old_index로 변환

# 위치 기반 인덱싱으로 데이터 접근 
print(data_df.iloc[0,0])        # 홍길동
print(data_df.iloc[0,'name'])   # 위치기반이기 때문에 오류 발생

# 명칭 기반 인덱싱으로 데이터 접근
print(data_df.loc[0,'name']     # 홍길동
print(data_df.loc['one','name'] # 홍길동
print(data_df.loc[0:1,'name'])  # 0 홍길동 1 이순신

# 불린 인덱싱으로 데이터 접근
print(data_df[data_df['Age'] > 30)  # 1 이순신 40 2 김아무개 35

 

- .iloc : 위치 기반 인덱싱으로 인덱스(혹은 숫자)로만 접근 가능

- .loc : 명칭 기반 인덱싱으로 인덱스의 이름과 컬럼의 이름으로 접근 가능

- 불린 인덱싱은 여러 조건을 사용할 때 &(and), |(or), ~ (not) 을 사용할 수 있다.

 

 

반응형
Code/머신러닝 in Python

넘파이(NumPy) 정렬

반응형

 

 

1. sort() : 넘파이에서 지원해주는 np.sort() 와 ndarray.sort() 두 가지 방식으로 행렬을 정렬할 수 있다

org_array = np.array([3,1,9,5])
print("원본 : ", org_array)         # [ 3 1 9 5]

sort_array1 = np.sort(org_array)
print(sort_array1)                 # [ 1 3 5 9]
print(org_array)                   # [ 3 1 9 5]

sort_array2 = org_array.sort()
print(sort_array2)                 # None
print(org_array)                   # [ 1 3 5 9]

- np.sort() :  원본 배열을 유지, 정렬된 배열을 반환하여 변수에 저장할 수 있다. 

                기본 오름차순으로, axis = 0 : 행, axis = 1 : 열 기준으로 정렬하게 된다.

- .sort() : 원본 배열을 정렬한 채로 반환함

            기본 오름차순으로, 내림차순은 [::-1] 로 지정해주면 된다.

 

 

2. np.argsort() : 원본 행렬이 정렬되었을 때 기존 원본 행렬의 원소에 대한 인덱스를 필요로 할 때 사용

org_array = np.array([3,1,9,5])         # [ 3 1 9 5 ]
sort_indices = np.argsort(org_array)    # [ 1 3 5 9 ]
print(sort_indices)                     # [ 1 0 3 2 ]

 

 

반응형
Code/머신러닝 in Python

넘파이(NumPy) ndarray

반응형

 

앞 게시글에서는 넘파이의 기본과 np.array() 를 통해 생성하는 것을 학습하였다.

이번 게시글에서는 ndarray에서 지원하는 다양한 함수를 볼 것이다.

 

ndarray를 생성하는 numpy 함수들 사용할 때는 np.함수명으로 사용하다.

자료형이 명시 되지 않는 경우,

  • 많은 numpy tutorial에서는 보통 float64가 될 것이라 하지만,
  • numpy 구현체의 버전에 따라 일치하지 않는데,
  • numpy 최신버전에서는 제시된 자료형을 담을 수 있는 최소 size의 자료형으로 정해진다고 document에서는 명시한다.

함수설명

array 입력 데이터를 ndarray로 변환. dtype 미 지정시, 자료형에서 추론
asarray 입력 데이터를 ndarray로 변환. 입력 데이터가 ndarray일 경우 그대로 표시
arange 내장range 함수와 유사하지만 리스트 대신 ndarray를 반환
ones 주어진 dtype과 shape을 가지는 배열 생성. 성분을 모두 1로 초기화
ones_like 주어진 배열과 동일한 shape과 dtype을 갖는 배열을 생성. 1로 초기화
zero ones와 같지만 0으로 채운다
zeros_like ones_like와 같지만 0dmfh codnsek
empty 메모리를 할당하지만 초기화가 없음
empty_like 메모리를 할당하지만 초기화가 없음
eye(N,M,k=0) 1, 0의 값을 갖는 대각 NxM 대각 행렬 생성. k에 따라 대각이 이동
identity n x n 단위행렬 생성
linspace start, stop, size를 설정하면 ndarray로 생성

 

 

 

1. arange() : 파이썬의 표준 함수인 range() 와 유사한 기능으로 array를 range()로 표현하는 것

sequence_array = np.arage(10)
pirnt(sequence_array)

- 파이썬처럼 0부터 n-1까지의 숫자를 넣어주기 때문에 출력값은 [ 0 1 2 3 4 5 6 7 8 9] 으로 나오게 된다.

- 기본 함수는 arange([start,] stop[, step,], dtype=None) 로 default 값이 stop이기 때문에 stop = 10이 되어 자동으로 0부터 시작하게 된다.

 

 

 

 

 

2. zeros() : 함수 인자로 튜플 형태의 shape 값을 입력하면 모든 값을 0으로 채운 해당 shape를 가진 ndarray를 반환함

zero_array = np.zeros((3,2), dtype='int32')
print(zero_array)
print(zero_array.dtype)

- [[ 0 0 ] [ 0 0 ] [ 0 0 ]] -> 0으로 채워진 (3,2) ndarray 반환

- int32 -> np.zeros() 함수를 통해 dtype 으로 설정한 값으로 나오게 됨

 

 

 

 

3. ones() : 함수 이자로 튜플 형태의 shape 값을 입력하면 모든 값을 1로 채운 해당 shape를 가진 ndarray를 반환함

one_array = np.ones((3,2))
print(one_array)
print(one_array.dtype)

- [[ 1 1 ] [ 1 1 ] [ 1 1 ]] -> 1으로 채워진 (3,2) ndarray 반환

- float64 -> 디폴트 값인 float64 가 나오게 됨

 

 

 

 

4. reshape() : ndarray의 차원과 크기를 변경하는 함수, 변환을 원하는 크기를 함수 인자로 부여

array1 = np.arange(10)  # [ 0 1 2 3 4 5 6 7 8 9]
array2 = array1.reshape(2,5)  # [[0 1 2 3 4 ][5 6 7 8 9 ]]
array3 = array1.reshape(5,2)  # [[0 1] [2 3] [4 5] [6 7] [8 9]]

- 여기서 지정된 사이즈로 변경이 가능하지만,  (4,3) 처럼 맞지 않은 사이즈를 입력 시 오류를 발생시킴

 

* 인덱스에 있어서 -1 인 경우 ndarray와 호환되는 새로운 shape로 반환해줌

array1 = np.arange(10)  # [ 0 1 2 3 4 5 6 7 8 9]
array2 = array1.reshape(-1,5)  # [[0 1 2 3 4 ][5 6 7 8 9 ]]
array3 = array1.reshape(5,-1)  # [[0 1] [2 3] [4 5] [6 7] [8 9]]

- -1 은 원본 ndarray가 어떤 차원의 형태이든 간에 결과는 2차원으로 나오게 되며, 여러개의 로우를 가지되 반드시 1개의 컬럼을 가진 ndarray로 변환됨을 보장한다.

 

반응형
Code/머신러닝 in Python

넘파이(NumPy) 기초 + np.array()

반응형

 

넘파이(NumPy) : Numerical Python 

NumPy가 제공하는 기능은 다음과 같다:

  • 빠르고 메모리 효율적인 벡터 연산과 세련된 브로드캐스팅 기능을 제공하는 다차원 배열인 ndarray
  • 반복문을 작성할 필요 없이 전체 데이터 배열에 대해 빠른 연산을 제공하는 표준 수학 함수
  • 배열 데이터를 디스크에 쓰거나 읽을 수 있는 도구와 메모리에 올려진 파일을 사용하는 도구
  • 선형대수, 난수 발생기, 푸리에 변환 기능
  • C, C++, 포트란으로 쓰여진 코드를 통합하는 도구

특히 마지막 기능으로 C API를 제공하여 저수준으로 씌여진 외부 라이브러리(c로 만들어진 openCV 등)를 쉽게 사용할 수 있도록 해준다.

NumPy는 고수준의 데이터분석 기능을 제공하지 않으나,

  • 데이터를 array라는 연속된 메모리 공간에 저장하고,
  • array라는 메모리 블럭 단위의 연산을 사용하도록 하여,
  • 큰 규모의 데이터 연산을 빠르게 수행할 수 있도록 해줄 뿐 아니라,
  • deep learning 이후 각광받고 있는 GPGPU를 통한 고속 연산 처리에 바로 적용할 수 있어,
  • python 계열의 데이터분석, 데이터저장, 머신러닝, AI 도구들이 공통적으로 활용하여
  • 데이터 객체인 ndarray와 이 객체의 메소드를 확장하여(상속하여) 구현하고 있다.

따라서, 고수준의 여러 python 계열의 분석 도구를 활용하려면, 그 기반이 되는 NumPy를 정확하게 이해하고 있어야 제대로된 분석이 가능하다.

고수준의 여러 python 계열의 분석 도구들이 주요하게 사용하는 기능은:

  • 벡터 배열상에서 데이터 개조, 정제, 부분 집합, 필터링, 변형, 다른 종류 연산의 빠른 수행
  • 정렬, 유일 원소 찾기, 집합연산 같은 일반적인 배열 처리 알고리즘
  • 통계의 효과적인 표현과 데이터의 수집/요약
  • 다른 종류의 데이터 묶음을 병합하고 엮기 위한 데이터 정렬과 데이터 간의 관계 조작
  • if-elif-else를 포함하는 반복문 대신 사용할 수 있는 조건절을 표현할 수 있는 배열 표현
  • 데이터 그룹 전체에 적용할 수 있는 수집, 변형, 함수 적용 같은 데이터 처리.

 

1. 넘파이 사용하기

import numpy as np

import를 통해서 넘파이 모듈을 추가할 수 있습니다.

as 를 통해 앞으로 소스에서 부를 때 별칭인 np로 호출할 것입니다.

 

 

2. array() -> 파이썬의 리스트와 같은, 배열

array1 = np.array([1,2,3])
print(type(array1))  # array1의 타입 출력
print(array1.shape)  # array1의 형태(3,)

array2 = np.array([[1,2,3],[4,5,6]])
print(type(array2))  # array2의 타입 출력
print(array2.shape)  # array2의 형태(2,3)

print('array1: : {.0}, array2 : {.2}'.format(array1.ndim, array2.ndim))

 

.type () : 변수에 대한 타입을 알 수 있는 함수로 결과값은 <class 'numpy.ndarray'>로 나오게 된다

.shape() : ndarray의 크기, 즉 행과 열의 수를 튜플 형태로 가지고 있으며, 배열의 차원을 알 수 있음

array1 은 데이터 3개가 있는 1차원 배열이므로 (3,)가 나오게 된 것이고, array2 는 데이터가 1차원인 [1,2,3], [4,5,6] 이 두개인 2차원 배열이므로 (2,3)이 나오게 됩니다.

.ndim : 각 배열의 차원을 알 수 있는 함수

 

 

* 파이썬과 넘파이 비교

list1 = [1,2,3]
print(type(list1))

array1 = np.array([1,2,3])
print(type(array1))
print(array1.dtype)

- list1에 대한 type() 함수 -> <class 'list'>

- array1 에 대한 type() 함수 -> <class 'numpy.ndarray'>

ndarray의 의미는 n-dimensional array(다차원 배열)의 약자이다.

 

즉, 파이썬의 리스트와 넘파이의 array는 다른 것으로 확인 할 수 있다. 넘파이를 사용하기 위해서는 파이썬의 데이터타입을 넘파이에서 처리하는 타입으로 변환이 필요하다.

- dtype : ndarray내의 데이터 타입을 확인 할 수 있는 함수로 결과는 int32 -> 모두 정수타입의 32비트임을 나타낸다.  정수와 실수가 섞여 있으면 가장 큰 데이터 타입을 따라가기 때문에 float64가 나오게 된다.

 

* 자료형, dtype은 ndarray가 특정 데이터를 메모리에서 해석하기 위해 필요한 정보를 담고 있는 특수한 객체다.

산술 데이터의 dtype은:

  • float, int 같은 자료형의 이름과
  • 하나의 원소가 차지하는 비트 수로 이루어진다.
  • 예: float64 => 소수를 64bit 메모리 공간을 담는 data type.

종류Type Code설명

int8, uint8 i1, u1 부호가 있는 8비트(1바이트) 정수형과 부호가 없는 8비트 정수형
int16, uint16 i2, u2 부호가 있는 16비트 정수형과 부호가 없는 16비트 정수형
int32, uint32 i4, u4 ~
int64, uint64 i8, u8 ~
float16 f2 반정밀도 부동소수점
float32 f4 또는 f 단정밀도 부동소수점, C언어의 float과 호환
float64 f8 또는 d 배정밀도 부동소수점, C언어의 double형과 파이썬 float객체와 호환
float128 f16 또는 g 확장 정밀도 부동소수점
complex64/128/256, c8, c16, c32 각각 2개의 32, 64, 128비트 부동소수점형을 가지는 복소수
bool ? True, False를 저장하는 불리언형
object 0 파이썬 객체형
string_ S 고정길이 문자열형(각 글자는 1바이트).
길이가 10인 문자열의 dtype = S10
unicode_ U 고정 길이 유니코드형(OS에 따라 글자별 바이트수 다름)
string_과 같은형식(ex) U10)

 

 

 

array_int = np.array([1,2,3])				# 기본 배열 형태
array_float = array_int.astype('float64')  	 # 타입 변환
print(array_float.dtype)

- .astype() : ndarray내 데이터 값의 타입 변경하는 함수

-> 정수로 들어간 array_int 는 float형태로 변환되어 출력값이 [1. , 2. , 3. ] 된다.

 

 

반응형

푸터바

태그

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

  • Today :
  • Yesterday :
  • Total :