영화 평점 데이터 분석하기
- 문제 다운로드

- 데이터 구성 : 사용자 id, 영화 id, 평점, 시간
각 데이터는 '::' 로 구분
1. 데이터 불러오기
import numpy as np
path = "C:/Users/AI_school/anaconda3/envs/data/ratings.dat"
ratings = np.loadtxt("path", delimiter="::", dtype = np.int64)
array([[ 1, 1193, 5, 978300760],
[ 1, 661, 3, 978302109],
[ 1, 914, 3, 978301968],
...,
[ 6040, 562, 5, 956704746],
[ 6040, 1096, 4, 956715648],
[ 6040, 1097, 4, 956715569]], dtype=int64)
2. 데이터 구조확인
print(ratings.shape)
print(ratings.size)
print(ratings.ndim)
(1000209, 4)
4000836
2
3. 데이터 추출하기
- unique() : 데이터에서 중복된 데이터를 제거하는 함수
1. 유저와 영화의 아이디들를 출력
ratings_userId = np.unique(ratings[:,0])
ratings_movieId = np.unique(ratings[:,1])
유저 : [ 1 2 3 ... 6038 6039 6040]
영화 : [ 1 2 3 ... 3950 3951 3952]
2. 영화 아이디가 20인 데이터의 개수
ratings_movieId_20 = ratings[ratings[:,1]==20]
ratings_movieId_20.shape[0]
160
- 앞서 말 했듯 shape의 행은 data의 개수이니까!!
3. 영화별 평균 평점 구하기
for mid in range(100,106):
temp = ratings[ratings[:,1]==mid,2].mean()
print(f"영화{mid}의 평점 평균 : {temp}")
영화100의 평점 평균 : 3.0625
영화101의 평점 평균 : 3.869565217391304
영화102의 평점 평균 : 1.8166666666666667
영화103의 평점 평균 : 3.212121212121212
영화104의 평점 평균 : 3.526392961876833
영화105의 평점 평균 : 3.2325581395348837
- ratings[:,1]==mid : 영화 id가 해당 아이디인 행
numpy는 자체 for문 달려있다...
행 값을 넣을 때 boolean index를 활용하자....
4. 전체 유저별 평점 평균 계산
user_id_mean = []
user_id = np.unique(ratings[:,0])
for uid in user_id:
temp = ratings[ratings[:,0]==uid,2].mean()
user_id_mean.append(temp)
path = C:/Users/AI_school/anaconda3/envs/data/user_id_mean.csv
np.savetxt("path", user_id_mean, delimiter=",", fmt="%.3f")
처음부터 짧게 짜려하지 말자!!