2.3 예제 데이터셋

예제 데이터셋은 설명을 위해 사용되는 데이터셋입니다. 예제 데이터셋(r4tings)은 5명의 사용자가 10개의 아이템에 대하여 평가한 1부터 5 사이의 평점 30개와 태깅된 텍스트 30개가 포함되어 있는 다음 3개의 파일을 포함하고 있습니다.

  • items.csv - 아이템 데이터
  • ratings.csv - 평점 데이터
  • tags.csv - 태그 데이터
  • terms.csv - 단어 데이터

2.3.1 데이터셋 살펴보기

여기에서는 데이터셋을 가져오기 위해 사용하는 각 CSV 파일의 구조 및 속성에 대해 살펴봅니다.

2.3.1.1 아이템 데이터

아이템 데이터를 포함하는 items.csv 파일의 구조에 대해 살펴봅니다. items.csv 파일은 일반적인 CSV 파일로 쉼표(Comma)로 각 속성을 구분하고 있으며 식별자인 아이템(item), 라벨(label)의 2개 속성 정보를 포함하는 10행으로 구성되어 있습니다. CSV 파일의 첫 번째 행은 아이템 데이터의 속성을 나타내는 헤더 행이고, 헤더 행 다음의 각 행은 하나의 아이템을 나타내고 있습니다.

다음은 items.csv 파일을 보여주고 있습니다.

item,  label
  $i_1$, Item A
  $i_2$, Item B
  $i_3$, Item C
  $i_4$, Item D
  $i_5$, Item E
  $i_6$, Item F
  $i_7$, Item G
  $i_8$, Item H
  $i_9$, Item I
 $i_{10}$, Item J

아이템 데이터의 모든 속성에 대한 품질 진단 결과, 특이 사항은 없습니다.

표2-8. 아이템 데이터의 모든 속성에 대한 품질 진단

명칭 속성 유형 결측치(n) 결측치(%) 고유치(n) 고유치(n/N)
아이템 item character 0 0 10 1
라벨 label character 0 0 10 1

2.3.1.2 평점 데이터

평점 데이터를 포함하는 ratings.csv 파일의 구조에 대해 살펴봅니다. ratings.csv 파일은 일반적인 CSV 파일로 쉼표(Comma)로 각 속성을 구분하고 있으며 식별자인 사용자(user)와 아이템(item), 평점(rating), 1970년 1월 1일 0시부터 경과 시간을 초로 환산해 나타낸 타임스탬프(timestamp)의 3개 속성 정보를 포함하는 30행으로 구성되어 있습니다. CSV 파일의 첫 번째 행은 평점 데이터의 속성을 나타내는 헤더 행이고, 헤더 행 다음의 각 행은 한 명의 사용자가 하나의 아이템에 매긴 평점을 나타내고 있습니다. 또한 사용자는 하나의 영화에만 평점을 매길 수 있습니다.

다음은 ratings.csv 파일의 일부를 보여주고 있습니다.

user, item, rating,  timestamp
  $u_1$,   $i_1$,    0.5, 1546300800
  $u_1$,  $i_{10}$,    2.5, 1546300800
  $u_1$,   $i_2$,      5, 1546300800
  $u_1$,   $i_3$,      1, 1546300800
  $u_1$,   $i_6$,      3, 1546300800

평점 데이터의 모든 속성에 대한 품질 진단 결과, 특이 사항은 없습니다.

표2-9. 평점 데이터의 모든 속성에 대한 품질 진단

명칭 속성 유형 결측치(n) 결측치(%) 고유치(n) 고유치(n/N)
사용자 user character 0 0 5 0.17
아이템 item character 0 0 10 0.33
평점 rating numeric 0 0 9 0.30
타임스탬프 timestamp integer 0 0 7 0.23

평점 속성은 0부터 5까지의 0.5점 단위로 증가하는 값을 가지는 데이터로 30개이나 1.5에 해당하는 평점은 존재하지 않습니다.

0.5부터 5사이의 평점 비율

범주 빈도 비율(%) 순위
3.5 7 23.33 1
4 5 16.67 2
1 4 13.33 3
3 4 13.33 3
5 3 10 5
0.5 2 6.67 6
2 2 6.67 6
2.5 2 6.67 6
4.5 1 3.33 9

2.3.1.3 태그 데이터

