[ python ] Numpy 라이브러리 활용 - 데이터 불러와서 확인하기 1
페이지 정보
작성자 웹지기 댓글 0건 조회 3,783회 작성일 21-02-25 21:57본문
데이터 불러와서 확인하기numpy_학습자료.zip 파일을 압축을 풀어서
jupyter 노트에서
새폴더 > 폴더명:data > 압축푼파일에서
height_weight.txt
ratings.dat
두개의 파을을 업로드
다시 data 폴더에서 나가서 인재캠퍼스_Numpy 학습자료.ipynb 에 업로드
# ✨ Numpy란?
numpy는 과학 계산을 위한 라이브러리로서 다차원 배열을 처리하는데 필요한 여러 유용한 기능을 제공
- 빠르고 효율적인 벡터 산술연산을 제공하는 다차원배열 제공
- 반복문 없이도 전체 배열에 대해 연산이 가능
- 표준 수학 함수 제공(sum()합계,sqrt()제곱근,mean()평균)
# numpy 라이브러리를 import로 불러오고, as로 앞으로는 np라는 별칭으로 부른다고 정의
import numpy as np
### 1. Numpy 배열 크기 가늠이 안됩니다 ! N차원 배열 생성
Numpy 라이브러리 안에는 다차원 배열을 지원하는 클래스가 존재함 -> numpy.ndarray
- 배열은 동일한 타입값을 가짐
- 다(N) ~ 차원 형태로 구성 가능
- 배열의 차원 rank라고 부름
- 각 차원의 크기는 shape으로 표시
- 각 값들은 양의 정수로 인덱스 값을 가짐
- ndarray를 array라고 표현하기도 함
#### numpy 배열 생성하기
- 1차원
array([1,2,3,4,5])
# 1. list 변수 선언 후 함수 연결
#lst
#type 타입을 확인하는 기본 함수
lst = [1,2,3,4,5]
type(lst)
list
# arr1 배열 변수 정의
arr1 = np.array(lst)
# arr1 값 확인
print(arr1)
type(arr1)
[1 2 3 4 5]
numpy.ndarray
#two_lst(리스트 안에 리스트)
two_lst = [[1,2,3],[4,5,6]]
two_lst
[[1, 2, 3], [4, 5, 6]]
#arr2 배열 변수 정의
arr2 = np.array(two_lst)
# arr2 배열 확인
arr2
array([[1, 2, 3],
[4, 5, 6]])
#특정한 값으로 배열 생성하기
#기본적으로 0이나 1로 초기화 하는 방법
#0 -> zeros(행, 열) 1-> ones(행, 열)
arrZero = np.zeros((3,4))
arrZero
array([[0., 0., 0., 0.,],
[0., 0., 0., 0.,],
[0., 0., 0., 0.,],
[0., 0., 0., 0.,]])
arrOne = np.ones((5,5))
arrOne
#0과 1이 아닌 숫자로 배열을 생성할 때 -> full((행, 열), 원하는 숫자)
arrFull = np.full((5,5),3)
arrFull
#1~5까지의 숫자를 array로 만들기
arr = np.arange(1,6,1)
arr
#데이터 타입 지정 -> dtype
#정수형으로 된 0의 배열
arrZero=np.zeros((3,4), dtype=np.int32)
arrZero
#실수로된 수를 정수형으로 변환해서 배열저장
arr1=np.array([1.2, 2.4, 5.14], dtype=np.int32)
arr1
#정수로 변환된 배열을 다시 실수로 변환
#arr1.astype("float64")
arr1 = arr1.astype(np.float32)
arr1.dtype
arr1
#랜덤값 배열 만들기 -> random.rand()
arr = np.random.rand(2,3)
arr
#정수형 랜덤값 배열 만들기 -> random.randint(범위, size=(행, 열))
arr2 = np.random.randint(1,11, size=(2,3))
#요소별 연산 arr* arr arr+arr
# 배열생성 유용한 함수
arange 함수로 만들고 reshape 함수로 배열 크기 설정하자!
(반복문 없이 리스트 생성 후 크기 지정)
#1차원 배열의 생성
arg_arr1 = np.arange(1,51)
arg_arr1
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50])
#2차원 배열 생성
arg_arr2 = arg_arr.reshape(5,10)
arg_arr2
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
[31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
[41, 42, 43, 44, 45, 46, 47, 48, 49, 50]])
# 배열의 크기만큼 요소의 갯수가 정확하게 대응되어야함
arg_arr.reshape(5,11) #--> 오류 발생 arg_arr.reshape(5,10) 으로 지정하면 오류가 발생한다.
print(arr1.shape)
# 2차원 배열 크기 확인하시오!
(5,)
print(arr2.shape)
(2, 3)
# 배열 요소 개수 확인
# 배열.사이즈
print(arr1.size)
# 2차원 배열 요소 개수 확인하시오 !
5
# 2차원 배열 데이터 타입 확인하시오 !
print(arr1.dtype)
int32
# 2차원 배열 차원 확인하시오
print(arr1.ndim)
2. Numpy 데이터 접근은 어떻게 하지??
Numpy 배열은 파이썬 리스트(python list)와 마찬가지로 인덱싱(indexing), 슬라이싱(slicing)을 지원
Numpy 정수 인덱싱(integer indexing), 슬라이싱(slicing) : 배열에 부여되어 있는 인덱스(index)를 이용
Numpy 불리언 인덱싱(boolean indexing): 배열 각 요소를 True,False로 표현하는 방식
Numpy 슬라이싱(slicing)
인덱스의 범위를 정하여 부분 집합을 구하는 것
arr = np.arange(1,51).reshape(5,10)
arr
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
[21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
[31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
[41, 42, 43, 44, 45, 46, 47, 48, 49, 50]])
# 1번째 행까지와 모든 열에 접근 arr[0:2]
arr[0:2]
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])
# 1번째 행까지와 모든 열 접근 arr[0:2,:]
# 배열이름[행, 열] arr[0:2, :] = 0~2행, 모든열
arr[0:2,:]
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])
# 1번째 행까지와 7번째열부터 끝열까지 접근 arr[0:2,7:]
arr[0:2, 7:10] #arr[:2, 7:] 생략가능 처음0 과 마지막에 10
array([[ 8, 9, 10],
[18, 19, 20]])
arr[2:5, 2:7]
array([[23, 24, 25, 26, 27],
[33, 34, 35, 36, 37],
[43, 44, 45, 46, 47]])
Numpy 정수 인덱싱(integer indexing)
하나하나 선택되어지는 인덱스들을 일렬로 나열한 부분집합
arr2 = np.array([[1,2,3],[4,5,6]])
arr2
array([[1, 2, 3],
[4, 5, 6]])
arr2[0]
array([1, 2, 3])
arr2[0][0]
1
arr2[0,0] # 넘파이는 []안 콤마를 기준으로 행과 열로 구분
1
arr2[:,0]
array([1, 4])
# 요소값 중 1,6 에 접근 arr2[[0,1],[0,2]]
#0,0 1,2의 값을 불러온다.
arr2[[0,1],[0,2]]
array([1, 6])
Numpy 불리언 인덱싱(boolean indexing)
특정 조건에 맞으면 True, 아니면 False 값으로 배열을 만들어 True에 해당하는 요소값의 데이터에 접근
arr2 = np.array([[1,2,3,4,5],[55,0,60,80,90]])
arr2
array([[ 1, 2, 3, 4, 5],
[55, 0, 60, 80, 90]])
# 0이 아닌 요솟값에 접근
arr2 != 0
array([[ True, True, True, True, True],
[ True, False, True, True, True]])
arr2[arr2 != 0]
array([ 1, 2, 3, 4, 5, 55, 60, 80, 90])
#짝수에 접근(이 상황에서는 0도 포함이 된다.)
arr2[arr2%2==0]
array([ 2, 4, 0, 60, 80, 90])
#행복습
arr2[0][arr2[1] >=70]
#1행 - 사람번호
#2행 - 성적
array([4, 5])
3. 누구보다 빠르게 남들과는 다른 Numpy 배열 연산!!
import numpy as np
arr3 = np.array([[1,2],[3,4]])
arr4 = np.array([[3,4],[5,6]])
# 요소별 연산 :배열에 3더하기
arr3+3
array([[4, 5],
[6, 7]])
# 요소별 연산 :배열에 2.0 나누기
arr4/2.0
array([[1.5, 2. ],
[2.5, 3. ]])
#리스트를 연산하고 싶다면 numpy로 변경해주면된다
np.array([1,2,3])
# 배열 간 연산 : 곱하기
arr4*10
array([[30, 40],
[50, 60]])
# 참고) 배열의 행렬 연산은 np.dot 함수를 통해서 할 수 있다 !
np.dot(arr3,arr4)
array([[13, 16],
[29, 36]])
4. Numpy 배열 관련 유용한 함수
# np.sum
np.sum(arr4)
18
# np.sqrt
np.sqrt(arr4)
array([[1.73205081, 2. ],
[2.23606798, 2.44948974]])
@@데이터 불러오기
data = np.loadtxt("data/height_weight.txt", delimiter=",")
data
array([[175.2, 180.3, 175. , 169.2, 185.2, 188. , 177.6, 178.2, 177. ,
179. ],
[ 65.6, 88. , 79.2, 69.3, 55. , 71.2, 73. , 68.9, 74. ,
82. ]])
#shape 크기확인
#ndim 차원수 확인
#size 요소개수확인
print('data크기 :', data.shape)
print('차원 : ', data.ndim)
print('요소개수 : ', data.size)(2, 10)
data크기 : (2, 10)
차원 : 2
요소개수 : 20
2. 배열 데이터에서 키와 몸무게 데이터 각각 변수에 넣기
height = data[0]
height
array([175.2, 180.3, 175. , 169.2, 185.2, 188. , 177.6, 178.2, 177. ,
179. ])
weight = data[1]
weight
array([65.6, 88. , 79.2, 69.3, 55. , 71.2, 73. , 68.9, 74. , 82. ])
3. BMI지수 공식에 대입해보기
키는 M로 표기(height.100 또는 height *0.01
bmi지수 = weight/(height**2)
height = data[0]
height
height2 = height/100
height2
weight = data[1]
weight
bm = weight/height2**2
bm
4. 과체중 이상인 사람은 몇명일까요 ?(불리언 인덱싱을 이용해보세요 ! )
bm >=23
array([False, True, True, True, False, False, True, False, True,
True])
bm[bm >= 23]
array([27.07018468, 25.86122449, 24.20652885, 23.14392095, 23.62028791,
25.59220998])
bm[bm >= 23].size
6
len(bm[bm>=23])
6
-----------------------------------------------------------
### 응용예제2) 영화가 좋은 평점을 받았는지 알아보기
최종목표 : 각 영화의 평균 평점이 4이상을 구하는 것.
# Readme
# user_id 사용자 아이디
# item_id 영화 아이디
# rating 영화 평점
# timestamp 평점 입력 시간
movieData = np.loadtxt('data/ratings.dat', delimiter='::', dtype=np.int64)
movieData
array([[ 1, 1193, 5, 978300760],
[ 1, 661, 3, 978302109],
[ 1, 914, 3, 978301968],
...,
[ 6040, 562, 5, 956704746],
[ 6040, 1096, 4, 956715648],
[ 6040, 1097, 4, 956715569]], dtype=int64)
1. 데이터 속성 확인은 필수 !
배열 크기
배열 차원수
배열 전체 요소 개수
print(movieData.shape)
print(movieData.ndim)
print(movieData.size)
2. 전체 영화 평점 평균 구하기
ratings = movieData[:, 2]
np.mean(ratings)
3.581564453029317
3. 영화 아이디 1번인 영화의 평점 평균 구하기
특정 조건으로 배열의 요소값에 접근 : boolean index(true, false)
movieData[:, 1]
#해당하는 행에 true가 존재할 때 출력
movieData[movieData[:,1]==1]
array([[ 1, 1, 5, 978824268],
[ 6, 1, 4, 978237008],
[ 8, 1, 4, 978233496],
...,
[ 6032, 1, 4, 956718127],
[ 6035, 1, 4, 956712849],
[ 6040, 1, 3, 957717358]], dtype=int64)
#영화 아이디가 1이 아닌 것에 접근하는데 평점만 보고 싶다.
#전체 구문 사용시
movieData[movieData[:,1] !=1][:,2]
array([5, 3, 3, ..., 5, 4, 4], dtype=int64)
#짧은 구문으로 접근하기
movieData[movieData[:,1] !=1,2]
array([5, 3, 3, ..., 5, 4, 4], dtype=int64)
첨부파일
- numpy_학습자료.zip (6.4M) 0회 다운로드 | DATE : 2021-02-25 21:57:12
댓글목록
등록된 댓글이 없습니다.