반응형
24. NumPy
24.1 numpy
24.1.1 벡터 및 행렬 연산에 특화된 라이브러리
24.1.2 array 단위로 데이터를 관리함, 행렬(matrix)와 비슷함
24.1.3 pandas와 함께 데이터분석에 많이 사용됨
24.2 실습 예제
# NumPy 모듈을 import
import numpy as np
# 리스트
data1 = [1, 2, 3, 4, 5]
# 리스트를 NumPy 배열로 변환
arr1 = np.array(data1)
print(arr1)
print(type(arr1)) # 자료형
print(arr1.shape) # 배열의 차원(배열의 크기)
# 2차원 배열(리스트)
data2 = [
[1, 2, 3],
[4, 5, 6]
]
# 2차원 리스트를 NumPy의 2차원 행렬로 변환
arr2 = np.array(data2)
print(arr2)
#(2, 3): 2행 3열의 2차원 행렬
print(arr2.shape)
2차원 행렬 연산
# 2차원 행렬
arr1 = np.array([
[1, 2, 3],
[4, 5, 6]
])
arr2 = np.array([
[7, 8, 9],
[10, 11, 12]
])
# 같은 자리의 값을 더함
arr1 + arr2
arr1 - arr2
arr1 * arr2
arr1 / arr2
arr1 * 2
# 거듭제곱
arr1 ** 2
배열의 인덱싱
# 스트링 리스트를 NumPy 배열로 변환
names = np.array(\
["김철수", "이승호", "박철호", "김철수", "홍성민", "마이클", "존"])
# 7행 4열의 난수 발생, randn 정규분포 난수
data = np.random.randn(7, 4)
names
data
numpy.maximum
x = np.random.randn(8)
y = np.random.randn(8)
x
y
# 큰 값을 뽑아서 새로운 배열을 생성함
np.maximum(x, y)
합계, 평균, 그리고 정렬
# 5행 4열의 랜덤 값 생성
arr = np.random.randn(5, 4)
arr
arr.sum() # 전체 합계
arr.mean() # 전체 평균
arr.sum(axis = 0) # 각 열의 합계
arr.sum(axis = 1) # 각 행의 합계
np.sort(arr) # 오름차순 정렬
np.sort(arr, axis = 0)[::-1] # 내림차순 정렬(열을 기준으로)
numpy.unique
names = np.array(\
["김철수", "이승호", "박철호", "김철수", "홍성민", "마이클", "존"])
ages = np.array([20, 25, 20, 23, 28, 29, 30, 31, 30, 40, 45])
# 중복 값을 제거한 결괏값 출력
print(np.unique(names))
print(len(np.unique(names)))
# 데이터베이스에서 DISTINCT와 같음
np.unique(ages)
24.3 데이터 분석 실습 - 영화 평점 데이터
다운로드 후 D:\data\movielens 디렉터리에 압축 해제
영화 평점 데이터 로딩
##
# loadtxt(): 텍스트 파일 로딩
# delimiter: 필드 구분자
# dtype: 자료형
#
data = np.loadtxt("d:/data/movielens/ratings.dat", delimiter = "::", dtype = np.int64)
데이터의 첫 5행만 확인
# [행 start: end, 열 start: end]
data[: 5,: ]
데이터의 형태 확인
# (행, 열)
data.shape
전체 평균 평점 계산
# 행 범위 : 열 범위
# data[: , 2]: 전체 행, 2번 열
mean_rating_total = data[: , 2].mean() # rating 컬럼
mean_rating_total
사용자 아이디 수집
# 전체 행, 0번 열
user_ids = np.unique(data[: , 0])
print(user_ids)
print(len(user_ids))
사용자별 평점 확인
# 사용자별 평균값을 저장할 배열
mean_values = []
for user_id in user_ids:
# 첫 번째 열이 아이디
# 예를 들어 현재 user_id가 1이라면 user_id가 1인 행들만 추출해서 data_for_user에 저장
# data 중에서 모든 행, 0번 필드가 user_id인 행의 모든 컬럼
data_for_user = data[data[: , 0] == user_id,: ]
# 2번째 인덱스(평점)에 해당하는 값의 평균값
value = data_for_user[: , 2].mean()
# 사용자 아이디와 평균값을 배열에 추가
# 리스트 안에 리스트가 들어가므로 2차원 리스트로 만들어짐
mean_values.append([user_id, value])
사용자 아이디별 평점 확인
mean_values[: 5]
리스트를 NumPy 배열로 변환
mean_array = np.array(mean_values, dtype = np.float32)
# 0번 행부터 4번 행까지
mean_array[: 5]
mean_array.shape
계산 결과를 csv 파일로 저장
np.savetxt("d:/data/movielens/result.csv", \
mean_array, fmt = "%.1f", delimiter = ",")
파일이 만들어졌는지 확인
반응형