Adhoc data analysis – book reviews and ratings from Goodreads offers a variety of public datasets, including one of Goodreads Book Reviews. I thought I’d take a quick and dirty look at this thing and see what I could see. I wrote a little program to gather the ratios of ratings to reviews. I’ve been curious about that, and overall the dataset seems to suggest that for every 33 ratings there is 1 written review. That was gleaned from an overall calculation, row by row.

Looking further into it I find that the dataset is not at all clean – the columns often don’t correspond so that a ratingsCount column might be a number or it might be ‘J.K. Rowling’. It needs a lot of work, which I’m a little too lazy to do this morning, so instead I went through again and ignored all the rows for which the rating was not in the 1-5 star range. This gave me some bad results as well.. The 4-star rating column totals seem worthless, but the others seem reasonably consistent and provided one possible insight:

ratingsCount: 1 592
ratingsCount: 2 2378
ratingsCount: 3 55836
ratingsCount: 4 52425090
ratingsCount: 5 11170

reviewsCount: 1 79
reviewsCount: 2 298
reviewsCount: 3 5540
reviewsCount: 4 1661702
reviewsCount: 5 1085

1 star ratio, ratings to reviews: 7
2 star ratio, ratings to reviews: 7
3 star ratio, ratings to reviews: 10
4 star ratio, ratings to reviews: 31
5 star ratio, ratings to reviews: 10

If this data is to be believed, it looks to me that the less someone likes a book, the more likely they are to say something about it (1 and 2 stars vs 3 and 5 stars). Negativity is more eager to express itself. I feel like this falls in line with the natural intuition, and crosses over to other areas in life, like social media, the news media in general, politics and so on.


dataset is here

python code:

from argparse import ArgumentParser
import csv
import pandas as pd

class GoodreadsAnalysis():
    def __init__(self):
        self.args = self.arguments()

    def arguments(self):
        argument parser
        :return: parsed args
        parser = ArgumentParser()
        parser.add_argument('--input_file', default="./goodreads_book_reviews.csv")
        return parser.parse_args()

    def parse_csv(self):
        columns = ['bookID','title','author','rating','ratingsCount','reviewsCount','reviewerName','reviewerRatings','review']
        df = pd.read_csv(self.args.input_file, names=columns, quoting=csv.QUOTE_NONE)
        print df.head()

        ratings_count = {}
        reviews_count = {}
        total_ratings = 0
        total_reviews = 0
        for index, row in df.iterrows():
                rating = int(row.rating)
                if rating > 0 and rating < 6:
                    if ratings_count.has_key(rating):
                        ratings_count[rating] += int(row.ratingsCount)
                        ratings_count[rating] = int(row.ratingsCount)

                    if reviews_count.has_key(rating):
                        reviews_count[rating] += int(row.reviewsCount)
                        reviews_count[rating] = int(row.reviewsCount)
            except:  # bad column

        for k, v in ratings_count.iteritems():
            print "ratingsCount: ", k, v
            total_ratings += v
        for k, v in reviews_count.iteritems():
            print "reviewsCount: ", k, v
            total_reviews += v
        print "totals (ratings, reviews):", total_ratings, total_reviews  # 3465722733 104000732  # 33:1

        for i in range(1,6):
            ratio = ratings_count[i] / reviews_count[i]
            print "{} star ratio, ratings to reviews: ".format(i), ratio

if __name__ == '__main__':
    g = GoodreadsAnalysis()

3 is the new 4

All my dreams have now come true, my prayers have been answered, the good lord took pity on me and granted me this one desire – to see my books achieve the absolute average rating on Goodreads. Three point Oh!

Some time ago I built a web-site that automatically assigns random ratings to random “things” it scrapes off the internet, including businesses, products, places, people, concepts and ideas. What happened is math – the law of averages. Almost everything circles the three point oh drain given a large enough sample size. I’m not saying the exact same thing happened here with Goodreads, but it does seem that there is a law of averages that applies in certain cases – when random people randomly read random books and rate them it should be no surprise that the extreme reactions balance each other out.

I’m also not implying that there are an equal number of die-hard Trump and Bernie supporters and the end result is likely to be Hillary. Or am I?

