ML&DL&AI/Python

Python 라이브러리와 Numpy2

Hoon0211 2023. 6. 15. 18:01
728x90

1. Boolean 색인(인덱싱)

  • 필터링의 기능을 담당
  • 조건에 해당하는(True) 값만 출력 할 때 사용
  • 조건에 해당하는 값이 존재하는지 모를 때 사용

 

 

1.1 예시

  • 배열 안에서 조건을 충족하는 True인 값들만 추출해주는 인덱싱 방법
# 1부터 10까지 증가하는 1차원 넘파이 배열
arr1d = np.arange(1,11)
print(arr1d)
print(arr1d > 5)
[ 1  2  3  4  5  6  7  8  9 10]
[False False False False False  True  True  True  True  True]

 

 

  • 5보다 큰 값만 출력을 원하는 경우
print(arr1d[arr1d > 5])
[ 6  7  8  9 10]

 

 

  • 다른 배열에서 조회하면 위치 정보로 해당 위치의 값이 출력

 

# 점수로 알아보기
score = np.array([80,75,55,96,30])
print(score)

# 80점 이상인 경우
print(score >= 80)
[80 75 55 96 30]
[ True False False  True False]
name = np.array(['A','B','C','D',"F"])
score[name == 'A']
array([80])

 

 

 

2. numpy 범용함수

  • 범용함수란? 널리퍼져있는 수학함수
  • sum(), mean(), max(), min()

 

2.1 예시

#arr라는 변수 랜덤수(1~10)들어 있는 크기가 2행 5열인 배열 생성
arr = np.random.randint(1,10,size=(2,5))

print(np.sum(arr))
print(np.mean(arr))
print(np.max(arr))
print(np.min(arr))
52
5.2
9
2

 

 

 

3. Numpy 실습

  • 영화 리뷰 평점 데이터 분석

ratings.zip
5.63MB

 

 

3.1 데이터 확인

  • np.loadtxt으로 오류 발생시 np.getfromtxt으로 교체
import numpy as np
movie = np.genfromtxt("ratings.txt", delimiter = '::',dtype = 'int')
print(movie)
[[        1      1193         5 978300760]
 [        1       661         3 978302109]
 [        1       914         3 978301968]
 ...
 [     6040       562         5 956704746]
 [     6040      1096         4 956715648]
 [     6040      1097         4 956715569]]

 

 

 

1.2 데이터 속성 확인

  • 배열의 크기, 개수, 타입, 차원
print("배열의 차원 :",movie.ndim)
print("배열의 크기 :",movie.shape)
print("배열의 전체 요소 개수 :",movie.size)
print("배열의 타입 :",movie.dtype)
배열의 차원 : 2
배열의 크기 : (1000209, 4)
배열의 전체 요소 개수 : 4000836
배열의 타입 : int32

 

 

 

1.3 전체 영화의 평점 평균구하기

  • 전체 데이터에서 평점의 위치 찾기!
  • 평균 구하기!
# 전체 데이터엥서 평점만 가져오기
# score_mean 변수에 담아주기
score_mean = movie[:,2]
print(score_mean)


# 평점의 평균을 구해보자
print(np.mean(score_mean))
[5 3 3 ... 5 4 4]
3.581564453029317

 

 

 

1.4 1번 사용자가 매긴 평점의 평균 구해보기

  • 전체데이터에서 사용자의 위치
  • 1번 사용자만 보고 싶다면?(boolean 인덱싱)
  • 전체데이터에서 1번 사용자만 존재하는 데이터 확인
  • 1번 사용자가 매긴 평점의 평균 구하기
# 전체 데이터에서 사용자의 위치
user_id = movie[:,0]
print(user_id)

#사용자 아이디 중에서 1번 사용자 아이디만 가져오기
# 논리 연산만 진행
print(user_id == 1)

# 전체데이터에서 1번 사용자만 존재하는 데이터
user_id_1 = movie[user_id == 1]

# 1번 사용자가 매긴 평점의 평균 구하기
user_id_1_mean = user_id_1[ : , 2]
print(np.mean(user_id_1_mean))
[   1    1    1 ... 6040 6040 6040]
[ True  True  True ... False False False]
4.188679245283019

 

 

 

1.5 총 몇명의 사용자가 평점을 매겼는지 알아보자

  • 사용자의 아이디의 유일한 값 구하기(중복제거)
  • unique() : 유일한 값을 구해주는 함수
user_id_unique = np.unique(user_id)
print(user_id_unique)
print(user_id_unique.size)
[   1    2    3 ... 6038 6039 6040]
6040

 

 

 

 

1.6 각 사용자가 매긴 평점의 평균을 구해보자

 

user_mean_list = []
for i in user_id_unique : 
    user_mean = movie[user_id == i, 2].mean()
    user_mean_list.append([i, user_mean])
user_mean_list
[[1, 4.188679245283019],
 [2, 3.7131782945736433],
 [3, 3.9019607843137254],
 [4, 4.190476190476191],
 [5, 3.1464646464646466],
 ...]

 

 

 

1.7 각 사용자들의 평점 평균 중에서 4점 이상의 평점만 구하기

# 배열의 요소간 연산이 가능하도록 리스트를 array로 변환
user_mean_arr = np.array(user_mean_list,dtype='int')

# 4점이 넘는 사람의 아이디에 접근
# 그 사람들의 인원수를 계산
user_mean_arr[user_mean_arr[:,1]>=4].size
3088

 

728x90