사용자 모듈 만들기



1. 파이썬이나 메모장(확장자 변경 필요함)에서 모듈 작성



2. 해당 위치에 py 확장자로 저장



3. %run으로 모듈 실행



4. 잘 작동되나 확인






컬럼의 추가



일반적인 방법 (존재하지 않는 컬럼을 색인 하는 형식)



ix(loc) 를 사용한 컬럼 추가




이름 부여하기





index 수정



python의 index는 일부만 수정이 불가능하다.



일부만 수정



1. 전체 index 수정(비권장)




2. index를 list형식으로 만들어 list 수정 후 index에 덮어 쓰기(권장)






재색인(reindex)



색인 메서드와 속성





reindex를 사용하지 않는 기존의 재색인 방법



1. DataFrame을 이용한 컬럼 재배치(비권장)

   - reindex기능을 가지고 있다.



DataFrame기능을 이용한 컬럼 재배치는 위치기반 색인 불가능.





2. ix(loc)메서드를 사용한 재배치



ix메서드를 사용한 컬럼 재배치는 위치기반 색인 가능.




3. 순서 전달 재색인

   - reindex기능은 없음.



reindex

- 새로운 색인에 맞도록 객체를 새로 생성하는 기능이다
- 사용자 지정 순서 정렬이 가능
- 원하는 데이터만 출력, 새로운 데이터의 추가가 간편하다
- 행과 컬럼 둘 다 적용 가능
- index 값으로 기존 Series 재 배치
- 존재하지 않는 색인 값이 있다면 빈 값을 새로 추가




reindex를 사용한 재배치.

존재하지 않는 색인값을 삽입시 NaN출력.



DataFrame도 reindex 기능을 포함하고 있다.



fill_value : 존재하지 않는 색인의 값을 지정해 치환


method : 빈 값을 채워 넣는 옵션 선택 가능
- ffill 또는 pad : 앞의 값으로 채워 넣는다
- bfill 또는 backfill : 뒤의 값으로 채워 넣는다





하나의 로우 또는 컬럼 삭제하기(drop)


- 삭제하려는 로우나 칼럼이 제외된 리스트를 이미 가지고 있다면 이를 이용한 삭제 가능
- drop 메서드를 사용하면 선택한 값이 삭제된 새로운 개체를 얻을 수 있다
- 원본 배열을 변경하지 않는다
- 기본은 로우에 대한 삭제이므로 컬럼 삭제 시 축 지정 필요



drop을 이용해 지정한 index 삭제




drop을 이용해 지정한 컬럼 삭제(axis로 방향 지정)





색인, 선택, 자르기



Series의 색인

- NumPy 배열의 색인과 유사하게 동작하는데, Series의 색인은 정수가 아니어도 된다는 점이 다름
- 라벨 이름으로 슬라이싱하는 것은 시작점과 끝점을 포함한다는 점이 일반 파이선에서 슬라이싱과 다른 점


라벨 이름으로 슬라이싱 색인 가능




DataFrame의 색인

- 컬럼 색인 가능


컬럼 이름으로 색인 가능.



슬라이싱으로 로우 선택 가능.



불리언 배열로 컬럼 선택 가능.



ix(loc)메서드를 이용하여 컬럼과 row에 대한 색인 동시 가능.




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

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



*

pandas



> 고수준의 자료 구조를 다루는데 적합한 여러 가지 함수 제공
> 파이썬을 통한 빠르고 쉬운 데이터 분석 도구를 포함
> 고성능의 과학계산 컴퓨팅과 데이터 분석에 필요한 기본 패키지





Series



> 일련의 객체를 담을 수 있는 1차원 배열 같은 자료 구조
> 어떤 numpy자료형도 담을 수 있음
> 색인이라고 하는 배열의 데이터에 연관된 이름을 가지는 구조
> series 객체의 문자열 표현은 왼쪽에 색인을 보여주고 오른쪽에 색인값을 보여줌
> 데이터 색인 디폴트 : 기본 색인인 정수 0에서 N-1까지 숫자 표시
> series의 배열과 색인 객체는 각각 values와 index속성을 얻을 수 있다



import pandas 로 pandas 호출




Series 생성하기




