반응형

인수 (factor) :

문자형 데이터를 저장하는 새로운 방식의 프레임워크를 제공한다.

수준(level):

특정한 값만을 포함하는 특별한 벡터이다.

 

factor() 함수의 levels옵션을 이용해 새로운 수준값을 인수에 추가해야 한다.

 

다차원 배열:

일반 백터를 생성 한 후 차원들을 부여해 만들어진다.

array() 

일반 벡터는 1차원 배열로 

dim() 다차원 배열로 바꾸려면

 

행렬(matrix)은 2차원 배열의 특별한 경우로 주로 matrix()함수 이용

nrow

ncol

cbind() rbind()

 

dimnames()

rownames()

colnames()

 

is.array()

is.matrix()

 

데이터프레임

data.frame()

as.data.frame()

stringAsFactors 옵션

stringAsFactors= FALSE  지정하지 않으면 문자열을 포함한 열들을 인수로 변환해 저장한다.

transform()함수를 사용해 문자형으로 저장하고 싶은 열들을 지정하려면 as.character()또는 as.factor()함수를 사용하면 된다.

 

 

R로 데이터 로드하기

install.packages()

library()또는 require()

getwd() 파일 입출력의 기본이 될 위치를 알 수 있다.

setwd() 위치 변동

 

데이터프레임 저장하기

write.table() 함수

write.csv()

 

기본도표 및 ggplot2패키지

히스트그램 과 선점도

hist()

plot()

curve()함수를 사용하면 단변량 수학 함수의 그래프를 from과 to값으로 지정된 구간에서 작성할 수 있다.

expr인수는 수치 벡터 또는 수치 벡터를 리턴하는 함수를 출력물로 지정할 수 있게 해 준다.

pie()함수로 원형 차트를 그릴 수 있다.

boxplot()함수를 이용하면 상자그림을 그릴 수 있다.

 

 

제어문

for(i in vector){commands}

 

apply()함수를 행렬 또는 배열에 대해 행 방향이나 열 방향으로 , 또는 양 방향으로 반복적으로 함수를 적용할 수 있게 해주는데 , for()루프에 대한 좋은 대안이 된다.

apply()  두번째 인수인 MARGIN의 값이 1인 경우는 행 방향으로 , 2인 경우는 열 방향으로 , c(1,2) 인 경우에는 양 방향으로 지정된 함수를 반복 적용한다.

  FUN: 마지막 인수 함수 mean()이나 function(x) x+3

 

if문

if(condition){commands}

else if(condition){commands}

else{commands}

 

while()루프

while(condition){commands}

 

repeat{}, break문

repeat{commands} while와 유사한데 , break문을 포함시키지 않으면 계속 코드를 문한히 반복 실행하게 된다.

 

함수 function

특정 작업을 수행하고 그 결과를 출력하거나 객체 형태로 리턴해 주는 짧은 코드들을 의미한다.

help()함수로 함수 내용을 확인한다.

??mean

na.rm = TRUE

반응형

' > 빅데이터 통계분석과 R' 카테고리의 다른 글

04  (0) 2021.01.01
03  (0) 2020.12.30
01  (0) 2020.12.20
반응형

데이터 분석이나 머신 러닝에서 많이 사용하는 페키지

=>백터 연산을 수행하기 때문에 요소 각각에 연산을 수행하는 경우 기존의 list,tuple, set에 비해서 연산 속도가 빨라서 머신러닝이나 딥러닝에서 사용

=>자료구조 패키지: numpy, pandas- 데어터를 만들고 수집하고 가공하는 페키지

=>시각화 패키지: maptlotlib, seaborn, pandas, folium(지도 , 단계구분도)

=>통계 : scipy

=>머신러닝: sklearn

=>머신러닝, 딥러닝:tensorflow, keras, pytorch

 

 

=>numpy ndarray가지고 하는 일들은 대부분 list로도 대체 가능

 

ndarray -> 배열이라고 부르기도 한다.

 

python  list 자료구조

list: 순차적 연산

ndarry : 백터 연산 하나하나 씩 연산해서 속도가 빠르다.

 

 

pythoniterator 객체는  __iter__

