1. 준비


    - Movielens 자료 받기

    https://grouplens.org/datasets/movielens/

    recommended for education and development

    이 부분의 Readme.txt와 ml-latest-small.zip을 받았다.

    Readme를 읽어보면 알겠지만 들어있는 파일의 설명들이 나와있다.
    내가 다룰것은 ratings.csv 파일이기때문에 그 부분만 읽고 빠져나왔다.



    2. 파일 불러오기


    import numpy as np
    import pandas as pd
    
    #CSV는 Comma Separated Value의 약자로, 콤마로 구분된 값이라는 뜻이다.
    # Pandas의 csv를 읽어들이는 함수가 있는데, 첫 인자는 '파일의 위치', sep= '구분자' 이다. CSV파일을 읽기때문에 sep=','를 주었다.
    data = pd.read_csv('data/ratings.csv', sep=',')
    
    #그 후 넘파이의 함수를 사용해서 분석할것이기때문에 다시 넘파이 배열로 바꿔준다. 이 때 dtype=np.int64를 주어 정수형으로 바꾸어준다.
    data = np.array(data, dtype=np.int64)
    
    # 이때 불러온 파일이 어떻게 생겼는지 알기 위해 몇 행만 보고, 몇 행 몇 열인지 봐주는것이 좋다.
    data[:5, ]  # 5행까지의 값을 출력
    data.shape # 몇행 몇열인지 알려줌
    
    


    읽어오는 부분에서 또 문제가 생겼는데

    invalid literal for int() with base 10: b'2.5'

    이런 오류를 발생한다. 마땅한 방법을 찾지 못해 pandas로 데이터를 읽어드린 후 그것을 다시 Numpy로 받아왔다.

    이 후 CSV 파일의 ReadMe를 살펴보면
    userId,movieId,rating,timestamp
    이렇게 되어있다고 나와있다. 이걸 이용해서 몇열만 뽑아 평균을 구하고, 합을구하고 하기 편할 것 같다.



    3. 불러온 값을 이용하여 의미있는 값 추출해보기


    #전체 Rating의 평균 구하기
    mean_rating_total = data[:, 2].mean()
    
    #개별 ID의 Rating 평균 구하기
    #순서를 잘 생각해보면 Unique한 ID를 생성한 뒤, 그 ID에 맞는 Rating들을 모아 평균을 구하여한다
    user_rating_mean = []
    for id in user_id_list:
      user_mean_rating_total = data[data[:, 0] == id, 2].mean()
      user_rating_mean,append([id, user_mean_rating_total])
    
    user_rating_mean_array = np.array(user_rating_mean, dtype=np.float32)
    user_rating_mean_array[:5]
    # 출력 array([[ 1.        ,  2.45000005],
    #       [ 2.        ,  3.48684216],
    #       [ 3.        ,  3.41176462],
    #       [ 4.        ,  4.34803915],
    #       [ 5.        ,  3.66000009]], dtype=float32)
    
    #저장
    
    np.savetxt('user_rating_mean_array.csv', user_rating_mean_array, fmt='%.3f', delimiter=',')
    
    


    위처럼 한줄한줄 해석해보면서 읽어보고 써보면 다른것도 금방응용할 수 있더라

    'Python' 카테고리의 다른 글

    6. DataFrame 인덱싱  (0) 2017.08.07
    5. Pandas 자료구조  (0) 2017.08.03
    3. Numpy 함수  (0) 2017.08.02
    2. Numpy 배열 인덱싱  (0) 2017.08.01
    1. Numpy 배열의 생성과 연산  (0) 2017.08.01
    Posted by Config