Series의 배열과 색인 객체는 각각 values와 index 속성을 통해 얻을 수 있다.



각각의 데이터를 지칭하는 색인을 지정해 Series 객체를 생성하는 경우는 값과 index를 지정 가능



Series는 index의 개념을 두가지로 해석


> 1. key를 가지고있지 않은 대상에게 index를 쓰면 차례대로 해당 key부여
> 2. 이미 key값이 있는 Series에 index를 쓰면 매칭되는 키를 출력하라는 명령(이름을 부여하는게 아님)




Series는 색인을 이용한 접근이 가능하다.







Series - 2


> Series는 고정 길이의 정렬된 딕셔너리 형태

> 파이썬의 딕셔너리를 인자로 받아야 하는 많은 함수에서 딕셔너리를 대체 사용 가능
> 파이썬 딕셔너리 객체로부터 Series 객체 생성 가능
> 리스트 객체나 array 객체도 Series 객체로 가능하나 index 값이 없음



이미 생성되어진 딕셔너리 형태의 객체를 Series로 변환하면 자동으로 key 값으로 정렬되어 저장됨.


=> 기존 데이터에 index 값을 지정하여 index 순서대로 선택 출력 가능.
     매칭되지 않는 index 값은 NaN으로 표시되며 누락된 값 또는 NA로 취급된다.




NA 값 삽입하는 법




NA 를 삽입하면 문자열로 들어가기 때문에 np.nan을 사용해 삽입한다.




isnull과 notnull 함수를 사용하여 Series객체에 저장되어 있는 NA 값의 존재 여부 확인 가능.

isnull은 Series의 메서드로도 제공됨.

함수에 any (하나 이상의 True 값이 있는지 검사해주는 메서드)사용시 NA값이 하나라도 있을시 True(False)반환


pd.isnull : NA값을 True로 반환

pd.notnull : NA값을 False로 반환




series의 산술연산


> Series의 산술연산은 각 색인 값 끼리 연산된다
> NaN 값의 산술연산의 결과는 항상 NaN
> 모든 Series 객체에 존재하는 index value에 대해서만 연산 가능, 그렇지 않으면 NaN 값 반환




같은 key가 매칭되는 색인 값 끼리의 산술연산 시행.



Series객체와 Series의 색인은 name을 지정할 수 있다.
Series의 색인은 대입을 통해 변경할 수 있다.






DataFrame



> * dataframe의 키는 컬럼이다

> 각 컬럼은 서로 다른 타입의 값을 담을 수 있다

> Dataframe에서의 로우 연산과 칼럼 연산은 거의 대칭적으로 취급

> 내부적으로 2차원 형식으로 저장 -> 고차원 표 형식 데이터를 계층적 색인을 통해 표현

> 같은 길이의 리스트가 담긴 사전, numpy배열을 이용하여 주로 생성



DataFrame의 생성


만들어진 dataframe은 각 행의 번호가 색인형태로 자동으로 대입(0,1,2 순...)

만들어진 dataframe은 컬럼 이름별로 자동으로 정렬




DataFrame구조에서 컬럼 이름을 통한 색인 가능.




컬럼 이름을 순서대로 나열해 컬럼배치 재설정 가능(이름 지정 아님)


※ 이름 지정은 index를 이용하여 행의 이름 변경 가능.

 - 매칭되지 않는 컬럼을 넘길 경우 NA값이 저장.




> index : row의 이름 출력

> columns : 컬럼 이름 출력






컬럼의 색인



1. 하위 호출(df.keyname)


2. 이름 전달(df['keyname'])


3. 색인 메서드 사용(loc,iloc)




loc, iloc등의 색인 메서드 사용으로도 호출할 수 있다.

(ix를 사용하면 row우선순위, 사용하지 않으면 column 우선순위)


ix 메서드로 row 이름을 가지고 특정 row에 해당 하는 값만 출력, 행과 열에 대한 간결한 재색인이 가능했으나

현재 warning메시지가 뜨는 메서드이기 때문에 라벨색인(라벨이 하나라도 존재할때)은 loc, 정수색인은 iloc를 사용한다.




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

ipython - pandas 3  (0) 2019.02.14
ipython - pandas 2  (0) 2019.02.07
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