iterator:순선대로 데이터 접근이 가능한 데이터의 모임

 

**numpy

=>고성능 과학 계산이나 선형대수를 위해서 제공되는 패키지

1.ndarray - numpy가 제공하는 데이터의 모임(자료구조)

=>백터 연산을 수행하기 때문에 요소 각각에 연산을 수행하는 경우 기존의 listtuple, set에 비해서 연산속도가 빨라서 머신러닝이나 딥러닝에서 사용

 

1)기본적인 생성

=>ndarray((행의 수 (,....))):데이터의 개수를 직접 지정해서 생성, 권장하지 않음(생성자)

=>array(iterator):기존의 데이터의 모임을 가지고 생성

생성할 떄 dty[e매개변수를 이용해서 데이터 각각의 자료형을 지정 가능

dtype을 설정하지 않으면 자료형을 유추해서 생성

 

2)구조 파악을 위한 속성

=>dtype : 각 요소의 자료형

=>ndim 배열의 차원

=>shape: 각 차원의 크기를 tuple로 리턴

=>size: 데이터 개수

=>itermsize: 각 요소의 메모리 크기

=>nbytes: 전체 메모리 크기

 

 

3). 실습

#작업 중인 디렉토리

 

import os

print(os.getcwd())

 

#save as해서 다른데로 이동하면 이파일과 상관없이 다른데로 이동한다.

#현재 작업 디렉터리는 변할 수 있다.

 

#numpy import

#numpy np라는 이름으로 사용

import numpy as np

 

#list

li = [100, 300, 200]

#print(dir(li))

ar = np.array(li)

print(ar)

 

tu = (100, 200)

#print(dir(tu))

ar = np.array(tu)

print(ar)

 

#2차원 배열

ar = np.array([[100,200,300],[400,500,600]])

print(ar)

 

#서로 다른 자료형의 데이터가 모여 있으면 동일한 자료형으로 변경합니다.

ar = np.array([['100',200,300],[400,500,600]])

print(ar)

#각 요소의 자료형

print(ar.dtype)

 

#dtyped을 설정해서 정수 배열로 만들기

ar = np.array([['100',200,300],[400,500,600]],dtype=int)

print(ar)

#각 요소의 자료형

print(ar.dtype)

 

 

print(ar.ndim) # 전체 차원을 리턴

print(ar.shape) # 각 차원의 데이터 개수를 튜플로 리턴

 

 

2.일정한 숫자 패턴을 이용한 생성

=>arrange(start, stop, step, dtype)

start부터 stop 바로 앞까지 step간격으로 생성하고 자료형은 dtype으로 설정

start는 생략가능한데 생략하면 0

step은 생략 가능한데 생략하면 1

dtype은 생략하면 정수

 

 

=>linspace(start, stop, num = 50 , endpoint = True, retstep = False, dtype = None, axis = 0)

start부터 stop까지는 num의 개수를 일정한 간격의 배열을 만들어서 리턴

axis는 축 - 01을 변경하면 축의 방향이 변경됩니다.

              0 이 행이면 1은 열 , 0이 열이면 1은 행

 

#linspace는 기본적으로 stop이 포함됩니다.

#마지막 숫자를 제거하고자 하면 endpoint() false로 설정

ar = np.linspace(0,10,num = 11)

print(ar)

 

 

 

행이나 열이나 drop(0 ,axis = 1)

 

3.특수 행렬을 위한 array(배열) 생성

=>zerosones라는 함수를 이용해서 0이나 1로 채워진 함수를 생성할 수 있음

=>zeros_likeones_like함수는 배열을 매개변수로 받아서 그 배열의 모든 요소를 0이나 1로 채워진 배열을 리턴

=>emptyempty_like는 초기화하지 않은 값으로 배열을 생성

 

int a:

java는 변수가 아니다. 동적 실행

 

 

 

int a ; a

a = 10   a=10

공간만 확보해서 의미 없는 값만 넣는 것이다.

 

=>eye함수는 단위행렬 - 대각선 방향으로 1이 채워진 배열

이 함수에 매개변수로 열의 개수 나 k라는 매개변수로 이용해서 대각의 위치를 설정

 

1 0 0

