산술연산과 데이터 정렬



산술연산


객체를 더할 때 짝이 맞지 않는 색인이 있다면 결과에 두 색인이 통합된다.



서로 겹치는 색인이 없다면 데이터는 NA 값이 된다.
산술연산 시 누락된 값은 전파되며, DataFrame에서는 로우와 칼럼 모두에 적용된다.

NA 값을 치환할 때는 fill_value 값을 지정



산술연산 메서드



일반 array의 산술 연산(브로드캐스팅 기능)


DataFrame과 Series간의 연산은 앞의 브로드캐스팅 기법과 유사

만약 색인 값을 DataFrame의 칼럼이나 Series의 색인에서 찾을 수 없다면, 그 객체는 형식을 맞추기 위해 재색인된다



python의 분산 구하기


두 var의 결과가 다른 이유는 np.var와 pd.var에서 제공하는 자유도(ddof)가 서로 다르기 때문

Series구조는 자동으로 pd.var 적용(ddof = 1)
a1.var()는 np.var, s1.var()는 pd.var 적용




함수 적용과 매핑

- 각 컬럼별 로우별 함수 적용(축 값 지정)



[파이썬 적용함수]


1. map함수
- map(function, **iterable)
- 1차원 원소별 적용 가능
- 리스트 출력
- 다수의 인자 전달 시 각 인자의 크기 일치 필요

2. map메서드
- data.map(function, **iterable)
- 1차원(Series) 원소별 적용 가능
- 다수의 인자 전달 시 각 인자 크기 일치 시킬 필요 없음

3. apply 메서드
- data.apply(function, axis)
- 행별(axis=0), 열별(axis=1) 적용 가능
- 주로 그룹함수와 함께 사용
- 출력 결과 Series

4. applymap 메서드
- data.applymap(function, **iterable)
- 2차원 원소별 적용 가능
- 출력 결과 DataFrame



# applymap은 row나 컬럼별로 작동하는 함수가 아니라, 각 요소별로 작동을 한다.
# 자체가 그룹함수라면 동시에 여러개가 전달되어서 요구되는 apply와 잘 어울림




정렬과 순위




sort_index 메서드
- 키 이름별 정렬
- 로우, 칼럼의 색인을 알파벳 순으로 정렬하여 새로운 객체 반환
- 지정된 축 별 정렬 가능


Series의 value 값에 따라 정렬하려면 sort_values 메서드 사용



rank
- rank(순위)는 정렬과 거의 흡사하며 1부터 배열의 유효한 데이터 개수까지 순위를 매김
- 순위는 numpy.argsort에서 반환하는 간접 정렬 색인과 유사한데, 동률인 순위를 처리하는 방식 다름
- 기본적으로 Series와 DataFrame의 rank 메서드는 동점인 항목에 대해서는 평균 순위를 매김


rank method


- first: 데이터상 순서에 따라 순위
- max: 같은 값을 가지는 그룹을 높은 순위
- min: 같은 값을 가지는 그룹을 낮은 순위
- average: 같은 값을 가지는 항목의 평균 값을 순위로 삼음




상관관계와 공분산






- corr 메서드 : 상관관계 행렬 또는 상관관계 값 리턴, 다중공선성 문제 확인에 사용


- cov 메서드 : 공분산 행렬 또는 공분산 값 리턴


- corrwith 메서드 : 서로 다른 DafaFrame과 Series의 상관관계 계산


※ 다중공선성: 모델 만들때 서로 다른 변수들끼리 높은 상관관계를 가지고 있으면

그 모델 추정시 정확도가 떨어지는 현상




기술통계 계산과 요약



- idxmax 메서드 :

각 축 별 최대 값을 갖는 index 값 리턴


- describe 메서드 :
수치형 데이터일 경우 각 통계 지표를, 문자형 데이터일 경우 요약 통계 반환


- cumsum 메서드 : 누적 합




기술통계와 요약통계 메서드





유일 값, 값 세기, 멤버십



- Unique 메서드 : 중복 값 제거(정렬되지 않음)




in 연산자



in 연산자는 벡터연산이 불가(반복 연산 불가능)


map(lambda)적용으로 벡터연산 수행



isin 메서드



- isin 메서드 : 어떤 값이 Series에 있는지를 불리언 배열 형태로 반환
- Series나 dataframe 컬럼에서 값을 골라내고 싶을 때 유용하게 사용



