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 실습
- 영화 리뷰 평점 데이터 분석
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