0 1 0

0 0 1

 

k = 1

0 1 0

0 0 1

0 0 0

 

=>행과 열 수 가 같은 행렬(정방행렬)을 매개변수로 받아서 대각 요소만 가지고 다시 배열을 만들어 주는 diag도 있음

 

=>이런 함수들을 이용해서 직접 배열을 생성해야 하는 경우는 드물고 라이브러리들이 내부적으로 이러한 배열들을 생성

 

 

희소 행렬 : 0 이 대부분이고 1이 드문 행렬

 

0 0 0 0 1

0 0 0 0 0

0 0 1 0 0

0 0 0 1 0

 

4* 5 행렬이고 [(0,4), (2,2),(3,3)]

 

 

class 1 2 3 .. ->카테고리(범주형 )

 

원핫 인코딩

1 2 3

1 0 0

0 1 0

0 0 1

 

 

 

#단위 행렬 마들기(대각선 방향의 요소만 1인 행렬)

#정방 행렬 - 1 행과 열의 개수가 같은 행렬

#단위 행렬은 정방행렬이어야 합니다.

 

#크기가 3인 단위 행렬 생성

ar = np.eye(3)

print(ar)

#1의 위치를 1개 증가

ar = np.eye(3, k = 1)

print(ar)

#대각 요소만 뽑아서 1차원 배열을 생성

ar = np.diag(ar)

print(ar)

 

4.희소 행렬(Sparse Matrix)

=>0이 아주 많고 다른 데이터가 드문 행렬

=>반대되는 행렬은 밀집행렬(Dense Matrix) -배열을 Dense List라고 하기도 합니다.

=>scipy패키지의 sparse모듈을 이용해서 생성

csr_matrix라는 함수에 ndarray를 대입하면 됩니다.

=>밀집행렬로 변환하고자 할 때는 toarray()를 호출하면 됩니다.

=>넷플릭스와 같은 곳에서 고객이 본 영화를 행렬로 만든다면 고객은 거의 모든 영화를 보지 않았을 가능성이 큽니다.

밀집행렬로 만들게 되면 메모리 부담이 큼

이런 경우는 고객이 본 영화의 대한 부분만 저장하면 부담이 적습니다.

이런 경우에 희소행렬을 이용합니다.

 

#최소 행렬과 밀집 행렬 변환

import numpy as np

#scipy sparse모듈 가져오기

from scipy import sparse

 

#5 * 5 단위 행렬 생성

ar = np.eye(5)

print(ar)

 

#희소 행렬과 변환 - 0이 아닌 값의 위치와 값을 저장

sp = sparse.csr_matrix(ar)

print(sp)

 

 

 

5.ndarray의 자료형

=>생성할 때 dtype매개변수로 설정 가능

=>dtype속성으로 확인 가능

=>생성한 후 astype 함수를 호출해서 자료형을 변경할 수 있음

=>정수 자료형 : int8 , 16, 32, 64, unint8 , 16, 32, 64

unit는 음수가 없는 자료형

=>실수 자료형 : float 16 , 32, 64, 128

=>복소수 자료형 :complex64,128, 256

=>bool

=>object: 기본 자료형 이외의 클래스로부터 만들어진 인스턴스

=>string_ : 문자열

=>unicode_: 유니코드 문자열

 

 

6. 행렬 변환

1)reshape()행렬의 차원이나 크기를 변경할 떄 사용, 차원을 변경할 때는 튜플로 각 차원의 개수를 설정하면 됩니다.

-1을 대입하면 1차원 배열로 만들어 집니다.

 

2)flattern함수를 이용하면 다차원 배열을 1차원 배열로 변환해주는 함수

 

3)reshape는 배열을 변경하는 것이고 flattern은 새로운 배열을 만들어서 리턴해주는 함수

 

#행렬의 차원 변환

ar = np.arange(0 ,10)

print(ar)

 

#행은 2개열 5개 배열로 변환

print(ar.reshape(2,5))

 

7, 배열의 요소 선택

1)1차원 배열의 경우는 list와 유사

=>배열명[인덱스]를 이용하면 인덱스 번째 데이터 리턴