태그 데이터를 포함하는 tag.csv 파일의 구조에 대해 살펴봅니다. tag.csv 파일은 일반적인 CSV 파일로 쉼표(Comma)로 각 속성을 구분하고 있으며 사용자(user)와 아이템(item), 태그(tag), 타임스탬프(timestamp)의 4개 속성 정보를 포함하는 30행으로 구성되어 있습니다. CSV 파일의 첫 번째 행은 태그데이터의 속성을 나타내는 헤더 행이고, 헤더 행 다음의 각 행은 한 명의 사용자가 하나의 아이템에 남긴 태그를 나타내고 있습니다. 또한, 사용자는 동일 아이템에 태그를 여러 번 등록할 수 있습니다.

다음은 tag.csv 파일의 일부를 보여주고 있습니다.

item, user, tag	      ,timestamp
  $i_1$,   $u_1$, Thriller  ,1546300800
  $i_1$,   $u_2$, Mystery   ,1546300800
  $i_1$,   $u_2$, Sci-Fi    ,1546300800
  $i_1$,   $u_3$, Adventure ,1546300800
  $i_1$,   $u_5$, Adventure ,1546300800

태그 데이터의 모든 속성에 대한 품질 진단 결과, 특이 사항은 없습니다.

표2-11. 태그 데이터의 모든 속성에 대한 품질 진단

명칭 속성 유형 결측치(n) 결측치(%) 고유치(n) 고유치(n/N)
아이템 item character 0 0 10 0.33
사용자 user character 0 0 5 0.17
태그 tag character 0 0 10 0.33
타임스탬프 timestamp integer 0 0 5 0.17

태그 속성은 10개의 고유 값을 가지는 데이터입니다.

태그 비율

범주 빈도 비율(%) 순위
Sci-Fi 7 23.33 1
Crime 5 16.67 2
Adventure 3 10 3
Fantasy 3 10 3
Mystery 3 10 3
Thriller 3 10 3
Action 2 6.67 7
Comedy 2 6.67 7
Drama 1 3.33 9
Horror 1 3.33 9

2.3.1.4 단어 데이터

단어 데이터를 포함하는 terms.csv 파일의 구조에 대해 살펴봅니다. terms.csv 파일은 일반적인 CSV 파일로 쉼표(Comma)로 각 속성을 구분하고 있으며 사용자(user)와 아이템(item), 단어(term), 타임스탬프(timestamp)의 4개 속성 정보를 포함하는 30행으로 구성되어 있습니다. CSV 파일의 첫 번째 행은 태그데이터의 속성을 나타내는 헤더 행이고, 헤더 행 다음의 각 행은 한 명의 사용자가 하나의 아이템에 남긴 키워드를 나타내고 있습니다. 또한, 사용자는 동일 아이템에 키워드를 여러 번 등록할 수 있습니다.

다음은 terms.csv 파일의 일부를 보여주고 있습니다.

user, item,        term,  timestamp
  $u_1$,   $i_1$,  enthusiasm, 1546300800
  $u_2$,   $i_1$,   excellent, 1546300800
  $u_2$,   $i_1$,  optimistic, 1546300800
  $u_3$,   $i_1$,    superior, 1546300800
  $u_5$,   $i_1$,    superior, 1546300800

단어 데이터의 모든 속성에 대한 품질 진단 결과, 특이 사항은 없습니다.

표2-11. 도서 데이터의 모든 속성에 대한 품질 진단

명칭 속성 유형 결측치(n) 결측치(%) 고유치(n) 고유치(n/N)
사용자 user character 0 0 5 0.17
아이템 item character 0 0 10 0.33
단어 term character 0 0 10 0.33
타임스탬프 timestamp integer 0 0 7 0.2

단어 속성은 감성을 나타내는 긍정과 부정 단어 각각 5개씩 10개의 값을 가지는 데이터입니다.

단어 비율

범주 빈도 비율(%) 순위
excellent 7 23.33 1
sadness 5 16.67 2
enthusiasm 3 10 3
optimistic 3 10 3
superior 3 10 3
wonderful 3 10 3
concern 2 6.67 7
hesitation 2 6.67 7
bad 1 3.33 9
complainant 1 3.33 9

2.3.2 예제 코드 실행해보기

앞서 "데이터셋 살펴보기"에서는 각 데이터 파일의 구조 및 속성에 대해 살펴보았습니다. 이제부터는 데이터 파일과 예제 코드를 사용하여 각 데이터 파일의 구조 및 속성에 대해 한번 더 확인해 볼 것입니다.

2.3.2.1 예제 코드 살펴보기