fillna 함수를 이용하여 비어있는 값 치환



다양한 fillna 치환


fillna 함수는 컬럼별로 다른 값을 치환 할 수 있다.

(치환 할 값을 딕셔너리 형태 {} 로 전달)


method = 'ffill' 옵션을 사용하여 이전 행 값으로 치환 가능.



dropna


- dropna() : 하나라도 NA값이 있는 row 삭제

- dropna(axis=1) : 하나라도 NA값이 있는 colums 삭제

(하나라도 NA가 있으면 컬럼이 날아가기 때문에 위험한 방법)




- how = 'all' : 모든 row가 NA일시에만 row를 삭제하는 옵션


- thresh = n : n개의 누락된 값이 포함된 row를 출력




'Python > iPython' 카테고리의 다른 글

ipython - pandas 2  (0) 2019.02.07
ipython - pandas 1  (0) 2019.02.01
ipython - numpy 2  (0) 2019.01.31
ipython - numpy 1  (0) 2019.01.30


astype과 asarray




> type() : type 함수로 대상의 데이터타입을 확인 할 수 있다.

> dtype : numpy의 메서드로 배열에 저장된 자료형을 알 수 있다.





> asarray : asarray함수는 입력 데이터를 ndarray로 변환하지만,

   입력 데이터가 이미 ndarray인 경우 shallow copy(얕은 복사)현상이 나타난다.


> astype : astype 메서드를 사용하여 데이터 타입을 다른 형으로 명시적 변경이 가능하다.






다양한 색인 방법



↑ 2차원 리스트에서 차원의 축소 없이 0,1,5,6을 출력하기 위한 여러가지 형식




단, 이렇게 정수 색인을 하게 되면 포인트 색인이 되어 인덱싱 값이 (0,0), (1,1)인 원소가 각각 출력된다.




ix_함수를 이용해서도 색인이 가능하다.


단, 색인 값을 리턴하는게 아닌 해당 형식으로 색인을 했을시의 출력 형식을 반환하는 것이기 때문에

출력을 위해서는 배열에 전달해야 한다.




불리언 색인



> 특정 조건의 만족 여부에 따라 논리값(True, False)을 출력하는 색인

> Row값을 활용한 조건만 선택 가능

> 배열에 불리언 색인을 이용해서 데이터를 선택하면 반환되는 배열은 깊은 복사가 이루어 짐

> True, False값으로 반환하기 때문에 한번 더 전달 해 줘야 원본값으로 출력


조건 앞에 '~'를 사용시 해당 값을 제외하고 출력한다.

조건 색인에 논리 연산자 사용 가능.

>  & : and 연산자

>  | : or 연산자





3차원에서의 색인



3차원에서의 색인은 층을 선택 후, 선택한 인자에 순차적으로 색인을 해 주어야 한다.


