Skip to content

Instantly share code, notes, and snippets.

@yamanetoshi
Created July 22, 2018 06:43
Show Gist options
  • Save yamanetoshi/565fd82d001ca898158898849599add7 to your computer and use it in GitHub Desktop.
Save yamanetoshi/565fd82d001ca898158898849599add7 to your computer and use it in GitHub Desktop.
7.3.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "7.3.ipynb",
"version": "0.3.2",
"provenance": [],
"collapsed_sections": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"[View in Colaboratory](https://colab.research.google.com/gist/yamanetoshi/565fd82d001ca898158898849599add7/7-4.ipynb)"
]
},
{
"metadata": {
"id": "rEiDQKAFZUpc",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
""
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "SbJmdFDuZWq8",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"outputId": "11384aa0-45f7-433f-b745-b88c6bdf7a83"
},
"cell_type": "code",
"source": [
"!wget http://files.grouplens.org/papers/ml-100k.zip\n",
" "
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"--2018-04-19 11:23:49-- http://files.grouplens.org/papers/ml-100k.zip\n",
"Resolving files.grouplens.org (files.grouplens.org)... 128.101.34.235\n",
"Connecting to files.grouplens.org (files.grouplens.org)|128.101.34.235|:80... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 4924029 (4.7M) [application/zip]\n",
"Saving to: ‘ml-100k.zip’\n",
"\n",
"ml-100k.zip 100%[===================>] 4.70M 15.1MB/s in 0.3s \n",
"\n",
"2018-04-19 11:23:49 (15.1 MB/s) - ‘ml-100k.zip’ saved [4924029/4924029]\n",
"\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "8g_e2AaDZjQn",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "60fc184e-20ab-4baa-959d-87dc4e474464"
},
"cell_type": "code",
"source": [
"!ls\n"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"datalab\r\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "4Ztyp806ZlyX",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 442
},
"outputId": "e5325b81-4fb5-4f88-d66f-9897715060a3"
},
"cell_type": "code",
"source": [
"!unzip ml-100k.zip"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"Archive: ml-100k.zip\r\n",
" creating: ml-100k/\r\n",
" inflating: ml-100k/allbut.pl \r\n",
" inflating: ml-100k/mku.sh \r\n",
" inflating: ml-100k/README \r\n",
" inflating: ml-100k/u.data \r\n",
" inflating: ml-100k/u.genre \r\n",
" inflating: ml-100k/u.info \r\n",
" inflating: ml-100k/u.item \r\n",
" inflating: ml-100k/u.occupation \r\n",
" inflating: ml-100k/u.user \n",
" inflating: ml-100k/u1.base \n",
" inflating: ml-100k/u1.test \n",
" inflating: ml-100k/u2.base \n",
" inflating: ml-100k/u2.test \n",
" inflating: ml-100k/u3.base \n",
" inflating: ml-100k/u3.test \n",
" inflating: ml-100k/u4.base \n",
" inflating: ml-100k/u4.test \n",
" inflating: ml-100k/u5.base \n",
" inflating: ml-100k/u5.test \n",
" inflating: ml-100k/ua.base \n",
" inflating: ml-100k/ua.test \n",
" inflating: ml-100k/ub.base \n",
" inflating: ml-100k/ub.test \n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "KvadzNs-ZwFk",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 68
},
"outputId": "bb7101f1-5b98-4000-bb65-df167d7b4e62"
},
"cell_type": "code",
"source": [
"!ls ml-100k"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"allbut.pl u1.base u2.test u4.base u5.test ub.base\tu.genre u.occupation\r\n",
"mku.sh\t u1.test u3.base u4.test ua.base ub.test\tu.info\t u.user\r\n",
"README\t u2.base u3.test u5.base ua.test u.data\tu.item\r\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "l915Ol7SZ8eB",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"outputId": "29557289-a508-4ccc-f8a7-37a5b9412acb"
},
"cell_type": "code",
"source": [
"import pandas as pd\n",
"\n",
"u_cols = ['user_id', 'age', 'sex', 'occupation', 'zip_code']\n",
"users = pd.read_csv('ml-100k/u.user', sep='|', names=u_cols)\n",
"users.head()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>user_id</th>\n",
" <th>age</th>\n",
" <th>sex</th>\n",
" <th>occupation</th>\n",
" <th>zip_code</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>24</td>\n",
" <td>M</td>\n",
" <td>technician</td>\n",
" <td>85711</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>53</td>\n",
" <td>F</td>\n",
" <td>other</td>\n",
" <td>94043</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>23</td>\n",
" <td>M</td>\n",
" <td>writer</td>\n",
" <td>32067</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>24</td>\n",
" <td>M</td>\n",
" <td>technician</td>\n",
" <td>43537</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>33</td>\n",
" <td>F</td>\n",
" <td>other</td>\n",
" <td>15213</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" user_id age sex occupation zip_code\n",
"0 1 24 M technician 85711\n",
"1 2 53 F other 94043\n",
"2 3 23 M writer 32067\n",
"3 4 24 M technician 43537\n",
"4 5 33 F other 15213"
]
},
"metadata": {
"tags": []
},
"execution_count": 15
}
]
},
{
"metadata": {
"id": "8UpaQ9QSn8Os",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
},
"outputId": "00bffdee-9aac-4d5d-ab8e-0e7eec7b66e4"
},
"cell_type": "code",
"source": [
"!head ml-100k/u.user"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"1|24|M|technician|85711\r\n",
"2|53|F|other|94043\r\n",
"3|23|M|writer|32067\r\n",
"4|24|M|technician|43537\r\n",
"5|33|F|other|15213\r\n",
"6|42|M|executive|98101\r\n",
"7|57|M|administrator|91344\r\n",
"8|36|M|administrator|05201\r\n",
"9|29|M|student|01002\r\n",
"10|53|M|lawyer|90703\r\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "8_mDlkb8oRT9",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
},
"outputId": "e57dda5a-26dc-4600-bc66-fc406f8349f4"
},
"cell_type": "code",
"source": [
"!tail ml-100k/u.user"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"934|61|M|engineer|22902\r\n",
"935|42|M|doctor|66221\r\n",
"936|24|M|other|32789\r\n",
"937|48|M|educator|98072\r\n",
"938|38|F|technician|55038\r\n",
"939|26|F|student|33319\r\n",
"940|32|M|administrator|02215\r\n",
"941|20|M|student|97229\r\n",
"942|48|F|librarian|78209\r\n",
"943|22|M|student|77841\r\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "lUoWoCuUac0z",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"outputId": "35715a17-d139-4da1-bef1-0707007dc547"
},
"cell_type": "code",
"source": [
"r_cols = ['user_id', 'movie_id', 'rating', 'unix_timestamp']\n",
"ratings = pd.read_csv('ml-100k/u.data', sep='\\t', names=r_cols)\n",
"ratings['date'] = pd.to_datetime(ratings['unix_timestamp'], unit='s')\n",
"ratings.head()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>user_id</th>\n",
" <th>movie_id</th>\n",
" <th>rating</th>\n",
" <th>unix_timestamp</th>\n",
" <th>date</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>196</td>\n",
" <td>242</td>\n",
" <td>3</td>\n",
" <td>881250949</td>\n",
" <td>1997-12-04 15:55:49</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>186</td>\n",
" <td>302</td>\n",
" <td>3</td>\n",
" <td>891717742</td>\n",
" <td>1998-04-04 19:22:22</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>22</td>\n",
" <td>377</td>\n",
" <td>1</td>\n",
" <td>878887116</td>\n",
" <td>1997-11-07 07:18:36</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>244</td>\n",
" <td>51</td>\n",
" <td>2</td>\n",
" <td>880606923</td>\n",
" <td>1997-11-27 05:02:03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>166</td>\n",
" <td>346</td>\n",
" <td>1</td>\n",
" <td>886397596</td>\n",
" <td>1998-02-02 05:33:16</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" user_id movie_id rating unix_timestamp date\n",
"0 196 242 3 881250949 1997-12-04 15:55:49\n",
"1 186 302 3 891717742 1998-04-04 19:22:22\n",
"2 22 377 1 878887116 1997-11-07 07:18:36\n",
"3 244 51 2 880606923 1997-11-27 05:02:03\n",
"4 166 346 1 886397596 1998-02-02 05:33:16"
]
},
"metadata": {
"tags": []
},
"execution_count": 16
}
]
},
{
"metadata": {
"id": "AOylWK_jpMDB",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
},
"outputId": "7263bdee-f815-499e-c6c9-098d70708440"
},
"cell_type": "code",
"source": [
"!head ml-100k/u.data"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"196\t242\t3\t881250949\r\n",
"186\t302\t3\t891717742\r\n",
"22\t377\t1\t878887116\r\n",
"244\t51\t2\t880606923\r\n",
"166\t346\t1\t886397596\r\n",
"298\t474\t4\t884182806\r\n",
"115\t265\t2\t881171488\r\n",
"253\t465\t5\t891628467\r\n",
"305\t451\t3\t886324817\r\n",
"6\t86\t3\t883603013\r\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "tAEUhEQ7bC-h",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"outputId": "88ae6531-4594-4d22-9b74-05c7fd73be01"
},
"cell_type": "code",
"source": [
"m_cols = ['movie_id', 'title', 'release_date', 'video_release_date', 'imdb_url']\n",
"movies = pd.read_csv('ml-100k/u.item', sep='|', names=m_cols, usecols=range(5), encoding=\"latin1\")\n",
"movies.head()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>movie_id</th>\n",
" <th>title</th>\n",
" <th>release_date</th>\n",
" <th>video_release_date</th>\n",
" <th>imdb_url</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>Toy Story (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Toy%20Story%2...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>GoldenEye (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?GoldenEye%20(...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>Four Rooms (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Four%20Rooms%...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>Get Shorty (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Get%20Shorty%...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>Copycat (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Copycat%20(1995)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" movie_id title release_date video_release_date \\\n",
"0 1 Toy Story (1995) 01-Jan-1995 NaN \n",
"1 2 GoldenEye (1995) 01-Jan-1995 NaN \n",
"2 3 Four Rooms (1995) 01-Jan-1995 NaN \n",
"3 4 Get Shorty (1995) 01-Jan-1995 NaN \n",
"4 5 Copycat (1995) 01-Jan-1995 NaN \n",
"\n",
" imdb_url \n",
"0 http://us.imdb.com/M/title-exact?Toy%20Story%2... \n",
"1 http://us.imdb.com/M/title-exact?GoldenEye%20(... \n",
"2 http://us.imdb.com/M/title-exact?Four%20Rooms%... \n",
"3 http://us.imdb.com/M/title-exact?Get%20Shorty%... \n",
"4 http://us.imdb.com/M/title-exact?Copycat%20(1995) "
]
},
"metadata": {
"tags": []
},
"execution_count": 17
}
]
},
{
"metadata": {
"id": "4d9rhd0drQbx",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 207
},
"outputId": "9117870c-ff3d-448a-a82a-d1502b3ee296"
},
"cell_type": "code",
"source": [
"!head ml-100k/u.item"
],
"execution_count": 0,
"outputs": [
{
"output_type": "stream",
"text": [
"1|Toy Story (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Toy%20Story%20(1995)|0|0|0|1|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0\r\n",
"2|GoldenEye (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?GoldenEye%20(1995)|0|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0\r\n",
"3|Four Rooms (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Four%20Rooms%20(1995)|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0\r\n",
"4|Get Shorty (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Get%20Shorty%20(1995)|0|1|0|0|0|1|0|0|1|0|0|0|0|0|0|0|0|0|0\r\n",
"5|Copycat (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Copycat%20(1995)|0|0|0|0|0|0|1|0|1|0|0|0|0|0|0|0|1|0|0\r\n",
"6|Shanghai Triad (Yao a yao yao dao waipo qiao) (1995)|01-Jan-1995||http://us.imdb.com/Title?Yao+a+yao+yao+dao+waipo+qiao+(1995)|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0\r\n",
"7|Twelve Monkeys (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Twelve%20Monkeys%20(1995)|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|1|0|0|0\r\n",
"8|Babe (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Babe%20(1995)|0|0|0|0|1|1|0|0|1|0|0|0|0|0|0|0|0|0|0\r\n",
"9|Dead Man Walking (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Dead%20Man%20Walking%20(1995)|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0\r\n",
"10|Richard III (1995)|22-Jan-1996||http://us.imdb.com/M/title-exact?Richard%20III%20(1995)|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|1|0\r\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "YnURSOrMbfid",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"movie_rating = pd.merge(movies, ratings)\n",
"lens = pd.merge(movie_rating, users)"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "zHMtp29AsMNc",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 289
},
"outputId": "d875512a-7f10-41c6-8c5a-c338c9d972ee"
},
"cell_type": "code",
"source": [
"movie_rating.head()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>movie_id</th>\n",
" <th>title</th>\n",
" <th>release_date</th>\n",
" <th>video_release_date</th>\n",
" <th>imdb_url</th>\n",
" <th>user_id</th>\n",
" <th>rating</th>\n",
" <th>unix_timestamp</th>\n",
" <th>date</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>Toy Story (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Toy%20Story%2...</td>\n",
" <td>308</td>\n",
" <td>4</td>\n",
" <td>887736532</td>\n",
" <td>1998-02-17 17:28:52</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>Toy Story (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Toy%20Story%2...</td>\n",
" <td>287</td>\n",
" <td>5</td>\n",
" <td>875334088</td>\n",
" <td>1997-09-27 04:21:28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>Toy Story (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Toy%20Story%2...</td>\n",
" <td>148</td>\n",
" <td>4</td>\n",
" <td>877019411</td>\n",
" <td>1997-10-16 16:30:11</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>Toy Story (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Toy%20Story%2...</td>\n",
" <td>280</td>\n",
" <td>4</td>\n",
" <td>891700426</td>\n",
" <td>1998-04-04 14:33:46</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>Toy Story (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Toy%20Story%2...</td>\n",
" <td>66</td>\n",
" <td>3</td>\n",
" <td>883601324</td>\n",
" <td>1997-12-31 20:48:44</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" movie_id title release_date video_release_date \\\n",
"0 1 Toy Story (1995) 01-Jan-1995 NaN \n",
"1 1 Toy Story (1995) 01-Jan-1995 NaN \n",
"2 1 Toy Story (1995) 01-Jan-1995 NaN \n",
"3 1 Toy Story (1995) 01-Jan-1995 NaN \n",
"4 1 Toy Story (1995) 01-Jan-1995 NaN \n",
"\n",
" imdb_url user_id rating \\\n",
"0 http://us.imdb.com/M/title-exact?Toy%20Story%2... 308 4 \n",
"1 http://us.imdb.com/M/title-exact?Toy%20Story%2... 287 5 \n",
"2 http://us.imdb.com/M/title-exact?Toy%20Story%2... 148 4 \n",
"3 http://us.imdb.com/M/title-exact?Toy%20Story%2... 280 4 \n",
"4 http://us.imdb.com/M/title-exact?Toy%20Story%2... 66 3 \n",
"\n",
" unix_timestamp date \n",
"0 887736532 1998-02-17 17:28:52 \n",
"1 875334088 1997-09-27 04:21:28 \n",
"2 877019411 1997-10-16 16:30:11 \n",
"3 891700426 1998-04-04 14:33:46 \n",
"4 883601324 1997-12-31 20:48:44 "
]
},
"metadata": {
"tags": []
},
"execution_count": 19
}
]
},
{
"metadata": {
"id": "7hAUyG1Y0n6O",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 394
},
"outputId": "dbe4aec5-ff63-4bd2-c23e-4e8b54a83154"
},
"cell_type": "code",
"source": [
"lens.head()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>movie_id</th>\n",
" <th>title</th>\n",
" <th>release_date</th>\n",
" <th>video_release_date</th>\n",
" <th>imdb_url</th>\n",
" <th>user_id</th>\n",
" <th>rating</th>\n",
" <th>unix_timestamp</th>\n",
" <th>date</th>\n",
" <th>age</th>\n",
" <th>sex</th>\n",
" <th>occupation</th>\n",
" <th>zip_code</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>Toy Story (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Toy%20Story%2...</td>\n",
" <td>308</td>\n",
" <td>4</td>\n",
" <td>887736532</td>\n",
" <td>1998-02-17 17:28:52</td>\n",
" <td>60</td>\n",
" <td>M</td>\n",
" <td>retired</td>\n",
" <td>95076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>4</td>\n",
" <td>Get Shorty (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Get%20Shorty%...</td>\n",
" <td>308</td>\n",
" <td>5</td>\n",
" <td>887737890</td>\n",
" <td>1998-02-17 17:51:30</td>\n",
" <td>60</td>\n",
" <td>M</td>\n",
" <td>retired</td>\n",
" <td>95076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>5</td>\n",
" <td>Copycat (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Copycat%20(1995)</td>\n",
" <td>308</td>\n",
" <td>4</td>\n",
" <td>887739608</td>\n",
" <td>1998-02-17 18:20:08</td>\n",
" <td>60</td>\n",
" <td>M</td>\n",
" <td>retired</td>\n",
" <td>95076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>7</td>\n",
" <td>Twelve Monkeys (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Twelve%20Monk...</td>\n",
" <td>308</td>\n",
" <td>4</td>\n",
" <td>887738847</td>\n",
" <td>1998-02-17 18:07:27</td>\n",
" <td>60</td>\n",
" <td>M</td>\n",
" <td>retired</td>\n",
" <td>95076</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>8</td>\n",
" <td>Babe (1995)</td>\n",
" <td>01-Jan-1995</td>\n",
" <td>NaN</td>\n",
" <td>http://us.imdb.com/M/title-exact?Babe%20(1995)</td>\n",
" <td>308</td>\n",
" <td>5</td>\n",
" <td>887736696</td>\n",
" <td>1998-02-17 17:31:36</td>\n",
" <td>60</td>\n",
" <td>M</td>\n",
" <td>retired</td>\n",
" <td>95076</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" movie_id title release_date video_release_date \\\n",
"0 1 Toy Story (1995) 01-Jan-1995 NaN \n",
"1 4 Get Shorty (1995) 01-Jan-1995 NaN \n",
"2 5 Copycat (1995) 01-Jan-1995 NaN \n",
"3 7 Twelve Monkeys (1995) 01-Jan-1995 NaN \n",
"4 8 Babe (1995) 01-Jan-1995 NaN \n",
"\n",
" imdb_url user_id rating \\\n",
"0 http://us.imdb.com/M/title-exact?Toy%20Story%2... 308 4 \n",
"1 http://us.imdb.com/M/title-exact?Get%20Shorty%... 308 5 \n",
"2 http://us.imdb.com/M/title-exact?Copycat%20(1995) 308 4 \n",
"3 http://us.imdb.com/M/title-exact?Twelve%20Monk... 308 4 \n",
"4 http://us.imdb.com/M/title-exact?Babe%20(1995) 308 5 \n",
"\n",
" unix_timestamp date age sex occupation zip_code \n",
"0 887736532 1998-02-17 17:28:52 60 M retired 95076 \n",
"1 887737890 1998-02-17 17:51:30 60 M retired 95076 \n",
"2 887739608 1998-02-17 18:20:08 60 M retired 95076 \n",
"3 887738847 1998-02-17 18:07:27 60 M retired 95076 \n",
"4 887736696 1998-02-17 17:31:36 60 M retired 95076 "
]
},
"metadata": {
"tags": []
},
"execution_count": 20
}
]
},
{
"metadata": {
"id": "IJLiewOW1WG5",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 136
},
"outputId": "4bd1ba5b-c629-4622-ad34-9c89ff8681ba"
},
"cell_type": "code",
"source": [
"lens.groupby('user_id').size().head()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"user_id\n",
"1 272\n",
"2 62\n",
"3 54\n",
"4 24\n",
"5 175\n",
"dtype: int64"
]
},
"metadata": {
"tags": []
},
"execution_count": 28
}
]
},
{
"metadata": {
"id": "nsvRBv9vbwKN",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 459
},
"outputId": "963c5462-3281-43d9-8812-33ac1eb4d2d8"
},
"cell_type": "code",
"source": [
"lens.title.value_counts()[:25]"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Star Wars (1977) 583\n",
"Contact (1997) 509\n",
"Fargo (1996) 508\n",
"Return of the Jedi (1983) 507\n",
"Liar Liar (1997) 485\n",
"English Patient, The (1996) 481\n",
"Scream (1996) 478\n",
"Toy Story (1995) 452\n",
"Air Force One (1997) 431\n",
"Independence Day (ID4) (1996) 429\n",
"Raiders of the Lost Ark (1981) 420\n",
"Godfather, The (1972) 413\n",
"Pulp Fiction (1994) 394\n",
"Twelve Monkeys (1995) 392\n",
"Silence of the Lambs, The (1991) 390\n",
"Jerry Maguire (1996) 384\n",
"Chasing Amy (1997) 379\n",
"Rock, The (1996) 378\n",
"Empire Strikes Back, The (1980) 367\n",
"Star Trek: First Contact (1996) 365\n",
"Back to the Future (1985) 350\n",
"Titanic (1997) 350\n",
"Mission: Impossible (1996) 344\n",
"Fugitive, The (1993) 336\n",
"Indiana Jones and the Last Crusade (1989) 331\n",
"Name: title, dtype: int64"
]
},
"metadata": {
"tags": []
},
"execution_count": 11
}
]
},
{
"metadata": {
"id": "cMD4KvZ9cutj",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"import numpy as np"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "KWozhzL8cRvD",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 266
},
"outputId": "20f80dbb-a7f6-44d6-e1a6-8cf3d974718e"
},
"cell_type": "code",
"source": [
"#@title \n",
"movie_stats = lens.groupby('title').agg({'rating': [np.size, np.mean]})\n",
"movie_stats.sort_values(by=[('rating', 'mean')], ascending=False).head()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead tr th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe thead tr:last-of-type th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th colspan=\"2\" halign=\"left\">rating</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th>size</th>\n",
" <th>mean</th>\n",
" </tr>\n",
" <tr>\n",
" <th>title</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>They Made Me a Criminal (1939)</th>\n",
" <td>1</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Marlene Dietrich: Shadow and Light (1996)</th>\n",
" <td>1</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Saint of Fort Washington, The (1993)</th>\n",
" <td>2</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Someone Else's America (1995)</th>\n",
" <td>1</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Star Kid (1997)</th>\n",
" <td>3</td>\n",
" <td>5.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" rating \n",
" size mean\n",
"title \n",
"They Made Me a Criminal (1939) 1 5.0\n",
"Marlene Dietrich: Shadow and Light (1996) 1 5.0\n",
"Saint of Fort Washington, The (1993) 2 5.0\n",
"Someone Else's America (1995) 1 5.0\n",
"Star Kid (1997) 3 5.0"
]
},
"metadata": {
"tags": []
},
"execution_count": 22
}
]
},
{
"metadata": {
"id": "-jXTnrJzefCL",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
""
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "lzzmXx1AdNMB",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 576
},
"outputId": "80b5049c-fd9e-4f6b-f7f9-aabdbbe9305f"
},
"cell_type": "code",
"source": [
"atleast_100 = movie_stats['rating']['size'] >= 100\n",
"movie_stats[atleast_100].sort_values(by=[('rating', 'mean')], ascending=False)[:15]"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead tr th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe thead tr:last-of-type th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th colspan=\"2\" halign=\"left\">rating</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th>size</th>\n",
" <th>mean</th>\n",
" </tr>\n",
" <tr>\n",
" <th>title</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Close Shave, A (1995)</th>\n",
" <td>112</td>\n",
" <td>4.491071</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Schindler's List (1993)</th>\n",
" <td>298</td>\n",
" <td>4.466443</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Wrong Trousers, The (1993)</th>\n",
" <td>118</td>\n",
" <td>4.466102</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Casablanca (1942)</th>\n",
" <td>243</td>\n",
" <td>4.456790</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Shawshank Redemption, The (1994)</th>\n",
" <td>283</td>\n",
" <td>4.445230</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Rear Window (1954)</th>\n",
" <td>209</td>\n",
" <td>4.387560</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Usual Suspects, The (1995)</th>\n",
" <td>267</td>\n",
" <td>4.385768</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Star Wars (1977)</th>\n",
" <td>583</td>\n",
" <td>4.358491</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12 Angry Men (1957)</th>\n",
" <td>125</td>\n",
" <td>4.344000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Citizen Kane (1941)</th>\n",
" <td>198</td>\n",
" <td>4.292929</td>\n",
" </tr>\n",
" <tr>\n",
" <th>To Kill a Mockingbird (1962)</th>\n",
" <td>219</td>\n",
" <td>4.292237</td>\n",
" </tr>\n",
" <tr>\n",
" <th>One Flew Over the Cuckoo's Nest (1975)</th>\n",
" <td>264</td>\n",
" <td>4.291667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Silence of the Lambs, The (1991)</th>\n",
" <td>390</td>\n",
" <td>4.289744</td>\n",
" </tr>\n",
" <tr>\n",
" <th>North by Northwest (1959)</th>\n",
" <td>179</td>\n",
" <td>4.284916</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Godfather, The (1972)</th>\n",
" <td>413</td>\n",
" <td>4.283293</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" rating \n",
" size mean\n",
"title \n",
"Close Shave, A (1995) 112 4.491071\n",
"Schindler's List (1993) 298 4.466443\n",
"Wrong Trousers, The (1993) 118 4.466102\n",
"Casablanca (1942) 243 4.456790\n",
"Shawshank Redemption, The (1994) 283 4.445230\n",
"Rear Window (1954) 209 4.387560\n",
"Usual Suspects, The (1995) 267 4.385768\n",
"Star Wars (1977) 583 4.358491\n",
"12 Angry Men (1957) 125 4.344000\n",
"Citizen Kane (1941) 198 4.292929\n",
"To Kill a Mockingbird (1962) 219 4.292237\n",
"One Flew Over the Cuckoo's Nest (1975) 264 4.291667\n",
"Silence of the Lambs, The (1991) 390 4.289744\n",
"North by Northwest (1959) 179 4.284916\n",
"Godfather, The (1972) 413 4.283293"
]
},
"metadata": {
"tags": []
},
"execution_count": 23
}
]
},
{
"metadata": {
"id": "gjujjtHAwBbp",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 136
},
"outputId": "225b1b03-566f-4326-a346-dfe742062961"
},
"cell_type": "code",
"source": [
"atleast_100.head()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"title\n",
"'Til There Was You (1997) False\n",
"1-900 (1994) False\n",
"101 Dalmatians (1996) True\n",
"12 Angry Men (1957) True\n",
"187 (1997) False\n",
"Name: size, dtype: bool"
]
},
"metadata": {
"tags": []
},
"execution_count": 24
}
]
},
{
"metadata": {
"id": "4rWR6Q51wV0c",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 266
},
"outputId": "4c22e163-19b8-4f65-b3db-d47a346642c0"
},
"cell_type": "code",
"source": [
"movie_stats[atleast_100].head()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead tr th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe thead tr:last-of-type th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th colspan=\"2\" halign=\"left\">rating</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th>size</th>\n",
" <th>mean</th>\n",
" </tr>\n",
" <tr>\n",
" <th>title</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>101 Dalmatians (1996)</th>\n",
" <td>109</td>\n",
" <td>2.908257</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12 Angry Men (1957)</th>\n",
" <td>125</td>\n",
" <td>4.344000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2001: A Space Odyssey (1968)</th>\n",
" <td>259</td>\n",
" <td>3.969112</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Absolute Power (1997)</th>\n",
" <td>127</td>\n",
" <td>3.370079</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Abyss, The (1989)</th>\n",
" <td>151</td>\n",
" <td>3.589404</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" rating \n",
" size mean\n",
"title \n",
"101 Dalmatians (1996) 109 2.908257\n",
"12 Angry Men (1957) 125 4.344000\n",
"2001: A Space Odyssey (1968) 259 3.969112\n",
"Absolute Power (1997) 127 3.370079\n",
"Abyss, The (1989) 151 3.589404"
]
},
"metadata": {
"tags": []
},
"execution_count": 25
}
]
},
{
"metadata": {
"id": "p8jFmTDiej5O",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 380
},
"outputId": "e8a2e20b-1831-4339-c7b6-2aa373d36ecb"
},
"cell_type": "code",
"source": [
"from matplotlib import pyplot as plt\n",
"plt.style.use('ggplot')\n",
"\n",
"lens.groupby('user_id').size().sort_values(ascending=False).hist()\n",
"\n",
"plt.xlabel('rating size')\n",
"plt.ylabel('count of rating')"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Text(0,0.5,'count of rating')"
]
},
"metadata": {
"tags": []
},
"execution_count": 24
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nfa+3b9+uZ599Vq+99ppsNpu6d++usWPHSpLWrFmjzz77TDabTRkZGerXr19bld18lqGKi4utWbNm\nWZZlWbt377amTZvWxhWduaNHj1ozZsywFixYYL333nuWZVlWXl6e9emnn1qWZVlvvfWW9c9//tM6\nevSoNWHCBKu6utqqra21HnvsMauqqqotS2+WzZs3WzNnzrQsy7IqKyuthx56yKj+LMuyPvnkE+ud\nd96xLMuyysvLrQkTJhjXo2VZ1rJly6wpU6ZY69evN66/LVu2WC+88EKjMdN6rKystCZMmGAdOXLE\ncrvd1oIFC4zr8bji4mJr8eLF1owZM6xt27ZZlmVZc+fOtTZt2mTt37/fmjx5slVfX29VVFRYjzzy\niNXQ0NDGFftn7C53k24jGxISoqlTpza6Jr+4uFjJycmSpOTkZBUVFamsrExxcXFyOBwKDQ1VQkKC\nSkpK2qrsZuvdu7cmTpwoSYqIiFBtba1R/UnSwIEDNXz4cEnSoUOHFB0dbVyP3333nfbs2aO+fftK\nMusz2hTTety8ebMSExMVHh4ul8ulBx980Lgej1u1apVGjBih8vJy397bq6++Wps3b9aWLVvUt29f\n2e12OZ1OdenSRXv27Gnjiv0zNtA9Ho+cTqfv9fHbyHZEwcHBCg0NbTRWW1urkJAQSf/XW0ftOSgo\nSGFhYZJ+2CXWt29fo/r7saeeekrz5s3TmDFjjOtxyZIluvfee32vTetPkvbs2aPZs2crKytLRUVF\nxvVYXl6u2tpazZ49W9OnT9fmzZuN61GSysrK1LlzZwUFBSkiIsI33qlTJ33//fcn7e/7779vi1JP\ni9HH0H/M4uq8dm/Dhg1at26dnnrqKU2YMKGtywmI7Oxs7dy5U6+88opRn8mPPvpIvXr1UteuXdu6\nlIC54IILdPvtt2vAgAHav3+/nn76aTU0NLR1WS2uqqpKjz/+uA4cOKCnn37aqM/pcevWrdN11113\nwnhTvXaUv4GxM3TTbyMbFhamuro6SZLb7ZbL5Tqh5+PjHcGXX36p1atXa9q0aXI4HMb1t2PHDh08\neFCS1KNHDzU0NCg8PNyYHjdt2qSNGzfqySef1Lp16/T2228b928YHR2tgQMHymazqVu3boqKilJ1\ndbVRPXbq1EkJCQkKDg5Wt27dFB4ebtTn9Lji4mIlJCTI6XSqqqrKN368j+jo6A6ZH8YGuum3kU1M\n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\nrkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4b7e428e48>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "c136pIdAkfT2",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 297
},
"outputId": "b4b8015f-fea2-49d4-8ef3-913bd684034e"
},
"cell_type": "code",
"source": [
"user_stats = lens.groupby('user_id').agg({'rating': [np.size, np.mean]})\n",
"user_stats['rating'].describe()"
],
"execution_count": 0,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>size</th>\n",
" <th>mean</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>943.000000</td>\n",
" <td>943.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>106.044539</td>\n",
" <td>3.588191</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>100.931743</td>\n",
" <td>0.445233</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>20.000000</td>\n",
" <td>1.491954</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>33.000000</td>\n",
" <td>3.323054</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>65.000000</td>\n",
" <td>3.620690</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>148.000000</td>\n",
" <td>3.869565</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>737.000000</td>\n",
" <td>4.869565</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" size mean\n",
"count 943.000000 943.000000\n",
"mean 106.044539 3.588191\n",
"std 100.931743 0.445233\n",
"min 20.000000 1.491954\n",
"25% 33.000000 3.323054\n",
"50% 65.000000 3.620690\n",
"75% 148.000000 3.869565\n",
"max 737.000000 4.869565"
]
},
"metadata": {
"tags": []
},
"execution_count": 25
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment