기존의 파이썬 리스트 : 여러 개의 값들을 저장할 수 있는 자료구조이지만 다양한 연산 불가, 연산 속도 느림
=> 해결방안 : 파이썬 대신 넘파이를 활용한 데이터 처리가 많음(scikit learn, tensorflow)
넘파이 배열 : n개의 축 -> n차원 배열 / c언어에 기반한 배열 구조
더하기 연산자 적용시 | |
파이썬 리스트 | 2개의 리스트가 연결된 하나의 리스트 |
넘파이 배열 | 대응되는 값이 합쳐진 결과 |
합 구하기
import numpy as np (np는 별칭)
mid_scores=np.array([10,20,30])
final_array=np.array([10,20,30])
total=mid_scores+final_array
np.sin(A)
mid_scores= mid_scores + 100 / *2/ *2.1
[110,120,130] ....
*다양한 데이터 타입을 리스트 하나에 저장하면 출력 시 문자열 출력된다*
import numpy as np
A=np.array[10,20,30]
A.sum() A.min() A.max() A.mean() A.std() A.var()
=> print 없이 출력하면 배열, 리스트 구분 가능함
a=np.array([1,2,3])
a.shape (3,) #형태
a.ndim 1 #차원
a.dtype dtype('int32')
a,itemsize 4 #내부 자료형(int)가 차지하는 메모리 크기(byte)
a.size 3 #객체의 전체 크기

넘파이 인덱싱, 슬라이싱
인덱스 사용하기-리스트와 동일한 순서대로 인덱스 사용 가능
시작, 종료 인덱스 생략 가능, 음수 인덱싱도 가능
논리적 인덱싱 : ages=np.array([18,19,25,30,28]) *리스트값이 변수로 정의되어있을 때 변수값 괄호 안에 넣어도 됨
y=ages>20
y 출력 시 해당되는 범위만 출력됨
*결과는 부울형 넘파이 배열*
>>> ages[ages>20]
array([25,30,28])
파이썬의 2차원 리스트: 리스트의 리스트(행렬 연산이 지원되지 않음)
넘파이 배열: np.array()로 생성
-행렬로 취급 가능, 행렬 연산 적용 가능
-np_array[0][2] => 0행 2열
-인덱싱으로 배열의 요소 변경 가능 np_array[0,0]=12
-넘파이 배열의 모든 항목은 동일한 자료형이므로 정수 배열에 실수 대입 시 정수로 저장된다
넘파이 스타일의 2차원 배열 슬라이싱
np_array[0:2,2:4] (리스트와는 다름 ex) list[0][2])


*array, list 모두 실행해보면서 이해하기
2차원 배열의 논리적 인덱싱
>>>np_array=np.array([1,2,3],[4,5,6],[7,8,9])
>>>np_array>5
array([false,false,false],[false,false,true],[true,true,true])
>>>np_array[np_array>5]
array([6,7,8,9])
>>>np_array[np_array%2==0]
array([2,4,6,8])
*활용하는 연습 마니 하기*
arange(), range() 함수
>>>import numpy as np
>>>np.arange(5) 01234
>>>np.arange(1,6) 12345
>>>np.arange(1,10,2) 13579
np.arange(5)==np.array(range(5))
*range 자체만으로는 array가 출력되지 않음
linspace(),logspace()
linspace() 시작값부터 끝값까지 균일한 간격으로 지정된 개수의 배열 생성
>>>np.linspace(0,10,100)
0부터 10까지를 100개로 쪼개기
logspace()는 이 값을 로그 스케일로 생성함 (10^x 부터 10^y까지 총 10개 생성)
reshape(), flatten()
>>>y,reshape(3,4)
12개의 인자들을 3행 4열 형태의 matrix로 변환
>>>y.reshape(6,-1) 데이터 개수에 맞춰 자동으로 배열의 형태 결정됨
배열 형태 호환되지 않는 경우 오류 발생
>>>y.flatten() 평탄화 함수: 2차원 이상의 배열을 1차원 배열로 변경
난수 생성, rand, randint
>>>np.random.seed(100) #난수 seed 설정
np.random.rand(5) 0과 1사이의 5개의 난수
np.random.rand(5,3) 난수로 이루어진 2차원 배열
앞뒤로 더하기, 곱하기 연산자 사용 가능함
>>>np.random.randint(1,11,size=(4,7)) 1부터 11사이의 4행 7열 난수 생성
randn()
>>>np.random.randn(5) 평균0, 표준편차1인 난수 5개 생성
>>>np.random.randn(5,4) 난수로 이루어진 5행 4열 배열
randoms=10+2*np.random.randn(5,4) 평균 10, 표준편차 2인 정규분포의 난수 생성
정규분포 잡음이 포함된 직선 그리기 =>
noise=np.random.normal(0,1,100) #평균 0, 표준편차 1인 100개의 난수
linspace로 random한 데이터 만들고 noise더해서 잡음 형성하면 잡음 포함된 직선 생성됨
평균값 mean(), 중앙값 median()
heights가 array라면
>>>np.mean(heights) #평균값 계산
>>>np.median(heights) #중앙값 계산
상관관계:corrcoef()
np.corrcoef(x,y)
[[x와x, x와y]
[y와x, y와 y]]
np.corrcoeff([x,y,z])

동일하면 1출력/ 상관관계가 높을수록 수치가 높아진다
다변수 사이의 상관관계: 직선의 방정식 형태가 뚜렷하게 나타날수록 강한 양/음의 상관관계에 있다고 할 수 있다
전치행렬 만들기
1. x.transpose()
2. x.T
역행렬 계산
넘파이에 내장된 LAPACK
-np.linalg.inv(x) 이용하여 역행렬 계산 가능
선형방정식 -> np.linalg.solve(a,v)함수 이용하기

시험 전까지 : 넘파이 함수 모두 암기 & 실습 예시 모두 시행해보기 & 실행 결과 모두 암기하기
출처: 데이터사이언스개론 최영우 교수님 수업 자료
'Data Science > 데이터사이언스개론' 카테고리의 다른 글
튜플 리스트 딕셔너리 (0) | 2023.04.24 |
---|---|
Ch4 Fitting a Model to Data (0) | 2023.04.22 |
Ch3. Introduction to Predective Modeling (0) | 2023.04.16 |
Ch2. Data Science Tasks and Process (0) | 2023.04.16 |
Ch1 Data Analytic Thinking (0) | 2023.04.16 |