여기에서는 데이터 파일을 읽어 들여 확인하기 위해 JUnit으로 작성된 예제 클래스의 소스 코드를 살펴봅니다. 다음은 예제 데이터셋을 확인하기 위한 DatasetPrepareTest 테스트 클래스의 r4tingsDataset는 테스트 메서드입니다.

DatasetPrepareTest.java

소스 코드에서 볼 수 있듯이 대부분 코드는 테스트를 처리하기 위한 것으로 기본 흐름은 매우 단순합니다. 먼저 ❶ 매개변수를 바꿔가면서 실행하고 결과를 확인하기 위한 CSV 형식의 인자 목록을 설정합니다(10~14행). 반복 실행되는 r4tingsDataset 메서드에서는 테스트 인자들을 매개변수로 받습니다. 다음으로 ❷ CSV 형식의 파일을 읽어 들이기 위한 옵션을 설정하고(17~23행) ❸ Dataset 유형으로 CSV 파일을 읽어 들입니다(25행).

다음으로 ❹ 읽어 들인 Dataset의 기본 정보들을 출력합니다(27~29행) ❺ parquetSave 매개변수가 true인 경우 읽어 들인 데이터를 Parquet 파일로 저장합니다(33행). 마지막으로 ❻ CSV 파일을 읽어 들인 Dataset과 저장된 Parquet 파일을 읽어 들인 Dataset의 차집합한 결과의 수가 0인지 비교 확인합니다(35행).

2.3.2.2 실행 결과 확인하기

여기에서는 앞서 살펴본 테스트 클래스인 DatasetPrepareTest 클래스의 테스트 메서드인 r4tingsDataset 실행 결과를 살펴봅니다. 다음과 같이 명령 줄 인터페이스(CLI, Command line interface)에서 빌드 도구인 Gradle Wrapper로 DatasetPrepareTest 클래스의 테스트 메서드인 r4tingsDataset를 실행해 봅니다.

./gradlew :recommender-examples:test --tests com.r4tings.recommender.examples.ch02.DatasetPrepareTest.r4tingsDataset

테스트 메서드가 실행되면 직접 계산하기에서 다룬 결과를 확인하기 위해 설정한 테스트 인자 목록을 테스트 메서드의 매개변수에 대입해가며 반복 실행되어 결과가 출력됩니다.

다음은 반복 실행 테스트를 위한 테스트 인자 목록입니다

테스트 인자 목록

CSV파일 경로 Parquet 저장 여부
dataset/r4tings/items.csv true
dataset/r4tings/ratings.csv true
dataset/r4tings/tag.csv true

예제 코드의 실행 결과는 다음과 같습니다.

예제 코드 실행 결과더보기

이 실행 결과에서 볼 수 있듯이 설정한 테스트 인자 목록에 따라 예상대로 테스트 케이스가 성공적으로 종료(PASSED)되었음을 확인할 수 있습니다. 또한 실행 결과는 예제 데이터셋을 쉽게 확인하기 위해 처리 과정에서 파생된 상세 출력 정보도 함께 보여주고 있습니다.

2.3.2.3 R 패키지로 확인해보기

다음은 R 패키지를 이용하여 데이터 파일을 읽어들여 확인하기 위해 작성된 R 스크립트입니다.

DatasetPrepareTest.R

이 R 스크립트는 데이터 파일을 읽어 들이고 데이터를 확인하기 위한 방법을 설명합니다. 소스 코드에서 볼 수 있듯이 기본 흐름은 매우 단순합니다. 먼저 ❶ data.table 패키지의 fread 함수를 이용하여 CSV 유형의 도서 데이터를 읽어 들이고 (08행) ❷ 읽어 들인 평점 데이터를 출력합니다(16행). 다음으로 ❸ 아이템 데이터를 전달하여 dlookr 패키지의 diagnose 함수를 사용하여 변수의 타입, 결측값, 고유값을 출력합니다(18행). 평점 데이터(❹❺❻) 와 태그 데이터(❼❽❾)도 같은 방식으로 결과를 확인합니다.

R 스크립트의 실행 결과는 다음과 같습니다.

R 스크립트 실행 결과더보기

이 실행 결과에서 볼 수 있듯이 ❶ CSV 유형의 아이템 데이터를 읽어 들인 경과시간, ❷ 읽어 들인 아이템 데이터의 출력 결과, ❸ 아이템 데이터의 품질 진단 결과를 확인할 수 있습니다. 평점 데이터(❹❺❻) 와 태그 데이터(❼❽❾)도 같은 방식으로 확인합니다.

한글:2426 영어:2675 숫자:693

추천 시스템: 워크북

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.