Python R처럼 벡터연산이 되지 않는다



list+int 연산의 오류라 list+list는 가능할 줄 알았는데, 불가능하다.

 

lambda 라는 기법을 통해 사용자 정의함수 생성

 - 간단한 인풋과 아웃풋 처리

문법 : >>> lambda input : output

 

-IN Python-

f1 = lambda x : x+10

 

- IN R-

f1 <- function(x) {

return(x+10)

}

 

적용함수

- apply : 행별, 컬럼별 연산(그룹연산)

- map  : 원소별 연산( in R = sapply )


map(func, iterrables) --> map object

 


원소별 적용을 하기 위해 map 함수 사용

but, 데이터내에만 저장. 바로 출력되지 않으므로 출력 형식 지정



list()로 형식을 지정해주니 의도한대로 출력된다.


map 사용과 미사용의 차이


 

형 변환 함수


int : 숫자로 변경할 수 있는 문자를 숫자형으로 변경

str : 숫자, 날짜 등을 문자형으로 변경

 

l1리스트를 [01,02,03] 형식으로 변경하기


-> 포맷 변환 사용



-> 형 변환 사용



실습문제


#다음의 리스트를 생성
l1 = [1,2,3,4]
l2 = [10,20,30,40]
l3 = [1.567, 2.456, 5.342, 5.534]


1. l1을 소숫점 둘째자리로 표현

f1 = lambda x:"%.2f" % x
list(map(f1,l1))


['1.00', '2.00', '3.00', '4.00']

※ 출력결과를 int로 바꾸는건 차후 학습예정

2. l3을 정수자리로 표현(버림)

import math
f2 = lambda x:math.trunc(x)
list(map(f2,l3))


[1, 2, 5, 5]

3. l1 + l2 계산

f3 = lambda x,y: x+y
list(map(f3,l1,l2))


[11, 22, 33, 44]

4. l2의 l1승 출력, 10^1, 20^2, 30^3, 40^4

f4 = lambda x,y: x ** y
list(map(f4,l2,l1))


[10, 400, 27000, 2560000]




'Python' 카테고리의 다른 글

Python 설치 & 기초 조작  (0) 2019.01.22


파이썬 다운로드 링크

https://www.python.org/downloads/windows/




파이썬(기본) + 필요 모듈 설치...(pip install 모듈명)

 

[ ipython ]

기본 파이썬 +

데이터 분석용 파이썬

기본적인 전처리 수행, knn, random forest등 제공

 numpy - 배열구조

 pandas - data frame 구조

 sklearn - 분석 알고리즘제공

....

 

tensorflow - deep learning 구현

keras - deep learning 구현

 


원소 삽입

a = (1, 2, 3)

리스트 삽입 ( list : 무언가를 여러개 담기 위한 자료구조)

a = [1, 2, 3]


위치 색인 가능. R과는 다르게 첫 값을 색인하려면 '0'


슬라이스 색인은 R과 비슷

list(n:m) : n ~ m-1 까지 추출


** 슬라이스 색인을 사용하면 차원의 축소가 일어나지 않음 - 리스트형식 그대로 출력.

 

여러개를 동시에 저장하고자 하는 자료구조

> R에서의 벡터 , python에서의 리스트

python에서는 리스트 안에 또 다른 리스트가 들어감.


위와 같은 벡터연산(R) 불가능(대체적으로)

(ex 문자열 치환)

-> 원소 적용함수 반드시 필요. (apply는 반드시 하지 말자)




포맷 변경 구문 : "리턴 포맷" % (원본대상)

# 포맷의 종류 : %d(정수), %s(문자열), %f(실수)


round : 반올림 계산 함수 (내장 함수)


math.trunc : 버림 계산 함수 (math 모듈)


안에있는 모듈 하위의 내부 함수 호출하기

 

텍스트 다루기

여러 줄로 이루어진 문자열은 '''또는 """ (작은따옴표or큰따옴표 세 개)쌍으로 텍스트를 감싸 표현


텍스트의 이어붙이기(but, 구분기호는 지정불가)





'Python' 카테고리의 다른 글

Python 적용함수  (0) 2019.01.22

+ Recent posts