=>인덱스에 음수를 리턴하면 뒤에서부터 순서대로 접근해서 데이터 리턴

=>배열명[시작위치:종료위치]를 이용하면 시작위치부터 종료위치 앞까지 데이터를 리턴 시작위치를 생략하면 0 종료 위치를 생략하면 len(배열) 처럼 마지막 인덱스 뒤

:만 입력하면 전체

 

 

2. 다차원 배열

=>[인덱스][인덱스] 형태처럼 인덱스를 설정해도 되고 [인덱스 , 인덱스 ]로 설정해도 됩니다.

=>인덱스를 생략하면 전체가 됩니다. [][인덱스]하면 행 전체

[인덱스][]하면 열 전체

 

 

 

3)인덱싱을 이용해서 가져온 데이터들은 링크가 전달

복제를 하고자 하면 copy()를 호출

 

numpy는 분석할려고 하는 것이 아니다. 과학 기술 개선할라고 만들어진 라이브러리이다.

R

그 외의 언어

분석

프로그램 개발

 

복제도 있고 원본에 작업 도 함

데이터 작업이 전부 copy

파이썬의 분석 라이브러리

대표적인 것 : pandas

 

 

 

 

#인덱싱과 copy

import numpy as np

ar = np.array([100,200,300,400])

 

br = ar[0:2]

print(br)

 

#0-1 번 까지 요소를 br에 링크를 전달

br = ar[0:2]

print(br)

 

#원본 데이터를 변경 - ar의 데이터를 변경하면 br의 데이터도 변

ar[0]  = 10000

print(br)

 

 

#데이터를 복사해서 전달

cr = ar[0:2].copy()

print(cr)

 

#원본을 변경하면 br은 변경되지만 cr은 변경 안됨

ar[0] = 1300

print(br)

print(cr)

 

 

 

 

8.Fancy Indexing

=>list를 이용해서 인덱싱

=>Fancy Indexingcopy를 생성

배열명[[인덱스 나열]]의 형태

=>2차원의 경우에는 ix_ 라는 함수를 이용해서 Fancy Indexing 이 가능

배열명.ix_(행의 list,열의 list)

 

#import numpy as np

#쓰게기 값을 가지고 배열을 생성

#ar = np.empty((10,5))

ar = np.empty((10,3))

print(ar)

 

#행들을 선택 - 0,1,3,5 선택-copy

br = ar[[0,1,3,5]]

print(br)

 

 

#현재는 같은 값을 가지고 있음

print(ar[0,0])

print(br[0,0])

 

ar[0,0] = 90

 

#copy 되었으므로 ar 데이터가 변경되더라도

#br 데이터는 영향을 받지 않음

print(ar[0,0])

print(br[0,0])

 

 

#3,5 행과 0,2 열의 데이터 추출

cr = ar[[3,5],[0,2]] #3,0 5,2번만 추출

print(cr)

 

#3,5번행 그리고 0,2 열을 선택

dr = ar[np.ix_([3,5],[0,2])]

print(dr)

 

 

 

 

 

9.행과 열 전치(Transpose)

=>행과 열의 위치 변경하기

=>2차원의 경우는 T라는 속성으로 변경

=>transpose()는 함수를 이용할 수 있는데 이 함수는 매개변수로 축의 순서를 list로 전달 받습니다.

2차원의 경우는 생략하면 행과 열을 변경

3차원 부터는 달라진다.

3차원의 경우는 행, , 면의 순서를 listㄹ 설정할 수 있습니다.

#행과 열의 순서 변경

ar = np.arange(0,16)

print(ar)

 

 

#2차원 배열로 변환

br = ar.reshape(4,4)

print(br)

#행렬 변환

print(br.T)

print(br.transpose())

 

#3차원으로 변환

cr = ar.reshape((2,2,4))

print(cr)

 

#4,2,2 로 변경

print(cr.transpose())

#2,4,2로 변경

print(cr.transpose(0,2,1))

 

10.python에서 함수 생성

1)일반적인 함수 생성

#매개변수 없을 수 있음

def 햠수이름(매개변수 이름 나열):

           함수 내용

           return 데이터 #생략 가능

 

2)람다 함수 - 1줄 짜리 이름없는 함수

