Movie-Lens-Dataset-Visualization-and-Prediction

Этот набор данных (ml-latest-small) описывает 5-звездочный рейтинг и активность тегов произвольного текста от MovieLens, службы рекомендаций фильмов. Он содержит 100 836 оценок и 3 683 применения тегов для 9 742 фильмов. Эти данные были созданы 610 пользователями в период с 29 марта 1996 г. по 24 сентября 2018 г. Этот набор данных был сгенерирован 26 сентября 2018 г.

Пользователи были выбраны случайным образом для включения. Все выбранные пользователи оценили не менее 20 фильмов. Демографическая информация не включена. Каждый пользователь представлен идентификатором, и никакой другой информации не предоставляется.

Данные содержатся в файлах links.csv, movies.csv, ratings.csv и tags.csv. Более подробная информация о содержимом и использовании всех этих файлов приведена ниже.

Это набор данных для разработки. Таким образом, он может меняться со временем и не является подходящим набором данных для совместного использования результатов исследований. Посмотрите доступные наборы данных эталонных, если вы этого хотите.

Этот и другие наборы данных GroupLens общедоступны для загрузки по адресу http://grouplens.org/datasets/.

Ни Университет Миннесоты, ни кто-либо из вовлеченных исследователей не может гарантировать правильность данных, их пригодность для какой-либо конкретной цели или достоверность результатов, основанных на использовании набора данных. Набор данных может быть использован для любых исследовательских целей при соблюдении следующих условий:

  • Пользователь не может заявлять или подразумевать какое-либо одобрение со стороны Университета Миннесоты или Исследовательской группы GroupLens.
  • Пользователь должен подтвердить использование набора данных в публикациях, являющихся результатом использования набора данных (информацию о цитировании см. ниже).
  • Пользователь может распространять набор данных, включая преобразования, при условии, что он распространяется на тех же условиях лицензии.
  • Пользователь не может использовать эту информацию в каких-либо коммерческих или коммерческих целях без предварительного получения разрешения от преподавателя Исследовательского проекта GroupLens в Университете Миннесоты.
  • Исполняемые программные сценарии предоставляются «как есть» без каких-либо явных или подразумеваемых гарантий, включая, помимо прочего, подразумеваемые гарантии товарного состояния и пригодности для конкретной цели. Весь риск, связанный с их качеством и производительностью, лежит на вас. Если программа окажется неисправной, вы берете на себя расходы на все необходимое обслуживание, ремонт или исправление.

Ни при каких обстоятельствах Университет Миннесоты, его филиалы или сотрудники не несут ответственности перед вами за любой ущерб, возникший в результате использования или невозможности использования этих программ (включая, помимо прочего, потерю данных или их неточность).

Если у вас есть дополнительные вопросы или комментарии, пишите на [email protected]

Чтобы подтвердить использование набора данных в публикациях, процитируйте следующую статью:

Ф. Максвелл Харпер и Джозеф А. Констан. 2015. Наборы данных MovieLens: история и контекст. Транзакции ACM в интерактивных интеллектуальных системах (TiiS) 5, 4: 19: 1–19: 19. https://doi.org/10.1145/2827872

GroupLens — исследовательская группа Департамента компьютерных наук и инженерии Миннесотского университета. С момента своего основания в 1992 году исследовательские проекты GroupLens исследовали множество областей, включая:

  • рекомендательные системы
  • интернет-сообщества
  • мобильные и вездесущие технологии
  • электронные библиотеки
  • локальные географические информационные системы

GroupLens Research управляет рекомендателем фильмов на основе совместной фильтрации MovieLens, которая является источником этих данных. Мы рекомендуем вам посетить http://movielens.org, чтобы попробовать! Если у вас есть интересные идеи для экспериментальной работы над MovieLens, отправьте нам электронное письмо по адресу [email protected] — мы всегда заинтересованы в сотрудничестве с внешними сотрудниками.

Форматирование и кодирование