Anyway, my theory on Goodreads is that single-issue candidates – er, I mean authors who write to specific genre standards – are likely to have higher or lower average ratings based on how well their books meet the expectations of the specific genre readers they target. The people who like to read 17th Century Highland Scottish Romance novels are not a random representation of the general reading public. They’re rating of your version of such a novel will be highly reflective of the perceived quality of that work within that scope. Within micro-genres it is not at all unusual to find average ratings trending either  to the 4’s or the 2’s.

Politicians know this very well, and play to a targeted audience. You’ll often find Bernie on college campuses, Trump at NASCAR rallies and Hillary in African-American churches.

My books don’t meet the expectations of the readers all that well. This is clear. Most of their average ratings are between 2.9 and 3.2, and the aggregate had been hovering just below 3.0 for years. I wondered if it would ever reach that perfect middle. It may only last a day, so I’m celebrating while I can.

Thanks to all the raters, even the haters. A see-saw is a useless toy when only one side is occupied.


One-Star Roundup

Dash it all but I’m dreadfully proud of my one-star reviews! (yes I’ve been watching the BBC production of Parade’s End today). This month in One-Star Roundup brings us a number of excellent examples of one-star readers, which is to say, people who should not have read the book but did and couldn’t help themselves but a) finish the darn thing and b) bother to rate it online (both of which must be some sort of compulsion. Personally I never feel compelled to a) continue reading a book I don’t like OR b) bother to rate it online.

