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. Сформулируйте вопросы для анализа
Основной анализ будет сосредоточен на ответах на следующие вопросы. Важно отметить, что результаты этого анализа основаны на выборке и не являются окончательными.
- Найдите год с наибольшим количеством выпущенных фильмов
- Какой самый распространенный жанр?
- Найдите среднее значение. Рейтинги, присвоенные каждому фильму разными пользователями
- Фильм с наибольшим количеством оценок "Нет пользователей".
- Кто из пользователей оценил большее число фильмов и каково это значение Users Avg. Рейтинг ?
- Предскажите, какой рейтинг получит фильм в определенных жанрах?
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.