Pudding

말랑말랑말랑 곰도리 푸딩 한 입에 먹기 챌린지

Data Analysis

8/21

sse 2024. 8. 22. 00:58
넘파이(Numpy) 2.1장

 

2.1 Numpy 기초

Numpy : Numerical Python

- C/C++ 기반으로 만들어짐.

- 벡터나 행렬 등의 복잡한 계산을 매우 간단하고 빠르게 연산할 수 있도록 도움을 줌.

 

#코랩에서의 사용

import numpy as np

 

2.1.1 Numpy vs List

→ 리스트

→ lst1 리스트를 Numpy 배열으로 변경. (array 함수의 인자로 lst1 리스트 사용)

→ 넘파이 배열에 2를 곱했을 때 : 각 원소에 2가 곱해져 출력

 

# 리스트를 이용하여 각 원소에 2를 곱할 때

lst_n = []
for i in lst1 :
	lst_n.append(i*2)
lst_n

#결과 : [2,4,6,8,10]

 

덧셈 연산

리스트끼리의 덧셈

Numpy 배열의 덧셈

List Numpy
데이터의 연산이 목적인 자료형이 아니므로 한 변수에 문자, 정수, 실수 등이 동시에 저장 가능 산술 연산이 주된 목적이므로, 통일된 하나의 자료형들의 데이터가 담겨 있어야 함.
  → 서로 다른 자료형들이 존재한다면, 강제로 하나의 자료형으로 통일됨.

 

#문제1

import numpy as np
item_price = [1000,2000,2500,3000]
np_price = np.array(item_price) #Numpy 배열 생성
np_new_price = np_price * 1.1 #10% 상승
print(np_new_price)

#결과 [1100. 2200. 2750. 3300.]

 

#문제2

import numpy as np
mid = np.array([70,90,80,100])
fin = np.array([90,60,90,100])
avg = (mid + fin) / 2  #numpy 배열의 평균
avg

#결과 array([ 80.,  75.,  85., 100.])

 

2.1.2 Numpy 속성

n → numpy의 ndarray라는 type을 가짐.

ndarray
n : 정수
d : dimension
→ n차원 배열 객체 의미.
ndim : 배열의 차원
shape : 배열의 모양 (행, 열)
size : 원소의 개수
itemsize : 원소의 메모리 크기 (byte)
dtype : 데이터 유형 (자료형)

 

#2차원 numpy 배열

→ itemsize랑 dtype는 값이 책이랑 다르게 나오는데 잘 모르겠다. (큼)

자료형 변경하는 법
1. Numpy 배열 생성과 동시에 자료형 지정
2. astype() 함수 이용
#1
np_t1 = np.array([[1,2,3],[4,5,6]], dtype = 'int8')
print(np_t1.itemsize)
print(np_t1.dtype)
#2
np_t1 = np.array([[1,2,3],[4,5,6]])
np_t1 = np_t1.astype('int8')
print(np_t1.itemsize)
print(np_t1.dtype)
결과
1       #1byte = 8bit
int8   #8bitr

 

2.1.3 Numpy.arange() 함수

arange() 함수는 for 반복문에서의 range() 함수와 비슷함.
연속되거나 일정한 패턴으로 증감하는 원소를 가진 넘파이 배열을 생성하는 경우에 이용 가능.
numpy.arange(start, end-1, step)

range() → 정수만 가능, arange() → 실수도 가능

arange()는 reshape()와 결합하여 흔히 사용함.
→ 행과 열을 변경하도록 도와주는 기능
numpy.arange(start, end-1, step).reshape(row, column)

#row 위치에 원하는 행의 수를 오류 없이 입력하면 column 위치에 -1 사용 가능

np_array1 = np.arange(1,10).reshape(3,3)   #3행 3열로 변경
np_array2 = np.arange(1,10).reshape(3,-1)  #행은 3행으로, 열은 자동으로 변경
print(np_array1)
print(np_array2)

 

#문제3

#1차시도
np_array = np.arange(5,51,5).reshape(2,5)
print(np_array)
print(np_array.ndim, '행', np_array., '열') 
#안타깝게도 여기서 막히다..
#2차시도
np_array = np.arange(5,51,5).reshape(2,5)
print(np_array)
print(np_array.shape, '행', np_array.shape, '열')

이럼 않되.....

#3차시도
np_array = np.arange(5,51,5).reshape(2,5)
print(np_array)
print(np_array.shape[0], '행', np_array.shape[1], '열')

드디어 ㅜㅜ

np_array.shape 는 numpy 배열의 행과 열의 정보를 튜플로 반환해 준다.
이걸 문제보다 먼저 알려줬어야죠……

 

2.1. 4 Numpy 통계 관련 함수

np.sum() 배열의 합
np.mean() 배열의 평균
np.max() 배열 원소들 중 최댓값
np.min() 배열 원소들 중 최솟값
np.median() 배열 원소들 중 중앙값
np.std() 배열의 표준편차
np.var() 배열의 분산
np.argmin() 배열 원소들 중 최솟값의 index
np.argmax() 배열 원소들 중 최댓값의 index
np.percentile() 배열 원소들 중 백분위 수

 

#제주도의 온도 데이터 활용하기

list_oct = [20.1, 19.9, 19.7, 19.6, 19.5, 19.1, 18.8, 18.6, 18.4, 18.2, 18.2, 18.2, 18.1, 17.9, 17.7, 17.3, 17.0, 16.8, 16.6, 16.3, 16.1, 15.9, 15.5, 15.3, 15.2, 15.3, 15.5, 15.8, 15.7, 15.6]
list_oct = [20.1, 19.9, 19.7, 19.6, 19.5, 19.1, 18.8, 18.6, 18.4, 18.2, 18.2, 18.2, 18.1, 17.9, 17.7, 17.3, 17.0, 16.8, 16.6, 16.3, 16.1, 15.9, 15.5, 15.3, 15.2, 15.3, 15.5, 15.8, 15.7, 15.6]
np_oct = np.array(list_oct)
np_oct.size
print("10월 온도 평균")
print(np_oct.mean())
print("10월 온도 중앙값")
print(np.median(np_oct))
print("10월 온도 최댓값")
print(np_oct.max(), '10월', str(np_oct.argmax()+1) + '일')
print("10월 온도 최솟값")
print(np_oct.min(), '10월', str(np_oct.argmin()+1) + '일')
print("10월 온도 분산")
print(np_oct.var())
print("10월 온도 표준편차")
print(np_oct.std())
결과
10월 온도 평균
17.396666666666665
10월 온도 중앙값
17.5
10월 온도 최댓값
20.1 10월 1일
10월 온도 최솟값
15.2 10월 25일 10월
온도 분산
2.466988888888888
10월 온도 표준편차
1.5706651103557652
(사실 데이터 수작업 햇더니 데이터 하나를 빼먹은 것 같음………)

 


내일 티켓팅 이슈로 벌써부터 정신이가 아파서........

내일은 공부 안할수도

'Data Analysis' 카테고리의 다른 글

8/20  (0) 2024.08.21