2.2 무비렌즈 데이터셋
무비렌즈(MovieLens) 데이터셋은 미국 미네소타 대학의 GroupLens 연구 그룹이 운영하고 있는 영화 추천 서비스인 MovieLens 사이트에서 수집한 데이터셋입니다.
2018년 9월26일에 작성된 무비렌즈 최신 데이터셋(ml-latest)은 1995년 1월 9일부터 2018년 9월 26일까지 최소 1편의 영화를 평가한 283,228명의 익명 사용자가 58,098편의 영화에 대하여 평가한 1부터 5 사이의 평점 27,753,444개와 태깅된 텍스트 1,108,997개가 포함되어 있는 다음 3개의 파일을 포함하고 있습니다.
- movies.csv - 영화 데이터
- ratings.csv - 평점 데이터
- tags.csv - 태그 데이터
2.2.1 데이터셋 살펴보기
여기에서는 데이터셋을 가져오기 위해 사용하는 각 CSV 파일의 구조 및 속성에 대해 살펴봅니다.
2.2.1.1 영화 데이터
영화 데이터를 포함하는 movies.csv 파일의 구조에 대해 살펴봅니다. movies.csv 파일은 일반적인 CSV 파일로 쉼표(Comma)로 각 속성을 구분하고 있으며 식별자인 영화 ID(movieId), 제목(title), 장르(genres)의 3개 속성 정보를 포함하는 58,098행으로 구성되어 있습니다. CSV 파일의 첫 번째 행은 평점 데이터의 속성을 나타내는 헤더 행이고, 헤더 행 다음의 각 행은 한 편의 영화를 나타내고 있습니다.
다음은 movies.csv 파일의 일부를 보여주고 있습니다.
movieId,title,genres
1,Toy Story (1995),Adventure|Animation|Children|Comedy|Fantasy
2,Jumanji (1995),Adventure|Children|Fantasy
3,Grumpier Old Men (1995),Comedy|Romance
4,Waiting to Exhale (1995),Comedy|Drama|Romance
5,Father of the Bride Part II (1995),Comedy
영화 데이터의 모든 속성에 대한 품질 진단
명칭 | 속성 | 유형 | 결측치(n) | 결측치(%) | 고유치(n) | 고유치(n/N) |
---|---|---|---|---|---|---|
영화ID | movieId | integer | 0 | 0 | 58,098 | 1 |
제목 | title | character | 0 | 0 | 58,020 | 1 |
장르 | genres | character | 0 | 0 | 1,643 | 0.03 |
2.2.1.2 평점 데이터
평점 데이터를 포함하는 ratings.csv 파일의 구조에 대해 살펴봅니다. ratings.csv 파일은 일반적인 CSV 파일로 쉼표(Comma)로 각 속성을 구분하고 있으며 식별자인 사용자ID(userId)와 영화ID(movieId), 평점(rating[),]{.mark} [1970년 1월 1일 0시부터 경과 시간을 초로 환산해 나타낸 타임스탬프(timestamp)]{.mark}의 4개 속성 정보를 포함하는 27,753,444행으로 구성되어 있습니다. CSV 파일의 첫 번째 행은 평점 데이터의 속성을 나타내는 헤더 행이고, 헤더 행 다음의 각 행은 한 명의 사용자가 한 편의 영화에 매긴 평점을 나타내고 있습니다.
다음은 ratings.csv 파일의 일부를 보여주고 있습니다.
userId,movieId,rating,timestamp
1,307,3.5,1256677221
1,481,3.5,1256677456
1,1091,1.5,1256677471
1,1257,4.5,1256677460
1,1449,4.5,1256677264
평점 데이터의 모든 속성에 대한 품질 진단 결과, 특이 사항은 없습니다. 여기에서는 결측치(Missing Value)에 대한 확인만 진행하며 데이터의 품질을 향상하기 위한 데이터 전처리(Data Preprocessing)는 진행하지 않습니다.
평점 데이터의 모든 속성에 대한 품질 진단
명칭 | 속성 | 유형 | 결측치(n) | 결측치(%) | 고유치(n) | 고유치(n/N) |
---|---|---|---|---|---|---|
사용자ID | userId | integer | 0 | 0 | 283,228 | 0.01 |
영화ID | movieId | integer | 0 | 0 | 53,889 | 0 |
평점 | rating | numeric | 0 | 0 | 10 | 0 |
타임스탬프 | timestamp | integer | 0 | 0 | 22,131,556 | 0.8 |
평점 속성은 0부터 5까지의 0.5점 단위로 증가하는 값을 가지는 데이터로 27,753,444개입니다.
0.5부터 5사이의 평점 비율
범주 | 빈도 | 비율(%) | 순위 |
---|---|---|---|
4 | 7,394,710 | 26.64 | 1 |
3 | 5,515,668 | 19.87 | 2 |
5 | 4,071,135 | 14.67 | 3 |
3.5 | 3,404,360 | 12.27 | 4 |
4.5 | 2,373,550 | 8.55 | 5 |
2 | 1,850,627 | 6.67 | 6 |
2.5 | 1,373,419 | 4.95 | 7 |
1 | 886,233 | 3.19 | 8 |
0.5 | 442,388 | 1.59 | 9 |
1.5 | 441,354 | 1.59 | 10 |
2.2.1.3 태그 데이터
태그 데이터를 포함하는 tags.csv 파일 구조에 대해 살펴봅니다. tags.csv 파일은 일반적인 CSV 파일로 쉼표(Comma)로 각 속성을 구분하고 결측치는 "NA" 문자열로 나타내고 있으며 사용자ID(userId)와 영화ID(movieId), 태그(tag), 타임스탬프(timestamp)의 4개 속성 정보를 포함하는 1,108,997행으로 구성되어 있습니다. CSV 파일의 첫 번째 행은 태그 데이터 속성을 나타내는 헤더 행이고, 헤더 행 다음의 각 행은 한 명의 사용자가 한 편의 영화에 남긴 태그를 나타내고 있습니다. 또한, 사용자는 영화에 태그를 여러 번 남길 수 있습니다
다음은 tags.csv 파일의 일부를 보여주고 있습니다.
userId,movieId,tag,timestamp
14,110,epic,1443148538
14,110,Medieval,1443148532
14,260,sci-fi,1442169410
14,260,space action,1442169421
14,318,imdb top 250,1442615195
태그 데이터의 모든 속성에 대한 품질 진단 결과, 태그(tag) 속성에 대한 결측 데이터는 16건인 것이 특이 사항으로 파악되어 결측치를 처리할 필요가 있습니다. 여기에서는 결측치(Missing Value)에 대한 확인만 진행하며 데이터의 품질을 향상하기 위한 데이터 전처리(Data Preprocessing)는 진행하지 않습니다.
표2-7. 도서 데이터의 모든 속성에 대한 품질 진단
명칭 | 속성 | 유형 | 결측치(n) | 결측치(%) | 고유치(n) | 고유치(n/N) |
---|---|---|---|---|---|---|
사용자ID | userId | integer | 0 | 0 | 19325 | 0.017 |
영화ID | movieId | integer | 0 | 0 | 45981 | 0.041 |
태그 | tag | character | 16 | 0 | 74712 | 0.067 |
타임스탬프 | timestamp | integer | 0 | 0 | 911869 | 0.822 |
2.2.2 예제 코드 실행해보기
앞서 "데이터셋 살펴보기"에서는 각 데이터 파일의 구조 및 속성에 대해 살펴보았습니다. 이제부터는 데이터 파일과 예제 코드를 사용하여 각 데이터 파일의 구조 및 속성에 대해 한번 더 확인해 볼 것입니다.
2.2.2.1 예제 코드 살펴보기
여기에서는 데이터 파일을 읽어 들여 확인하기 위해 JUnit으로 작성된 예제 클래스의 소스 코드를 살펴봅니다. 다음은 예제 데이터셋을 확인하기 위한 DatasetPrepareTest 테스트 클래스의 movieLensDataset는 테스트 메서드입니다.
DatasetPrepareTest.java
소스 코드에서 볼 수 있듯이 대부분의 코드는 테스트 처리를 위한 것으로 기본 흐름은 매우 단순합니다. 먼저 ❶ 매개변수를 바꿔가면서 실행하고 결과를 확인하기 위한 CSV 형식의 인자 목록을 설정합니다(10~14행). 반복 실행되는 r4tingsDataset 메서드에서는 테스트 인자들을 매개변수로 받습니다.
다음으로 ❷ CSV 형식의 파일을 읽어 들이기 위한 옵션을 설정하고(17~23행) ❸ Dataset
2.2.2.2 실행 결과 확인하기
여기에서는 앞서 살펴본 테스트 클래스인 DatasetPrepareTest 클래스의 테스트 메서드인 movieLensDataset 실행 결과를 살펴봅니다. 다음과 같이 명령 줄 인터페이스(CLI, Command line interface)에서 빌드 도구인 Gradle Wrapper로 DatasetPrepareTest 클래스의 테스트 메서드인 movieLensDataset를 실행해 봅니다.
./gradlew :recommender-examples:test --tests com.r4tings.recommender.examples.ch02.DatasetPrepareTest.movieLensDataset
테스트 메서드가 실행되면 직접 계산하기에서 다룬 결과를 확인하기 위해 설정한 테스트 인자 목록을 테스트 메서드의 매개변수에 대입해가며 반복 실행되어 결과가 출력됩니다.
다음은 반복 실행 테스트를 위한 테스트 인자 목록입니다.
테스트 인자 목록
CSV 파일 경로 | Parquet 저장 여부 |
---|---|
dataset/MovieLens/ml-latest/movies.csv | false |
dataset/MovieLens/ml-latest/ratings.csv | false |
dataset/MovieLens/ml-latest/tags.csv | false |
예제 코드의 실행 결과는 다음과 같습니다.
예제 코드 실행 결과더보기
이 실행 결과에서 볼 수 있듯이 설정한 테스트 인자 목록에 따라 테스트 케이스가 성공적으로 종료(PASSED)되었음을 확인할 수 있습니다. 또한, 실행 결과는 무비렌즈 데이터셋을 쉽게 확인하기 위해 처리 과정에서 파생된 상세 출력 정보도 함께 보여주고 있습니다.
2.2.2.3 R 패키지로 확인해보기
다음은 R 패키지를 이용하여 데이터 파일을 읽어 들여 확인하기 위해 작성된 R 스크립트입니다.
DatasetPrepareTest.R
이 R 스크립트는 데이터 파일을 읽어 들이고 데이터를 확인하기 위한 방법을 설명합니다. 소스 코드에서 볼 수 있듯이 기본 흐름은 매우 단순합니다. 먼저 ❶ data.table 패키지의 fread 함수를 이용하여 CSV 유형의 도서 데이터를 읽어 들이고(08행) ❷ 읽어 들인 평점 데이터를 출력합니다(16행). 다음으로 ❸ 아이템 데이터를 전달하여 dlookr 패키지의 diagnose 함수를 사용하여 변수의 타입, 결측값, 고유값을 출력합니다(18행). 평점 데이터(❹❺❻) 와 태그 데이터(❼❽❾)도 같은 방식으로 결과를 확인합니다.
R 스크립트를 실행 후 출력된 결과는 다음과 같습니다.
R 스크립트의 실행 결과는 다음과 같습니다.
R 스크립트 실행 결과더보기
이 실행 결과에서 볼 수 있듯이 ❶ CSV 유형의 아이템 데이터를 읽어 들인 경과시간, ❷ 읽어 들인 아이템 데이터의 출력 결과, ❸ 아이템 데이터의 품질 진단 결과를 확인할 수 있습니다. 평점 데이터(❹❺❻)와 태그 데이터(❼❽❾)도 같은 방식으로 확인합니다.
추천 시스템: 워크북
Comments
Do you have a problem, want to share feedback, or discuss further ideas? Feel free to leave a comment here! Please follow Rust's code of conduct. This comment thread directly maps to a discussion on GitHub, so you can also comment there if you prefer.
Instead of authenticating the giscus application, you can also comment directly on GitHub.