lambda매개변수 : 함수 내용

 

 

11.배열의 모든 요소에게 함수를 적용한 후 그 결과를 리턴받기

1)for를 이용해서ㅓ 배열의 모든 데이터를 순회하면서 적용

 

2)numpy vectorize를 이용

=>numpy.verctorize(함수내용)을 호출해서 백터화된 함수를 만들고 이 함수에 배열을 대입하면 함수를 수행한 결과를 가지고 배열을 생성해서 리턴해 줍니다.

=>이 방법은 for를 이용해서 구현 했기 때문에 속도가 빠르지는 않음

 

3)함수는 매개변수가 1개이고 반드시 리턴을 해야 합니다.

매개변수는 배열의 각 요소가 대입되고 리턴을 받을 것을 가지고 새로 배열을 만들어야 하기 때문입니다.

 

java에서는 class안만들고 클래스 하는 것 annonymous ->lambda

 

 

#배열의 모든 요소에게 함수를 적용해서 새로운 배열 만들기

ar = np.arange(0,5)

#위의 배열에  전부 5를 더한 결과를 가지고 새로운 배열을 생성

def plus5(x):

    return x +5

 

#백터화된 함수를 생성

#vec_func = np.vectorize(plus5)

#람다 함수 이용

#람다 사용한 원인 함수 만들고 하는 것보다 람다가 더 좋다.

#쓰기는 어렵지만 더 좋다.

vec_func = np.vectorize(lambda x: x+5)   

 

 

#백터화된 함수를 적용

result = vec_func(ar)

print(result)

 

12.연산자 오버로딩

=>파이썬이 제공하는 연산자를 클래스 안에서 다시 정의 해서 사용하는 것

=>__함수이름__를 재정의를 하면 연산자를 사용할 수 있도록 해줍니다.

대표적인 예가 __add__(a,b)메소들르 재정의하면 +연산을 사용할 수 있습니다.

__sub__ 메소드를 재정의 하면 - 연산을 사용할 수 있습니다.

__iter__메소드를 재정의하면 for를 사용할 수 있습니다.

=>dir로 확인한 속성이나 메소드 중에서 __로 시작하는 것들은 이름을 직접 호출하는 것이 아니고 다른 방시긍로 호출해야 합니다.

python에서 __로 시작하는 것은 객체 지향 언어의 private에 해당합니다.

 

 

13.ndarray 의 연산

1)동일한 차원을 갖는 array의 연산

=> 산술 연산 , 비교연산(>,>=,<. <= ,==, !=) , 할당 연산(+=, -=, *= , /=) 을 수행할 수 있음

=>위치가 동일한 데이터 끼리 연산을 해서 연산을 수행ㅇ한 배열과 동일한 차원의 동일한 크기의 배열을 리턴

 

 

=>numpy.logical_and(a,b) : a 배열의 원소와 b배열의 원소가 모두 true이면 true  지울때

=>numpy.logical_or(a,b): a배열의 원소와 b 배열의 원소가 모두 False이면 False그렇지 않으면 True 삽입할 때

=>numpy.logical_xor(a,b): a배열의 원소와 b 배열의 원소가 같으면 False 다르면 True 비교할 때

=>차원도 같아야 하지만 데이터의 개수도 같아야 합니다.

and , or , not 이 빠르다.

 

 

#동일한 차원에 동일한 크기의 배열 연산

#각 요소마다 연산해서 동일한 크기의 배열로 리턴

import numpy as np

 

ar = np.arange(1,6)

#100부터 105까지 5개로 분할 하는데 마지막 숫자는 미포함

br = np.linspace(100,105, num = 5, endpoint = False)

 

print(ar)

print(br)

 

#덧셈 => 숫자 배열

result = ar + br

print(result)

#두개 다 1 5열 배열로 리턴한다.

 

#크기비교 => bool배열

result = ar > br

print(result)

#논리 연산 0이 아닌 숫자는 True

result = np.logical_xor(ar, br)

print(result)

 

 

2)차원이 다른 크기의 연산 - broadCAST연산

=>배열과 scala data(1)은 배열의 모든 요소와 scala data와 연산을 해서 그 결과를 배열의 차원과 크기가 동일한 배열로 리턴