This month’s award for “best self-restraint” goes to a Goodreads reviewer of Orange Car with Stripes (which, by the way, is still #1 on Amazon’s “Cults and Demonism” bestseller list, and #8 in Atheism, one ahead of its companion (and superior), Missy Tonight:

I had planned to write a lengthy review of this book, highlighting the reasons I felt it deserved only one star out of five. But I have scratched my plans for that review, because I couldn’t find anything nice to say. My planned review had rapidly become shrill and mean-spirited. The author doesn’t deserve to be the target of mockery. So, instead, let me simply say that I strongly advise anyone against reading this, and leave it at that.

I was curious about his other ratings , but the only thing of note was that he also gave one star to Pride and Prejudice

The opposite award goes to this judicious reader of Death Ray Butterfly, who reported:

This book is so bad that it doesn’t deserve to be called a book. More like somebody’s disjointed journal. The author couldn’t make two paragraphs blend together with a paint mixer. My six year-old grandson talks with more clarity than this guy can write. I feel my IQ has dropped at couple of points.

Need I say that Zombie Nights is one of my all-time leaders in one-star readers, but few have been as enjoyable as this one:

This was one of the stupidest books I have ever read…HELL it wasn’t even a book it was more like a really short story with some serous pointlessness. All the story is about is a guy that wakes up in a grave from where he was bared by a couple of goons that killed him. he wakes up as a Zombie and he roams around until he find his uncle that he hadn’t seen for years , so all though the story he is trying to find out what he is going to do and he ends up getting killed by a Zombie hunter really pointless.

(point of order, however. Zombie hunter? Really? Not as far as I know, and why the capital Z for Zombie? serously! bared!!)

The Part-Time People may be the most one-starred of all, but this one is the best I’ve seen of those:

This was an utterly, poorly written piece of work; better yet…you can’t even call it a story: It was merely the ramblings of a mad man!!! Nothing made sense in this piece!!!

Then there’s my personal favorite of all my books, Secret Sidewalk, which has only received a single one-star review, as far as I’ve been able to find, but at least it was priceless. Here it is, in its entirey:


rant-a-bye baby

This rant started as a comment on Paul Samael’s interesting (as usual) post on the Goodreads/Amazon thing. but then it turned into too much fun for a mere comment, so here’s what I think about Amazon buying Goodreads:

I’m going to go out on a limb and say “boo”. I don’t like it one bit. I don’t like how everything, and I do mean everything, sooner or later gets sucked into somebody’s wallet, and those somebodies always turn out to be a mere handful of people, while the rest of us are falling over ourselves to give them not only our money but our minds and hearts as well. It’s Facebook munching and crunching on our intimate personal lives to serve us up to targeted but undesired promoted posts. It’s Goodreads taking our opinions and recommendations and feeding them into the endless maw that is the Amazon piranha. It’s Google gobbling up every single word and phrase we even seem to be mildly interested in and chucking it into their monster ad-hole in order to surround our emails and websites with links to bullshit we’d never want or need in a billion billion years if we were monkeys with a god damn typewriter. They say that a mere 11% of the reading population recommends 46% of the books that get recommended. Thank you, eleven percenters. No, really. Without you and your four and five stars, whatever would we do? Oh, I know what we’d do. Whatever some giant corporation told us to do. And what they’re going to tell us to do now is exactly the same as before, but our money will find itself redirected ever so subtly into their pockets through their tricky and lovely devices. So let’s keep up the good work and keep using that good ol’ fashioned “word of mouth” in the service of the bottomless pit. You gotta love it. Or at least “like” it.

Rabble Reads

I kicked in a few bucks for this Kickstarter project – RabbleReads , a project that aims to set up a neutral, verified aggregate book review site, combining reviews from various sources such as Goodreads and Amazon and elsewhere, but only from trusted book reviewers (their slogan is ‘death to the sock puppets’), and including both traditional and self-published books. Something like this sounds good to me and hopefully will manage to avoid such ills as goodreads-troll-gangs as well as the more common fake and fake-ish reviews. A lot will depend on their curation practices. It could be a tricky thing.

I recently came across a one-star review for my Tiddlywinks kids’ book on Amazon, a one line affair that said “not worth even free. This kind of books should not be around. Waste of time downloading and space on HD”, and when I looked into the reviewer’s Amazon review history, I found that he’d posted the exact same one star review for around 15 books that very same day. I wrote to Amazon, but it was a verified “purchase” (of a free ebook!) and seemed within their guidelines, so they wouldn’t remove it. I can understand that. Curation can be complex, and I hope the Rabble Reads people come up with some good ideas.

Something else that’s also important, and whose time is fast approaching:

Beyond reviews, Rabble will include lists of bestselling authors, regardless of how the book was published; best and worst rated titles, author interviews; and more.

“It’s the first venue where traditionally published and self-published books will be listed side by side,” Holman Edelman says. “I just really think it’s a way to help get books an introduction.”

Goodreads Giveaway Notes (continued)

I just completed another Goodreads Giveaway, this time for Dragon City  (and I must say the CreateSpace paperback version turned out very nicely and is only $8.95)

835 Goodreads people signed up for the Giveaway – I was offering 5 copies and have sent them off to the lucky winners. Nearly half of those signees did their signing up in the last two days of the giveaway. I assume this is because expiring giveaways are being promoted (somewhere) by Goodreads. More than 150 of those signees also added one or more of my books to their ‘to-read’ shelves.

The Goodreads Giveaway is the most effective advertising method I’ve found through Goodreads. Their other advertising offerings haven’t prompted nearly the response in my case. This could be because my titles are not easily targetable, not fitting nicely into the well-worn genre grooves, so other folks may well have more success with their self-serve ads than I did. I found it not worthwhile at all. The Giveaways, on the other hand, have resulted in what I hoped for – gaining some visibility and potential readers.

Wishing good luck to all self-publishers out there …

Goodreads Giveaway: Dragon City

Unfortunately, the Goodreads Giveaway Widget doesn’t work on WordPress, but anyway …

I am doing a Goodreads Giveaway of the paperback version of Dragon City, five copies to be shipped to winners picked at random by Goodreads, but the epub ebook version is also available for free from Goodreads consisting of all four books in the series: Snapdragon Alley, Freak City, Dragon Town and Happy Slumbers (which are all also available for free from Smashwords and Feedbooks in any case)

I was a bit lazy about getting my cover to work with CreateSpace’s cover designer, so I went with a simpler design using one of their built-in formats. Still pretty nice, I think

Goodreads Q&A Group

I created a Goodreads Q&A Group on the off-chance that anyone on Goodreads might want to communicate with me through that site, whether to comment about endings or book length or typos or what-not. I’m also going to be doing another book giveaway soon through Goodreads, for the complete Dragon City quartet, just as soon as I get through the proofs and such on CreateSpace