[ python ] Numpy 라이브러리 활용 - 데이터 불러와서 확인하기 1 > python

본문 바로가기

사이트 내 전체검색

python

[ python ] Numpy 라이브러리 활용 - 데이터 불러와서 확인하기 1

작성일 21-02-25 21:57

페이지 정보

작성자 웹지기 조회 2,952회 댓글 0건

본문

데이터 불러와서 확인하기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)


 

 


추천0

비추천 0

첨부파일

댓글목록

등록된 댓글이 없습니다.

전체 19건 1 페이지

이미지 목록

게시물 검색
Copyright © 즐거운 코딩 생활 ( funyphp ). All rights reserved.
PC 버전으로 보기