array[ 층 ] [: , [행의 정수]][: , : , [열의 정수]






배열 전치와 축 바꾸기


배열 전치


> 배열의 행과 열의 구조를 바꾸는 방법

> 색인 데이터를 복사하지 않고 데이터 모양이 바뀐 View(shallow copy가 수행된 객체)를 반환하는 특별한 기능


T 메서드를 사용한 간단한 배열의 전치

단, T메서드는 층 고정이 불가능하다.



* 참고



행렬의 inner product(스칼라 곱)은 dot 함수를 이용하여 간단히 계산이 가능하다.




차원의 숫자 표현


2차원

 

 

 행

 열

 Python

 0

1

 R

1

2


 3차원

 

  Python

 층



 0

1

2

 R

 행



1

2

3




swapaxes와 transpose



> swapaxes(axis1, axis2) : 두 개의 축 번호를 순차대로 받아와서 축을 바꾸는 함수로, shallow copy가 이루어짐

   어떤 두 축을 바꿀 것인지에 대한 명시만 하면 되므로, 함수의 인수에 순서에는 의미가 없음




> 단, 두 개의 인자만 전달 가능.



> transpose(*axes) : 원하는 축 번호를 순차대로 받아와서 축을 바꾸는 함수로 shallow copy가 이루어짐

   transpose는 층(0),행(1),열(2) 순으로 arr2.transpose는 층은 그대로 두고, 행과 열의 배치만 변경






유니버셜 함수(nfunc)
> ndarray안에 있는 데이터 원소 별로 연산을 수행하는 함수

> 하나 이상의 스칼라 값을 받아서 하나 이상의 스칼라 결과 값을 반환하는
   간단한 함수를 고속으로 수행할 수 있는 벡터화된 래퍼 함수




단항 유니버셜 함수


> sqrt나 exp같은 간단한 변형을 전체에 빠르게 적용 가능(단항 유니버셜 함수)





이항 유니버셜 함수


> add나 maximum처럼 2개의 인자를 취해서 단일 배열을 반환(이항 유니버셜 함수)





이항 유니버셜 함수 적용 예시.

두 개의 인자를 취해 단일 배열을 반환한다.





배열 연산으로 조건절 표현 (리스트 내포 포현식, Where)




리스트 내포 표현식

[ 전달할부분 / for / if ]

> 큰 배열을 처리할 경우 느린 속도
> 다차원 배열 사용 불가
> 위의 단점을 where함수를 이용해 보완



=> cond의 값이 참일 때 xarr의 값을, 거짓일 때 yarr의 값을 retrun 함.




where

where(조건 혹은 불리언 배열, 참일때의 return 값, 거짓일때의 return 값)

> x if 조건 else y같은 삼항식의 벡터화 버전
> where함수의 결과는 원본의 배열과 별개(계산된 값만 출력)


=> cond의 값이 참일 때 xarr의 값을, 거짓일 때 yarr의 값을 retrun 함.






성적에 따라 A,B,C를 출력(<= 1000'C',<= 2000'B',>2000'A') 하는 where 사용 예제.






배열 통계 메서드




sum이나 mean같은 함수는 선택적으로 axis인자를 받아 해당 axis에 대한 통계를 계산하고 한 차수 낮은 배열을 반환




R과 파이썬의 행별 열별 연산

파이썬 행 별 연산: 서로 다른 행 끼리

R의 행 별 연산: 같은 행 끼리





sum이나 mean같은 함수는 한 차수 낮은 배열을 반환하기 때문에,

keepdims=True를 사용해 차원을 유지시킬 수 있다.




> cumsum : 각 원소의 누적 합


> cumprod : 각 원소의 누적 곱

 - axis=로 방향 설정 가능.




> max : 최대값
> min : 최소값


> argmax : 최대원소의 '색인 값' 을 리턴
> argmin : 최대원소의 '색인 값' 을 리턴









불리언 배열 메서드



> sum : True인 원소의 개수 반환

> any : 하나 이상의 True 값이 있는지 검사

> all : 모든 원소가 True인지 검사




정렬


> list처럼 sort 메서드를 사용한 정렬 가능

> 배열을 직접 변경



as.sort(0) : 열 고정, 서로 다른 행 끼리 정렬 = 행 별 정렬 수행

as.sort(1) : 행 고정, 서로 다른 열 끼리 정렬 = 열 별 정렬 수행






분산 구해보기(var을 사용하지 않고)




ex) 1, 3, 5의 분산 구하기
1, 3, 5의 평균 = 3
(1-3)^ + (3-3)^ + (5-3)^/3 = 1,3,5의 분산




자유도 ddof



자유도(n-1)에 따라서 var로 구한 분산의 값이 달라짐




자유도 설정은 ddof= 로 지정 가능하다.




'Python > iPython' 카테고리의 다른 글

ipython - pandas 3  (0) 2019.02.14
ipython - pandas 2  (0) 2019.02.07
ipython - pandas 1  (0) 2019.02.01
ipython - numpy 1  (0) 2019.01.30


* Numpy


> 과학계산, 데이터 분석에 필요한 기본 패키지

> array구조를 지원하기 위한 모듈

> 단 하나의 데이터 타입만 허용

-> 불필요한 데이터 검증이 사라져서 수치 계산시 속도 측면 유리

> 수학적 벡터연산 일부 제공(단, 문자치환은 불가)

-> 반복문 작성 필요 없이 빠른 연산 가능

> 선형대수, 난수 발생기, 푸리에 변환 가능

> -C, C++, 포트란으로 쓰여진 코드를 통합하는 도구




Numpy ndarray


> n차원의 배열 객체 또는 ndarray로 파이썬에서 사용할 수 있는 대규모 데이터 집합을 담을 수 있는 빠르고 유연한 자료 구조

> 배열의 산술 연산 기능

> ndarray의 모든 원소는 같은 자료형




> shape : 배열의 차원의 크기를 알려주는 메서드