Файлы наборов данных записываются как файлы значения, разделенные запятыми с одной строкой заголовка. Столбцы, содержащие запятые (,), экранируются двойными кавычками ("). Эти файлы имеют кодировку UTF-8. Если символы с диакритическими знаками в названиях фильмов или значениях тегов (например, Misérables, Les (1995)) отображаются неправильно, убедитесь, что любая программа, считывающая данные, например текстовый редактор, терминал или скрипт, настроена на UTF-8.

Идентификаторы пользователей

Пользователи MovieLens были выбраны случайным образом для включения. Их идентификаторы были анонимизированы. Идентификаторы пользователей совпадают между ratings.csv и tags.csv (т. е. один и тот же идентификатор относится к одному и тому же пользователю в двух файлах).

Идентификаторы фильмов

В набор данных включаются только фильмы с хотя бы одним рейтингом или тегом. Эти идентификаторы фильмов соответствуют идентификаторам, используемым на веб-сайте MovieLens (например, идентификатор 1 соответствует URL-адресу https://movielens.org/movies/1). Идентификаторы фильмов совпадают между ratings.csv, tags.csv, movies.csv и links.csv (т. е. один и тот же идентификатор относится к одному и тому же фильму в этих четырех файлах данных).

Структура файла данных рейтингов (ratings.csv)

Все оценки содержатся в файле ratings.csv. Каждая строка этого файла после строки заголовка представляет одну оценку одного фильма одним пользователем и имеет следующий формат:

Строки в этом файле упорядочены сначала по идентификатору пользователя, а затем внутри пользователя по идентификатору фильма.

Рейтинги выставляются по пятибалльной шкале с шагом в ползвезды (0,5 звезды — 5,0 звезды).

Временные метки представляют собой секунды с полуночи по всемирному координированному времени (UTC) 1 января 1970 года.

Все теги содержатся в файле tags.csv. Каждая строка этого файла после строки заголовка представляет один тег, примененный к одному фильму одним пользователем, и имеет следующий формат:

Строки в этом файле упорядочены сначала по идентификатору пользователя, а затем внутри пользователя по идентификатору фильма.

Теги — это пользовательские метаданные о фильмах. Каждый тег обычно представляет собой одно слово или короткую фразу. Значение, значение и назначение конкретного тега определяется каждым пользователем.

Временные метки представляют собой секунды с полуночи по всемирному координированному времени (UTC) 1 января 1970 года.

Структура файлов данных фильмов (movies.csv)

Информация о фильме содержится в файле movies.csv. Каждая строка этого файла после строки заголовка представляет один фильм и имеет следующий формат:

Названия фильмов вводятся вручную или импортируются с https://www.themoviedb.org/ и включают год выпуска в скобках. В этих названиях могут быть ошибки и несоответствия.

Жанры представляют собой список, разделенный вертикальной чертой, и выбираются из следующего:

Идентификаторы, которые можно использовать для связи с другими источниками данных фильма, содержатся в файле links.csv. Каждая строка этого файла после строки заголовка представляет один фильм и имеет следующий формат:

movieId — это идентификатор фильмов, используемый https://movielens.org. Например, фильм История игрушек имеет ссылку https://movielens.org/movies/1.

imdbId — это идентификатор фильмов, используемый http://www.imdb.com. Например, фильм История игрушек имеет ссылку http://www.imdb.com/title/tt0114709/.

tmdbId — это идентификатор фильмов, используемый https://www.themoviedb.org. Например, фильм История игрушек имеет ссылку https://www.themoviedb.org/movie/862.

Использование перечисленных выше ресурсов регулируется условиями каждого поставщика.

Перекрестная проверка

Предыдущие версии набора данных MovieLens включали либо предварительно вычисленные перекрестные складки, либо сценарии для выполнения этих вычислений. Мы больше не связываем ни одну из этих функций с набором данных, поскольку большинство современных наборов инструментов предоставляют ее как встроенную функцию. Если вы хотите узнать о стандартных подходах к перекрестным вычислениям в контексте оценки рекомендательных систем, см. LensKit для инструментов, документации и примеров кода с открытым исходным кодом.

Этот набор данных (ml-latest-small) описывает 5-звездочный рейтинг и активность тегов произвольного текста от службы рекомендаций фильмов. Он содержит 100 836 оценок и 3683 применения тегов к 9 742 фильмам. Эти данные были созданы 610 пользователями в период с 29 марта 1996 года по 24 сентября 2018 года. Этот набор данных был создан в сентябре. 26, 2018.

Содержание

  1. Сформулировать вопросы для анализа
  2. Импорт необходимых библиотек
  3. Читайте и исследуйте/анализируйте данные
  4. Описательная аналитика и визуализация
  5. Заключительное резюме и результаты
  6. Моделируйте, предскажите и решите (если возможно)
  7. Оценка модели (если возможно)

1. Сформулируйте вопросы для анализа

Основной анализ будет сосредоточен на ответах на следующие вопросы. Важно отметить, что результаты этого анализа основаны на выборке и не являются окончательными.

  1. Найдите год с наибольшим количеством выпущенных фильмов
  2. Какой самый распространенный жанр?
  3. Найдите среднее значение. Рейтинги, присвоенные каждому фильму разными пользователями
  4. Фильм с наибольшим количеством оценок "Нет пользователей".
  5. Кто из пользователей оценил большее число фильмов и каково это значение Users Avg. Рейтинг ?
  6. Предскажите, какой рейтинг получит фильм в определенных жанрах?

2. Импорт необходимых библиотек

#data analysis libraries 
import numpy as np
import pandas as pd

#visualization libraries
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#ignore warnings
import warnings
warnings.filterwarnings('ignore')

3. Прочтите и исследуйте/анализируйте данные

Пришло время ознакомиться с нашими данными, используя , и взглянуть на измерения и данные, используя функции и .

#import train and test CSV files
movie = pd.read_csv("movies.csv")
ratings = pd.read_csv("ratings.csv")
links = pd.read_csv("links.csv")
tags = pd.read_csv("tags.csv")
#take a look at the training data
print(movie.shape)
print(ratings.shape)
print(links.shape)
print(tags.shape,end="\n\n")
m=pd.read_csv("movies.csv")
movie.head(3)
links.head(3)
ratings.head(3)
tags.head(3)

#get a list of the features within the dataset
print("Movie : ", movie.columns,end="\n\n")
print("Rating : ", ratings.columns,end="\n\n")
print("Links : ", links.columns,end="\n\n")
print("Tags : ", tags.columns,end="\n\n")

movie.info()
ratings.info()
tags.info()
(9742, 3)
(100836, 4)
(9742, 3)
(3683, 4)

Movie :  Index(['movieId', 'title', 'genres'], dtype='object')

Rating :  Index(['userId', 'movieId', 'rating', 'timestamp'], dtype='object')

Links :  Index(['movieId', 'imdbId', 'tmdbId'], dtype='object')

Tags :  Index(['userId', 'movieId', 'tag', 'timestamp'], dtype='object')

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9742 entries, 0 to 9741
Data columns (total 3 columns):
movieId    9742 non-null int64
title      9742 non-null object
genres     9742 non-null object
dtypes: int64(1), object(2)
memory usage: 228.5+ KB
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100836 entries, 0 to 100835
Data columns (total 4 columns):
userId       100836 non-null int64
movieId      100836 non-null int64
rating       100836 non-null float64
timestamp    100836 non-null int64
dtypes: float64(1), int64(3)
memory usage: 3.1 MB
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3683 entries, 0 to 3682
Data columns (total 4 columns):
userId       3683 non-null int64
movieId      3683 non-null int64
tag          3683 non-null object
timestamp    3683 non-null int64
dtypes: int64(3), object(1)
memory usage: 115.2+ KB
  • Числовые характеристики: movieId , userId , рейтинг
  • Категорические характеристики: теги, жанры
  • Буквенно-цифровые функции: нет

The data types for each feature

Теперь, когда у нас есть представление о том, с какими функциями мы работаем, мы можем увидеть, сколько информации у нас есть о каждой из них.

# Droping the timestamp column from ratings and tags file
ratings.drop(columns='timestamp',inplace=True)
tags.drop(columns='timestamp',inplace=True)

Некоторые наблюдения:

  • userId: уникальный идентификатор, предоставляемый каждому пользователю.
  • userId были выбраны для включения случайным образом. Их идентификаторы были анонимизированы. Идентификаторы пользователей совпадают между ratings.csv и tags.csv (т. е. один и тот же идентификатор относится к одному и тому же пользователю в двух файлах).
  • movieId: уникальный идентификатор для каждого фильма.
  • В набор данных включаются только фильмы с хотя бы одним рейтингом или тегом. Эти идентификаторы фильмов совпадают с идентификаторами, используемыми на веб-сайте MovieLens (например, идентификатор 1 соответствует URL-адресу . Идентификаторы фильмов совпадают между ratings.csv, tags.csv, movies.csv и links.csv (т. е. один и тот же идентификатор относится к одному и тому же фильму в этих четырех Дата файлы).
  • рейтинг (rating.csv): рейтинги выставляются по 5-звездочной шкале с шагом в ползвезды (от 0,5 до 5,0 звезд).
  • Все рейтинги содержатся в файле ratings.csv. Каждая строка этого файла после строки заголовка представляет одну оценку одного фильма одним пользователем.
  • Среднее показывает, что средняя оценка составляет 3,2 звезды.
  • Жанры. Жанры представляют собой список, разделенный вертикальной чертой, и выбираются из следующих:
  • Детские
  • Документальный фильм
  • (жанры не указаны)

Предложения:

  • Столбец Timestamp из tags.csv и ratings.csv не имеет большого значения. Так что давайте бросим их
  • links.csv не содержит полезной информации, поэтому давайте удалим таблицу.
  • В movie.csv из столбца Название мы можем извлечь год выпуска фильма.
  • Для дальнейшего прогнозирования столбец genres должен быть извлечен, а все отдельные жанры должны быть закодированы в числовые значения (например, методом One-Hot-Encoding)

4. Описательная аналитика и визуализация

#Extracting the year from the Title
movie['Year'] = movie['title'].str.extract('.*\((.*)\).*',expand = False)

Теперь, когда мы извлекли данные из списка, давайте узнаем, в каком году было выпущено наибольшее количество фильмов.

Max No.of Movies Relesed = 311
Year = 2002





count    107.000000
mean      90.934579
std      102.122223
min        1.000000
25%       16.000000
50%       39.000000
75%      150.000000
max      311.000000
Name: title, dtype: float64

1.

В соответствии с приведенным выше результатом мы узнали, что в России больше всего фильмов, выпущенных с расширением .

На Avg. в Год выходит около релизов.

Теперь давайте извлечем человека из столбца «Жанры». И давайте создадим столбцы с каждым Genres в качестве имени и выделим «1», если фильм имеет жанр, иначе «0».

# Seperate the Geners Column and Encoding them with One-Hot-Encoding Method.
genres=[]
for i in range(len(movie.genres)):
    for x in movie.genres[i].split('|'):
        if x not in genres:
            genres.append(x)  

len(genres)
for x in genres:
    movie[x] = 0
for i in range(len(movie.genres)):
    for x in movie.genres[i].split('|'):
        movie[x][i]=1
movie

9742 строки × 24 столбца

Теперь, когда у нас есть данные в столбце «Жанры», преобразованные в числовые значения в разных столбцах, давайте отбросим столбец «Жанры».

movie.drop(columns='genres',inplace=True)
movie.sort_index(inplace=True)
x={}
for i in movie.columns[4:23]:
    x[i]=movie[i].value_counts()[1]
    print("{}    \t\t\t\t{}".format(i,x[i]))

plt.bar(height=x.values(),x=x.keys())
plt.show()
Animation    				611
Children    				664
Comedy    				3756
Fantasy    				779
Romance    				1596
Drama    				4361
Action    				1828
Crime    				1199
Thriller    				1894
Horror    				978
Mystery    				573
Sci-Fi    				980
War    				382
Musical    				334
Documentary    				440
IMAX    				158
Western    				167
Film-Noir    				87
(no genres listed)    				34

2.

Из вышесказанного мы можем сказать, что это самый распространенный жанр, выпущенный в области кино с 4361 Movies, за которым следует комедия с 3756 Movies и так далее. ...........

3.

Как мы видим, каждый фильм оценивается многими пользователями, давайте сгруппируем их по "movieId" и оценим каждый фильм со средним значением рейтинга, заданным разными пользователями.

9742 строки × 4 столбца

4.

Из приведенной выше таблицы мы можем сказать, что Forest Gump (1994) имеет номер. Рейтинги как средние.

Затем следует Shawshank Redemption, The (1994) с 317 User Ratings и в среднем и так далее.

5.

Окончательное резюме и результаты

6. Моделируйте, прогнозируйте и решайте

Мы будем использовать модель для Predict рейтинга фильма с заданными жанрами.

Поскольку мы знаем, что жанры Enocded (с методом), которые находятся от столбца 3'rd до столбца 23rd, устанавливаются как features, а Ratings (последний столбец) является ожидаемым result.

Используя функцию sklearn.model_selection.train_test_split, мы разделим все данные на train данные и test данные.

Для тех же данных, с которыми мы тренировались, выдает ошибку

Я установил n_estimators, так как это приводит к less error, чем другие, после ручного тестирования с несколькими значениями.

Теперь давайте попробуем predicting рейтинги с Test data и посмотрим на результат и на то, насколько хорошо предсказала модель.

Исходя из приведенных выше результатов, мы можем сказать, что модель прогнозирует рейтинг фильма с отклонением ± 0.70 от фактического значения.

Результаты

Поскольку анализ основан на выборке и не является окончательным, модель вполне надежна и предназначена для прогнозирования Rating Movie с ее Genres данными.

Первоначально опубликовано на https://aigamer28100.github.io.