=>차원이 다른 배열의 연산은 적은 차원의 배열을 큰 차원의 배열에 전부 연산해서 큰 차원의 배열로 리턴 - 차원은 다르지만 연산을 하는 배열끼리의 크기는 같아야 합니다.

 

[10,20,30] + 4 = [14,24, 34]

 

 

 

 

 

 

 

 

  

 

 

 

+ 3 =

 

 

+ 3

+ 3

+ 3

+ 3

+ 3

+ 3

+ 3

+ 3

+ 3

 

 

 

[10,20,30]

+

[[10,30,50]

[20,40,70]]

 

=

[[20,50,50]

[30,60,100]]

 

[10,20,30]

+

[[20,40]

[60,70]]

=>이 경우는 연산을 못한다.\

r은 복제해서 연산한다.

 

 

#차원이 다른 배열의 연산 - broadcast

ar = np.array([100,200,240])

#배열의 각 요소에서 100을 뺀 후 배열로 리턴

result = ar - 100

print(result)

 

br = np.arange(0,6)

cr = br.reshape(2,3)

print(cr)

 

 

result = ar + cr

print(result)

 

dr = br.reshape(3,2)

result = ar + dr

print(result)

 

 

14.boolean indexing

=>인덱스 자리에 bool의 배열을 대입하면 True에 해당하는 인덱스의 데이터만 리턴

 

 

#boolean의 색인

ar = np.array([100,200,301, 28])

 

print(ar % 2 == 0 )

 

#배열의 인덱스 자리에 bool배열을 대입하면 true인 데이터만 리턴한다.

print(ar[ar % 2 == 0 ])

 

 

 

15.난수 (random)

=>seed: 난수표 번호 - 함수들에서는 random_state라는 옵션으로 사용

=>복원 추출 : 뽑아낸 데이터를 다시 집어 놓고 다시 추출하는 (주사위)

=>비복원 추출 : 뽑아낸 데이터를 다시 집어 놓지 않고 남은 데이터에서 추출하는 것

=>numpy.random모듈이 난수를 추출하는 모듈

=>seed라는 함수를 이용해서 seed설정

 

seed == random_state

 

랜덤의 원리

=>난수 표 하나를 선택해서 데이터를 순서대로 가져옵니다.

=>난수표 번호를 sedd가록 합니다.

seed(1)

7,6,4

 

seed(1)

7,6,4

 

시드가 같으면 같은 숫자 나온다.

 

10개 주면 다른 숫자로 나온다.

 

seed(1) ->7,6,4

seed(2) -> ???? 누구도 모른다.

random한것 뽑고 싶어면 seed를 바꿔가면서 해야 한다.

 

샘플 뽑을 떄는 한 번만 하면 안된다.

 

c언어는 seed가 정적이다.

javaseed에 현재 시간이 들어간다. 1000분의 1초가 들어간다. javaseed가 바꾼다.

 

게임의 대부ㄴ분은 random이 아니라 규칙이 있다.

규칙이 없으면 낮은 확률이 앞에 나오면 뒤쪽에 배치한다.

 

선물은 끝날 때 떨구고 마지막에 떨군다.

 

 

 

=>permutation(): 정수를 대입하면 0 부터 정수 이전까지의 배열을 랜덤하게 생성해서 리턴

배열을 대입함녀 배열의 데이터를 랜덤하게 배치해서 리턴 =>화투 섞는 것

비슷한 용도의 함수로 shuffle()이 있음

=>rand(): 균등 분포에서 표본 추출 -seed()를 정해서 순서대로 리턴 =>난수 빼서 하나씩 꺼내는 것

=>randint()범위를 설정해서 범위 내의 정수 중에서 리턴,size.를 이용해서 개수 지정 가능 =>숫자 범위 에 꺼내는 것

=>normal: 균등 분포가 아니라 정규분포 에서 표본을 추출 - size를 이용해서 개수 지정 가능

=>binomial(n,p,size) :n은 데이터의 분포( 10 - 0부터 10까지),p는 확률

 

균일 붙포 : 확률이 똑같다.

 

