1 Numpy library
#주피터 노트북http://localhost:8888/notebooks/Desktop/PythonStudy/ex08Numpy.ipynb#Numpy-library 껐다 켰을 때마다 실행해야하는 구문
import numpy as np
1.1 ndarray 클래스
1.1.1 배열 생성하기
#1. 1차원 배열 만들기
# 배열을 생성할 때는 python의 리스트 구조를 활용하여 생성한다.
list1 = [1,2,3,4,5]
arr1 = np.array(list1)
arr1
#2. 2차원 배열 만들기
list2 = [[1,2],[3,4],[5,6]]
arr2 = np.array(list2)
print(arr2)
#arr2[행,열]
print(arr2[1,1])
#3. ndarray클래스의 속성들
#3-1. 배열의 모양 확인하기
print(arr2.shape)
print(arr1.shape)
#3-2. 배열안의 요소의 개수 확인하기
print(arr2.size)
#3-3. 배열의 차원 확인하기
print(arr2.ndim)
#3-4. 배열의 타입 확인하기
print(arr2.dtype)
list3 = [[[1,2],[3,4]],
[[5,6],[7,8]]]
arr3 = np.array(list3)
print(f'배열의 모양: {arr3.shape}')
print(f'배열의 차원: {arr3.ndim}')
print(f'배열의 개수: {arr3.size}')
1.1.2 특정 패턴으로 배열 생성하기
#1. 모든 값들을 0으로 초기화
arr_zero = np.zeros((4,4),dtype='int32')
print(arr_zero)
print(arr_zero.dtype)
#2. 1로 초기화
arr_ones = np.ones((3,4))
print(arr_ones)
#3. 특정 값으로 배열 초기화
# full(shpae, 초기화 시키고 싶은 값)
arr_full = np.full((2,2),4)
print(arr_full)
#4. 1~50까지의 숫자데이터를 가지고 있는 1차원 배열 생성하기
list1 = [n for n in range(1,51)]
arr4 = np.array(list1)
arr4
#5. range 함수를 활용하여 np배열 생성하기
#np.arange(시작값, 끝값, 증감값)
arr5= np.arange(1,51)
arr5
#6. 배열의 모양 변경하기
np.arange(1,51).reshape(5,10)
#7. 랜덤한 값으로 배열 생성하기
np.random.randint(2,10,size=(2,3))
#8. 배열의 데이터 타입 변경하기
arr_float = np.array([3.14,4.1,2.1,162.5])
arr_float = arr_float.astype('int32')
arr_float
1.2 배열의 연산
list1 = [1,2,3,4]
list2 = [5,6,7,8]
list1 + list2
# ndarray 클래스는 요소별로 연산이 가능하다.
arr1= np.array(list1)
arr2= np.array(list2)
arr1+arr2
1.3 인덱싱, 슬라이싱
#1. 1~50까지의 숫자데이터를 가지고 있는 5행 10열짜리 배열 arr1 생성
arr1=np.arange(1,51).reshape(5,10)
arr1
#2.인덱싱(가리킨다)
arr1[2,-2]
#3. 슬라이싱(잘라낸다)
arr1[1:3,:]
arr1[3:,4:8]
arr1[[2,3],[3,4]]
1.4 BMI지수 구하기 실습
#1. txt 파일 로드해서 가져오기
data = np.loadtxt('height_weight.txt',delimiter=',')
data
#2. BMI = 몸무게 / (키(m) * 키(m))
w= data[1]
# cm --> m로 변환
#★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
# np 배열을 인덱싱 혹은 슬라이싱해서 별도의 변수에 담았을 때
# 주소에 대한 정보가 담기는데, 해당하는 변수의 값을 변경하면 원본데이터의 값도 변경된다.
# h = data[0]
# h*=0.01
#★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
# bmi = w / (h * h)
bmi = data[1] / ((data[0]*0.01)*(data[0]*0.01))
bmi
1.5 Boolean 인덱싱
name = np.array(['유찬','찬종','지희','원'])
name
bol = np.array([False,True,True,False])
bol
name[bol]
#name == '원' ---> 결과 자료형이 boolean데이터를 가진 ndarray형태로 나온다
#--> boolean indexing 가능하다.
name[name == '원']
name
# 위에 있는 사람들의 점수 정보를 담고 있는 2차원 배열
name_score = np.array([[80,100],[100,100],[90,100],[95,100]])
name_score[name=='지희']
1.6 Universally Function
# 1. 1~10까지의 숫자 중 랜덤한 값을 가지는 2행 5열짜리 배열을 하나 생성해주기
arr1 = np.random.randint(1,10,size=(2,5))
arr1
# 합계구하기
print(arr1.sum())
print(np.sum(arr1))
# 평균 구하기
print(np.mean(arr1))
# 절대값 구하기
print(np.abs(arr1))
# 고유값 뽑아오기
print(np.unique(arr1))
1.7 영화평점 데이터 분석하기
# 1. ratings.txt 파일 읽어오기
data = np.loadtxt('ratings.txt', delimiter='::', dtype='int')
data
# 2. 데이터의 구조 파악(몇차원, 데이터들의 개수, 모양)
print(data.ndim)
print(data.size)
print(data.shape)
#3. 전체 영화 평점 데이터의 평균
print(np.mean(data[:,2]))
#4. 각 user id가 1인 사용자의 평점 평균 구하기
data[data[:,0] == 1,2].mean()
#5. 각 사용자별 평점 평균 구해주기
list1 = []
for i in np.unique(data[:,0]):
list1.append([i,data[data[:,0]== i,2].mean()])
final_data = np.array(list1)
final_data
#6. 각 사용자별 평점 평균이 4점 이상인 사용자 id 구하기
final_data[final_data[:,1] >= 4,0].astype('int')
#7. np 활용해서 csv 파일 생성하는 방법
# np.savetxt(저장할 파일명, 데이터, 구분기호, 포맷형식)
np.savetxt('user_mean.csv',list1,delimiter=',',fmt='%.3f')