numpy data 실습

강정우·2022년 7월 23일
0

data, ai

목록 보기
4/18
post-thumbnail

영화 평점 데이터 분석하기

  • 문제 다운로드
  • 데이터 구성 : 사용자 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)

# result
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)

# result
(1000209, 4)
4000836
2

3. 데이터 추출하기

  • unique() : 데이터에서 중복된 데이터를 제거하는 함수

1. 유저와 영화의 아이디들를 출력

ratings_userId = np.unique(ratings[:,0])
ratings_movieId = np.unique(ratings[:,1])

# result
유저 : [   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]

# result
160
  • 앞서 말 했듯 shape의 행은 data의 개수이니까!!

3. 영화별 평균 평점 구하기

for mid in range(100,106):
    temp = ratings[ratings[:,1]==mid,2].mean()
    print(f"영화{mid}의 평점 평균 : {temp}")

# result
영화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")

처음부터 짧게 짜려하지 말자!!

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글