{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "We will start with a relatively simple question, but with a difficult journey to get any answers:\n", "\n", "- What are the differences in reception between two fiction genres in the context of Goodreads?\n", "\n", "We look at Goodreads reviews at different scales and with different selection criteria." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/Users/marijnkoolen/Code/Huygens/scale\n" ] } ], "source": [ "# This reload library is just used for developing the REPUBLIC hOCR parser \n", "# and can be removed once this module is stable.\n", "%reload_ext autoreload\n", "%autoreload 2\n", "\n", "# This is needed to add the repo dir to the path so jupyter\n", "# can load the modules in the scripts directory from the notebooks\n", "import os\n", "import sys\n", "repo_dir = os.path.split(os.getcwd())[0]\n", "print(repo_dir)\n", "if repo_dir not in sys.path:\n", " sys.path.append(repo_dir)\n", "\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import json\n", "import csv\n", "import os\n", "\n", "data_dir = '../data/GoodReads'\n", "\n", "books_10k_file = os.path.join(data_dir, 'goodreads_reviews-books_above_10k_lang_reviews.csv.gz')\n", "reviewers_5k_file = os.path.join(data_dir, 'goodreads_reviews-reviewers_above_5k_reviews.csv.gz')\n", "random_1M_file = os.path.join(data_dir, 'goodreads_reviews-random_sample_1M.csv.gz')\n", "author_file = os.path.join(data_dir, 'goodreads_book_authors.csv.gz') # author information\n", "book_file = os.path.join(data_dir, 'goodreads_books.csv.gz') # basic book metadata\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "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", "
user_idbook_idreview_idratingdate_addeddate_updatedread_atstarted_atn_votesn_commentsreview_lengthreview_text
08842281e1d1347389f2ab93d60773d4d16981a5d2c3628987712d0e05c4f90798eb673Mon Dec 05 10:46:44 -0800 2016Wed Mar 22 11:37:04 -0700 2017NaNNaN1093Recommended by Don Katz. Avail for free in Dec...
18842281e1d1347389f2ab93d60773d4d81910708fb75b37b3613a34e39169f139870f315Fri Nov 18 17:43:26 -0800 2016Thu Aug 03 22:54:31 -0700 2017Mon Jul 24 09:32:34 -0700 2017Mon May 08 07:52:12 -0700 20172502585Best book of the series, and best book about A...
28842281e1d1347389f2ab93d60773d4d40955299706d01666058b1fb2a96b29a1260b5Sun Nov 18 16:31:28 -0800 2012Wed Dec 21 10:43:14 -0800 2016Fri Apr 17 00:00:00 -0700 2015Mon Apr 06 00:00:00 -0700 2015514734A truly inspirational book by a truly inspirat...
38842281e1d1347389f2ab93d60773d4d4986701bb7de32f9fadc36627e61aaef7a931424Thu Aug 04 10:02:02 -0700 2011Thu Aug 04 10:02:02 -0700 2011NaNNaN6473Found the Goodreads down image in this, and ma...
48842281e1d1347389f2ab93d60773d4d77566cedb8b21ea6ad95b05fa3868e05488e65Wed Mar 12 16:37:16 -0700 2008Wed Mar 22 11:46:03 -0700 2017Fri Oct 19 00:00:00 -0700 2012Wed Sep 19 00:00:00 -0700 201242284Seven amazing stories. Each one you think can'...
.......................................
10080068ba77e3c745ebddccc6306fc3c6bb25e17419895c7b6304251a1d94d6d1af8313f8ae75Mon Jul 08 11:47:23 -0700 2013Sat Jul 22 15:50:08 -0700 2017NaNSat Jul 22 00:00:00 -0700 201700177No finer Maine writer ever lived than Sarah Or...
1008007e223be160b89f218dbee70b5fbdccf762289246947c31eb080291307e4c2c4e9642640035Sun Aug 10 20:41:33 -0700 2014Tue Aug 26 13:53:08 -0700 2014Mon Aug 11 21:36:42 -0700 2014Tue Mar 25 00:00:00 -0700 201400976Love Songs With Bright Blue Chippiness Happi...
1008008e223be160b89f218dbee70b5fbdccf76228911459514f23d8a4f835e3a417afd679548595Sun Aug 10 14:21:44 -0700 2014Tue Aug 26 13:41:10 -0700 2014Sun Aug 10 14:25:39 -0700 2014Sun Aug 03 00:00:00 -0700 201400249Great Times. My Brand New 2014 KIA OPTIMA EX...
1008009e223be160b89f218dbee70b5fbdccf76203693887c1395ba0a319423707d8ffff79aeafc5Fri Jun 06 22:32:23 -0700 2014Tue Aug 26 14:07:08 -0700 2014Sun Aug 10 16:25:37 -0700 2014Wed Dec 25 00:00:00 -0800 201300365Jail. = Boring. I Beat People Down. \"You Are...
1008010e223be160b89f218dbee70b5fbdccf7618518801d2ed77d013ca33fe0eaa9a4013b352c75Thu Sep 19 02:49:29 -0700 2013Tue Aug 26 15:00:58 -0700 2014Tue Aug 12 23:38:26 -0700 2014Sat Aug 10 00:00:00 -0700 201300708I Was Trying To Add This Book Here On Goodre...
\n", "

1008011 rows × 12 columns

\n", "
" ], "text/plain": [ " user_id book_id \\\n", "0 8842281e1d1347389f2ab93d60773d4d 16981 \n", "1 8842281e1d1347389f2ab93d60773d4d 8191070 \n", "2 8842281e1d1347389f2ab93d60773d4d 40955 \n", "3 8842281e1d1347389f2ab93d60773d4d 4986701 \n", "4 8842281e1d1347389f2ab93d60773d4d 77566 \n", "... ... ... \n", "1008006 8ba77e3c745ebddccc6306fc3c6bb25e 174198 \n", "1008007 e223be160b89f218dbee70b5fbdccf76 22892469 \n", "1008008 e223be160b89f218dbee70b5fbdccf76 22891145 \n", "1008009 e223be160b89f218dbee70b5fbdccf76 20369388 \n", "1008010 e223be160b89f218dbee70b5fbdccf76 18518801 \n", "\n", " review_id rating \\\n", "0 a5d2c3628987712d0e05c4f90798eb67 3 \n", "1 8fb75b37b3613a34e39169f139870f31 5 \n", "2 299706d01666058b1fb2a96b29a1260b 5 \n", "3 bb7de32f9fadc36627e61aaef7a93142 4 \n", "4 cedb8b21ea6ad95b05fa3868e05488e6 5 \n", "... ... ... \n", "1008006 95c7b6304251a1d94d6d1af8313f8ae7 5 \n", "1008007 47c31eb080291307e4c2c4e964264003 5 \n", "1008008 9514f23d8a4f835e3a417afd67954859 5 \n", "1008009 7c1395ba0a319423707d8ffff79aeafc 5 \n", "1008010 d2ed77d013ca33fe0eaa9a4013b352c7 5 \n", "\n", " date_added date_updated \\\n", "0 Mon Dec 05 10:46:44 -0800 2016 Wed Mar 22 11:37:04 -0700 2017 \n", "1 Fri Nov 18 17:43:26 -0800 2016 Thu Aug 03 22:54:31 -0700 2017 \n", "2 Sun Nov 18 16:31:28 -0800 2012 Wed Dec 21 10:43:14 -0800 2016 \n", "3 Thu Aug 04 10:02:02 -0700 2011 Thu Aug 04 10:02:02 -0700 2011 \n", "4 Wed Mar 12 16:37:16 -0700 2008 Wed Mar 22 11:46:03 -0700 2017 \n", "... ... ... \n", "1008006 Mon Jul 08 11:47:23 -0700 2013 Sat Jul 22 15:50:08 -0700 2017 \n", "1008007 Sun Aug 10 20:41:33 -0700 2014 Tue Aug 26 13:53:08 -0700 2014 \n", "1008008 Sun Aug 10 14:21:44 -0700 2014 Tue Aug 26 13:41:10 -0700 2014 \n", "1008009 Fri Jun 06 22:32:23 -0700 2014 Tue Aug 26 14:07:08 -0700 2014 \n", "1008010 Thu Sep 19 02:49:29 -0700 2013 Tue Aug 26 15:00:58 -0700 2014 \n", "\n", " read_at started_at \\\n", "0 NaN NaN \n", "1 Mon Jul 24 09:32:34 -0700 2017 Mon May 08 07:52:12 -0700 2017 \n", "2 Fri Apr 17 00:00:00 -0700 2015 Mon Apr 06 00:00:00 -0700 2015 \n", "3 NaN NaN \n", "4 Fri Oct 19 00:00:00 -0700 2012 Wed Sep 19 00:00:00 -0700 2012 \n", "... ... ... \n", "1008006 NaN Sat Jul 22 00:00:00 -0700 2017 \n", "1008007 Mon Aug 11 21:36:42 -0700 2014 Tue Mar 25 00:00:00 -0700 2014 \n", "1008008 Sun Aug 10 14:25:39 -0700 2014 Sun Aug 03 00:00:00 -0700 2014 \n", "1008009 Sun Aug 10 16:25:37 -0700 2014 Wed Dec 25 00:00:00 -0800 2013 \n", "1008010 Tue Aug 12 23:38:26 -0700 2014 Sat Aug 10 00:00:00 -0700 2013 \n", "\n", " n_votes n_comments review_length \\\n", "0 1 0 93 \n", "1 25 0 2585 \n", "2 5 1 4734 \n", "3 6 4 73 \n", "4 4 2 284 \n", "... ... ... ... \n", "1008006 0 0 177 \n", "1008007 0 0 976 \n", "1008008 0 0 249 \n", "1008009 0 0 365 \n", "1008010 0 0 708 \n", "\n", " review_text \n", "0 Recommended by Don Katz. Avail for free in Dec... \n", "1 Best book of the series, and best book about A... \n", "2 A truly inspirational book by a truly inspirat... \n", "3 Found the Goodreads down image in this, and ma... \n", "4 Seven amazing stories. Each one you think can'... \n", "... ... \n", "1008006 No finer Maine writer ever lived than Sarah Or... \n", "1008007 Love Songs With Bright Blue Chippiness Happi... \n", "1008008 Great Times. My Brand New 2014 KIA OPTIMA EX... \n", "1008009 Jail. = Boring. I Beat People Down. \"You Are... \n", "1008010 I Was Trying To Add This Book Here On Goodre... \n", "\n", "[1008011 rows x 12 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# the review dataframe\n", "review_df = pd.read_csv(random_1M_file, sep='\\t', compression='gzip')\n", "\n", "review_df" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from dateutil.parser import parse, tz\n", "\n", "def parse_date(date_str):\n", " try:\n", " return parse(date_str).astimezone(utc)\n", " except TypeError:\n", " return None\n", "\n", "utc = tz.gettz('UTC')\n", "\n", "review_df['date_added'] = review_df.date_added.apply(parse_date)\n", "review_df['date_updated'] = review_df.date_updated.apply(parse_date)\n", "review_df['read_at'] = review_df.read_at.apply(parse_date)\n", "review_df['started_at'] = review_df.started_at.apply(parse_date)\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of empty reviews: 411\n" ] } ], "source": [ "print('Number of empty reviews:', len(review_df[review_df.review_length == 0]))\n", "review_df = review_df[review_df.review_length > 0]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# get a list of book ids that are in the review dataset\n", "review_book_ids = set(review_df.book_id.unique())\n", "\n", "# load basic book metadata (only book and author id and book title)\n", "metadata_columns = ['book_id', 'work_id', 'author_id', 'title', 'num_pages', 'publication_year']\n", "bookmeta_df = pd.read_csv(book_file, sep='\\t', compression='gzip', usecols=metadata_columns)\n", "\n", "def get_first(row):\n", " try:\n", " return first[row['work_id']]\n", " except KeyError:\n", " return None\n", "\n", "first = bookmeta_df[bookmeta_df.publication_year.notna()].groupby(['work_id']).publication_year.min()\n", "bookmeta_df['first_publication_year'] = bookmeta_df.apply(get_first, axis=1)\n", "\n", "# filter the book metadata to only the book ids in the review dataset\n", "bookmeta_df = bookmeta_df[bookmeta_df.book_id.isin(review_book_ids)]\n", "\n", "# load the author metadata to get author names \n", "author_df = pd.read_csv(author_file, sep='\\t', compression='gzip', usecols=['author_id', 'name'])\n", "author_df = author_df.rename(columns={'name': 'author_name'})\n", "\n", "# merge the book and author metadata into a single dataframe, \n", "# keeping only author names for books in the review dataset\n", "metadata_df = pd.merge(bookmeta_df, author_df, how='left')\n", "\n", "# merge the review dataset with the book metadata\n", "review_df = pd.merge(review_df, metadata_df, on='book_id')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "genre_file = os.path.join(data_dir, 'goodreads_book_genres_initial.csv.gz') # book genre information\n", "\n", "genremeta_df = pd.read_csv(genre_file, sep='\\t', compression='gzip')\n", "genre_df = genremeta_df[genremeta_df.book_id.isin(review_book_ids)]\n", "\n", "groups = genre_df.groupby(['book_id', 'genres']).size()\n", "genre_df = groups.unstack('genres').fillna(0)\n", "genre_df = genre_df.reset_index()\n", "print('number of books with genre information:', len(genre_df))\n", "\n", "review_df = pd.merge(review_df, genre_df, on='book_id', how='left')\n", "\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# This step writes the current dataframe to file, \n", "# so all the merging steps can be skipped in reruns of the notebook\n", "merged_data_file = '../data/Goodreads/goodreads_reviews-random_sample_1M.genre_merged.csv.gzip'\n", "#review_df.to_csv(merged_data_file, sep='\\t', compression='gzip')\n", "\n", "review_df = pd.read_csv(merged_data_file, sep='\\t', compression='gzip')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "number of books with genre information: 394888\n", "['children', 'comics, graphic', 'fantasy, paranormal', 'fiction', 'history, historical fiction, biography', 'mystery, thriller, crime', 'non-fiction', 'poetry', 'romance', 'young-adult']\n", "Number of reviews per genre:\n", "children 127656\n", "comics, graphic 90404\n", "fantasy, paranormal 446156\n", "fiction 918241\n", "history, historical fiction, biography 354004\n", "mystery, thriller, crime 409302\n", "non-fiction 199731\n", "poetry 34223\n", "romance 573330\n", "young-adult 408106\n" ] }, { "data": { "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", "
genresbook_idchildrencomics, graphicfantasy, paranormalfictionhistory, historical fiction, biographymystery, thriller, crimenon-fictionpoetryromanceyoung-adult
011.00.01.01.00.01.00.00.01.01.0
121.00.01.01.00.01.00.00.01.01.0
231.00.01.01.00.01.00.00.00.01.0
341.00.01.01.00.01.00.00.00.01.0
451.00.01.01.00.01.00.00.00.01.0
....................................
394883364880990.00.00.00.00.00.00.00.01.00.0
394884364942991.01.01.01.00.01.00.00.01.01.0
394885364983280.00.01.01.00.00.00.00.01.00.0
394886365084860.01.00.01.00.00.00.00.01.00.0
394887365141960.00.00.00.00.00.00.00.01.00.0
\n", "

394888 rows × 11 columns

\n", "
" ], "text/plain": [ "genres book_id children comics, graphic fantasy, paranormal fiction \\\n", "0 1 1.0 0.0 1.0 1.0 \n", "1 2 1.0 0.0 1.0 1.0 \n", "2 3 1.0 0.0 1.0 1.0 \n", "3 4 1.0 0.0 1.0 1.0 \n", "4 5 1.0 0.0 1.0 1.0 \n", "... ... ... ... ... ... \n", "394883 36488099 0.0 0.0 0.0 0.0 \n", "394884 36494299 1.0 1.0 1.0 1.0 \n", "394885 36498328 0.0 0.0 1.0 1.0 \n", "394886 36508486 0.0 1.0 0.0 1.0 \n", "394887 36514196 0.0 0.0 0.0 0.0 \n", "\n", "genres history, historical fiction, biography mystery, thriller, crime \\\n", "0 0.0 1.0 \n", "1 0.0 1.0 \n", "2 0.0 1.0 \n", "3 0.0 1.0 \n", "4 0.0 1.0 \n", "... ... ... \n", "394883 0.0 0.0 \n", "394884 0.0 1.0 \n", "394885 0.0 0.0 \n", "394886 0.0 0.0 \n", "394887 0.0 0.0 \n", "\n", "genres non-fiction poetry romance young-adult \n", "0 0.0 0.0 1.0 1.0 \n", "1 0.0 0.0 1.0 1.0 \n", "2 0.0 0.0 0.0 1.0 \n", "3 0.0 0.0 0.0 1.0 \n", "4 0.0 0.0 0.0 1.0 \n", "... ... ... ... ... \n", "394883 0.0 0.0 1.0 0.0 \n", "394884 0.0 0.0 1.0 1.0 \n", "394885 0.0 0.0 1.0 0.0 \n", "394886 0.0 0.0 1.0 0.0 \n", "394887 0.0 0.0 1.0 0.0 \n", "\n", "[394888 rows x 11 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "genres = list(genre_df.columns)[1:]\n", "print(genres)\n", "\n", "print('Number of reviews per genre:')\n", "for genre in genres:\n", " print(f'{genre: <40}{len(review_df[review_df[genre] == 1]): >10}')\n", "\n", "genre_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The genres have been added as separate columns to the review dataframe, so that it's easy to select reviews for books in a specific genre. \n", "\n", "The *poetry* and *comics, graphics* genres are the smallest genres, with fewer than 100,000 reviews. The *fiction* genre is by far the largest, as it is operates as a aggregate genre with various fiction sub-genres. That is, most of the other genres overlap with the fiction genre. We can check the co-occurrence matrix to see the overlap in genres in more detail." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "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", "
genreschildrencomics, graphicfantasy, paranormalfictionhistory, historical fiction, biographymystery, thriller, crimenon-fictionpoetryromanceyoung-adult
genres
children1.0000000.1915900.1755010.1467000.1123360.0887490.1118770.2253520.0574950.306383
comics, graphic0.1269931.0000000.1102280.0877300.1066680.0661260.1392490.0833440.0384400.113899
fantasy, paranormal0.4385810.4155781.0000000.3942000.2440370.4360220.0751480.2156610.3743910.558983
fiction0.8224990.7420680.8844041.0000000.7358280.8890480.4004190.6821940.8071160.894502
history, historical fiction, biography0.2815700.4033590.2447660.3289551.0000000.2862030.6171350.3656160.2484290.255079
mystery, thriller, crime0.2167970.2437010.4262150.3873560.2789321.0000000.0972840.0755270.3370440.342905
non-fiction0.1920560.3606380.0516220.1226020.4226710.0683661.0000000.4116160.0349970.093471
poetry0.0674210.0376180.0258190.0364030.0436410.0092500.0717361.0000000.0147790.027005
romance0.1920560.1937190.5004370.4808680.3310790.4608840.0680990.1650081.0000000.555633
young-adult0.5780810.3242160.4220380.3010230.1920140.2648540.1027340.1703060.3138461.000000
\n", "
" ], "text/plain": [ "genres children comics, graphic \\\n", "genres \n", "children 1.000000 0.191590 \n", "comics, graphic 0.126993 1.000000 \n", "fantasy, paranormal 0.438581 0.415578 \n", "fiction 0.822499 0.742068 \n", "history, historical fiction, biography 0.281570 0.403359 \n", "mystery, thriller, crime 0.216797 0.243701 \n", "non-fiction 0.192056 0.360638 \n", "poetry 0.067421 0.037618 \n", "romance 0.192056 0.193719 \n", "young-adult 0.578081 0.324216 \n", "\n", "genres fantasy, paranormal fiction \\\n", "genres \n", "children 0.175501 0.146700 \n", "comics, graphic 0.110228 0.087730 \n", "fantasy, paranormal 1.000000 0.394200 \n", "fiction 0.884404 1.000000 \n", "history, historical fiction, biography 0.244766 0.328955 \n", "mystery, thriller, crime 0.426215 0.387356 \n", "non-fiction 0.051622 0.122602 \n", "poetry 0.025819 0.036403 \n", "romance 0.500437 0.480868 \n", "young-adult 0.422038 0.301023 \n", "\n", "genres history, historical fiction, biography \\\n", "genres \n", "children 0.112336 \n", "comics, graphic 0.106668 \n", "fantasy, paranormal 0.244037 \n", "fiction 0.735828 \n", "history, historical fiction, biography 1.000000 \n", "mystery, thriller, crime 0.278932 \n", "non-fiction 0.422671 \n", "poetry 0.043641 \n", "romance 0.331079 \n", "young-adult 0.192014 \n", "\n", "genres mystery, thriller, crime non-fiction \\\n", "genres \n", "children 0.088749 0.111877 \n", "comics, graphic 0.066126 0.139249 \n", "fantasy, paranormal 0.436022 0.075148 \n", "fiction 0.889048 0.400419 \n", "history, historical fiction, biography 0.286203 0.617135 \n", "mystery, thriller, crime 1.000000 0.097284 \n", "non-fiction 0.068366 1.000000 \n", "poetry 0.009250 0.071736 \n", "romance 0.460884 0.068099 \n", "young-adult 0.264854 0.102734 \n", "\n", "genres poetry romance young-adult \n", "genres \n", "children 0.225352 0.057495 0.306383 \n", "comics, graphic 0.083344 0.038440 0.113899 \n", "fantasy, paranormal 0.215661 0.374391 0.558983 \n", "fiction 0.682194 0.807116 0.894502 \n", "history, historical fiction, biography 0.365616 0.248429 0.255079 \n", "mystery, thriller, crime 0.075527 0.337044 0.342905 \n", "non-fiction 0.411616 0.034997 0.093471 \n", "poetry 1.000000 0.014779 0.027005 \n", "romance 0.165008 1.000000 0.555633 \n", "young-adult 0.170306 0.313846 1.000000 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "temp_df = genre_df[genres].fillna(0)\n", "cooc = temp_df.T.dot(temp_df)\n", "for genre in genres:\n", " cooc[genre] = cooc[genre] / cooc.loc[genre, genre]\n", "cooc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Above we see the co-occurrence of genres per book (a book can have multiple genre labels). The data in the co-occurrence matrix shows proportions. So the diagional cells from top left to bottom right are always 1.0 (a genre necessarily co-occurs with itself). \n", "\n", "The general *fiction* genre overlaps strongly with most other genres. That is, the other genres are sub-genres of fiction (we selected only books that had at least a *fiction* genre label). \n", "\n", "The *poetry* and *comics, graphic* genres are very distinct from the other subgenres. \n", "\n", "The genres *fantasy, paranormal* has a moderate overlap with *children*, *mystery, thriller, crime*, *romance*, *young-adult*.\n", "\n", "The *history, historical fiction, biography* genre has more overlap with *comics, graphic*, *poetry* and especially *non-fiction*. \n", "\n", "For genre comparison, we will choose three genres:\n", "\n", "- *history, historical fiction, biography*\n", "- *mystery, thriller, crime*\n", "- *romance*\n", "\n", "\n", "We'll start with a quantitative analysis of the metadata.\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "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", "
childrencomics, graphicfantasy, paranormalfictionhistory, historical fiction, biographymystery, thriller, crimenon-fictionpoetryromanceyoung-adult
children1.0000000.1987190.1608450.1243260.1075360.0928240.1034090.2306340.0523940.220813
comics, graphic0.1407301.0000000.0853600.0782870.1272020.0584190.2041050.1001670.0283070.085341
fantasy, paranormal0.5621510.4212651.0000000.4605810.3085360.5377400.0883490.2675100.4559030.614448
fiction0.8942860.7951640.9479291.0000000.8229230.9411170.5151780.7878040.8975020.952561
history, historical fiction, biography0.2982080.4980970.2448090.3172571.0000000.2748970.6707020.3958740.2402050.240575
mystery, thriller, crime0.2976200.2644910.4933210.4194990.3178381.0000000.1113400.1015110.3806360.394062
non-fiction0.1617940.4509310.0395510.1120590.3784140.0543321.0000000.4349710.0343820.073177
poetry0.0618300.0379190.0205200.0293620.0382710.0084880.0745301.0000000.0141560.022729
romance0.2353120.1795160.5858560.5603810.3890270.5331760.0986930.2371501.0000000.667596
young-adult0.7059210.3852480.5620460.4233590.2773410.3929100.1495210.2710460.4752061.000000
\n", "
" ], "text/plain": [ " children comics, graphic \\\n", "children 1.000000 0.198719 \n", "comics, graphic 0.140730 1.000000 \n", "fantasy, paranormal 0.562151 0.421265 \n", "fiction 0.894286 0.795164 \n", "history, historical fiction, biography 0.298208 0.498097 \n", "mystery, thriller, crime 0.297620 0.264491 \n", "non-fiction 0.161794 0.450931 \n", "poetry 0.061830 0.037919 \n", "romance 0.235312 0.179516 \n", "young-adult 0.705921 0.385248 \n", "\n", " fantasy, paranormal fiction \\\n", "children 0.160845 0.124326 \n", "comics, graphic 0.085360 0.078287 \n", "fantasy, paranormal 1.000000 0.460581 \n", "fiction 0.947929 1.000000 \n", "history, historical fiction, biography 0.244809 0.317257 \n", "mystery, thriller, crime 0.493321 0.419499 \n", "non-fiction 0.039551 0.112059 \n", "poetry 0.020520 0.029362 \n", "romance 0.585856 0.560381 \n", "young-adult 0.562046 0.423359 \n", "\n", " history, historical fiction, biography \\\n", "children 0.107536 \n", "comics, graphic 0.127202 \n", "fantasy, paranormal 0.308536 \n", "fiction 0.822923 \n", "history, historical fiction, biography 1.000000 \n", "mystery, thriller, crime 0.317838 \n", "non-fiction 0.378414 \n", "poetry 0.038271 \n", "romance 0.389027 \n", "young-adult 0.277341 \n", "\n", " mystery, thriller, crime non-fiction \\\n", "children 0.092824 0.103409 \n", "comics, graphic 0.058419 0.204105 \n", "fantasy, paranormal 0.537740 0.088349 \n", "fiction 0.941117 0.515178 \n", "history, historical fiction, biography 0.274897 0.670702 \n", "mystery, thriller, crime 1.000000 0.111340 \n", "non-fiction 0.054332 1.000000 \n", "poetry 0.008488 0.074530 \n", "romance 0.533176 0.098693 \n", "young-adult 0.392910 0.149521 \n", "\n", " poetry romance young-adult \n", "children 0.230634 0.052394 0.220813 \n", "comics, graphic 0.100167 0.028307 0.085341 \n", "fantasy, paranormal 0.267510 0.455903 0.614448 \n", "fiction 0.787804 0.897502 0.952561 \n", "history, historical fiction, biography 0.395874 0.240205 0.240575 \n", "mystery, thriller, crime 0.101511 0.380636 0.394062 \n", "non-fiction 0.434971 0.034382 0.073177 \n", "poetry 1.000000 0.014156 0.022729 \n", "romance 0.237150 1.000000 0.667596 \n", "young-adult 0.271046 0.475206 1.000000 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from itertools import combinations\n", "\n", "review_genre_df = review_df[genres].fillna(0)\n", "\n", "cooc = review_genre_df.T.dot(review_genre_df)\n", "\n", "for genre in genres:\n", " cooc[genre] = cooc[genre] / cooc.loc[genre, genre]\n", "\n", "cooc\n", "\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "compare_genres = ['history, historical fiction, biography', 'mystery, thriller, crime', 'romance']\n", "genre_df = {}\n", "for genre in compare_genres:\n", " genre_df[genre] = review_df[review_df[genre] == 1]\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We check the rating distribution to see if there are differences in rating behaviour between genres." ] }, { "cell_type": "code", "execution_count": 283, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 283, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "rating_series = []\n", "for genre in compare_genres:\n", " group = review_df.groupby(['rating', genre]).size()\n", " u = group.unstack(genre)\n", " u = u.rename(columns={1.0: genre})\n", " u[genre] = u[genre] / sum(u[genre])\n", " rating_series.append(u[genre])\n", "\n", "pd.concat(rating_series, axis=1).plot(kind='bar')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are no big differences. The distributions look fairly similar in terms of rating behaviour. The *romance* genre has a slightly higher proportion of 5-star ratings and a lower proportion of 3- and 4-star ratings than the other two genres. \n", "\n", "### Number of reviews per reviewer, author and book\n", "\n", "Some books and authors are very popular and are reviewed by many different readers, which leads to these books and authors having more influence on the overall picture we get for a genre than books that are relatively obscure. So understanding differences between genres in terms of the *content* of reviews is aided by looking at differences in the actors that influence what content is generated and how it is generated. \n", "\n", "Another set of actor influencing this review generation process are the reviewers. Some reviewers write many reviews and have developed conventions for how to write them and what to included in them, others only write an occasional review and perhaps write whatever comes to mind. Some reviewers are very elaborate and discuss the story, writing style and reading experience of a book in detail, while others are succinct and focus the most salient aspect. Some focus more narrative, others on aesthetics and yet others on their own thoughts and feelings.\n", "\n", "If there differences in reviewers across genres, or in popularity of authors and books, these can help explain differences in content. We first look at total numbers of reviews, reviewers, authors and books across the three genres.\n", "\n" ] }, { "cell_type": "code", "execution_count": 284, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Genre\t\t\t\t\t\tReviews\t\tReviewers\tAuthors\t\tBooks\n", "history, historical fiction, biography 321138 114796 57498 88774\n", "mystery, thriller, crime 377140 122850 39462 82799\n", "romance 526310 136499 44263 122257\n" ] } ], "source": [ "print('Genre\\t\\t\\t\\t\\t\\tReviews\\t\\tReviewers\\tAuthors\\t\\tBooks')\n", "stats_columns = ['review_id', 'user_id', 'author_id', 'work_id']\n", "freq = {}\n", "for genre in compare_genres:\n", " stats_string = ''\n", " for column in stats_columns:\n", " freq[(genre, column)] = genre_df[genre][column].nunique()\n", " stats_string += f'{freq[(genre, column)]: >16}'\n", " print(f'{genre: <38}{stats_string}')\n", " " ] }, { "cell_type": "code", "execution_count": 285, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Genre Reviewers Authors Books \n", "Genre mean median mean median mean median \n", "history, historical fiction, biography 2.80 1 5.59 1 3.62 1\n", "mystery, thriller, crime 3.07 2 9.56 2 4.55 2\n", "romance 3.86 2 11.89 2 4.30 2\n" ] } ], "source": [ "print(f'{\"Genre\": <44}{\"Reviewers\": <16}{\"Authors\": <16}{\"Books\": <16}')\n", "print(f'{\"Genre\": <44}{\"mean median\": <16}{\"mean median\": <16}{\"mean median\": <16}')\n", "\n", "for genre in compare_genres:\n", " stats_string = ''\n", " for column in stats_columns[1:]:\n", " prop = freq[(genre, 'review_id')] / freq[(genre, column)]\n", " median = np.median(genre_df[genre][column].value_counts())\n", " stats_string += f'{prop: >10.2f}{median: >6.0f}'\n", " print(f'{genre: <38}{stats_string}')\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Above we show the average number of reviews per reviewer, author and book (both the mean and the median). There are some significant differences between the three genres. In the *romance* genre, individual reviewers write more reviews, and more there are more reviews per author, especially in comparison with *history, historical fiction, biography*. Reviewers tend to read (or at least review) more books, and also more books by the same author. **This may have consequences for the comparison.** If individual reviewers have personal characteristics that influence reviews (e.g. a tendency to write long or short reviews, to use certain vocabulary, to focus their reviews on certain book aspects), this has an influence in what are statistical commonalities and differences. \n", "\n", "With more reviews by the same reviewer, their idiosyncracies have relatively high frequency. Also, the reviews of books by the same author may all mention the same author name, or if the books belong to a series, characters and place may recur, which also results in higher relative frequencies.\n", "\n", "So, in the comparative analysis, one question is whether to compensate for these kinds of differences and if so, how. For instance, should we balance the selection to only include a single review per reviewer, book and author, or to leave the natural imbalance in tact. \n", "\n", "**If the goal of the comparison is to say something about reviews in a certain genre in general**, we should perhaps let the different frequencies come through as characteristics for indidivual genres. **If, on the other hand, the goal is to compare the reception of books in a genre**, these imbalances should probably be compensated for, or at least be taken into account in interpreting the observed similarities and differences. \n", "\n", "But there is a problem with the analysis above, which is signaled by the difference between the mean and median. We calculated the mean number of reviews per reviewer author and book, but statistics like mean are only meaningful if the data is roughly normally distributed (see the [Analyzing Distributions](./Analyzing-Distributions.ipynb) notebook for an elaboration on the problem). When the data distribution is very skewed, such statistics are deceptive. When most items in a set have a low frequency, and there is a small number of outliers with a very high frequency, the outliers drive up the mean, such that the majority of the items are below average.\n" ] }, { "cell_type": "code", "execution_count": 287, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEKCAYAAAAMzhLIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABG3ElEQVR4nO3deXjU5dXw8e+ZJJAQlrApEFSgIioQCJtWIqAo2ILIIlrFBReo9q3yaEXBKqZKlUesCmrrrrhUWSoIUh9cKVC1gIC4FRFECQZlC0sWksyc949ZmJnMTCaTfXI+1zVXMvf8lntmkjnzu5dzi6pijDHGhOOo7QoYY4yp2yxQGGOMicgChTHGmIgsUBhjjInIAoUxxpiILFAYY4yJKLG2K1Ad2rRpo506dartahhjTL3y6aef7lXVtsHlcRUoRORC4MKTTz6Z9evX13Z1jDGmXhGR70OVx1XTk6ouU9XJLVq0qO2qGGNM3IirQGGMMabqxVWgEJELReTpgwcP1nZVjDEmbsRVH4WqLgOW9evXb1Jt18VUnZKSEnJycigqKqrtqhgTF5KTk+nYsSNJSUlRbR9XgcK/M7uilmzcxewVW/gxr5AOaSlMHd6N0ZnpVV9JU2E5OTk0a9aMTp06ISK1XR1j6jVVZd++feTk5NC5c+eo9omrpqdYO7OXbNzFmsV/ZX7BJLY1vpz5BZNYs/ivLNm4q5pqaiqiqKiI1q1bW5AwpgqICK1bt67QFXpcBYpYbVr+NGc1fYlrT2xE784ncO2JjTir6UtsWv50bVfNeFiQMKbqVPT/yQIF0KXRazzQtjm5SYmoCLlJiTzQtjldGr1W21UzdcCOHTvo0aNHyMdmzJjBe++9F3bfJUuW8NVXX1VX1Xyys7N56KGHQj521llnRdz3/vvvj+mcv/71r8nLy6vwfi+++CK///3vy5QfPXqU8847j969ezN//nyuv/76iK/dypUr+eijj3z3n3zySV566aUK1yeSSO99efWrTpHqVR2sjwJ4pVUCRY7AmFnkcPBKqwSuqsL6mfhz7733Rnx8yZIljBw5ktNPPz3qY5aWlpKYWHX/mv4fpqHcf//93HnnnVEfT1VRVf75z39WtmoBNm7cCMCmTZsAuPTSSyNuv3LlSpo2beoLhDfccEOV1qc8zz77bJUcp6rf7+oQV1cUsfZR7E5MqFC5qduWbNzFwFkf0HnacgbO+qBK+pqcTieTJk2ie/fuDBs2jMLCQgAmTpzIokWLAJg2bRqnn346GRkZ3HbbbXz00UcsXbqUqVOn0rt3b7Zt28amTZs488wzycjIYMyYMRw4cACAIUOG8D//8z/069ePP//5z3Tu3JmSkhIADh06FHA/nK+++oohQ4bQpUsX5s6d6ytv2rQpALm5uQwaNIjevXvTo0cPVq9ezbRp0ygsLKR3795MmDABgIcffpgePXrQo0cPHn30UcD9DbZbt25cddVV9OjRg507d9KpUyf27t0LwEsvvURGRga9evXiyiuvBGDZsmWcccYZZGZmct555/HTTz+FrfvPP//MFVdcwbp163yv1ZAhQ3wZFv7v//6PPn360KtXL4YOHcqOHTt48skneeSRR+jduzerV68OuKqK9DrfcccdDBgwgFNOOYXVq1eX+96XlpYyYcIETjvtNC6++GIKCgp8x/LW77XXXqNnz5706NGDO+64w7fvc889xymnnMKAAQOYNGmS70pq4sSJ3HDDDZxxxhncfvvtrF27ll/+8pdkZmZy1llnsWXLFsB99XXRRRcxZMgQunbtyp/+9CffsUP9TW7bto0+ffr4ttm6dWvA/Zh5vx3E061v375aEee/OlB7vNijzO38VwdW6Dimenz11VdRb7t4Q46eetfbetIdb/lup971ti7ekBPz+b/77jtNSEjQjRs3qqrq+PHj9eWXX1ZV1auvvloXLlyoe/fu1VNOOUVdLpeqqh44cCDgca+ePXvqypUrVVX17rvv1ilTpqiq6uDBg/XGG2/0bTdx4kRdvHixqqo+9dRTeuutt0as4z333KO//OUvtaioSPfs2aOtWrXS4uJiVVVNTU1VVdWHHnpIZ86cqaqqpaWleujQoYDHVVXXr1+vPXr00CNHjujhw4f19NNP1w0bNuh3332nIqIff/yxb9uTTjpJ9+zZo1988YV27dpV9+zZo6qq+/btU1XV/fv3+16PZ555xvccXnjhBf1//+//lXkOH374oY4YMcJ3f/Dgwbpu3Tr9+eeftWPHjrp9+/aA499zzz06e/bsgNfAez/S6+ytx/Lly3Xo0KERX9fvvvtOAV2zZo2qql5zzTW+c3jrt2vXLj3hhBP0559/1pKSEj3nnHN08eLFumvXLj3ppJN03759WlxcrFlZWb7nffXVV+uIESO0tLRUVVUPHjyoJSUlqqr67rvv6tixY32vVbt27XTv3r1aUFCg3bt313Xr1kX8mxwyZIivfPr06Tp37tyQzy3U/xWwXkN8psbVFUWsppw5nWQJHE+cLElMOXN6LdXIxGr2ii0UljgDygpLnMxesaVSx+3cuTO9e/cGoG/fvuzYsSPg8RYtWpCcnMx1113HG2+8QZMmTcoc4+DBg+Tl5TF48GAArr76alatWuV73L+p5frrr+eFF14A4IUXXuCaa64pt44jRoygcePGtGnThuOOO67MN/j+/fvzwgsvkJ2dzeeff06zZs3KHGPNmjWMGTOG1NRUmjZtytixY33fuk866STOPPPMMvt88MEHjB8/njZt2gDQqlUrwD2sefjw4fTs2ZPZs2fz5ZdflvscQvnkk08YNGiQbyin9/jhlPc6jx07Fgj9PoZywgknMHDgQACuuOIK1qxZE/D4unXrGDJkCG3btiUxMZEJEyawatUq1q5dy+DBg2nVqhVJSUmMHz8+YL/x48eTkJDgq/P48ePp0aMHt9xyS8Brdf7559O6dWtSUlIYO3as7/zh/ia9fztOp5P58+dz+eWXl/scyxNXgSLWmdkjuowgO+s+2qe2RxDap7YnO+s+RnQZUU01NdXlx7zCCpVHq3Hjxr7fExISKC0tDXg8MTGRtWvXcvHFF/PWW29xwQUXVPgcqampvt8HDhzIjh07WLlyJU6nM6qOy/LqOGjQIFatWkV6ejoTJ06scMevf/2icdNNN/H73/+ezz//nKeeeqrOTJj0vk6hXqNQgkcIVdUIPP/X8+677+acc87hiy++YNmyZQGvVbjzh3u/x40bx9tvv81bb71F3759ad26daXrGleBQiuRFHBElxG8c/E7bL56M+9c/I4FiXqqQ1pKhcqrypEjRzh48CC//vWveeSRR/jss88AaNasGYcPHwbcVx0tW7b0fUN/+eWXfd96Q7nqqqu4/PLLA64mHn/8cR5//PGY6vj9999z/PHHM2nSJK6//no2bNgAQFJSkq//4+yzz2bJkiUUFBSQn5/P4sWLOfvssyMe99xzz2XhwoXs27cPgP379wPub8np6e5Jq/PmzYupzgBnnnkmq1at4rvvvgs4vv9r66+irzPArl27GDp0aMjHfvjhBz7++GMA/v73v5OVlRXw+IABA/jXv/7F3r17cTqdvPba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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from collections import Counter\n", "from scripts.helper import ecdf\n", "\n", "for genre in compare_genres:\n", " dist = Counter([int(count) for count in genre_df[genre].user_id.value_counts()])\n", " x = dist.keys()\n", " y = list(dist.values())\n", " y_prob = [y_point / sum(y) for y_point in y]\n", " plt.scatter(x,y_prob, label=genre)\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.ylabel('Proportion of reviewers')\n", "plt.xlabel('Number of reviews per reviewer')\n", "plt.legend()\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Above we see the number of reviews per reviewer against the number of reviewers. At the top left we see that the vast majority of reviewers in all three genres write only one or a few reviews. The proportion is shown on a logarithmic scale, so the dots for a single review per reviewer are between 40% and 60% of all reviewers, while all dots for more than 10 reviews per reviewers quickly fall far below 1%. But the genres show a difference in their distributions at the higher end (i.e. above 10 reviews per reviewer). What this means is, **there is larger proportion of reviewers in the *romance* genre who write many reviews than in the other genres, but these represent only a few percent of all reviewers.**\n", "\n", "\n", "Next, we look at the number of reviews per author." ] }, { "cell_type": "code", "execution_count": 288, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEKCAYAAAAMzhLIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABFu0lEQVR4nO3deXzU1bn48c8zSSAhCGFTIKBgRRSyEDYXoqBg8BZERNAqVqlb9XfVXL1FwbpE6q1UerXQ9tZd1LYWpYpgtFgXCmgtIKC4lFpwA4KsCRISksk8vz9mYWYyM5lJZrIMz/v1mheZM9/lme+EOTnfc85zRFUxxhhjwnG0dADGGGNaN6sojDHGRGQVhTHGmIisojDGGBORVRTGGGMisorCGGNMRKktHUAidO/eXfv169fSYRhjTJvywQcf7FHVHsHlSVVRiMgFwAUnnXQS69ata+lwjDGmTRGRr0KVJ9WtJ1VdpqrXd+7cuaVDMcaYpJFUFYUxxpj4S6qKQkQuEJHHKioqWjoUY4xJGknVR6Gqy4Blw4cPv66lYzHxU1tby7Zt26iurm7pUIxJCunp6fTp04e0tLSotk+qiqIplmzYzrzlm9lRXkXvrAxmjh/I5ILslg7LANu2beOYY46hX79+iEhLh2NMm6aq7N27l23bttG/f/+o9rFbT7gridkvbWJ7eRUKbC+vYvZLm1iyYXtiAjUxqa6uplu3blZJGBMHIkK3bt1iaqEnVUXR2FFP85Zvpqq2LqCsqraOecs3xzM80wRWSRgTP7H+f0qqiqKxdpRXxVRuji5ffvklOTk5IV+75557ePPNN8Puu2TJEj799NNEheZTUlLCL3/5y5CvnXnmmRH3/fnPf96oc37/+9+nvLw85v0WLlzITTfdVK/88OHDjBs3jiFDhrBo0SKuvfbaiNduxYoVvPfee77njzzyCM8++2zM8UQS6bNvKL5EihRXIiRVH4X/hLtY9M7KYHuISqF3VkacIjPJas6cORFfX7JkCRMnTmTQoEFRH9PpdJKaGr//mv5fpqH8/Oc/584774z6eKqKqvLaa681NbQAGzZsAGDjxo0AXHrppRG3X7FiBR07dvRVhDfccENc42nIE088EZfjxPvzToSkalE09tbTzPEDmdruPVa3u4Wt7S9ndbtbmNruPWaOH5igSE0iLdmwnVFz36b/rFJGzX07Ln1NdXV1XHfddQwePJiioiKqqtx/WMyYMYPFixcDMGvWLAYNGkReXh4/+clPeO+991i6dCkzZ85kyJAhbNmyhY0bN3L66aeTl5fHRRddxP79+wEYM2YM//Vf/8Xw4cP5n//5H/r3709tbS0ABw4cCHgezqeffsqYMWM48cQTWbBgga+8Y8eOAJSVlXH22WczZMgQcnJyWLVqFbNmzaKqqoohQ4Ywffp0AB566CFycnLIycnhV7/6FeD+C3bgwIFceeWV5OTk8M0339CvXz/27NkDwLPPPkteXh75+fn88Ic/BGDZsmWcdtppFBQUMG7cOL799tuwse/atYsrrriCtWvX+q7VmDFjfBkW/vKXvzB06FDy8/MZO3YsX375JY888ggPP/wwQ4YMYdWqVQGtqkjX+Y477mDkyJGcfPLJrFq1qsHP3ul0Mn36dE499VSmTp3KoUOHfMfyxvf888+Tm5tLTk4Od9xxh2/fJ598kpNPPpmRI0dy3XXX+VpSM2bM4IYbbuC0007j9ttvZ82aNZxxxhkUFBRw5plnsnmz+7b3woULufDCCxkzZgwDBgzgvvvu8x071O/kli1bGDp0qG+bzz//POB5o3n/Okimx7BhwzQmHy7S2jnHqt7byfeonXOs6oeLYjuOSYhPP/006m1fXr9NT7nrdT3hjld9j1Puel1fXr+t0ef/4osvNCUlRTds2KCqqtOmTdPnnntOVVWvuuoqffHFF3XPnj168sknq8vlUlXV/fv3B7zulZubqytWrFBV1bvvvluLi4tVVXX06NF64403+rabMWOGvvzyy6qq+uijj+ptt90WMcZ7771XzzjjDK2urtbdu3dr165dtaamRlVVMzMzVVX1l7/8pd5///2qqup0OvXAgQMBr6uqrlu3TnNycvTgwYP63Xff6aBBg3T9+vX6xRdfqIjo3//+d9+2J5xwgu7evVs//vhjHTBggO7evVtVVffu3auqqvv27fNdj8cff9z3Hp5++mn9z//8z3rv4Z133tEJEyb4no8ePVrXrl2ru3bt0j59+ujWrVsDjn/vvffqvHnzAq6B93mk6+yNo7S0VMeOHRvxun7xxRcK6OrVq1VV9Uc/+pHvHN74tm/frn379tVdu3ZpbW2tnnPOOfryyy/r9u3b9YQTTtC9e/dqTU2NFhYW+t73VVddpRMmTFCn06mqqhUVFVpbW6uqqn/96191ypQpvmvVs2dP3bNnjx46dEgHDx6sa9eujfg7OWbMGF/57NmzdcGCBSHfW6j/V8A6DfGdmlQtikZ7aw7L0x0U9elNXr++FPXpzfJ0B7wV+baCaX0SNTChf//+DBkyBIBhw4bx5ZdfBrzeuXNn0tPTueaaa3jppZfo0KFDvWNUVFRQXl7O6NGjAbjqqqtYuXKl73X/Wy3XXnstTz/9NABPP/00P/rRjxqMccKECbRv357u3btz7LHH1vsLfsSIETz99NOUlJSwadMmjjnmmHrHWL16NRdddBGZmZl07NiRKVOm+P7qPuGEEzj99NPr7fP2228zbdo0unfvDkDXrl0B97Dm8ePHk5uby7x58/jkk08afA+hvP/++5x99tm+oZze44fT0HWeMmUKEPpzDKVv376MGjUKgCuuuILVq1cHvL527VrGjBlDjx49SE1NZfr06axcuZI1a9YwevRounbtSlpaGtOmTQvYb9q0aaSkpPhinjZtGjk5Odx6660B1+q8886jW7duZGRkMGXKFN/5w/1Oen936urqWLRoEZdffnmD77EhVlEApc59lHTvSllaKipCWVoqJd27Uurc19KhmRglamBC+/btfT+npKTgdDoDXk9NTWXNmjVMnTqVV199lfPPPz/mc2RmZvp+HjVqFF9++SUrVqygrq4uqo7LhmI8++yzWblyJdnZ2cyYMSPmjl//+KJx8803c9NNN7Fp0yYeffTRVjNh0nudQl2jUIJHCMVrBJ7/9bz77rs555xz+Pjjj1m2bFnAtQp3/nCf98UXX8zrr7/Oq6++yrBhw+jWrVuTY02qiqKx8yjmd+tKtSPwUlQ7HMzvFvkvF9P6hBuAkOiBCQcPHqSiooLvf//7PPzww3z44YcAHHPMMXz33XeAu9XRpUsX31/ozz33nO+v3lCuvPJKLr/88oDWxG9+8xt+85vfNCrGr776iuOOO47rrruOa6+9lvXr1wOQlpbm6/8466yzWLJkCYcOHaKyspKXX36Zs846K+Jxzz33XF588UX27t0LwL597j+wKioqyM52T1p95plnGhUzwOmnn87KlSv54osvAo7vf239xXqdAbZv387YsWNDvvb111/z97//HYA//vGPFBYWBrw+cuRI/va3v7Fnzx7q6up4/vnnGT16NCNGjOBvf/sb+/fvx+l08uc//zns+f2v1cKFCwNe++tf/8q+ffuoqqpiyZIlvtZNOOnp6YwfP54bb7wxqpZoNJKqotBGdmbvTAn9F0K4ctN6zRw/kIy0lICyjLSUhA9M+O6775g4cSJ5eXkUFhby0EMPAfCDH/yAefPmUVBQwJYtW3jmmWeYOXMmeXl5bNy4kXvuuSfsMadPn87+/fu57LLLfGX//Oc/G/0X4ooVK8jPz6egoIBFixZRXFwMwPXXX09eXh7Tp09n6NChzJgxg5EjR3Laaadx7bXXUlBQEPG4gwcP5qc//SmjR48mPz+f2267DXAP2Z02bRrDhg3z3ZZqjB49evDYY48xZcoU8vPzfbfoLrjgAl5++WVfZ7a/WK4zuDv6w408GjhwIL/97W859dRT2b9/PzfeeGPA67169WLu3Lmcc8455OfnM2zYMC688EKys7O58847GTlyJKNGjaJfv36E+266/fbbmT17NgUFBfVaOSNHjuTiiy8mLy+Piy++mOHDh0d8L+D+3XE4HBQVFTW4bTTE3X+RXIYPH66xrEdRtLiIssqyeuW9MnvxxtQ34hmaaYTPPvuMU089NertkyUdy+LFi3nllVd47rnnfGUTJ07kpZdeol27di0YWfL5zW9+w/HHH8+kSZPietyDBw/SsWNHnE4nF110EVdffTUXXXRR1PsvXLiQdevWxdyK/OUvf0lFRQU/+9nPwm4T6v+ViHygqvVqotY9eLeZFA8tpuS9EqrrjtwXTE9Jp3hocQtGZRprckF2m6wY/N188828/vrr9eYqvPrqqy0UUXILNQEwHkpKSnjzzTeprq6mqKiIyZMnJ+Q8/i666CK2bNnC22+/HbdjWovCo3RrKfPXz2dn5U56ZvakeGgxE06ckKAITSxibVEYYxp21LYoGjszG2DCiROsYjDGmBCsM9sYY0xESVVRGGOMiT+rKIwxxkRkFYUxLWDjxo1xz74aSnl5Of/3f//ne75ixQomTpwY1b7+KdT9E+D5JwNsLo1NaW7iwyoKY1pAYyqKaNJNBAuuKKJVV1fHnDlzGDduXMz7hjpWY6kqLpeL1157jaysrCbHYhrHKgqTfD56AR7OgZIs978fvdCkw3355ZeccsopzJgxg5NPPpnp06fz5ptvMmrUKAYMGMCaNWtwuVwMGDCA3bt3A+ByuTjppJPYvXs3L774Ijk5OeTn53P22WdTU1PDPffcw6JFi3yL9FRWVnL11VczcuRICgoKeOWVVwD3hKtJkyZx7rnnMnbsWK688kqWLFnii2369Om+bUOZNWsWW7ZsYciQIcycORNwTwKbOnUqp5xyCtOnT8c7RL5fv37ccccdDB06lBdffDEghXo4v//97xk5ciRDhgzhxz/+sa9S6NixI//93/9Nfn6+L/1FKN9++y0XXXQR+fn55Ofn895770VMaR7NZwGEvZ6mkUKllG3rj5jTjJtWLZY04/rhItX7jwtIGa/3H9eklPHelM4fffSR1tXV6dChQ/VHP/qRulwuXbJkiV544YWqqlpSUqIPP/ywqqouX77clyo6JydHt21zpzn3ph8PTrU9e/ZsX5ro/fv364ABA/TgwYP69NNPa3Z2ti+19ooVK3znKy8v1379+vnSU4eLffDgwb7n77zzjnbq1Em/+eYbraur09NPP11XrVqlqu604b/4xS982/qnSPem1PZut3v3bv3000914sSJvnTmN954oz7zzDOqqgrookUNX/NLLrnEd82cTqeWl5dHTGke7WcR7nqaI47aNOONTQpokshbc6A2KFNsbVWTU8b379+f3NxcHA4HgwcPZuzYsYgIubm5vvTOV199tS8j61NPPeVLyDZq1ChmzJjB448/HvY2zBtvvMHcuXMZMmQIY8aMobq6mq+//hpwp5n2ptYePXo0n3/+Obt37+b555/n4osvjnl1tJEjR9KnTx8cDgdDhgwJSLXd0Kpy/t566y0++OADRowYwZAhQ3jrrbfYunUr4M5mevHFFzd4jLffftuXOyklJcWXCylcSnOI7rOIdD1N7JJqwp2qLgOWDR8+/LqWjiWUtUsfpe/6eRyru9klPfhm6ExGTPpxS4eVXCq2xVYeJf+Uzg6Hw/fc4XD4+g769u3Lcccdx9tvv82aNWv4wx/+ALjXcv7HP/5BaWkpw4YN44MPPqh3fFXlz3/+MwMHBiYv/Mc//lEvvfeVV17J73//e/70pz/51qxo7HsJTrUdSypxVeWqq67igQceqPdaenq6b62FxogURzSfRbjraRonqVoUrdnapY+y7Z/3c2WfNIb078uVfdLY9s/7Wbv00ZYOLbl07hNbeZxde+21XHHFFQGL0mzZsoXTTjuNOXPm0KNHD7755pt6KbLHjx/Pr3/9a19/gXf96FBmzJjhW6LUuxZ3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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from collections import Counter\n", "from scripts.helper import ecdf\n", "\n", "for genre in compare_genres:\n", " dist = Counter([int(count) for count in genre_df[genre].author_id.value_counts()])\n", " x = dist.keys()\n", " y = list(dist.values())\n", " y_prob = [y_point / sum(y) for y_point in y]\n", " plt.scatter(x,y_prob, label=genre)\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.ylabel('Proportion of authors')\n", "plt.xlabel('Number of reviews per auhtor')\n", "plt.legend()\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Above we see the log-log distribution of the number reviews per author. The *history, historical fiction, biography* genre has relatively many authors with only a single review (the blue dot in the top left is higher than the top left green and orange dot), and therefore fewer authors with multiple reviews (more the right, the blue dots tend be below the green and orange dots). In other words, for most authors in this genre a comparison is difficult because there is only a single review for it. **But for all three genres, the majority of authors have only one or a few reviews, so the much higher average for *romance* authors than for *history, historical fiction, biography* authors is caused by a relatively small set of outliers with a very high number of reviews.**\n", "\n", "A possible explanation is that there is a subset of authors writings *romance* novels or *mystery, thriller, crime* novels who are more prolific than authors of *historical* novels and *biographies*." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# group by author and cont the number of works they wrote\n", "g = metadata_df.groupby(['author_id']).work_id.nunique()\n", "# turn series into a dataframe and rename the column to reflect the number of works per author\n", "u = g.reset_index()\n", "u = u.rename(columns={'work_id': 'author_works_num'})\n", "# merge the new dataframe with the metadata dataframe created at the top of this notebook\n", "meta_df = pd.merge(metadata_df, u, on='author_id')\n", "# create a dataframe for all books and their genre labels, with one column per genre\n", "groups = genremeta_df.groupby(['book_id', 'genres']).size()\n", "genremeta_df = groups.unstack('genres').fillna(0)\n", "genremeta_df = genremeta_df.reset_index()\n", "# merge the new genre metadata frame with the extended book metadata frame \n", "# so we can connect nmber of works per author with the genre labels\n", "meta_df = pd.merge(meta_df, genremeta_df, on='book_id')\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "history, historical fiction, biography \tauthors: 57498\tworks: 190384\tsingle work authors: 33085\n", "mystery, thriller, crime \tauthors: 39462\tworks: 186422\tsingle work authors: 15953\n", "romance \tauthors: 44263\tworks: 196750\tsingle work authors: 18319\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAEYCAYAAABBWFftAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAB2y0lEQVR4nO3deXzU9bX4/9eZyUDClhAIBgIKVIvKGkC01QqKgm1EAUVrtS51ufV31VS/lwpWNMX2QktrDba31rqg3l6rWEAxeqEu1L2CYMGlXBW0EBIJS4JAQjKZ8/tjFmaSmckkmcnMJOf5eMyDmfd8ljNhyOH9+bzf5y2qijHGGGOMMcaY9nMkOwBjjDHGGGOM6Sysg2WMMcYYY4wxcWIdLGOMMcYYY4yJE+tgGWOMMcYYY0ycWAfLGGOMMcYYY+IkI9kBtEf//v116NChyQ7DGGNMHLz33nt7VDUv2XEkkuUtY4zpPCLlrbTuYA0dOpQNGzYkOwxjjDFxICJfJDuGRLO8ZYwxnUekvGVDBI0xxpgEE5EZIvJgTU1NskMxxhiTYGnZwbJEZYwxJp2o6mpVvSE7OzvZoRhjjEmwtOxgWaIyxhiTTuzCoDHGdB1pPQfLmI7S0NDAzp07qaurS3YoxqS9zMxMBg8ejMvlSnYoHUZVVwOrJ06ceH2yYzGdn+UsY+KrtXnLOljGxGDnzp307t2boUOHIiLJDseYtKWq7N27l507dzJs2LBkh2NMp2Q5y5j4aUveSsshgjbUwnS0uro6+vXrZ4nKmHYSEfr169flrqxb3jIdyXKWMfHTlryVlh2seMzBWrWpnNMXv8KweWWcvvgVVm0qj2OEpjOyRGVMfHTFf0uWt0xH64r/zoxJlNb+e+qSQwRXbSpn/oot1DY0AlBeXcv8FVsAmFlYkMzQjDHGmGYsbxljTPpIyztY7bVkzdZAkvKrbWhkyZqtSYrImOg+//xzRo0aFfa9u+66i5deeinivqtWreKjjz5KVGgBJSUl/OpXvwr73je/+c2o+/7nf/5nm875ne98h+rq6lbvt2zZMm666aZm7UeOHOGcc85h3LhxPPXUU1x33XVRf3br1q3jrbfeCrx+4IEHePzxx1sdTzTR/u5bii+RosVlmmvvEEHLWyadWM4Kz3JW18lZXfIO1q7q2la1G5PKFi5cGPX9VatWcf7553PyySfHfEy3201GRvx+PQT/Qg/nP//zP7njjjtiPp6qoqq88MIL7Q0txKZNmwB4//33Abj00kujbr9u3Tp69eoVSMY//OEP4xpPSx566KG4HCfef9+mufZWEbS8ZToLy1nxYzkrdXXJO1iDcrJa1W5MayVirkRjYyPXX389I0eOZNq0adTWev9jdfXVV/PMM88AMG/ePE4++WTGjBnDf/zHf/DWW2/x3HPPMXfuXMaNG8dnn33G+++/z2mnncaYMWOYNWsW+/fvB2DKlCn86Ec/YuLEifz85z9n2LBhNDQ0AHDgwIGQ15F89NFHTJkyheHDh7N06dJAe69evQCoqKjgzDPPZNy4cYwaNYrXX3+defPmUVtby7hx47j88ssBuPfeexk1ahSjRo3ivvvuA7xXn0aMGMGVV17JqFGj2LFjB0OHDmXPnj0APP7444wZM4axY8fy/e9/H4DVq1dz6qmnUlhYyDnnnMOXX34ZMfbdu3dzxRVXsH79+sDPasqUKWzYsAGA//3f/2X8+PGMHTuWqVOn8vnnn/PAAw/wm9/8hnHjxvH666+HXBGN9nO+/fbbmTRpEl//+td5/fXXW/y7d7vdXH755Zx00klcfPHFHD58OHAsf3xPPvkko0ePZtSoUdx+++2BfR9++GG+/vWvM2nSJK6//vrAVdCrr76aH/7wh5x66qn8+Mc/5t133+Ub3/gGhYWFfPOb32TrVu+dkWXLlnHhhRcyZcoUTjjhBH76058Gjh3uO/nZZ58xfvz4wDaffPJJyGvTNpa3TCJZzrKcZTnLK245y9+rTqcHMAN48Pjjj9e2WLlxp55454t63O3PBx4n3vmirty4s03HM53fRx99FPO2ifh+bd++XZ1Op27atElVVefMmaNPPPGEqqpeddVVunz5ct2zZ49+/etfV4/Ho6qq+/fvD3nfb/To0bpu3TpVVV2wYIEWFxerqurkyZP1xhtvDGx39dVX68qVK1VV9Q9/+IPedtttUWO8++679Rvf+IbW1dVpVVWV5ubman19vaqq9uzZU1VVf/WrX+nPfvYzVVV1u9164MCBkPdVVTds2KCjRo3SgwcP6ldffaUnn3yybty4Ubdv364iom+//XZg2+OOO06rqqr0gw8+0BNOOEGrqqpUVXXv3r2qqrpv377Az+OPf/xj4DM8+uij+u///u/NPsOrr76qRUVFgdeTJ0/W9evX6+7du3Xw4MG6bdu2kOPffffdumTJkpCfgf91tJ+zP46ysjKdOnVq1J/r9u3bFdA33nhDVVWvueaawDn88ZWXl+uQIUN09+7d2tDQoGeddZauXLlSy8vL9bjjjtO9e/dqfX29nnHGGYHPfdVVV2lRUZG63W5VVa2pqdGGhgZVVf3rX/+qs2fPDvys8vPzdc+ePXr48GEdOXKkrl+/Pup3csqUKYH2+fPn69KlS5t9rnD/poANmgI5JpGPCRMmNPvcsbC8ZVrDcpblLMtZ8c1Zqq3LW2l5B0vbWY1pZmEBi2aPpiAnCwEKcrJYNHu0TRQ2cZGouRLDhg1j3LhxAEyYMIHPP/885P3s7GwyMzO59tprWbFiBT169Gh2jJqaGqqrq5k8eTIAV111Fa+99lrg/eDhBddddx2PPvooAI8++ijXXHNNizEWFRXRvXt3+vfvz4ABA5pdfTvllFN49NFHKSkpYcuWLfTu3bvZMd544w1mzZpFz5496dWrF7Nnzw5cMTvuuOM47bTTmu3zyiuvMGfOHPr37w9Abm4u4F0LZvr06YwePZolS5bw4YcftvgZwnnnnXc488wzA+tf+I8fSUs/59mzZwPh/x7DGTJkCKeffjoAV1xxBW+88UbI++vXr2fKlCnk5eWRkZHB5Zdfzmuvvca7777L5MmTyc3NxeVyMWfOnJD95syZg9PpDMQ8Z84cRo0axa233hryszr33HPp168fWVlZzJ49O3D+SN9J/3ensbGRp556iu9973stfsbOrr1zsCxvmUSxnGU5y3JW/HNWWnaw4mFmYQFvzjub7YuLeHPe2ZakTNwkaq5E9+7dA8+dTidutzvk/YyMDN59910uvvhinn/+ec4777xWn6Nnz56B56effjqff/4569ato7GxMabJoS3FeOaZZ/Laa69RUFDA1Vdf3erJtcHxxeLmm2/mpptuYsuWLfzhD39ImbWX/D+ncD+jcJqWh41X+eXgn+eCBQs466yz+OCDD1i9enXIzyrS+SP9fV900UW8+OKLPP/880yYMIF+/frFJd501t4LgwCumgfoOeAWep94Oz0H3IKr5oE4Rmi6KstZkWO0nOVlOav1umwHy5hESdZciYMHD1JTU8N3vvMdfvOb3/CPf/wDgN69e/PVV18B3iuGffv2DVxde+KJJwJXrMK58sor+d73vhdyJfC3v/0tv/3tb9sU4xdffMExxxzD9ddfz3XXXcfGjRsBcLlcgbHy3/rWt1i1ahWHDx/m0KFDrFy5km9961tRj3v22WezfPly9u7dC8C+ffsA7xWuggLvxZPHHnusTTEDnHbaabz22mts37495PjBP9tgrf05A5SXlzN16tSw7/3rX//i7bffBuB//ud/OOOMM0LenzRpEn/729/Ys2cPjY2NPPnkk0yePJlTTjmFv/3tb+zfvx+3281f/vKXiOcP/lktW7Ys5L2//vWv7Nu3j9raWlatWhW4MhlJZmYm06dP58Ybb4zpKrJpWdm6BZRsX0mFU1ARKpxCyfaVlK1bkOzQTJqznBWZ5azILGdFZx0sY+Js7vQRZLmcIW1ZLidzp49I6Hm/+uorzj//fMaMGcMZZ5zBvffeC8B3v/tdlixZQmFhIZ999hmPPfYYc+fOZcyYMbz//vvcddddEY95+eWXs3//fi677LJA2z//+c82X91Zt24dY8eOpbCwkKeeeori4mIAbrjhBsaMGcPll1/O+PHjufrqq5k0aRKnnnoq1113HYWFhVGPO3LkSH7yk58wefJkxo4dy2233QZ4y/DOmTOHCRMmBIZitEVeXh4PPvggs2fPZuzYsYFhKTNmzGDlypWBCcPBWvNzBu9k6khVkUaMGMHvfvc7TjrpJPbv38+NN94Y8v7AgQNZvHgxZ511FmPHjmXChAlceOGFFBQUcMcddzBp0iROP/10hg4dSqQ7KD/+8Y+ZP38+hYWFza5QTpo0iYsuuogxY8Zw0UUXMXHixKifBbzfHYfDwbRp01rc1rSsdNtK6hyhV2XrHELptpVJish0FpazIrOcFZnlrOjEOz8rPU2cOFH91UiMSaSPP/6Yk046KebtV20qZ8mareyqrmVQThZzp49Iy2GozzzzDM8++yxPPPFEoO38889nxYoVdOvWLYmRdT6//e1vOfbYY7ngggvietyDBw/Sq1cv3G43s2bN4gc/+AGzZs2Kef9ly5axYcOGVl8B/tWvfkVNTQ333HNP2PfD/ZsSkfdUteVMmIZEZAYw4/jjj7/+k08+afX+Y5aNQsMMsxFVNl/9QRwiNJ2J5SzLWYnW1XIWtC5vpXYReWPS1MzCgrRMTsFuvvlmXnzxxWbrdjz//PNJiqhzC7eIZDyUlJTw0ksvUVdXx7Rp05g5c2ZCzhNs1qxZfPbZZ7zyyisJP1e60Haug5XvgQpn+HZj2stylmkty1nRddk7WGXbyijdWErloUrye+ZTPL6YouFFcY7QdBatvRpojImuq93B8mtr3vLPwQoeJpjpUUqGzaJoSuQrrqZrspxlTPx1+jtYQUMt2rR/2bYySt4qoa7RW3Gk4lAFJW+VAFgnyxhjTMrxd6JKt62k0uG9c1U83DpXxhiTitKyg9XeoRalG0sDnSu/usY6SjeWWgfLGGNMSiqaco91qIwxJg10ySqClYcqW9VujDHGGGOMMbHokh2sfFefVrUbY4wx7SEiM0TkwZqammSHYowxJsG6ZAereH81mZ7Q0kuZHg/F+6uTE5AxSfD+++83q7aUCNXV1fzXf/1X4PW6des4//zzY9r3rrvu4qWXXgJgypQp+IsDDB06lD179sQ/2Ci+853vUF1d3aHnNJ2Hqq5W1RsirelijInOclbrWM5Kri7ZwSqq2knJnn0MbHAjqgxscFOyZx9FVTuTHZoxHaYtyarpYn6xaJqsYtXY2MjChQs555xzWr1vuGO1lari8Xh44YUXyMnJaXcsxhhjWs9yVmwsZ6WGLtnBInswRYcOs3bnLjZ/voO1O3dRdOgwZA9OdmSms9j8NPxmFJTkeP/c/HS7Dvf5559z4okncvXVV/P1r3+dyy+/nJdeeonTTz+dE044gXfffRePx8MJJ5xAVVUVAB6Ph+OPP56qqiqWL1/OqFGjGDt2LGeeeSb19fXcddddPPXUU4wbN46nnnqKQ4cO8YMf/IBJkyZRWFjIs88+C3gX7bvgggs4++yzmTp1KldeeSWrVq0KxHb55ZcHtg1n3rx5fPbZZ4wbN465c+cC3oUEL774Yk488UQuv/xy/MtFDB06lNtvv53x48ezfPlyrr76ap555pmoP5v//u//ZtKkSYwbN45/+7d/CySmXr168f/+3/9j7NixvP322xH3//LLL5k1axZjx45l7NixvPXWW3z++eeMGDGCK6+8klGjRrFjx47AFchY/i6AiD9PY4xJOZazAixnWc6KC1VN28eECRO0Tf7xlOrPjlG9u8/Rx8+O8bYbE8ZHH30U+8YJ+H5t375dnU6nbt68WRsbG3X8+PF6zTXXqMfj0VWrVumFF16oqqolJSX6m9/8RlVV16xZo7Nnz1ZV1VGjRunOnTtVVXX//v2qqvroo4/qv//7vwfOMX/+fH3iiScC25xwwgl68OBBffTRR7WgoED37t2rqqrr1q0LnK+6ulqHDh2qDQ0NUWMfOXJk4PWrr76qffr00R07dmhjY6Oedtpp+vrrr6uq6nHHHae/+MUvAtteddVVunz5clVVnTx5sq5fvz6wXVVVlX700Ud6/vnna319vaqq3njjjfrYY4+pqiqgTz3V8s/8kksuCfzM3G63VldX6/bt21VE9O233w5s5z9nrH8XkX6exivcvylgg6ZAbknko815y5hWsJxlOctyVvy1Jm91zTtYYy6BGUshewgg3j9nLPW2G9NeLy+EhtrQtoZab3s7DBs2jNGjR+NwOBg5ciRTp05FRBg9ejSff/45AD/4wQ94/PHHAXjkkUe45pprADj99NO5+uqr+eMf/xhx6MHatWtZvHgx48aNY8qUKdTV1fGvf/0LgHPPPZfc3FwAJk+ezCeffEJVVRVPPvkkF110ERkZrVvxYdKkSQwePBiHw8G4ceMC8QNceumlMR/n5Zdf5r333uOUU05h3LhxvPzyy2zbtg0Ap9PJRRdd1OIxXnnlFW688cbAPv45MscddxynnXZa2H1i+buI9vM0xpiUYTmrRZazTGul5TpYcTHmEutQmcSoiTCXL1J7jLp37x547nA4Aq8dDkdgnPmQIUM45phjeOWVV3j33Xf505/+BMADDzzA3//+d8rKypgwYQLvvfdes+OrKn/5y18YMWJESPvf//53evbsGdJ25ZVX8t///d/8+c9/5tFHH23XZ3E6nSHj5JueKxpV5aqrrmLRokXN3svMzMTpdLY6tljiiOXvItLP0xhjUorlrFZ9FstZJhZd8w6WMYkUaS5fB83xu+6667jiiiuYM2dO4Jf1Z599xqmnnsrChQvJy8tjx44d9O7dm6+++iqw3/Tp07n//vsDY8s3bdoU8RxXX3019913HwAnn3wyAOXl5UydOrXZtk3PE09Tp07lmWeeYffu3QDs27ePL774Iuy28+fPZ+XKlWGP8fvf/x7wTiyOVxnt1vw8jTEmaSxnhbCcZTkrHlKqgyUiPUVkg4jEVg/TmFQ09S5wZYW2ubK87R3gggsu4ODBg4GhFgBz585l9OjRjBo1im9+85uMHTuWs846i48++igwYXjBggU0NDQwZswYRo4cyYIFCyKe45hjjuGkk04KOUdFRUXYYRf9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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure(tight_layout=True, figsize=(12,4))\n", "plt.subplot(1,2,1)\n", "for genre in compare_genres:\n", " temp_df = meta_df[meta_df[genre] == 1]\n", " temp_df = temp_df[['author_id', 'author_works_num']].drop_duplicates()\n", " s = temp_df.author_works_num.value_counts().sort_index()\n", " u = s.reset_index()\n", " u = u.rename(columns={'index': 'author_works_num', 'author_works_num': 'num_authors'})\n", " plt.scatter(u.author_works_num, u.num_authors, label=genre)\n", "plt.xlabel('Number of works per author')\n", "plt.ylabel('Number of authors')\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.legend()\n", "\n", "plt.subplot(1,2,2)\n", "for genre in compare_genres:\n", " temp_df = meta_df[meta_df[genre] == 1]\n", " temp_df = temp_df[['author_id', 'author_works_num']].drop_duplicates()\n", " s = temp_df.author_works_num.value_counts().sort_index()\n", " u = s.reset_index()\n", " u = u.rename(columns={'index': 'author_works_num', 'author_works_num': 'num_authors'})\n", " plt.scatter(u.author_works_num, u.num_authors / sum(u.num_authors), label=genre)\n", " num_single_work_authors = int(u[u.author_works_num == 1].num_authors)\n", " print(f'{genre: <40}\\tauthors: {sum(u.num_authors): >6}\\tworks: {sum(u.author_works_num * u.num_authors): >8}\\tsingle work authors: {num_single_work_authors: >6}')\n", "plt.xlabel('Number of works per author')\n", "plt.ylabel('Proportion of authors')\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.legend()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the entire dataset, there 186,360 different authors of *history, historical fiction, biography* books, which is the same as the number of different authors for *romance* and *mystery, thriller, crime* combined. **So one thing to take into account is that the *history* genre has many more distinct authors than the other two.** \n", "\n", "Above are two distribution plots. The first shows the number of works per author set off against the *number of authors* (how many authors have written X books). The second shows the number of works per author set off against the *proportion of authors* (what proportion authors have written X books).\n", "\n", "First, there are many more authors in the *history* genre who write only one book than in the other genres. In the plot on the left, it is clear that for all three genres, the majority of authors write only one or a few books. But the first blue dots are above the other colored dots, which means that there are many more *history* authors with few books. At the higher end, the long tail of highly prolific author, there are few differences as the colored dots overlap so much that only the green dots are visible. **In other words, it is not that there are fewer prolific authors in the *history* genre than in the other two genres, but that there are many more *history* authors, and therefore, *proportionally* many more *history* authors with few books.** This is what the plot on the right shows. From 4 works per author and more, the blue dots are well below the others, showing that the *proportion* of authors with 4 works of more is lower in the *history* genre than in the other genres. \n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEKCAYAAAAMzhLIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABE5UlEQVR4nO3de3yT5fn48c+VtlAo0HISakHBEwqlUE46QUFRcCuiIKAOp3ic/qZj+v0yYfPQOTfd2HQw3dR5AN2miBMUq1+YIkOnDhBQPAwRRG0tUg4tpxaa5vr9kQNJm6RJmzRter1fr7xo7jx5cuVpyZXnue/7ukVVMcYYY0JxJDoAY4wxzZslCmOMMWFZojDGGBOWJQpjjDFhWaIwxhgTliUKY4wxYaUmOoBYEpELgQs7dux4/SmnnJLocIwxpkV5//33d6lq99rtkozzKIYNG6br1q1LdBjGGNOiiMj7qjqsdntSXXoSkQtF5LGKiopEh2KMMUkjqRKFqi5T1RsyMzMTHYoxxiSNpEoUdkZhjDGxl1Sd2aq6DFg2bNiw6xMdi4md6upqiouLqaqqSnQoxiSF9PR0evXqRVpaWkTbJ1WiaIylG0qYu3wz35RXcmxWO2aN78fF+TmJDssAxcXFdOzYkT59+iAiiQ7HmBZNVdm9ezfFxcX07ds3oufYpSfcSWLOi5soKa9EgZLySua8uImlG0riE6iJSlVVFV27drUkYUwMiAhdu3aN6gw9qc4oGnrpae7yzVS3W0fGccuRtHK0OovDZeOZu7yNnVU0E5YkjImdaP8/JdUZRUPtdL1DRvYLONqUIwKONuVkZL/ATtc7iQ7NNAPbt28nNzc36GN33XUXr7/+esjnLl26lE8++SReofkUFhbyu9/9LuhjZ555Ztjn/vrXv27Qa37ve9+jvLw86uctWLCAm2++uU774cOHOe+88xg8eDCLFi3iuuuuC3vsVq1axTvvHP0/+sgjj/D0009HHU844X739cUXT+HiioekOqPwzsw+6aSTonpe5x4vU+moCWhzOWro3ONl4I7YBWiSzj333BP28aVLlzJhwgT69+8f8T6dTiepqbH7r+n/YRrMr3/9a372s59FvD9VRVV59dVXGxtagA0bNgCwceNGAC699NKw269atYoOHTr4EuGNN94Y03jq8/jjj8dkP7H+fcdDUp1RNHQeRVXKoajaTfO2dEMJI+9fSd/ZRYy8f2VM+ppqamq4/vrrGTBgAOPGjaOyshKAGTNm8MILLwAwe/Zs+vfvT15eHv/7v//LO++8w8svv8ysWbMYPHgwW7duZePGjZxxxhnk5eUxadIk9u7dC8CYMWP4yU9+wrBhw/jVr35F3759qa6uBmDfvn0B90P55JNPGDNmDCeccALz58/3tXfo0AGA0tJSzj77bAYPHkxubi5vvfUWs2fPprKyksGDBzN9+nQAHnjgAXJzc8nNzeUPf/gD4P4G269fP6688kpyc3P5+uuv6dOnD7t27QLg6aefJi8vj0GDBvGDH/wAgGXLlnH66aeTn5/Peeedx7fffhsy9p07d3LFFVewdu1a37EaM2YM3goL//d//8eQIUMYNGgQY8eOZfv27TzyyCM8+OCDDB48mLfeeivgrCrccb799tsZMWIEp5xyCm+99Va9v3un08n06dM57bTTmDJlCocOHfLtyxvfs88+y8CBA8nNzeX222/3PfeJJ57glFNOYcSIEVx//fW+M6kZM2Zw4403cvrpp/PTn/6UNWvW8J3vfIf8/HzOPPNMNm/eDLjPvi666CLGjBnDySefzC9+8QvfvoP9TW7dupUhQ4b4ttmyZUvA/QbzfjtIptvQoUM1Guf/5VTNXZBb53b+X06Naj8mPj755JOIt12yvlhPveM1Pf72V3y3U+94TZesL27w63/xxReakpKiGzZsUFXVqVOn6jPPPKOqqldddZUuXrxYd+3apaeccoq6XC5VVd27d2/A414DBw7UVatWqarqnXfeqTNnzlRV1dGjR+tNN93k227GjBm6ZMkSVVV99NFH9bbbbgsb4913363f+c53tKqqSsvKyrRLly565MgRVVXNyMhQVdXf/e53eu+996qqqtPp1H379gU8rqq6bt06zc3N1QMHDuj+/fu1f//+un79ev3iiy9URPTdd9/1bXv88cdrWVmZfvTRR3ryySdrWVmZqqru3r1bVVX37NnjOx5/+ctffO/hqaee0h/96Ed13sObb76pBQUFvvujR4/WtWvX6s6dO7VXr166bdu2gP3ffffdOnfu3IBj4L0f7jh74ygqKtKxY8eGPa5ffPGFAvr222+rqurVV1/tew1vfCUlJdq7d2/duXOnVldX6znnnKNLlizRkpISPf7443X37t165MgRHTVqlO99X3XVVVpQUKBOp1NVVSsqKrS6ulpVVf/5z3/q5MmTfceqZ8+eumvXLj106JAOGDBA165dG/ZvcsyYMb72OXPm6Pz584O+t2D/r4B1GuQzNanOKBpq5uEU0l2ugLZ0l4uZh1MSFJFpqLnLN1NZHXgZsbK6hrnLNzdqv3379mXw4MEADB06lO3btwc8npmZSXp6Otdeey0vvvgi7du3r7OPiooKysvLGT16NABXXXUVq1ev9j3uf6nluuuu46mnngLgqaee4uqrr643xoKCAtq2bUu3bt045phj6nyDHz58OE899RSFhYVs2rSJjh071tnH22+/zaRJk8jIyKBDhw5MnjzZ9637+OOP54wzzqjznJUrVzJ16lS6desGQJcuXQD3sObx48czcOBA5s6dy8cff1zvewjmvffe4+yzz/YN5fTuP5T6jvPkyZOB4L/HYHr37s3IkSMBuOKKK3j77bcDHl+7di1jxoyhe/fupKamMn36dFavXs2aNWsYPXo0Xbp0IS0tjalTpwY8b+rUqaSkpPhinjp1Krm5udx6660Bx+r888+na9eutGvXjsmTJ/teP9TfpPdvp6amhkWLFvH973+/3vdYn6RKFA0dHltw1l0U7j1AdrUTUSW72knh3gMUnHVXnCI18fJNeWVU7ZFq27at7+eUlBScTmfA46mpqaxZs4YpU6bwyiuvcMEFF0T9GhkZGb6fR44cyfbt21m1ahU1NTURdVzWF+PZZ5/N6tWrycnJYcaMGVF3/PrHF4lbbrmFm2++mU2bNvHoo482mwmT3uMU7BgFU3uEUKxG4PkfzzvvvJNzzjmHjz76iGXLlgUcq1CvH+r3fckll/Daa6/xyiuvMHToULp27droWJMqUWhDaz3lTaPgvLms2J/Ch9uLWbE/hYLz5kLetPgEauLm2Kx2UbXHyoEDB6ioqOB73/seDz74IB988AEAHTt2ZP/+/YD7rKNz586+b+jPPPOM71tvMFdeeSXf//73A84mHnroIR566KEGxfjll1/So0cPrr/+eq677jrWr18PQFpamq//46yzzmLp0qUcOnSIgwcPsmTJEs4666yw+z333HNZvHgxu3fvBmDPnj2A+1tyTo57ePnChQsbFDPAGWecwerVq/niiy8C9u9/bP1Fe5wBSkpKGDt2bNDHvvrqK959910A/v73vzNq1KiAx0eMGMG//vUvdu3aRU1NDc8++yyjR49m+PDh/Otf/2Lv3r04nU7+8Y9/hHx9/2O1YMGCgMf++c9/smfPHiorK1m6dKnv7CaU9PR0xo8fz0033RTRmWgkkipRNEreNLj1Iygsd/9rSaJFmjW+H+3SAi8ZtktLYdb4fnF93f379zNhwgTy8vIYNWoUDzzwAACXXXYZc+fOJT8/n61bt7Jw4UJmzZpFXl4eGzdu5K67Qp+1Tp8+nb1793L55Zf72v773/82+BviqlWrGDRoEPn5+SxatIiZM2cCcMMNN5CXl8f06dMZMmQIM2bMYMSIEZx++ulcd9115Ofnh93vgAED+PnPf87o0aMZNGgQt912G+Aesjt16lSGDh3quyzVEN27d+exxx5j8uTJDBo0yHeJ7sILL2TJkiW+zmx/0RxncHf0hxp51K9fPx5++GFOO+009u7dy0033RTweHZ2Nvfffz/nnHMOgwYNYujQoVx00UXk5OTws5/9jBEjRjBy5Ej69OlDqC+xP/3pT5kzZw75+fl1znJGjBjBJZdcQl5eHpdccgnDhtWpAl7H9OnTcTgcjBs3rt5tI2HrUZhm79NPP+W0006LePtkKcfywgsv8NJLL/HMM8/42iZMmMCLL75ImzZtEhhZ8nnooYc47rjjmDhxYkz3e+DAATp06IDT6WTSpElcc801TJo0KeLnL1iwgHXr1kV9Fvm73/2OiooKfvnLX4bcJtj/q1DrUTTvwbvGNMDF+TktMjH4u+WWW3jttdfqzFV45ZVXEhRRcgs2ATAWCgsLef3116mqqmLcuHFcfPHFcXkdf5MmTWLr1q2sXLkyZvtMqjMKvwl312/ZsiXR4ZgYifaMwhhTv2jOKJKqj6LBndnGGGNCSqpEYYwxJvYsURhjjAnLEoUxxpiwLFEk0PzFtzH28QHkLchl7OMDmL/4tkSHZJrIxo0bY159NZjy8nL+9Kc/+e6vWrWKCRMmRPRc/xLq/gXw/IsBNpWGljQ3sWGJIkHmL76NZw4sZ2eaAxVhZ5qDZw4st2TRSjQkUURSbqK22okiUjU1Ndxzzz2cd955UT832L4aSlVxuVy8+uqrZGVlNToW0zCWKBLkpYrlVDkCD3+Vw8FLFcsTFFES+fB5eDAXCrPc/374fKN2t337dk499VRmzJjBKaecwvTp03n99dcZOXIkJ598MmvWrMHlcnHyySdTVlYGgMvl4qSTTqKsrIzFixeTm5vLoEGDOPvsszly5Ah33XUXixYt8i3Sc/DgQa655hpGjBhBfn4+L730EuCecDVx4kTOPfdcxo4dy5VXXsnSpUt9sU2fPt23bTCzZ89m69atDB48mFmzZgHuSWBTpkzh1FNPZfr06XiHyPfp04fbb7+dIUOGsHjx4oAS6qH89a9/ZcSIEQwePJgf/vCHvqTQoUMH/ud//odBgwb5yl8E8+233zJp0iQGDRrEoEGDeOedd8KWNI/kdwGEPJ6mgYKVlG2pN+BC4LGTTjopaFnd5mTgUwOCljYf+NSARIfW7ERTZlw/WKR6bw/Vuzsdvd3bw93eQN6Szh9++KHW1NTokCFD9Oqrr1aXy6VLly7Viy66SFVVCwsL9cEHH1RV1eXLl/tKRefm5mpxsbvMubf8eO1S23PmzPGVid67d6+efPLJeuDAAX3qqac0JyfHV1p71apVvtcrLy/XPn36+MpTh4p9wICjf1NvvvmmdurUSb/++mutqanRM844Q9966y1VdZcN/81vfuPb1r9Eurektne7srIy/eSTT3TChAm+cuY33XSTLly4UFVVAV20qP5jPm3aNN8xczqdWl5eHrakeaS/i1DH0xzVasuMawuaR9HdGXyiY6h2E6E37oHqWpViqyvd7Y3Qt29fBg4ciMPhYMCAAYwdOxYRYeDAgb7yztdcc42vIuuTTz7pK8g2cuRIZsyYwV/+8peQl2FWrFjB/fffz+DBgxkzZgxVVVV89dVXgLvMtLe09ujRo9myZQtlZWU8++yzXHLJJVGvjjZixAh69eqFw+Fg8ODBAaW261tVzt8bb7zB+++/z/Dhwxk8eDBvvPEG27ZtA9zVTC+55JJ697Fy5Upf7aSUlBRfLaRQJc0hst9FuONpomclPBLkoszxPHMg8PJTusvFRZnjExhVEqgojq49Qv4lnR0Oh+++w+Hw9R307t2bHj16sHLlStasWcPf/vY3wL2W83/+8x+KiooYOnQo77//fp39qyr/+Mc/6NcvsHjhf/7znzrlva+88kr++te/8txzz/nWrGjoe6ldajuaUuKqylVXXcV9991X57H09HTfWgsNES6OSH4XoY6naZikOqNoSX489QF+0GE8x1S7EFWOqXbxgw7j+fHUBxIdWsuW2Su69hi77rrruOKKKwIWpdm6dSunn34699xzD927d+frr7+uUyJ7/Pjx/PGPf/T1F3jXjw5mxowZviVKvWtxhyqTHaoUdyyMHTuWF154gZ07dwLu8t9ffvll0G3nzJnDkiVLgu7jz3/+M+Du9I52LZlQojmepn6WKBLox1Mf4I3rPubDGR/xxnUfW5KIhbF3QVqttSfS2rnbm8DEiRM5cOBAwDoAs2bN8q2nfOaZZzJo0CDOOeccPvnkE19n9p133kl1dTV5eXkMGDCAO++8M+Rr9OjRg9NOOy3gNUKVye7atSsjR44kNzfX15kdK/379+fee+9l3Lhx5OXlcf7551NaWhp0202bNtGzZ8867fPmzePNN99k4MCBDB06lE8++SQmsUVzPE39kqoooJeVGU8uURcF/PB5d59ERbH7TGLsXU22vsi6deu49dZb66yPEEuHDh1i4MCBrF+/3ndNP15lsmNl/PjxLF9uI/qaEyszblq3vGkJWXjq/vvv589//rOvbyIeXn/9da699lpuvfXWgEVw4lUmO1YsSbRsdkZhmj0rM25M7LXaMuPGGGNir9knChE5QUSeEJHwU0SNMcbERVwThYg8KSI7ReSjWu0XiMhmEflcRGaH24eqblPVa+MZpzHGmNDi3Zm9AHgIeNrbICIpwMPA+UAxsFZEXgZSgNozd65R1Z1xjrFFK1p1J/O2LWGHA3q6YOYJkygYE3pBdWOMiVZcE4WqrhaRPrWaRwCfq+o2ABF5DrhIVe8DIqt/HISI3ADcAHDcccc1dDctStGqOyn8YglVKQJAaQoUfuGe1GTJwhgTK4noo8gBvva7X+xpC0pEuorII0C+iMwJtZ2qPqaqw1R1WPfu3WMXbTM2b9sSqhwS0FblEOZtqzsD1sSOekpfG9NaNPvObFXdrao3quqJnrOOkETkQhF5LFZlAJq7HSF+e6HaW4uibUWMe2EceQvzGPfCOIq2FTV6n7VLX1977bXk5uYycOBAFi1aBLgXBRo9ejQXXXQRJ5xwArNnz+Zvf/sbI0aMYODAgWzduhWAZcuWcfrpp5Ofn895553Ht99+C0BhYSHXXHMNY8aM4YQTTmD+/Pm+13/66afJy8tj0KBB/OAHPwCgrKyMSy65hOHDhzN8+HD+/e9/N/p9GhNMIibclQC9/e738rQ1mqouA5YNGzbs+ljsr7nrUQM7gvwGezR8nZgWr2hbEYXvFFJVUwVA6cFSCt8pBKDghIJG7XvLli0sXLiQkpISHnnkET744AN27drF8OHDOfvsswH44IMP+PTTT+nSpQsnnHAC1113HWvWrGHevHn88Y9/5A9/+AOjRo3ivffeQ0R4/PHH+e1vf8vvf/97AP773//y5ptvsn//fvr168dNN93EZ599xr333ss777xDt27d2LNnDwAzZ87k1ltvZdSoUXz11VeMHz+eTz/9tFHv0ZhgEpEo1gIni0hf3AniMuD7sdixiFwIXHjSSSfFYnfNXu+K4ZR3XlOnAm3vihEJjCqx5q2f50sSXlU1VcxbP6/RicJb+vrWW2/l8ssvJyUlhR49ejB69GjWrl1Lp06dGD58ONnZ2QCceOKJjBs3DoCBAwfy5ptvAlBcXMyll15KaWkpR44coW/fvr7XKCgooG3btrRt25ZjjjmGb7/9lpUrVzJ16lS6desG4Cs5/vrrrwfURtq3bx8HDhygQ4cOjXqfxtQW7+GxzwLvAv1EpFhErlVVJ3AzsBz4FHheVT+Oxeu1pPUoYuHNnVPou2NIQAXavjuG8ObOKYkOLWF2HNwRVXs0IinBHUkJ7FtuuYWbb76ZTZs28eijj1JVVRX0+bVLgNfmcrl477332LhxIxs3bqSkpMSShImLuCYKVb1cVbNVNU1Ve6nqE572V1X1FE+/w69i9XqtrY/i2Kx2rKm4jK2f/5Z9//0NWz//LWsqLuPYrHbBnxDjJUKbo54ZdSuUhmtviLPOOotFixZRU1NDWVkZq1evZsSIyM/iKioqyMlxj99YuHBhvdufe+65LF68mN27dwP4Lj2NGzeOP/7xj77tNm7cGMW7MCZySdXt2drOKGaN70e7tMDFYdqlpTBrfJDFWj58nqLXZzGuYw15fXoxrmMNRa/PSrpkMXPITNJT0gPa0lPSmTlkZsxeY9KkSb6O5XPPPZff/va3QUtoh1JYWMjUqVMZOnSo73JSOAMGDODnP/85o0ePZtCgQdx2220AzJ8/n3Xr1pGXl0f//v155JFHGvyejAnHigK2cEs3lDB3+Wa+Ka/k2Kx2zBrfj4vz6442Lno4l8L2Wqc/o/CQUPCjj+ps35xEWxSwaFsR89bPY8fBHfTM6MnMITMb3T9hTLJptWXGW1tnNsDF+TlBE0Nt89rWUOUI/HVXORzMa+sk2T5CC04osMRgTAzZpadWYkdq8PWLQ7UbY4xXUiUKE1obZ/uo2o0xxiupEkVrG/UUDTkwBYcr8OzB4UpBDrSMobTJ2JdmTKJE+/8pqRKFXXoK7eejp1O9cxquI1mogutIFtU7p/Hz0dMTHVq90tPT2b17tyULY2JAVdm9ezfp6en1b+yRVJ3ZJjR3h/dVzF1+Rr0jpJqbXr16UVxcTFlZWaJDMSYppKen06tXr4i3t+GxxhhjgFayZrb1URhjTOwlVaKwPooYaQWlPowxkUuqRGFioJWU+jDGRM4ShQlQ9NY9FHbuQGlaKipCaVoqhZ07UPTWPYkOzRiTIJYoTAB3qY/APwt3qQ/Pakh2WcqYVscShQkQttSHXZYyplVKqkRho54ar2ebrJDtdlnKmNap3kQhIjNFpJO4PSEi60VkXFMEFy0b9dR4I3v+MGipj5E9f1j/ZSljTFKK5IziGlXdB4wDOgM/AO6Pa1QmYVasyeFg6ZSAUh8HS6ewYk2OVaA1ppWKpISHeP79HvCMqn4sIhLuCabl+qa8EiUf5778wHYqOT6nE7td++s8p0tKp6YKzxiTAJGcUbwvIitwJ4rlItIRcMU3LJMoodbbPjarHQd3Xxz0stTB3Rc3QWTGmESJJFFcC8wGhqvqIaANcHVcozIJE24d7l07BgS9LLVrx4AERWuMaQqRXHoqVNW7/O6XA/OB5l+f2kTNW0022Drcc5dvpqS87mWpnBBnIcaY5BBJougtInNU9T4RaQs8D2yIc1wN0hrXzI6HUOtwzxrfjzkvbqKy+ugoJ+/ZBuCeT/HGPVBRDJm9YOxdkDetqcI2xsRJvWXGPR3XfwM2AecAr6nqg00QW4NZmfH4WbqhJOjZhncy3rxO7dmRmkJPZw0z9x2i4JRLYMsKSx7GtAChyoyHTBQiMsTvbhrwKPBv4AkAVV0fhzhjwhJF0yt6OJfC9howzyLd5aJw114KDh48umFaO7hwviULY5qhhiSKN8PsT1X13FgFF2uWKJreuMdPozSt7pXMrJoa2rn06FnG3nIKUrvCrR8lIEpjTDihEkXIPgpVPSe+IZlkEmrSXbnDQXmKe9pNaVoqhd26wK49FDRlcMaYRomkhEemiDwgIus8t9+LiNXIMAFC1Yii1tzMKoeDeV27xD8gY0zMRDKP4klgPzDNc9sHPBXPoEzLE6xGFCHGSexIsYn9xrQkkQyPPVFVL/G7/wsR2RineEwLtWJNDgddU2jbfTmSVo5WZ4HjMI7Uyjrbdko7pukDNMY0WCSJolJERqnq2wAiMhKo+7/ftGrBakSldtpAevaLiKPa16auNA7vHJ+IEI0xDRRJorgJWOjplxBgD3BVXKOqRUQuBgqATsATqrqiKV/f1O/YrHaUlAd+f3Duy6cKAs4yDpeNZ+yBve7V8bxzK04eZ3MtjGnG6p1w59tQpBOAp+R45C8g8iQwAdipqrl+7RcA84AU4HFVrbd0uYh0Bn6nqteG286Gxza9pRtK6szaFup2U0x0vM05nf/Gnztn+IbMnn3oEKvb15qod95cSxbGNLFQw2MjHvUErARWNmDU0wLgglr7TAEeBr4L9AcuF5H+IjJQRF6pdfO/oH2H53mmmbk4P4f7Jg8kJ6sdgrv+0/QzjqtTYHB41j/4dbeOAavkLerU0VbNM6YZi+TS05PAR7hHPIF74aKngMmRvICqrhaRPrWaRwCfq+o2ABF5DrhIVe/DffYRwFNG5H7c5UOCzggXkRuAGwCOO+64SEIzMRasRtSw47sElPx4pktKnVXygg6hbeu0uRbGNBOJGvWUA3ztd78YOD3M9rcA5wGZInKSqj5SewNVfQx4DNyXnhoZn4mR2skjb0Fkq+HZqnnGNB8tYtSTqs7HXdo8LKse2/yl17SnMsiQ2dps1Txjmo9IJtzdBDwsIttF5EvgIeCHjXzdEqC33/1enrZGUdVlqnpDZqZNHG+u9n47sd6JeXVWzfvwefcoqcIs978fPh/vMI0xfuo9o1DVjcCgho56CmEtcLKI9MWdIC4Dvt/YndoZRfN3jONMvi0NHDLrPHAqqR3+67tfWTaeffs8q+Z9+Dws+zFUe85CKr523wcbFWVME4lkPYquwN3AKNzf/d4G7lHV3RG9gMizwBigG/AtcLeqPiEi3wP+gHt47JOq+qsGvoc6bHhs8xVsGG1tEx1v87M2i+nJLhAHRe3bMq9zllWgNSbOoq4e6+c5YDXg7dCeDizC3blcL1W9PET7q8CrkezDJI/aS61mtU/jQJWTapf7C8tEx9uck/VXruzSgR2pvch0uTgggtMzUsoq0BrT9CI5o/jIf6Kcp22Tqg6Ma2QN4Hfp6fotW7YkOhwTIf9V8+7teht/6JZadwhtLdk1yopr7IzCmFhq8IQ7YIWIXCYiDs9tGrA89iE2nnVmt0wX5+fw79nn8sX9BSzs7Kg3SYBVoDWmKYX8Hyki+0VkH3A98HfgsOf2HJ6Jbc2NiFwoIo9VVFQkOhTTQJHOn+hZ7bQRUMY0kZCJQlU7qmonz78OVU3z3Byq2iwHudsZRcsXcgEkf6qUpqYwrmMNRct/AoWZljSMiaNILj0Z02SCLYAkLsHlbAeq7psIeOtCdetMUUb7o8NmLVkYE3OWKEyzsmJNDgdLp+A6koUquI5kcah0Gge33E22syZ4XajOWe471ZXwhhUTNCbWQg6PFZG+qvpFUwbTWDbhruULtgCSV6j+i4D2iuJ4hWZMqxXujOIFABF5o4liaTTro2j5js1qF7Q9RYQ2zvZBH1NgXK9j3ZegMnvFMTpjWqeQ8yhEZAOwGHetpwdrP66qD8Q3tIazmdktV7CZ2+3SUrhv8kA+2LuSF7/8PS5HiFndnr/l7Bpl5oEjFOwtsxXzjIlCQ+ZRXAbU4L481THIzZiYC7YA0n2TB3Jxfk6d/os6vJ3cqQ5mZ7ZlYJ9e7pFRr8+yTm5jGiGSmdnfVdXXmiieRrGZ2cmt7+wiX6HZDqfOrt2vHVK6y0XhIaHgRzaT25hwGjMz+x0ReUBE1nlu0S6F2mSsjyK5+fdfaHVWxM9zr5hXY6XKjWmgSBLFk8B+3EuhTgP24V4K1ZgmNWt8P98a3IfLxqOutIifuyM1xT3XArU5F8ZEKVFLoRoTNf/KsyXl+VThXtfCkVYOaJ05Fv56Omt1gHvnXFgntzH1ahFLoRrj5V2D2z06KoWDW93zLUZkPsfu7uvZmepJFv5JQ5XyFAejeuewL8VxdE0Lm3NhTEQiSRQ3Ak/79UvsBa6KX0gNZxPuWo/As4tK1lRcBhWXAZDaaQPZPf9OucPhGwlVKUKl50Krb02L9mJrWhgTgXr7KFT1A1UdBOQBeaqar6ofxj+06FlnduviLU9e+4KTc18+bVwS9lJUlcPBvHS1fgpjIhBxrSdV3Rej9bKNialgs7l3ptb/p12aIuStv4dxTwygaNWd8QjNmKRgRQFNi+c/GsrLFcnwWRHUM0Gv8IslliyMCcEShWnxgs3mHpb5/aiGz1Y5hHnblsQvSGNasEg6sxGRM4E+/tur6tNxismYqHlHQ3mNvB+qXJNp2305klaO1rSnveMgVULIvosd/l+bPnzePXy2otjqRZlWr95EISLPACcCG3HXfgJ3wU5LFKbZClauvN1Jv4C00CO7e9bUwCu3wcdLoHLP0Qe8E/TAkoVplSI5oxgG9Nf6ikI1AzY81ngdm9WOkvLApFCVWllnhJRXmiqHEPJ2raBn13Rm7m1PwcFDRzewCXqmFYukj+IjoGe8A4kFGx5rvIJ1cIesD6VKNVCRmuLu3E5L5c7uXRnVO4e8Pr2PrnVhE/RMKxVJougGfCIiy0XkZe8t3oEZ0xi1O7g7t0+DPRfU7eD2W4PbX7VIQOIo7NaFoox2VlDQtEqRXHoqjHcQxsRD3Q7uVL4tVV8HdwqKK8Ja5d61uQuKrb/CtD71JgpV/ZeI9ACGe5rWqOrO+IZlTOzV7uDueOrsqJ7vW5vb+itMK1PvpScRmQasAabiLjP+HxGZEu/AjIm12jO4I5qU5yegAq31V5hWJJI+ip8Dw1X1KlW9EhgB2BRW0+LU7uCOak0LVUpTU452bGf2ilOUxjQ/kfRROGpdatqNzeg2LVDtirPOfUfXtPBOyhNHFeJw1X2ypy/D3bHdFfpOosAm5ZlWIpI1s+firhz7rKfpUuBDVb09zrE12LBhw3TdunWJDsM0c/5rcHuldtrgWQxpb9jqs9nVTlYUl4L/HtLawYXzLVmYFqvBa2ar6izgMTxlxoHHmjJJiMhpIvKIiLwgIjc11eua5Bes6qxzXz4Ht86GkFPz3NyXobLdl6G8vJ3cxiSZiC4hqeo/VPU2zy3iymki8qSI7BSRj2q1XyAim0XkcxEJO/REVT9V1Rtxd6SPjPS1jalPsEl5XvV2dHvmV8zu3pWBNinPJLmQiUJEvEuf7heRfX63/SIS6boUC4ALau03BXgY+C7QH7hcRPqLyEAReaXW7RjPcyYCRcCrUb9DY0Lwn5QHkOK51JQiEnlHt2eynm9SXocMm5Bnkk69fRSNfgGRPsArqprruf8doFBVx3vuzwFQ1fsi2FeRqgZdvVJEbgBuADjuuOOGfvnll7F5A6ZV6ju7iJQI+yv8ZVc7WfHtXuurMC1Sg/soPNVj622LQg7wtd/9Yk9bqNcfIyLzReRRwpxRqOpjqjpMVYd17969EeEZ4+6/8PZXRJYi3Hakprj7Kl68Hn7RBQozreyHafEi6aMY4H9HRFKBofEJpy5VXaWqP1bVH6rqw+G2FZELReSxioqKpgrPJCn//os2zvb1bH1UpstvaK16Juh5y5RbsjAtVLg+ijkish/I8++fAL4FXmrEa5YAvf3u9/K0NZpVjzWx4u2/6Nw+jfKdE3G4gnd611bucDDiuF4M7NObQX16H+3obiM2Isq0WCEThafPIBN4WlU7eW4dVbWrqs5pxGuuBU4Wkb4i0ga4DIhJNVo7ozCxdHF+DhvuGue+BFU6BdeRLOrt0hOhMsUBIu6Cg34d3a8499TzZGOap7CXnlTVxdFigFETkWeBd4F+IlIsIteqqhO4GVgOfAo8r6ofN/Q1asVrZxQm5nL8+iuqvrk0qrW4vaocDh7s3DkO0RkTf5GU8FgvIsNVdW20O1fVy0O0v4oNdTUtxKzx/Zjz4iYqq2vqlP2IcDAUADtTHe6ObSv5YVqYSBLF6cB0EfkSOIh7yqqqal5cI2sAWwrVxEPtGlE1+/I5uC+f1E4bSD92UcTJoqezBio83XG2DrdpQSKp9XR8sHZVbbYTFazWk4mnpRtK+J/nP6BGlbY9lpLW+b36k4Uq95ftDlyHGyCzN9z6UfDnGNPEGlPr6UsgC7jQc8tqrknCOrNNU7g4P4ffTxsEwOFvL3b3W0Qwb7VOkgAr+WFahEgm3M0E/gYc47n9VURuiXdgDWGd2aapXJyfQ1Y7d6e2c18+GsEiSL56UP5sXQvTAkQy4e5a4HRVvUtV7wLOAK6Pb1jGNH+FEwf4JuXVWxvKvx6UJ1kUdejIuB5Z5C3MY9wL4yjaVtQUYRsTtUg6swXwWwOSGuqrwWxMKxDYyZ3PYaCNZzQUCIKrTo2oKoeD2d27cn/XzhwQB85q92XS0oOlFL5TCEDBCUHLmRmTMJF0Zt8GXAUswZ0gLgIWqOof4h5dlPxGPV2/ZcuWRIdjWpGR96+kpLwyoK3Tqbej0YyfBbIzslkxZUUsQzMmYo3pzH4AuBrYA+wCrm6OSQKsj8Ikzje1kgREVyPKa8fBHbEIx5iYimbta6n1rzHGI9hqeeU7J1JnrdV69KxxQWGWVZw1zUoko57uAhYCnYFuwFMicke8AzOmJZk1vl+db1DOffm4auomkJBUKXXgXmLVudsqzppmI5IziunAcFUtVNW7cY96+kF8w2oYm0dhEuXi/JygJw+Hv50Y0RwLVOuultdGYMmNlixMwkWSKL4B0v3utyVGZcFjzfooTCLlBLn85NyXj0ZyVhFkdNS8zlnuNS1evAFeuS1GURoTvUgSRQXwsYgsEJGngI+Acs+qc/PjG54xLces8f2Cth/+dmKDKs6WpqaQ16e3+1LUp8/ZmYVJmEjmUSzx3LxWxScUY1q2i/NzKHz5Y8orqwPavRVn0499HpEoerdFUPBciuoMb91DgRUQNAlQb6JQ1YWeBYZO8TRtVtXqcM8xprUqnDjAV5Lcn3NfPhy7qMH7rXI4mNfWiU3FM4kQyainMcAW4GHgT8BnInJ2fMNqGOvMNonmXULV21/h3/MQST0o94bBzzpKU1MoetiGzZqmF8nM7PeB76vqZs/9U4BnVXVoE8TXIFZm3DQXSzeUMHf5Zr4prySt0wbaZL+IOPxOyL2jnSKU7nJRuGsvBQcPukuU2+JHJoZCzcyOpI8izZskAFT1MxGJvmfOmFbo4vwcX02ovrPBxdHV8dKd7TicGqT0eBju0VCZ7kThXfzoq/dgywpbOc/ETSSJ4n0ReRz4q+f+dMC+rhsTpWOz2lFSnu/urwAOAB1PnR31fnakphy9U10J657ENwXcVs4zcRDJ8NgbgU+AH3tunwA3xTMoY5LRrPH9fGXJvaKaue3Hf12Loox2jOt1rGco7bHuiXpv3NOoWI3xF7aPQkRSgI9V9dSmC6nxrI/CNFf+fRYK7nW3sxcjDldU+3Go0rHGRUWK57ueXz9Hmirta1zsS02lZ0ZPZg6ZaaXLTUQaVD1WVWuAzSJyXNwiM6YVWLqhhJH3r+TWRRsBePDSweRktXPPsSidimp0tTZdIlSkpvjKfvir9jymqHudi7fvtEWRTKNEcumpM+6Z2W+IyMveW7wDawgbHmuao6UbSpjz4iZKPGcRJeWVzHlxE+ec2h3BMyHvm2moK6W+XTVIlVbzizd/wdINzbLyjmkBIunMvjPuUcSIqi4Dlg0bNsyWajXNxtzlm+tMwKusruHN/5b5Cgn6Zm/3XII4Dkc1ZDYSVSmHeHvJn4D/5xuFZUykQp5RiEi6iPwEmAqcCvxbVf/lvTVVgMa0dMEWNfK2+xcSdO7L58Bn93BaaT6ZNTUhJ941RE9nDffIY2wseixm+zStR7hLTwuBYcAm4LvA75skImOSTLBFjbzts8b3Iy0l8OxhTcVlDPn8Iu7YeZDsaqc7YUSSNFRJc7lIdQV2jKe7XMzcW057OcJ1R/4a4snGhBYuUfRX1StU9VFgCnBWE8VkTFIJNiy2XVoKs8b34+L8HOZOGUTn9oFzWF92jeL2PQ/xf19/w/1luyN7IRFqRLh31x6yq52IKtnVTgp37aHgoHtiX45jFzyYS9GqOxn3wjjyFuYx7oVx1tltwgrXR+GrM6CqTonxNVNjWgtvn4B3WKz3TMLb7j97GwKH0P4towfzu6VF3GfhAu7r0pl9KQ56OmuYubfclyTAXXuqyLmbwi+WUOVw77P0YCmF7xQC2DBaE1TIeRQiUgMc9N4F2gGHPD+rqnZqkggbwOZRmGQx5pkz2e3a3+Dnp7tcXLT/AKvbt2dHago9nTUc8g6trSU7I5sVU1Y0JlzTwkVd60lV4zNWzxgTsT2uA8EfUKizSHcQVQ4Hizp19J2RlKalhuzv2HFwRwOjNMkuknkUxpgE6ZnRM2i7q6Y97VwRdnLXvmwV4jJWqNcypkUkChHJEJF1IjIh0bEY05RmDplJmrQNaFNXGoe/vZAztlxIT2dNiGdGJz0lnZlDZsZkXyb5xDVRiMiTIrJTRD6q1X6BiGwWkc9FJJLymbcDtlqLaXUKTijgl6N+QWbaMaDgOpJFVelknPvyedk1is5lw0h3RVcnqg5VCisqKXh6OjwY5cJIHz7vfk5hVvTPNS1GJDOzG2MB8BDwtLfBU2jwYeB8oBhY6ykJkgLcV+v51wCDcFesTY9zrMY0SwUnFPhGI428fyUl+45O4Fuv/eigm0CdjZvNfWg3oNGVKf/wefe21Z54rMR50qp3hbtGv4BIH+AVVc313P8OUKiq4z335wCoau0k4X3+r4AMoD9QCUxS1TpfoUTkBuAGgOOOO27ol19+Gfs3Y0yCeetGVVbXeCrP1loxr4Gyq52sKP4msHHYtTDhAffPr9wG7y8ArQFJgaEzPIslfV13Z5m94daP6rabZq8xK9zFWg7g/9dVDJweamNV/TmAiMwAdgVLEp7tHgMeA/fw2FgFa0xz4j8no7zr8pgkCfCsx53RPmDOBeueCP6z1gTer62iOCYxmeYjEYmiQVR1QX3biMiFwIUnnXRS/AMyJkG8E/TyFv6EmH0jEuGObl0AApKF6/2ncEQyDtdfZq9YRWWaiUSMeioBevvd7+VpazRVXaaqN2RmZsZid8Y0a7Eezup0OJjTvevRlfIy2iMuF+5laUKplUTS2rnX7DZJJRGJYi1wsoj0FZE2wGVATNa3sPUoTGsSbOhsY6kIKkJpWiqF3bpQlNGe8GOq/Gb+ZfaGC+cHdGR7F2zqO7uIkfevtDUxWqh4D499FngX6CcixSJyrao6gZuB5cCnwPOq+nEsXs/OKExr4h0629Ppnnjn8FaZjdEAlSqHg/ldsqjU+gYc6tEO7FpJItiCTZYsWp64j3pKBKv1ZFqVwizw6624t0tWQNmOxhBVPtj+NZLSBmqqA14npHZd4Lu/YeSr3SgJshZHTlY7/j373EbHZmKvQWtmtzR26cm0SrU6j1e3bx+zFfIUyOvTm0G9ezCwTy/G9e5FUUb78E+q3ANL/x/D9v0z6MOhFnIyzVdSJQq79GRapbF3uTuRPXYEqQzbYCIggsvzb2mqw9d3EZarmjltFgd9KNRCTqb5SqpEYUyrlDfN3Ymc2RuQmNV/CqXK4eCBzl1wqYTtDunBrpALNpmWJan6KPzmUVy/ZcuWRIdjTEIUPZxLYXulyhG/74Gq7rFO2U4nZx865FvvItPlQhXfwkk3HgQtz+P0mnUc69hNVbuetP/uPXVLfHz4PLxxj3uyXmYv91mSlQFpcqH6KJIqUXhZZ7Zp1T58nqLXZzGvU3tKU1Nw4F75LtPl4ogIlZ7LSDGjGnJ/6S5XwFKsgPsymf8w2to1o4JtY5pEq+jMNsYAedMoOG8uK/an8OH2YpZvr+Kczy5kyOcX0bGG2CYJwu+vyuFgXueswMbqSvfZg9cb9wQmiWDbmIRqMSU8ImElPIzxyJvG0pqRvgKCXh1SX4m2IEejlaamMLBPb7L91/D2rwcVqjaU1YxqNpLqjMJGPRlz1NzlmwOSBIBWZzV9IN4RU36zvQOG9IaqDWU1o5qNpEoUxpijgs1XOFw2HnWlBTY2YT9llcPBvC6dA+tB1RreC1jNqGbGEoUxSSrYfAXnvnyqSifjOpIFCj2q4zuUNpgdKQ548fqjK+IFDO/Fvd6Ft4+i9op5tqJeQiRVorCZ2cYcNWt8vzrzGMCdLMZ+MYr/fLGD14tLyI7zvIvaFBjYpzeDOsM9/5rD2pcfJX9pFj8uu5BD2sa93gVAxdcc+sePKLz3bnd9KO/oqIqvCViNz5JF3NnwWGOS2NINJcxdvpmS8kocAi7Pf/d/t/0xObILgKKM9hR26xLXeRchqVKwz8lz3/yet9v8mF6OXXU2KXZ143x9mPc7/IT2laV192Er6sVMc1rhzhjTRLyLHNXmKpzu+9k7x+Fn3bu6S3U0JRFe65QK38CxUjdJABwru6k8UkN65Y7g+7DRUXGXVJeejDGR+cbVNeB+wcFDsVstL0re9S6+0W5BH/9G3bHWjtnHRkfFnSUKY1qhx9tc4e4P8BPvGlGhuT+GfuucViemQ9qG3zrds7Mfb3OFjY5KkKTqo7BaT8YEV7StiHnr57Hj4A56ZvRkZJcfsH/Vf/kJz5Eju1iWkcGvunfmULjyHmFKdYTltwhesMcUwNUGHEcQwIFyyb4D9Klqw/wuWVSlVkJNe9q3SaHStd83nNcBTO02jDsmLIjoPc8cMpOCEwqij78VsVpPxrRSRduKKHz7Tqq02teWLmlM6HUr+s7nnNbmaX7TPYNqR61Pc+9nQyTJoaFJJMz+RBWtr4NdlUv37eeOSs92lXshsxdFvQdSeGATVX4xpatSWLaHgtQuiSs62MyLH1qiMKaVGvf3UZRW1x0y3qk6lTe//ooJvY+hNK3ljmtxeFbh8zeu17FB31N2tZMVxd8kpuhgCyh+aEUBjWmldhwpD9q+P7WaNuKM7UJHCeAK0hbqPfnaE1F0sAUXP7REYUySC9VJ7W1PXCd2bAT7EKvvPQNNP6y2BRc/tERhTJKbeTiFdFfg9+50l4ub97gvR83cW05akEvQDlUckV6ajvUlbFXEFexcoe52U/ftr9M8c2950Pc8c2/50YamHlbbgosfWqIwJskVnHUXhXsPkF3tRFTJrnYyp2wfe/d9hyOaSsHBQ/yybDdZNTXuD3xVMp01/LpsN7+u1e69pblcvp8dqpxRWUl7vzb/x7wd0962di4Xmc6agMfb19rfpfv2c9+uPb6Ys2pqfM+pvd0de8rrvOfvHThEod/zs6udgQsoJWJYbQsufphUndk2PNaYEPxG2xxq15Of75/MEudIJjrepjDtaTpzAICDtOWwptFFDuBCcDRiGl64UbEu4N+uAeQ6vvS9tvf1ATI4XCeeGhyk4AqIy+V5jXI6ktHGQdvqfRxq15MlB3MZzQaOld18o135F/lMyviI9pU7EjvayEY9NR826smY8JZuKOEXyz5m76FqUjttoG335UhaOVqdxeGy8QC07bEMSXF/A1dXGiIukPr7M9SVBpqKpNQtc+7lTSDqf1/wzasQz4MuVzscKZWAoH5Jy//54t8QEEjdx7Mzsm0+RRiWKIwxdRRtK6LwnUKqaqp8bWmONGpcNbiCjidq+dJT0ik8s9CSRRA2PNYYU8e89fMCkgRAtas6aZMEQFVNFfPWz0t0GC2KJQpjWrEdB0NUZE1yrfV9N5QlCmNasZ4ZPRMdQkK01vfdUC133r4xpnE+fJ6Z335DYXsNWLQoTZUaceBKWOHx+Ep3uZj5xSYo7AI0crJhWgZUHwxsc7SBlDS/dk8vfWbvwFFOoUZA+dr9ypJICgydARMeCHxeu87uxz01ruI1isoShTGtkafuUEF1JWS0Z17nLHakptDTWcPMveUcIY37uh9DJYcBpZ0qTqA6gsJ/7VRp41IqUhp3wcKhSkfPfjwftQGCtdUn2/P+fPMpGqt2kgBwHXHffDxRepdu9XC+dAup3v6hiq/d9796Dz74e91SH1oD656A3Z9D8Zqjj1fuObqN//5jnCxs1JMxrdGDuYHfWIModrkXEgq2PKlphMzeHDriDLqsq0scOLSRAwkasTRsix31JCJjROQtEXlERMYkOh5jkkIE9YWOld0hlyc1jVBRHHJZV2lskvDsP9bimihE5EkR2SkiH9Vqv0BENovI5yIyu57dKHAASAeaf/UsY1qCCOoLfaNdQy5Pahohs1fIZV1rNAYfyXGoHRXvM4oFwAX+DSKSAjwMfBfoD1wuIv1FZKCIvFLrdgzwlqp+F7gd+EWc4zWmdQhWd8iPdwnSYMuTmoarpC2MvSvoUrSHtA0vOcaF/b3Qd3T4x+NUOyqundmqulpE+tRqHgF8rqrbAETkOeAiVb0PmBBmd3vBUwjGGNM43s5Oz+iZw2mZHDziJIuDfKNd+a1zGi+7Rrm3qYafpj5PjuwKWm+pdn2mlqIaIS3C7vBgdasUOKht6SCB7/swKThJ9R0Pbz2qUrrxzdCfMjxvGoNrSrhriZOf6HO+elR/4DJGTfx/kPJvG/UE5AD+vWjFwOmhNhaRycB4IAt4KMx2NwA3ABx33HGxiNOY5JY3zfeh0hZ4bUMJc5dv5pvySo7NascVp3bnzf+Wsax8FG+lnsO+ympqlIDaUN6xRwE1omo91hzVrjXVoH2oA3E4cKkzsN1v53VqWe19CBZ6PsZOhOXaHqU9jprOXNL3VC7OzwHcv5d737uXxZ8txqUuHOJgarcu3AHce+gzFndNwdWlt7v9lKnkH5PvXh98w730/OzxmNezivuoJ88ZxSuqmuu5PwW4QFWv89z/AXC6qt4cg9ey6rHGxFGw2lBeaY40VBVnrQ9OExn/GlT3vncvizYvqrPNiZ1OZOu+rXXapVbRxIbWs2pOo55KgN5+93t52hpNVZep6g2ZmZmx2J0xppZgtaG8ql3VliQawb8G1eLPFgfdJliSAAKSRO19xUIiEsVa4GQR6SsibYDLgJcTEIcxJkpWIym+vMfXFYNhsrH8XcV7eOyzwLtAPxEpFpFrVdUJ3AwsBz4FnlfVj2P0eheKyGMVFRWx2J0xpharkRRf3uPrkMZ/NMfydxXXRKGql6tqtqqmqWovVX3C0/6qqp6iqieq6q9i+Hp26cmYOJo5ZCbpKelBH0tzpJEqVhWoodJT0pk5ZCYAU0+ZGnSbEzudGLRdao3J8t9XLDT7mdnRsDMKY+Kr4IQCCs8sJDsjGzj6zTc7I5tfjvwl94661/dY7Q+vZJMmaaRJWkz2lZ2RHdD5fMcZd3Bpv0t9x9chDi7tdylLJy0N2n7fWfeRnZGNIHX2FQtW68kYYwzQvEY9GWOMaUGSKlHYpSdjjIm9pEoU1pltjDGxl1SJwhhjTOwlVaKwS0/GGBN7STnqSUQqgGDFnjKB2lmkdls3oKlXawkWVzz3Eem24baL9jE79tFtX982oR5v6LGHpj/+reHYh2pvrn/7x6tq9zpbqmrS3YDHIm2v3Qasay7xxmsfkW4bbrtoH7NjH9329W3TmL/xMG1Nevxbw7GP9Pg397/9pLr05GdZFO2htm1KsYghmn1Eum247aJ9zI59dNvXt01j/8bt2Dd8m2iOfaj2FnX8k/LSU2OIyDoNMuHExJ8d+8Sy4584zf3YJ+sZRWM8lugAWjE79ollxz9xmvWxtzMKY4wxYdkZhTHGmLAsURhjjAnLEoUxxpiwLFHUQ0QyRGShiPxFRKYnOp7WREROEJEnROSFRMfS2ojIxZ6/+UUiMi7R8bQ2InKaiDwiIi+IyE2JjqdVJgoReVJEdorIR7XaLxCRzSLyuYjM9jRPBl5Q1euBiU0ebJKJ5tir6jZVvTYxkSafKI/9Us/f/I3ApYmIN9lEefw/VdUbgWnAyETE669VJgpgAXCBf4OIpAAPA98F+gOXi0h/oBfwtWezmiaMMVktIPJjb2JrAdEf+zs8j5vGW0AUx19EJgJFwKtNG2ZdrTJRqOpqYE+t5hHA555vsUeA54CLgGLcyQJa6fGKpSiPvYmhaI69uP0GeE1V1zd1rMko2r99VX1ZVb8LJPySt33wHZXD0TMHcCeIHOBF4BIR+TPNY9p9Mgp67EWkq4g8AuSLyJzEhJb0Qv3d3wKcB0wRkRsTEVgrEepvf4yIzBeRR2kGZxSpiQ6guVPVg8DViY6jNVLV3bivkZsmpqrzgfmJjqO1UtVVwKoEh+FjZxRHlQC9/e738rSZ+LNjnzh27BOrRRx/SxRHrQVOFpG+ItIGuAx4OcExtRZ27BPHjn1itYjj3yoThYg8C7wL9BORYhG5VlWdwM3AcuBT4HlV/TiRcSYjO/aJY8c+sVry8beigMYYY8JqlWcUxhhjImeJwhhjTFiWKIwxxoRlicIYY0xYliiMMcaEZYnCGGNMWJYoTNyIiIrI7/3u/6+IFMZo3wtEZEos9lXP60wVkU9F5M0Y73eYiLSoEhme+kOvxGhfB2KxH9M0LFGYeDoMTBaRbokOxJ+IRFPj7FrgelU9J0b7A0BV16nqj6N9XlNqyPsyyckShYknJ/AYcGvtB2qfEXi/YXq+tf5LRF4SkW0icr+ITBeRNSKySURO9NvNeSKyTkQ+E5EJnueniMhcEVkrIh+KyA/99vuWiLwMfBIknss9+//IU14bEbkLGAU8ISJza20fsL8wr/uciBTUft/+387FvYrik573uEFELvK0F4lInufnDZ54EJF7ROR6EckWkdUistET91lB3td2Efmt572tEZGTPO3dReQfnnjXishIT3uhiDwjIv8GngnyO+3kiWuzuFdgc4Q6fuHa/R7vJiLv+h8j0wypqt3sFpcbcADoBGwHMoH/BQo9jy0Apvhv6/l3DFAOZANtcRdI+4XnsZnAH/ye/3+4v+ycjLs8czpwA3CHZ5u2wDqgr2e/B4G+QeI8FvgK6I67ovJK4GLPY6uAYUGeE7C/MK87CVjoaW+Du6R0O8/zX/G0/xq4wvNzFvAZkAHMBn7kOXZrgeWebd4E+gH/A/zc05YCdAwS53a/ba70e82/A6M8Px8HfOr5uRB4H2gX4j1XASd4Xu+fwJRQx6+e43oA6AH8Bzg/0X+rdgt/s1NLE1equk9EngZ+DFRG+LS1qloKICJbgRWe9k2A/yWg51XVBWwRkW3AqcA4IM/vbCUTdyI5AqxR1S+CvN5wYJWqlnle82/A2cDSeuL031+o130NmCcibXGvbrZaVStFxH8/44CJIvK/nvvpuD+838J93L7AvdLZ+SLSHndy2iwiPYAnRSQNWKqqG0PE+azfvw96fj4P6O8XRycR6eD5+WVVDfW7WqOq28BXu2gUUE3w46ch2pcCacAbwI9U9V8hXss0E5YoTFP4A7AeeMqvzYnn0qfn8kUbv8cO+/3s8rvvIvBvtnahMgUEuEVVl/s/ICJjcJ8BxJL//oK+rue1VwHjca89/VyQ/QhwiapurvW8NsAwYBvub+/dgOtxf+NHVVeLyNlAAbBARB5Q1aeD7F+D/OwAzlDVqlqvWft9hdtXsPuRcuJ+H+MBSxTNnPVRmLhT1T3A87g7hr22A0M9P0/E/Q0zWlNFxOHptzgB2Iy7CudNnm/ZiMgpIpJRz37WAKM918tTgMuJ/sMr3Osuwr341Vm4L5cFe+4t4vmUFpF8AHUvjfk1MBV31dG3cF++W+3Z7njgW1X9C/A4MCREbJf6/fuu5+cVuFexw7OvwRG+zxHiLont8OzvbUIfv3DHVYFrgFNF5PYIX9skiJ1RmKbye9zllL3+ArwkIh/g/vBsyLf9r3B/GHUCblTVKhF5HOgDrPd88Jbhvl4ekqqWishs3Nf+BShS1ZeijCXc667A3TH8kufDv7Zf4j7r+tDzAfwFMMHz2FvAWM/lqrdwL2zzluexMcAsEanGfc3/yhCxdRaRD3GfmV3uafsx8LCnPRV38olkNcG1wEPASbiP1xJVdYU6fuGOq6rWiMjlwMsisl9V/xTB65sEsDLjxiQxEdmOuzN+V6JjMS2XXXoyxhgTlp1RGGOMCcvOKIwxxoRlicIYY0xYliiMMcaEZYnCGGNMWJYojDHGhGWJwhhjTFj/H7DRwLVRNUuPAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from collections import Counter\n", "from scripts.helper import ecdf\n", "\n", "for genre in compare_genres:\n", " dist = Counter([int(count) for count in genre_df[genre].work_id.value_counts()])\n", " x = dist.keys()\n", " y = list(dist.values())\n", " y_prob = [y_point / sum(y) for y_point in y]\n", " plt.scatter(x,y_prob, label=genre)\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.ylabel('Proportion of books')\n", "plt.xlabel('Number of reviews per book')\n", "plt.legend()\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Above we see number of reviews per book set of against the proportion of books. The three distributions show no big differences. In other words, book popularity behaves no differently between the three genres.\n", "\n", "From the analyses of these three aspects (number of reviews per reviewer, per author and per book), we have learned that in the *romance* genre, there is a longer tail of more prolific reviewers than for the other genres, while the *history* genre has a higher peak of authors with just a single work. **In other words, there is *less* overlap in authors in the *history* reviews, and the is *more* overlap of reviewers in the *romance* reviews.** The *romance* genre is therefore *less* heterogeneous than the *mystery, thriller, crime* genre and especially than the *history, historical fiction, biography* genre.\n" ] }, { "cell_type": "code", "execution_count": 295, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "book_id publication_year date_updated\n", "1 2006.0 2014 111\n", " 2015 24\n", " 2016 51\n", " 2017 43\n", "2 2004.0 2007 6\n", " ... \n", "36473367 2017.0 2017 1\n", "36477938 2017.0 2017 5\n", "36494299 2015.0 2017 1\n", "36498328 2003.0 2017 1\n", "36508486 2017.0 2017 1\n", "Length: 463959, dtype: int64" ] }, "execution_count": 295, "metadata": {}, "output_type": "execute_result" } ], "source": [ "review_df.groupby(['book_id', 'publication_year', review_df.date_updated.dt.year]).size()" ] }, { "cell_type": "code", "execution_count": 326, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "history, historical fiction, biography 1951.0 2020.0\n", "mystery, thriller, crime 1951.0 2020.0\n", "romance 1951.0 2020.0\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 326, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAERCAYAAAB/4wAeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAA+zklEQVR4nO2deZgVxfW/38OAoqKyiGgAHTQoIsuwDUQUEAyg+ANRiQsKKEpck2hiRLOIuASjXxfUaNwhcSFgRFyRVVSCrAOIoCwiDioimwqiAuf3R9Uduu/0vdN3FmYGzvs8/dzbp6s+fbq6uk93dXW1qCqGYRiGkaBKeTtgGIZhVCwsMBiGYRghLDAYhmEYISwwGIZhGCEsMBiGYRghqpa3A8XlsMMO0+zs7PJ2wzAMo9Iwb968r1W1blHpKm1gyM7OZu7cueXthmEYRqVBRD6Nk86akgzDMIwQFhgMwzCMEBYYDMMwjBCV9hlDFD/99BP5+fls3769vF0xjEpP9erVadCgAdWqVStvV4w9zF4VGPLz8zn44IPJzs5GRMrbHcOotKgqGzZsID8/n0aNGpW3O8YeZq9qStq+fTt16tSxoGAYJUREqFOnjt1976PsVYEBsKBgGKWEHUv7LntdYDAMwzBKxl71jCGZ7KGvlare6hG90i9fvZozzzyTDz74oNCyv/71r3Tq1InTTjstMu/48eM57rjjaNq0aan4mophw4ZRo0YN/vCHPxRadtJJJzFz5syUee+8805uvvnmjNd5xhln8Nxzz1GzZs2M8j3zzDPMnTuXhx56KGT/4Ycf6NWrF19//TU33XQTkyZN4vrrr09ZdtOnT2e//fbjpJNOAuDRRx/lwAMPZMCAARlvSyrS7fvLLrssrX9lSTq/DCMVe3VgqEgMHz487fLx48dz5plnZnTy2LFjB1Wrlt4uTBcUIPPAoKqoKq+//npJXQuxYMECAPLy8gA477zz0qafPn06NWrUKAgMV1xxRan6UxRPPPFEqeiU9v42ypbghWlRF5UVDWtKKmV27tzJ5Zdfzoknnkj37t35/vvvARg0aBDjxo0DYOjQoTRt2pQWLVrwhz/8gZkzZzJhwgRuuOEGcnJyWLlyJXl5eXTo0IEWLVrQt29fNm3aBECXLl343e9+R9u2bbnjjjto1KgRP/30EwDffPNNaD4VH374IV26dOGYY45h5MiRBfYaNWoA8MUXX9CpUydycnJo1qwZ77zzDkOHDuX7778nJyeH/v37A3DvvffSrFkzmjVrxv333w+4K9Tjjz+eAQMG0KxZMz777DOys7P5+uuvARg9ejQtWrSgZcuWXHzxxQC88sortG/fnlatWnHaaaexbt26lL5/9dVXXHTRRcyZM6egrLp06VIwPMqbb75J69atadmyJd26dWP16tU8+uij3HfffeTk5PDOO+8wbNgw7rnnHoC05XzjjTeSm5vLcccdxzvvvFPkvt+xYwf9+/fnhBNO4Nxzz2Xbtm0FWgn/nn/+eZo3b06zZs248cYbC/I++eSTHHfcceTm5nL55ZdzzTXXAK7eXHHFFbRv354//vGPzJ49m1/84he0atWKk046iY8++ghwd1d9+vShS5cuNG7cmFtvvbVAO6pOrly5ktatWxekWb58eWje2LexwFDKLF++nKuvvpolS5ZQs2ZNXnzxxdDyDRs28NJLL7FkyRIWLVrEn//8Z0466SR69+7N3XffTV5eHsceeywDBgzgrrvuYtGiRTRv3jx0oP/444/MnTuXW265hS5duvDaa+7K5IUXXuDss88ust/5smXLmDhxIrNnz+bWW28tFEiee+45evToQV5eHgsXLiQnJ4cRI0ZwwAEHkJeXx7PPPsu8efN4+umnef/995k1axaPP/54wZX88uXLueqqq1iyZAlHH310ge6SJUu4/fbbmTp1KgsXLuSBBx4A4OSTT2bWrFksWLCA888/n7///e8pfT/88MN54oknOOWUUwrKKsH69eu5/PLLefHFF1m4cCFjx44lOzubK664guuuu468vDxOOeWUkF66ct6xYwezZ8/m/vvvD9lT8dFHH3HVVVexdOlSDjnkEP7xj3+Eln/++efceOONTJ06lby8PObMmcP48eP5/PPPue2225g1axbvvfcey5YtC+XLz89n5syZ3HvvvTRp0oR33nmHBQsWMHz48NAd3OzZs3nxxRdZtGgRY8eOLQhGUXXy2GOP5dBDDy2463r66ae55JJLitxGY9/AAkMp06hRI3JycgBo06YNq1evDi0/9NBDqV69OoMHD+a///0vBx54YCGNLVu2sHnzZjp37gzAwIEDmTFjRsHyYNPJZZddxtNPPw3EP7h79erF/vvvz2GHHcbhhx9e6Aq9Xbt2PP300wwbNozFixdz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zcS3pFMNG51qaOrSoFu3bowbN46vvnI3lRs3buTTTz+NTHvTTTfx0ksvRWo88sgjgHtIvWXLllLxLZPyNIx9hVhtC6qah+tmmkyhM4x/3nB1Cp2ngKci7HOBor8wkyEVZXySKHr37s0ll1wSGgf/hhtuYPny5agq3bp1o2XLlhx11FEFTR033XQTf/nLX/jd735HixYt2LVrF40aNUrZpbRevXqccMIJoQHZUg0bXadOHTp27EizZs04/fTT0z6PyJSmTZty++230717d3bt2kW1atV4+OGHCz0TAFi8eHHkyKUPPPAAQ4YM4cknnyQrK4tHHnmEI488ssS+ZVKehpGORBNRRT7vxMUG0Ssn5s6dy3XXXRfrI/PFZdu2bTRv3pz58+cXtMmX1bDRpUWPHj2YOHFiebtheCrTMVXeJAeGqEH0yjt42LDbFZgRI0bwyCOPFDxbKAsmT57M4MGDue6660IffSmrYaNLCwsKhlH+WGAoB4YOHcrQoUOLTlgCTjvttJTt+IZhGOmwQfQMwzCMEBYYDMMwjBAWGAzDMIwQFhgMwzCMEHv1w+e9YdhtwzCMPY3dMZQRiWGgDcMwKhsWGEqR5GGgBw8eTLNmzWjevDljxowB3AdwOnfuTJ8+fTjmmGMYOnQozz77LLm5uTRv3pyVK1cC8Morr9C+fXtatWrFaaedxrp16wAYNmwYl156KV26dOGYY45h5MiRBesfPXo0LVq0oGXLllx88cUArF+/nnPOOYd27drRrl270AiphmEYUezVTUnlwfLlyxk1ahRr167l0UcfZeHChXz99de0a9eOTp06AbBw4UKWLl1K7dq1OeaYY7jsssuYPXs2DzzwAA8++CD3338/J598MrNmzUJEeOKJJ/j73//O//3f/wGwbNkypk2bxrfffsvxxx/PlVdeyccff8ztt9/OzJkzOeyww9i40Q1D9dvf/pbrrruOk08+mTVr1tCjRw+WLl1abuVjGEbFxwJDKZMYBvq6667jggsuICsri3r16tG5c2fmzJnDIYccQrt27QrG+Tn22GPp3r07AM2bN2fatGkA5Ofnc9555/HFF1/w448/0qhRo4J19OrVi/3335/999+fww8/nHXr1jF16lT69etX8BnNxPDbkydP5sMPPyzI+8033/Ddd99Ro0aNPVIehmFUPiwwlDJxhqOOMxz0tdde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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "for genre in compare_genres:\n", " temp_df = genre_df[genre][(genre_df[genre].publication_year > 1950) & (genre_df[genre].publication_year <= 2020)]\n", " year_min = temp_df.publication_year.min()\n", " year_max = temp_df.publication_year.max()\n", " print(genre, year_min, year_max)\n", " temp_df.publication_year.value_counts().sort_index().plot(kind='bar', label=genre)\n", "\n", "plt.legend()\n", "\n" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEKCAYAAAAMzhLIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABDyUlEQVR4nO2deXxU1dn4v88MAwlbwqasClZEISSEVUEFxYa2EdlEq1jFtfprLa++RaVWTK2ttNhaqG2ttq5tLYiA1dRiXShYbQEBQa3UF9zYNCIJAglkeX5/3JlhJpnlTjKTyfJ8P5/5zNyzPufcM/e595xzn0dUFcMwDMOIhifdAhiGYRhNG1MUhmEYRkxMURiGYRgxMUVhGIZhxMQUhWEYhhETUxSGYRhGTNqkW4BU0L17d+3fv3+6xTAMw2g2vPHGG5+pao9IcS1SUfTv358NGzakWwzDMIxmg4h8GC3Opp4MwzCMmJiiMAzDMGJiisIwDMOISYtcozBaFpWVlezcuZOKiop0i2IYzZ6MjAz69u2Lz+dznccUhZ+Vm3axcNU2dpeW0zs7k7mTBjE1v0+6xTKAnTt30qlTJ/r374+IpFscw2i2qCr79u1j586dDBgwwHU+m3rCURLzlm9lV2k5CuwqLWfe8q2s3LQr3aIZQEVFBd26dTMlYRgNRETo1q1bwk/npiiAhau2UV5ZHRZWXlnNwlXb0iSRURtTEoaRHOrzXzJFAewuLU8o3GhdfPDBB+Tk5ESMmz9/Pi+++GLUvCtXruSdd95JlWhBioqKuPfeeyPGjR07NmbeH//4x/Wq82tf+xqlpaUJ53v00Uf59re/XSf8yJEjnHfeeQwbNowlS5ZwzTXXxOy71atX89prrwWPH3jgAR5//PGE5YlFrHMfT75UEkuuVGBrFEDv7Ex2RVAKvbMz0yCN0Zy46667YsavXLmS888/n8GDB7sus6qqijZtkvfXDL2YRuLHP/4x3/ve91yXp6qoKn/9618bKloYmzZtAmDz5s0AXHzxxTHTr169mo4dOwYV4fXXX59UeeLxu9/9LinlJPt8pwJ7ogDmThpEps8bFpbp8zJ30qA0SWQ0hJWbdjFuwcsMuK2YcQteTspaU3V1Nddeey1DhgyhoKCA8nLnxmL27NksW7YMgNtuu43BgweTm5vLd7/7XV577TX+8pe/MHfuXIYNG8b27dvZvHkzp59+Orm5uUybNo39+/cDMGHCBP7nf/6HkSNH8qMf/YgBAwZQWVkJwIEDB8KOo/HOO+8wYcIETjrpJBYvXhwM79ixIwB79uzh7LPPZtiwYeTk5LB27Vpuu+02ysvLGTZsGLNmzQLg5z//OTk5OeTk5PCLX/wCcO5gBw0axOWXX05OTg4ff/wx/fv357PPPgPg8ccfJzc3l7y8PL7xjW8A8OyzzzJmzBjy8/M577zz+OSTT6LK/umnn3LZZZexfv36YF9NmDAhaGHhb3/7G8OHDycvL4+JEyfywQcf8MADD3DfffcxbNgw1q5dG/ZUFaufb731VkaPHs0pp5zC2rVr4577qqoqZs2axWmnncaFF17I4cOHg2UF5HvyyScZOnQoOTk53HrrrcG8v//97znllFMYPXo01157bfBJavbs2Vx//fWMGTOGW265hXXr1nHGGWeQn5/P2LFj2bbNmfZ+9NFHmTJlChMmTGDgwIH84Ac/CJYdaUxu376d4cOHB9O89957Ycf1JnB30JI+I0aM0ERZsXGnjr3nJe1/63M69p6XdMXGnQmXYaSGd955x3XaFRt36qnff15PvPW54OfU7z/foPP5/vvvq9fr1U2bNqmq6syZM/WJJ55QVdUrrrhCn3rqKf3ss8/0lFNO0ZqaGlVV3b9/f1h8gKFDh+rq1atVVfWOO+7QOXPmqKrq+PHj9YYbbgimmz17tq5YsUJVVX/729/qzTffHFPGO++8U8844wytqKjQkpIS7dq1qx49elRVVTt06KCqqvfee6/efffdqqpaVVWlBw4cCItXVd2wYYPm5OTowYMH9YsvvtDBgwfrxo0b9f3331cR0ddffz2Y9sQTT9SSkhJ96623dODAgVpSUqKqqvv27VNV1c8//zzYHw899FCwDY888oh+61vfqtOGV155RQsLC4PH48eP1/Xr1+unn36qffv21R07doSVf+edd+rChQvD+iBwHKufA3IUFxfrxIkTY/br+++/r4C++uqrqqp65ZVXBusIyLdr1y7t16+ffvrpp1pZWannnHOOrlixQnft2qUnnnii7tu3T48ePapnnnlmsN1XXHGFFhYWalVVlaqqlpWVaWVlpaqq/v3vf9fp06cH+6pnz5762Wef6eHDh3XIkCG6fv36mGNywoQJwfB58+bp4sWL67Qr0n8K2KBRrqn2ROFnan4f/nnbuby/oJB/3naubY1tpqRqY8KAAQMYNmwYACNGjOCDDz4Ii8/KyiIjI4Orr76a5cuX0759+zpllJWVUVpayvjx4wG44oorWLNmTTA+dKrlmmuu4ZFHHgHgkUce4corr4wrY2FhIe3ataN79+4cd9xxde7gR40axSOPPEJRURFbt26lU6dOdcp49dVXmTZtGh06dKBjx45Mnz49eNd94okncvrpp9fJ8/LLLzNz5ky6d+8OQNeuXQFnW/OkSZMYOnQoCxcu5O23347bhkj861//4uyzzw5u5wyUH414/Tx9+nQg8nmMRL9+/Rg3bhwAl112Ga+++mpY/Pr165kwYQI9evSgTZs2zJo1izVr1rBu3TrGjx9P165d8fl8zJw5MyzfzJkz8Xq9QZlnzpxJTk4ON910U1hfffnLX6Zbt25kZmYyffr0YP3RxmRg7FRXV7NkyRIuvfTSuG2MhykKo0WRqo0J7dq1C/72er1UVVWFxbdp04Z169Zx4YUX8txzz/GVr3wl4To6dOgQ/D1u3Dg++OADVq9eTXV1tauFy3gynn322axZs4Y+ffowe/bshBd+Q+Vzw4033si3v/1ttm7dym9/+9sm88JkoJ8i9VEkau8SStYOvND+vOOOOzjnnHN46623ePbZZ8P6Klr90c73jBkzeP7553nuuecYMWIE3bp1a7Cspij8FO8opmBZAbmP5VKwrIDiHcXpFsmoB9E2IKR6Y8LBgwcpKyvja1/7Gvfddx9vvvkmAJ06deKLL74AnKeOLl26BO/Qn3jiieBdbyQuv/xyLr300rCnifvvv5/777+/XjJ++OGHHH/88Vx77bVcc801bNy4EQCfzxdc/zjrrLNYuXIlhw8f5tChQ6xYsYKzzjorZrnnnnsuTz31FPv27QPg888/B5y75D59nCfzxx57rF4yA5x++umsWbOG999/P6z80L4NJdF+Bti1axcTJ06MGPfRRx/x+uuvA/CnP/2JM888Myx+9OjR/OMf/+Czzz6jurqaJ598kvHjxzNq1Cj+8Y9/sH//fqqqqnj66aej1h/aV48++mhY3N///nc+//xzysvLWblyZfDpJhoZGRlMmjSJG264wdWTqBtMUeAoiaJX72DPoT0oyp5Deyh69Q5TFs2QdG1M+OKLLzj//PPJzc3lzDPP5Oc//zkAX//611m4cCH5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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "for genre in compare_genres:\n", " counts = (genre_df[genre].date_updated.dt.year - genre_df[genre].first_publication_year).value_counts()\n", " dist = Counter([int(count) for count in counts])\n", " x = dist.keys()\n", " y = list(dist.values())\n", " y_prob = [y_point / sum(y) for y_point in y]\n", " plt.scatter(x,y_prob, label=genre)\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.ylabel('Proportion of reviews')\n", "plt.xlabel('Years between book publication and review')\n", "plt.legend()\n", "plt.show()\n", "\n" ] }, { "cell_type": "code", "execution_count": 324, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "917303\n", "2223\n" ] } ], "source": [ "temp_df = review_df[(review_df.publication_year > 1950) & (review_df.publication_year <= 2020)]\n", "#temp_df.publication_year.value_counts().sort_index().plot(kind='bar')\n", "print(len(temp_df))\n", "\n", "temp_df = review_df[(review_df.publication_year <= 1950) | (review_df.publication_year > 2020)]\n", "#temp_df.publication_year.value_counts().sort_index().plot(kind='bar')\n", "print(len(temp_df))\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "random_seed = 1205921\n", "\n", "sample_df = review_df.sample(100, random_state=random_seed)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from scripts.text_tail_analysis import write_docs_to_bin, read_docs_from_bin\n", "#docs = [nlp(text) for text in reviews_en]\n", "nlp_docs_file = f'../data/review_spacy_docs.random_1M.genre-{genre.replace(' ','_')}.sample-10000.seed-{random_seed}.docbin'\n", "\n", "#write_docs_to_bin(docs, nlp_docs_file)\n", "\n", "docs = read_docs_from_bin(nlp_docs_file, nlp)\n", "\n", "# iterate over the docs, then over the entities in each doc and count them\n", "tf = Counter([entity.text for doc in docs for entity in doc.ents])\n", "\n", "print('Total number of entities in the sample:', sum(tf.values()))\n", "tf.most_common(50)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.2" } }, "nbformat": 4, "nbformat_minor": 2 }