참 거짓  ->베르노이분포 - 스팸이냐 아니냐 ->감정 분포

 

이항 분포도 참이냐 거짓이냐 하지만 참일 경우는 여러개

 

python에는 random이 있고 기능이 부족해서

numpy random으로 만들어 졌다.

 

 

 

#난수 생성

import numpy as np

#배열 생성

ar = np.arange(0,48)

#print(ar)

#배열의 데이터 순서를 랜덤하게 배치

np.random.shuffle(ar)

print(ar)

 

 

 

#5개의 랜덤한 숫자를 추출

print(np.random.normal(size=5))

#seed고정 - 실행할 때 마다 동일

np.random.seed(seed = 100)

#5개의 랜덤한 숫자를 추출

print(np.random.normal(size = 5))

 

 

 

 

16.numpy의 함수 - pandasSeriesDataframe에서 그대로 사용 가능

1)기본 통계 함수

sum(합계), mean(평균), median(중간값), max(최대값), min(최소값), var(분산), std(표준편차), percentile(데이터와 백분율을 입력받아서 백분율에 해당하는 데이터를 리턴)

=>잔차 :평균과의 차이 - 잔차의 합은 :+-가 존재하기 깨문에 값이 상쇄되서 데이터의 분포를 이해하는데 어려움이 있어서 제곱한 분산을 사용

 

=>분산 : 평균과의 차이를 제곱한 것

=>표쥰편차:분산의 제곱곤

=>표준 편차를 계산 할 때 데이터 개수를 나누지 않고 데이터 개수 -1 로 나눕니다.

=>2차원 이상의 배열일 때 axis옵션을 이용하면 행이나 열 단위로 통계 함수를 적용 가능

 

#기본 통계함수

ar = np.arange(1,10)

ar = ar.reshape(3,3)

print(ar)

#2차원 행렬

 

#모든 데이터를 더한 결

print(np.sum(ar))

 

#행 단위 열 단위로 합계

#axis 옵션은 차후로도 동일한 용도로 사용되므로 기억

print(np.sum(ar, axis = 0)) #열 단위

print(np.sum(ar, axis = 1)) #행 단위

#둘은 항상 반대이다.

 

 

 

2)배열 통계

=>argmin, argmax: 최소값과 최대값의 인덱스를 리턴

=>prod:

=>nansum, nanprod: None01로 간주해서 합과 곱을 구해서 리턴

None과의 연산은 무조건 None

=>cumsum, sumprod: 누적합과 누적곱

=>diff: 앞 요소와의 차이를 배열로 리턴

 

3)Nonenumpy.nan으로 표기

 

 

4)논리 함수

numpy.isnan():nan포함 여부 리턴

 

=>여기 까지는 단항 함수 (Unary -데이터가 1개만 있으면 수행되는 )함수

 

 

 

17.numpy의 이항 함수 - 데이터가 2개 있어야 수행되는 함수

=>add, subtract, multiply, divide, floor, divide

=>power(첫번째 배열의 데이터에 두번째 배열의 데이터만큼 제곱)

=>maximum ,minimum, fmax, fmin

=>mod

=>greater, greater_equal, less, less_equal, equal, not_equal

=>logical_and, logical_or, logical_xor

 

 

 

=>where (bool배열 , true일 때 선택할 데이터 , false일 때 선택할 데이터)

#2개의 배열에서 데이터 골라서 새로운 배열 만들기

ar = np.array([100,200,300,400])

br = np.array([101,201,301,401])

#cond값의 True이 면 or에서 False이면 br;서 출력

cond = np.array([True, False, False, True])

result = np.where(cond,ar,br)

print(result)

 

 

 

 

 

18.집합관련 함수

=>unique :중복 제거

=>intersect1d():교집합

=>union1d():합집합

=>in1d():데이터의 존재 여부를 bool 배열로 리턴

=>setdiff1d():차집합

=>setxor1d(): 어느 한 쪽에만 존재하는 데이터

 

19.배열을 분할해주는 함수

=>split

=>axis옵션을 이용해서 행방향으로 분리할지 열방향으로 분리할 지 설정할 수 있음

