{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "code", "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ], "metadata": { "id": "SHZ00Nm0lEdm" }, "execution_count": 1, "outputs": [] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "G0qlWsRrk4DV", "outputId": "f880bcf9-be1e-4523-eb5c-6cd5e1a75eeb" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "--2023-01-09 18:45:34-- https://files.grouplens.org/datasets/movielens/ml-latest-small.zip\n", "Resolving files.grouplens.org (files.grouplens.org)... 128.101.65.152\n", "Connecting to files.grouplens.org (files.grouplens.org)|128.101.65.152|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 978202 (955K) [application/zip]\n", "Saving to: ‘ml-latest-small.zip’\n", "\n", "ml-latest-small.zip 100%[===================>] 955.28K 4.10MB/s in 0.2s \n", "\n", "2023-01-09 18:45:35 (4.10 MB/s) - ‘ml-latest-small.zip’ saved [978202/978202]\n", "\n", "Archive: ml-latest-small.zip\n", " creating: ml-latest-small/\n", " inflating: ml-latest-small/links.csv \n", " inflating: ml-latest-small/tags.csv \n", " inflating: ml-latest-small/ratings.csv \n", " inflating: ml-latest-small/README.txt \n", " inflating: ml-latest-small/movies.csv \n" ] } ], "source": [ "!wget https://files.grouplens.org/datasets/movielens/ml-latest-small.zip\n", "!unzip ml-latest-small.zip" ] }, { "cell_type": "markdown", "source": [ "### Loading the data" ], "metadata": { "id": "xNGwDVaHoIHy" } }, { "cell_type": "code", "source": [ "movies = pd.read_csv('ml-latest-small/movies.csv')\n", "ratings = pd.read_csv('ml-latest-small/ratings.csv')\n" ], "metadata": { "id": "C0L0UiZdnjDw" }, "execution_count": 5, "outputs": [] }, { "cell_type": "markdown", "source": [ "### Investigating the data" ], "metadata": { "id": "1iDomU7ToLzX" } }, { "cell_type": "code", "source": [ "movies.sample(5)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "tXM3A7pSn9yM", "outputId": "7a77efc9-4b8a-429d-d6e8-fb7c892293f3" }, "execution_count": 6, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " movieId title genres\n", "2086 2772 Detroit Rock City (1999) Comedy\n", "82 93 Vampire in Brooklyn (1995) Comedy|Horror|Romance\n", "5288 8743 Biggles (1986) Adventure|Fantasy|Sci-Fi\n", "1254 1667 Mad City (1997) Action|Drama\n", "6050 40478 Night of the Lepus (1972) Horror|Sci-Fi|Thriller" ], "text/html": [ "\n", "
\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
movieIdtitlegenres
20862772Detroit Rock City (1999)Comedy
8293Vampire in Brooklyn (1995)Comedy|Horror|Romance
52888743Biggles (1986)Adventure|Fantasy|Sci-Fi
12541667Mad City (1997)Action|Drama
605040478Night of the Lepus (1972)Horror|Sci-Fi|Thriller
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 6 } ] }, { "cell_type": "code", "source": [ "ratings.sample(5)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "0YLXE3XioD-k", "outputId": "e8de47f3-cda4-4126-d250-f713757d6bd9" }, "execution_count": 7, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " userId movieId rating timestamp\n", "39958 274 5076 3.0 1172275318\n", "31813 219 4643 2.5 1194932356\n", "100472 610 81520 4.0 1479543207\n", "99812 610 4232 3.5 1479542821\n", "22462 153 1954 0.5 1525552646" ], "text/html": [ "\n", "
\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
userIdmovieIdratingtimestamp
3995827450763.01172275318
3181321946432.51194932356
100472610815204.01479543207
9981261042323.51479542821
2246215319540.51525552646
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 7 } ] }, { "cell_type": "code", "source": [ "ratings.info()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "VWQCoAqsoTfm", "outputId": "f3e90847-3c34-4d20-f830-ca3b73023239" }, "execution_count": 9, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "RangeIndex: 100836 entries, 0 to 100835\n", "Data columns (total 4 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 userId 100836 non-null int64 \n", " 1 movieId 100836 non-null int64 \n", " 2 rating 100836 non-null float64\n", " 3 timestamp 100836 non-null int64 \n", "dtypes: float64(1), int64(3)\n", "memory usage: 3.1 MB\n" ] } ] }, { "cell_type": "code", "source": [ "ratings.describe()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 300 }, "id": "8ZFMA9uyoYO_", "outputId": "d51c594d-7f56-44bc-d330-f9f104e26e0d" }, "execution_count": 10, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " userId movieId rating timestamp\n", "count 100836.000000 100836.000000 100836.000000 1.008360e+05\n", "mean 326.127564 19435.295718 3.501557 1.205946e+09\n", "std 182.618491 35530.987199 1.042529 2.162610e+08\n", "min 1.000000 1.000000 0.500000 8.281246e+08\n", "25% 177.000000 1199.000000 3.000000 1.019124e+09\n", "50% 325.000000 2991.000000 3.500000 1.186087e+09\n", "75% 477.000000 8122.000000 4.000000 1.435994e+09\n", "max 610.000000 193609.000000 5.000000 1.537799e+09" ], "text/html": [ "\n", "
\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
userIdmovieIdratingtimestamp
count100836.000000100836.000000100836.0000001.008360e+05
mean326.12756419435.2957183.5015571.205946e+09
std182.61849135530.9871991.0425292.162610e+08
min1.0000001.0000000.5000008.281246e+08
25%177.0000001199.0000003.0000001.019124e+09
50%325.0000002991.0000003.5000001.186087e+09
75%477.0000008122.0000004.0000001.435994e+09
max610.000000193609.0000005.0000001.537799e+09
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 10 } ] }, { "cell_type": "markdown", "source": [ "As the timestamp is not useful for our task, we drop it from our dataset" ], "metadata": { "id": "znX4JdJjokbG" } }, { "cell_type": "code", "source": [ "ratings1 = ratings.drop('timestamp', axis=1)" ], "metadata": { "id": "1TvD38Njojfu" }, "execution_count": 11, "outputs": [] }, { "cell_type": "markdown", "source": [ "### Building the rating matrix from the dataset" ], "metadata": { "id": "7cBnwsw6pSOv" } }, { "cell_type": "code", "source": [ "rating_matrix = ratings1.pivot(index='userId',columns='movieId',values='rating').fillna(0)" ], "metadata": { "id": "15ULmzG4pbDo" }, "execution_count": 12, "outputs": [] }, { "cell_type": "code", "source": [ "rating_matrix" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 455 }, "id": "GvG6MTXdqe8e", "outputId": "7fa62fae-2a48-4a5a-8a36-a0af08ee443a" }, "execution_count": 13, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "movieId 1 2 3 4 5 6 7 8 \\\n", "userId \n", "1 4.0 0.0 4.0 0.0 0.0 4.0 0.0 0.0 \n", "2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "5 4.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "... ... ... ... ... ... ... ... ... \n", "606 2.5 0.0 0.0 0.0 0.0 0.0 2.5 0.0 \n", "607 4.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "608 2.5 2.0 2.0 0.0 0.0 0.0 0.0 0.0 \n", "609 3.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "610 5.0 0.0 0.0 0.0 0.0 5.0 0.0 0.0 \n", "\n", "movieId 9 10 ... 193565 193567 193571 193573 193579 193581 \\\n", "userId ... \n", "1 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", "2 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", "3 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", "4 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", "5 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", "... ... ... ... ... ... ... ... ... ... \n", "606 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", "607 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", "608 0.0 4.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", "609 0.0 4.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", "610 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 \n", "\n", "movieId 193583 193585 193587 193609 \n", "userId \n", "1 0.0 0.0 0.0 0.0 \n", "2 0.0 0.0 0.0 0.0 \n", "3 0.0 0.0 0.0 0.0 \n", "4 0.0 0.0 0.0 0.0 \n", "5 0.0 0.0 0.0 0.0 \n", "... ... ... ... ... \n", "606 0.0 0.0 0.0 0.0 \n", "607 0.0 0.0 0.0 0.0 \n", "608 0.0 0.0 0.0 0.0 \n", "609 0.0 0.0 0.0 0.0 \n", "610 0.0 0.0 0.0 0.0 \n", "\n", "[610 rows x 9724 columns]" ], "text/html": [ "\n", "
\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
movieId12345678910...193565193567193571193573193579193581193583193585193587193609
userId
14.00.04.00.00.04.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
20.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
30.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
40.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
54.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
..................................................................
6062.50.00.00.00.00.02.50.00.00.0...0.00.00.00.00.00.00.00.00.00.0
6074.00.00.00.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
6082.52.02.00.00.00.00.00.00.04.0...0.00.00.00.00.00.00.00.00.00.0
6093.00.00.00.00.00.00.00.00.04.0...0.00.00.00.00.00.00.00.00.00.0
6105.00.00.00.00.05.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
\n", "

610 rows × 9724 columns

\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 13 } ] }, { "cell_type": "markdown", "source": [ "### Analysis the sparsity of the rating matrix\n", "\n", "We do it in 2 ways:\n", "\n", "First, without using the matrix. For this, we keep in mind that sparsity=ratings/(users*items)" ], "metadata": { "id": "wBBLH1oSrc5l" } }, { "cell_type": "code", "source": [ "number_ratings = len(ratings)\n", "number_users = len(ratings['userId'].unique())\n", "number_films = len(ratings['movieId'].unique())\n", "sparsity = number_ratings/(number_users*number_films)\n", "\n", "print(f'Sparsity: {sparsity}')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "tuD9RDNKq1AB", "outputId": "1c865a5e-73c4-4142-a4ac-efc012f1638e" }, "execution_count": 14, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Sparsity: 0.016999683055613623\n" ] } ] }, { "cell_type": "markdown", "source": [ "Second, directly from the matrix" ], "metadata": { "id": "h3abD7agub3L" } }, { "cell_type": "code", "source": [ "def calculate_sparsity(A):\n", " \"\"\"\n", " Calculates the sparsity of the matrix A\n", " \"\"\"\n", " sparsity = np.count_nonzero(A)/np.size(A)\n", " return sparsity" ], "metadata": { "id": "Xx0J9GypufzB" }, "execution_count": 15, "outputs": [] }, { "cell_type": "code", "source": [ "print(f'Sparsity: {calculate_sparsity(np.array(rating_matrix))}')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "n94d4D9zwBmO", "outputId": "7375cda2-60c3-49d6-af66-ff5ee0b4c107" }, "execution_count": 16, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Sparsity: 0.016999683055613623\n" ] } ] }, { "cell_type": "markdown", "source": [ "### Distribution of popularity of the movies" ], "metadata": { "id": "WmPoV4Nixbp0" } }, { "cell_type": "code", "source": [ "movies = ratings['movieId'].unique()\n", "\n", "popularity=[]\n", "\n", "for movie in movies:\n", " rates = ratings[ratings['movieId']== movie]\n", " popularity.append(len(rates))" ], "metadata": { "id": "BBeKHHeVxowt" }, "execution_count": 17, "outputs": [] }, { "cell_type": "code", "source": [ "plt.figure(figsize = (10, 8)) \n", "plt.hist(popularity)\n", "plt.title('Distribution of movies by number of ratings received')\n", "plt.xlabel('Popularity (Number of rates received)')\n", "plt.ylabel('Number of movies')" ], "metadata": { "id": "4VSRkhxgydym", "colab": { "base_uri": "https://localhost:8080/", "height": 530 }, "outputId": "e53f2b78-4ac1-4bbc-a5b1-9dccb813b4b7" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Text(0, 0.5, 'Number of movies')" ] }, "metadata": {}, "execution_count": 36 }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ] } ] }