> dtype : 배열에 저장된 자료형을 알려주는 메서드





ndarray 의 자료형

> array로 배열 생성 시 dtype을 명시하면 명시된 데이터 타입으로 변경되어 생성됨


> 각 데이터 타입의 숫자의 의미 : 하나의 원소가 차지하는 비트 수

-> 주로 대용량 데이터가 메모리나 디스크에 저장되는 방식을 제어할 필요가 있을 경우 사용 *생략가능







Ndarray의 생성 방법




numpy 모듈 가져오기

import numpy


dir(numpy)로 numpy에서 제공해주는 메소드를 볼 수 있다.



numpy에서 제공해주는 array생성 방법


ipython에서는 수학적 벡터연산도 일부 지원해준다.




ipython 에서는 배열의 크기가 일치하지 않더라도 반복 적용이 가능하다.


R : 서로 다른 크기를 갖는 배열이 더해지더라도 더 적은 수의 배열을 갖는게 반복됨

Python : 위 내용 불가능





메뉴얼 출력




함수명 뒤에 ? 를 붙여 실행함으로써 함수의 메뉴얼을 볼 수 있다.




함수명??를 이용해 함수의 소스도 볼 수 있다.





메서드명? 를 입력시 함수가 아니기 때문에 도움말 호출이 불가능하다.




단, array.메소드명 형식으로 출력할 시 메소드의 메뉴얼도 출력이 가능하다.







2차원 구조의 생성과 인덱싱 색인 방법




reshape를 통해 다차원 구조의 array를 생성 할 수 있다.

arange는 np의 함수,

reshape는 제공되는 모듈이다.




array[행 , 열]


array[1, : ] : 행의 인덱스가 1인 값(2행) 출력

array[ : ,3] : 열의 인덱스가 3인 값(4열) 출력

array[ : , :2] : 열의 인덱스가 2 미만인 값(1,2열) 출력

array[2,2] : 행의 인덱스가 2, 열의 인덱스가 2인 값(3행3열) 출력

array[1,1] = 10 : 단일 차원과 마찬가지로 해당 값에 10을 삽입.



array구조에서도 슬라이스 색인이 가능하다.

전체 구조에서 열의 인덱스가 1, 3인 값을 묶어서 출력하고 싶을 시

array[ : , [ 1, 3]] 으로 출력한다





broadcast 규칙



> 동일한 크기를 갖는 사이즈가 존재한다면 작은쪽의 배열을 큰쪽에 맞춰 반복 처리

   - arr1은 2*5, arr1[0]은 1*5구조이기 때문에 arr1[0]의 배열을 arr1에 맞춰 반복적으로 처리.


> 사이즈가 일치하는게 있지만, 서로 다른 방향이라면 불가능.
   - 행은 행끼리, 컬럼은 컬럼끼리


   * 해결방법

> reshape 사용

> 차원의 축소를 방지하는 슬라이스 색인 사용





3차원 구조 생성과 인덱싱



np.arange().reshape(층 지정, 행 지정, 열 지정) 으로 생성 가능하다.



array[0] : 층의 인덱스가 0인 값(1층) 출력

array[ : , 0] : 각 층마다의 인덱스가 0인 값(1층) 출력

array[ : , 0:1, 0:1] : 차원을 유지하며 각 층의 인덱스가 0인 값(1층) 출력





zeros , ones, empty



> np.zeros 함수 : n개 혹은 주어진 크기의 0을 갖는 배열 생성

> np.ones 함수 : n개 혹은 주어진 크기의 1을 갖는 배열 생성

> np.empty 함수 : 주어진 크기의 초기화 되지 않은 배열 생성



view와 copy메서드

> view : deep copy기 수행되지 않은 객체


같은 메모리 영역을 공유하기때문에 한쪽만 수정해도 양 쪽 모두 변경된다.
다른 이름을 사용할 뿐 사용하는 메모리 공간은 동일


view 대신 복사본을 얻고 싶다면 copy 메서드를 사용해야 한다.



> copy : 명시적으로 배열을 복사해주는 메서드



아까와 다르게 aa1까지 수정되지 않음.









'Python > iPython' 카테고리의 다른 글

ipython - pandas 3  (0) 2019.02.14
ipython - pandas 2  (0) 2019.02.07
ipython - pandas 1  (0) 2019.02.01
ipython - numpy 2  (0) 2019.01.31

+ Recent posts