=>첫번째 파라미터는 배열이고 두번째 파라미터는 데이터의 개수인데 정수 대신에 list를 사용하면 list에 있는 숫자 대로 데이터를 분할합니다.

 

 

20 .데이터 정렬

=>sort

=>kind옵션에 정렬 방법을 설정

=>numpy.sort에 배열을 대입하면 정렬한 데이터를 리턴

배열.sort를 하게되면 배열자체를 정렬합니다.

 

 

#e데이터 정렬

ar = np.array([30,200,300,400,210,40])

help(np.sort)

#help(ar.sort)

result = np.sort(ar)

print(result)

print(ar)

#기본은 quicksort 잴 빠르다. 분할 하면 서 한다.

#merge는 합쳐가면서 하는 것이고

#heap 부모가 크는 것

 

 

br = ar.reshape(2,3)

print(br)

br.sort()

print(br) #행열이 뒤집어 진다.

#[[ 30 200 300]

# [ 40 210 400]] 아래로 정렬

 

br = ar.reshape(2,3)

print(br)

br.sort(axis = 1)

print(br) #행열이 뒤집어 진다. #열 단위로

 

br = ar.reshape(2,3)

print(br)

br.sort(axis = 0)

print(br) #행열이 뒤집어 진다. 행단위로

 

 

 

21.선형 대수 함수

1)numpy.diag: 2차원 배열 (행렬)을 넘겨주면 대각원소를 가지고 1차원 배열을 만들어주 1차원 배열을 넘겨주면 1차원을 배열을 대각선 요소로 하고 나머지는 0으로 채운 배열을 리턴해주는 함수

1차원 배열을 넘겨줄 때는 k라는 옵션에 대각선으로 채우는 위치를 설정

 

2)diagonal: .2차원 배열을 받아서 대각원소만 꺼내서 1차원 배열을 만드는 함수이고 offset을 이용해서 꺼내는 위치를 수정

 

3)trace: 대각선 원소의 합이고 offset을 이용해서 꺼내느 위치를 수정

 

4)dot: 행렬의 곱셈

 

5)linalg.inv: 역 행렬

 

6)linalg.det: 행렬식

 

7)linalg.eig: 고유값과 고유 백터 계산

=>컬럼의 개수를 줄일 때 이용

 

 

등급

class 1 2 3

1    1 0 0

2    0 1 0

3    0 0 1

원 핫 인코딩

 

역행렬 : 행렬의 곱이 단위 행렬인 정방행렬

수학은 0이 나올수 있지만 프로그램은 없다.

실수가 나오면 문제가 발생할 수 있다.

 

 

 

X =: 100 Y : 200

width : 70 height: 60

고유 백터 : 어떤 값을 연산해도 그 값은 변하지 않는다.

 

차원 축소

 

육상 7종 경기 데이터 분석

 

100m 달리기            멀리 뛰기  

 

 

 

회귀 분석은 방정식을 만드는데 각각 성적에 어떤 영향을 받는지

분류는

 

 

머신로닝을 돌리면 과적합 될 가능성이 높다.

다중공선성

 

합쳐서 하나 만들기 =>줄여서 차원 축소

두개를 줄여서 하나를 만드는 것 : 성질은 변하면 안된다.

 

행렬 데이터가 있다. 이미지가 있다.

 

행렬 * 고유값 =>동일한 성질을 갇는 고유값들이 있다.

값이 변함에 따라서 고유백터 결정이 되더라

2차원은 2차 방적식이니깐

 

1차방적식은 고유값은 하나밖에 안나온다.

 

행렬에서 고유값(eigenvalue)과 고유백터 (eigenvetor)

:차원 축소 ->변수를 줄인다. 컬럼의 개수를 줄인다.

1)    영향이 적은 컬럼을 제거

2)    상관관계가 있는 컬럼 합치기

 

차원 축소를 하는지 알아야 한다.

반응형

'Study > 데이터 분석' 카테고리의 다른 글

데이터분석-6  (0) 2020.11.10
데이터분석-5  (0) 2020.11.09
데이터분석-4  (0) 2020.11.08
데이터분석-2  (0) 2020.11.08
데이터 분석-1  (0) 2020.11.08

+ Recent posts