A few years ago, I started logging everything I read and watched. There is something satisfying about keeping a record. I track what I’m reading on Goodreads (awful app), and what I’m watching on Letterboxd (very good app). I rate everything using each app’s rating system: Goodreads is 1-5 stars, whole stars only; Letterboxd is 0-5 stars, half-stars are possible.
The ratings data could be an interesting exercise on selection effects in data collection. Reading a book takes so long that I am not picking books at random and reading and rating them. I instead do a fair amount of research beforehand and pick things I imagine I will like. This has two consequences:
my ratings are pretty clumpy, made worse by the fact that Goodreads only allows whole-star ratings. I’m giving many different kinds of books similar ratings.
my ratings are anchored by the minimum level of quality that I am willing to read. A book that I rate a 1 or 2 out of 5 is still way better (or at least in my opinion) than many books that I would not even consider reading.
Movies, on the other hand, are much easier to get through, even bad ones. So we should probably see more variation in my ratings; helped too by the fact that Letterboxd allows for half-star ratings.
Cleaning the data
Neither service has an easy API at this point, so I’m manually exporting CSVs every so often to generate this page.
Note
Goodreads does not export the date I started reading a book, so I have to manually add that information. I have a separate CSV file with that info.
Show code
# librarieslibrary(tidyverse)library(hrbrthemes)library(kableExtra)# set seedset.seed(1990)# set themetheme_set(theme_ipsum())# load goodreads databooks =read_csv(here::here("personal_files/goodreads.csv")) |># clean names janitor::clean_names() |># subset columnsselect(title, author, author_l_f, my_rating, average_rating, number_of_pages, year_published, original_publication_year, date_read, date_added, my_review) |># drop if missing read datesdrop_na(date_read) |># counter of movies watchedmutate(counter =1:n()) |># separate first namemutate(first_name =str_extract(author, "^[^\\s-]+")) |># replace original publication year with publication year if original missingmutate(original_publication_year =ifelse(is.na(original_publication_year), year_published, original_publication_year))# load corrections for dates startedcorrect =read_csv(here::here("personal_files/goodreads_corrections.csv")) |>select(title, date_added) |>mutate(date_added =mdy(date_added))# correct booksbooks =left_join(books, correct, by ="title") |>mutate(date_added =coalesce(date_added.y, date_added.x) ) %>%select(-date_added.x, -date_added.y) # fix a few stragglersbooks$date_added[str_detect(books$title, "Temptation")] <-"2022-02-16"books$date_added[str_detect(books$title, "Full Sea")] <-"2022-06-16"# calculate durationbooks = books |># calculate durationmutate(duration = date_read - date_added,duration =as.numeric(duration))# load letterboxd datamovies =read_csv(here::here("personal_files/reviews.csv")) |># clean names janitor::clean_names() |># set rewatch to "no" if NAreplace_na(list(rewatch ="no")) |># count number of characters in reviewmutate(review_count =str_count(review, "\\S+") +0) |># counter of movies watchedmutate(counter =1:n())pal = MetBrewer::met.brewer(name ="Degas")
Goodreads does not provide any information about the authors. The best I can do is guess at their sex based on first names. The {gender} package can do this:
Show code
library(gender)auth_sex =gender(books$first_name) |>select(first_name = name, sex = gender) |>distinct()books =left_join(books, auth_sex, by ="first_name")
Books
Books I’ve read in 2025
Here’s the books I’ve read so far this year, my rating, and review:
Right-Wing Women by Andrea Dworkin My Rating: ★★ Date Read: May 05, 2025
My review
Right-wing women got billed as an analysis of women on the right by the firebrand feminist Andrea Dworkin. But the book is much broader than that, also delving into Dworkin’s broader feminist framework, social value in a gendered society, abortion, reproductive technologies, and so on. There’s actually not a ton here on “right wing women” as such.
I’d heard of Dworkin before, mostly through her role in the “pornography wars” discussed in [[The right to sex]]. This was my first time reading her work directly.
Dworkin’s style is to make big, sharp claims (a big change from [[The right to sex]], which felt like all elaboration and no hard claims); she is machine-gunning ideas; she is sarcastic, angry, funny; when she’s really going, it’s great.
The standouts are the first, standout chapter, “The promise of the ultra-right” and the chapter on abortion. Her take on right-wing women is that they, like left-wing feminists, are acutely aware of the violence and domination that is inherent (Dworkin is a bit unclear on this) to relationships with men, and so seek a compromised (false) safety in marriage and control over reproduction via opposition to abortion. As Dworkin writes, “the Right promises to put enforceable constraints on male aggression, thus simplifying survival for women”. She looks at specific anti-feminist women of the era, whom I had known little about and found fascinating. Phyllis Schaffley being a war hawk in her origins but pivoting to women’s social issues because the Reagan administration would not give her a formal role was an interesting bit of history.
Dworkin’s takedown of the hippie movement and the counterculture in the abortion chapter is particularly brutal and effective, maybe the best part of the book: “[sexual liberation] did not free women. Its purpose – it turned out – was to free men to use women without bourgeois constraints”. Here she is writing directly from experience about the abuse and dismissive treatment of women in the radical organizations of this period.
Aside from these chapters, however, the writing is rough. The rest of the book is truly a slog. The writing is just so repetitive; she repeats sentences, for rhetorical effect no doubt, and I could imagine a speech where the repetition works. But not as a book. The content is also less interesting later on, amorphous. The most precise claims in the latter half of the book is chapter on Christianity, where she makes the (very odd) claim that homophobia is unique to the New Testament and that in the Old Testament, whatever prohibitions were in place, were in some broad sense perhaps more tolerant (?). It’s an odd piece.
It would be interesting to know what Dworkin would say about the world today.
La guerra del fin del mundo by Mario Vargas Llosa My Rating: ★ Date Read: April 17, 2025
My review
The “end of the world” in the title refers to a remote town in the state of Bahia, Brazil, where a staggering 25,000 people, led by a messianic figure / cult leader known as Antônio Conselheiro (“Anthony the Counselor”), lived in open defiance of the Brazilian state in the late 1800s. The town, Canudos — apparently now gone, flooded by a damn built by the country’s dictatorship in the 1960s – became the site of Brazil’s bloodiest civil war. Federal troops fought bitterly with residents over control of the town, effectively exterminating the town’s inhabitants in the process. The novel is thus about the “War of Canudos”, told from the perspective of various characters on both sides of the conflict.
A messianic figure emerging in Brazil, at this time, when the Brazilian republic is just born and slavery is abolished; the unorthodox nature of the Counselor’s belief system (anti-republican, monarchical, anti-slavery, anti-metric system); the fact that the residents successfully repel multiple waves of federal troops, killing a famous general in the process; this background gave me very high expectations for this novel. This is rich history, in a part of the country that receives little attention. Brazil’s sertão is poor, plagued with droughts that produce famines, a kind of desert outback which outsiders rarely associate with Brazil.
I was disappointed with this book. What did I want? The War of Canudos is genuinely bizarre; I wanted someone who could extract meaning, give me a sense for what these people who gathered at Canudos, wanted. This event is important, forgotten to history, but what does it mean? I did not come away with a sense that Vargas Llosa (RIP, one of the GOATs) has a clear, convincing view of what the War of Canudos means.
The Counselor himself is sparsely detailed in the novel, he doesn’t speak much, there are obvious parallels to the biblical Jesus. The reader’s view of both the Counselor and his followers feels modern, removed: these are people with strange beliefs, cult-like; there is not a ton of room for empathy for these people as believers (although certainly as victims, or as oppressed people). I wanted a sense for what it would feel like to believe what they believe, but we rarely get much interiority into the characters. Many seem to just become enthralled soon after meeting the Counselor. Now, maybe this is “The Truth” about what happened in Canudos; but it’s not so compelling.
The other side of the narrative is the military and those characters who are foreign to the region. Here, too, I think there is a disappointing lack of engagement with interesting ideas: you have a new republic, but there are debates about what it should look like, and a clear clash between a kind of modernizing liberalism and a reactionary conservatism that is one of the turning points of Latin American politics in the 19th and 20th century. In between, is this town, that doesn’t want to be incorporated. Yet, Vargas Lllosa makes it fairly clear on that on the military side there is not much beyond cynicism, desire for control, etc. Again, maybe the truth, but didn’t grab me.
In the end, the conflict itself feels like more of a backdrop to a story that is primarily a romance, with grand, sweeping emotions and characters who feel-very-strongly. As I read, the movie that I came coming back to was “Gone with the Wind”. That’s fine, but it didn’t grab me. And to top it off: this is a very long book, and dense with characters. Honestly, a slog to get through.
Anti-Semite and Jew: An Exploration of the Etiology of Hate by Jean-Paul Sartre My Rating: ★★ Date Read: March 26, 2025
My review
In Anti-semite and Jew, Sartre reflects on the “logic” of anti-semitism in France. It’s the end of the second World War, and many French Jews who were deported by the Nazis are beginning to return. In a broad sense, Sartre wants to explore how antisemitism “works” at the level of the individual: what does it “do” for the antisemite to be antisemitic? In line with his prior writing, he sees a psychological dialectic at play in the persistence of these beliefs: antisemites and Jewish people locked in a mutually “reinforcing” dance.
It’s an interesting time to read this book. Since Musk took over, my Twitter feed is full of far right accounts, many discretely or openly flirting with antisemitism, Nazi apologism, etc. I’m still in shock about how blatant it is. I can see some of the traits Sartre highlights at play with these Twitter figures.
This book would be hard to write today. As Walzer points out in the preface, Sartre is neither Jewish nor well-versed in Jewish culture. Yet, that does not mean he can’t say something interesting about antisemitism. In fact, he is shockingly candid about how much antisemitism exists in his social circle (unsaid: that he effectively tolerates) and much of his theorizing is specific to his experiences in France. On that front, the etiquette today – that only members of a group should comment on that group – seems bad.
The first chapter on the antisemite is really all that’s worth reading here. And it is a really interesting set of observations, almost aphoristic. He characterizes antisemitism as a choice (famously: “if the Jew did not exist, the antisemite would invent him”), that seeks out facts that support the view rather than the other way around, which perhaps distinguishes antisemitism from other forms of “ethnic” hatred. At its core, Sartre diagnoses the antisemite with a desire for impenetrability, a discomfort with the ambiguities of truth.
Especially interesting – thinking back to Twitter, and the right wing accounts who are “haha kidding but not really” playing with antisemitic tropes – is Sartre’s noticing that the antisemite fundamentally “plays”, that there is a layer of amusement (today we would say trolling) to their discourse. “They delight in acting in bad faith”, they do not stand by their arguments because their beliefs are not rooted in reason but a kind of anti-reason. The tension that Sartre notices between the antisemite (and more broadly the fascist’s) love of order, and yet the desire to break that order, is very interesting, the tendency towards hooliganism, pogrom, destruction… I think he also clarifies some things about the concept of the “Deep State” among the modern far right: “Thus for the anti-Semite there is a real France with a government but diffused and without special organs, and an abstract France, official, Jew-ridden, against which it is proper to rebel.”
Michael Walzer’s preface is worth reading too, he does not seem like a fan.
Making Empire: Ireland, Imperialism, and the Early Modern World by Jane Ohlmeyer My Rating: ★ Date Read: March 21, 2025
My review
I was disappointed by this book or, at least, I had the wrong expectations going into it. I picked it up after hearing the author on Empire Pod, imagining something more accessible about the history of early English imperialism in Ireland. But the book is very “academic”; the acknowledgments indicate it is based on lectures the author gave in university. Probably as a result, there is a frustrating level of detail throughout, at times giving way too little background on proper noun characters and at others focusing much too narrowly on individual people / towns. All to say, I didn’t get all that much out of reading this.
Here’s what I found interesting: the idea that Ireland is the “first” British colony, the only colonized country in western Europe; the steps the English took to try to “anglicize” Ireland early on; the process of using both settlers (“plantations”) to dispossess the locals and (interestingly) the “carrot” of being made nobility to win over the elites; and the way that colonial practices in Ireland would later be reflected in other colonies, down to specific people (one Irish man who worked in colonial policing in Ireland, India, and Palestine). The Irish being sent all over the world was also surprising, but makes sense; that’s how you get the hilariously named Bernardo O’Higgins as a Chilean founding father.
These are interesting ideas but they don’t get a lot of development. There’s also an emphasis on culture and discourse that I know is interesting to some people, but not to me. That colonial administrators in Ireland would conceptualize the island’s “problems” in disease-like language, and that this same language would later show up in India, is not so interesting to me. What I found more interesting was how often the Irish were invoked in North America: “the wild irish and the indian do not much differ”. There’s a dark comedy there where the colonizer recognizes these “similarities” in otherwise very dissimilar peoples but fails to recognize the common denominator (the colonial relationship).
How Asia Works: Success and Failure in the World’s Most Dynamic Region by Joe Studwell My Rating: ★★★★ Date Read: March 12, 2025
My review
How Asia Works argues that the reason some Asian economies succeeded (the so-called “tiger” economies, e.g., Japan, Taiwan, South Korea) and others failed (e.g., the Philippines, Myanmar) comes down to industrial policy: some states aggressively pointed their economies in the direction of development while others did not.
The book is provocative and interesting to read in light of all that is going on with Trump and his tariffs. Studwell is arguing principally against the neoclassical economic take that state intervention in the economy is bad and that free trade is fundamentally good; in Studwell’s view, free trade is a position that advantages already-rich countries to the detriment of poorer ones, and that if one looks at the history of how rich countries developed, one would see that they did so squarely through heavy state intervention in the economy, via land reform and protectionist policies that sheltered domestic manufacturing, allowing firms to grow and become globally competitive. He uses Asia to test these ideas.
This summary makes Studwell sound like a conventional left-wing economist, but his ideas are actually a lot more heterodox and interesting. Early in a country’s development, he advocates for land reform, and particularly land redistribution – away from feudal estates, and towards smaller landholdings – but on the grounds that these small farms are in fact more competitive, more “capitalist” in some sense, than the big farms where landowners can grow fat off rents.
The history in this chapter is fascinating. I had: a) no idea of the substantial level of land reform and redistribution that some Asian countries took on, but even more surprising: b) the degree to which the US encouraged these reforms both as development measures in their own right (in Japan, Korea, Taiwan) and as counterinsurgency tools to demobilize rural unrest. In Taiwan and Korea in particular it seems the US actively pushed for breaking up big farms, which is shocking.
He is also heterodox with respect to protectionist policies once states are at the development stage where manufacturing is plausible. States need to protect their domestic industries through tariffs and subsidies, but must maintain “export discipline”: that is, the protected industries must be forced to compete in the global marketplace. Absent being forced, domestic industries will happily absorb the subsidies and do little that will generate wider development. So in some sense, a pretty dangerous tool: there needs to be the willpower to push companies to compete globally even when its not in their interest (given protections). The narrative here is also interesting, especially so Korea’s impressive development of car and steel manufacturing so “late” in their history. One feels that if Korea can do it, why not, say, Brazil?
Something striking about the policies that Studwell proposes is that, broadly, they are probably 1) quite painful to implement and 2) unlikely to easily generate a coalition of people who’s interest is in maintaining them. As economists will note, the costs of tariffs and other protections are borne by consumers. We are currently screaming about 6-7% interest rates; Studwell points to something like a decade of 10-15% interest rates in Korea. Could people really tolerate that? In the pursuit of some long term goal? With respect to (2), you can’t help but notice that the people pushing painful development through in South Korea, China and Taiwan are dictators. Can democracies do this? The rich democracies certainly did, so maybe there’s hope.
Overall, the history of state intervention in the economy is interesting in that for most of the time period discussed it actually seems to intersect little with the traditional left-right spectrum or the Cold War. Today these ideas are totally “polarized”: if you’re on the right you oppose intervention, on the left support it, and what’s at stake is some trade-off between efficiency and equity. But for these early leaders, these were simply tools that they could choose to use (or not). Which makes sense: for most of history, the idea that a country’s leaders would “not meddle” in their country’s economic activity was implausible. The question was not if, but how.
I do have to say I found Studwell kind of grating at times. There’s a ton of “telling” in this book but not a lot of showing; huge, vast claims are made about why something happened or what effect X has on Y. Claims about the size of farms, how wealthy or poor people were at some particular time/place, etc., are rattled off, but it’s unclear how Studwell can really “know” any of this. In fact, he reminds me a lot of Noah Smith, who also has an unpleasant tendency to over-claim expertise and to tell these grand narrative type stories that are nice and neat but seem implausibly overconfident.
Stories of Your Life and Others by Ted Chiang My Rating: ★★ Date Read: February 26, 2025
My review
Chiang’s move in these short stories is to take what are often obtuse academic concepts and humanize them, give them stakes, and build characters who interact in worlds where these concepts have weight. He draws on hermeneutics in Tower of Babylon, linguistics in Story of your life, math in Division by Zero, etc.
For my money, the standout in the bunch is Tower of Babylon. Chiang focuses on the routine, daily mechanics of building the tower; what material to use, how workers make the climb, how people live on the tower. The focus on engineering gives the story a realism that produces a clever dramatic irony where, as you read, you imagine that the builders will discover what you already know: that there is no “vault of heaven”, but rather outer space. This makes the moment when they reach the vault of heaven very effective and opens the narrative up. That the builders never give a positive account of why they are building the tower is interesting, especially once the vault is reached and you learn that piercing the vault could trigger world-ending flooding. The question is never “should we do this” but rather the mechanics of minimizing the potential damage. Obvious parallels there to real-world science: the atom bomb, the hadron collider, etc.
The second best story is the one that the book is named after. Story of your life is impressive in sketching out what it would feel like to interact with a non-human language, one that still conformed to some kind of structure. There’s a “pleasure of mastery” as the narrator slowly develops the ability to communicate with the Heptapods. Unfortunately, the story ends up suffering from what I’ll call “Interstellar Syndrome”, referring to the sci-fi movie by Christopher Nolan. Nolan’s movie begins with “hard science” and ends up in the world of “California woo” after the main character falls into a black hole and discovers the universe is powered by Love. This short story similarly made me squirm with the time-traveling bit revealed at the end.
The other stories are not very good.
The Frontier Effect: State Formation and Violence in Colombia by Teo Ballve My Rating: ★★★★ Date Read: February 06, 2025
My review
The Frontier Effect is a book about Uraba, a region in Colombia near the border with Panama. Uraba is a microcosm of the country’s violent conflicts – you can truly see every element of the conflict at play in Uraba. Early on, an “underdeveloped” backwater that grows quickly due to the booming banana industry and early colonos. Later, a hotspot for guerrilla organizing, especially the FARC and (much less written about, though fascinating) EPL. And much later, the place where the paramilitaries will exert seemingly unparalleled control over economic and political life.
Ballve is interested in the role of the state in Colombia’s wars and especially Uraba. It is a common refrain that in places like Uraba, the state is weak or absent, and so Hobbesian violence emerges. Ballve argues that, instead, in these places other kinds of order emerge: imposed first by the guerrillas (who bring significant political infrastructure in the region) and later the paramilitaries.
Ballve’s narrative of the paramilitaries is where the book really shines. In many readings of the conflict, the paramilitaries are shadowy figures with little/no ideological worldview, notoriously violent and predatory. Ballve’s depiction is, frankly, surprisingly “sympathetic” (or at least more nuanced). He establishes quickly and convincingly that the paramilitaries, like the guerrillas, relied on social bases of support. And like the guerrillas, they had a vision for the region, a vision that is confused, unclear, and incoherent in parts, not so dissimilarly to the guerrillas.
The level of institution building the paras took on surprised me. The extent to which they resettled these lands with new peasants, who expressed some degree of loyalty, also surprised me. There’s also a ton of eye-popping anecdotes on here I hadn’t heard about; the paras foray into ecotourism, their development of JACs in the region, the fact that when land restitution ultimately comes to Uraba it is with tacit para approval.
Before reading this book, I thought the absence of the (effective, legitimate) state in large swaths of Colombia’s territory was a major factor in the war. After reading this, I still (mostly) feel the same way. I’m not sure I buy the move Ballve makes here – that state absence can’t explain violence, because other orders emerge. The orders he describes don’t seem to last all that long, and they seem normatively worse than an (effective, legitimate) state.
All said, impressive book!
La dimensión desconocida by Nona Fernández My Rating: ★★★★★ Date Read: January 21, 2025
My review
In La Dimension Desconocida, a blend of fiction and memoir, we follow the author as she follows a variety of real people who lived through Chile’s dirty war. At the center is “the man who tortures”, a man – and a real person, Andres Antonio Valenzuela Morales – who participated in torture and forced disappearances during the dictatorship, later defected, revealed all to the press, and fled to France from where he would continue to provide testimony, validate faces in photographs, etc.
This book was headed for a 3/5 star rating but it won me over. So much has been written about Chile and Argentina’s “dirty wars”, it would seem the well has run dry. What the author of this book does best is vividly capture how the dirty war stained everything about ordinary life with horror. Part of what was unique about the dirty war was how centrally located it was; these are not “human rights abuses” happening overseas, or in Abu Ghraib, or in Guantanamo Bay. It is as if, in Times Square or Central Park, in some nondescript building, agents of the state were brutally torturing their captives. The torture centers are not special institutions, they are not the concentration camp, they are (now) regular homes, or offices.
What’s more: the torture was happening, and everyone knew. Nona notes this again and again: people are snatched up in broad daylight, out of a bus, and everyone can see but pretends not to. She could be sanctimonious about this but she is not; it is just a fact of life, she is not telling us she would have done differently. She is also surprisingly empathetic towards “the man who tortured”, whom we learn was basically a boy when he was compelled to torture (by whom?). It’s an interesting balance: it is a book that on the one hand is deeply critical and on the other primarily conveys the feeling of empathy.
The weight of the disappeared is also captured movingly: the sheer terror of someone vanishing without a trace. There’s a devastating moment early on, when some of the first bodies are found, and the families who are searching first realize that what they are likely searching for at this point is bodies.
There’s also an incredible amount of history here that I simply did not know. I had no idea how deep into the end of the Pinochet regime disappearances and violent reprisals kept taking place.
The author is and was deeply involved in activism around historical memory in Chile. I think that’s perhaps the reason why the book doesn’t grapple with the fact that, for many in Chile, the dirty war was something more distant, either because of when they were born or because those in their social network were left relatively untouched. She makes small allusions to this – her son being too bored to join her at the marches – but to me, this is part of what’s interesting about debates over historical memory. Someone more removed could look at that time period and think “well, if the government was known to be in the business of hunting and killing communists and socialists, why would anyone be one during this time? Unless…”. I think this kind of thinking permeates “casually conservative” opposition to historical memory, and it’s not an unreasonable first glance at these situations.
That said, I think (Marco Rubio voice) this book totally dispels with the notion that the dirty war was primarily or mostly targeting subversive elements. The book makes the powerful, simple, hopefully obvious point that being a communist does mean the government gets to torture and kill you. The book does this by showing us again and again how cruel and especially cowardly the dirty war was.
Just and Unjust Wars: A Moral Argument With Historical Illustrations by Michael Walzer My Rating: ★★★★ Date Read: January 09, 2025
My review
I took a moral philosophy class in college that has stuck with me for a variety of reasons, one being that the professor told us all that semester that he had been denied tenure and would be dismissed from the university. At the time, i thought, “wow, that sucks” but as I’ve gotten older the pure horror of it has set in: to have one of the few tenure-track professorships in philosophy and to lose it, is brutal. And to relay this to a bunch of dead-eyed college students is also tough.
I loved that class and bring this up because the best parts of this book remind me of that class. Part of what’s great about philosophy is to encounter some (moral) question, have a strong intuition about its answer, and then have the philosopher throw examples at you that break your intuition. Just one example from the book: the violation of Belgian neutrality by Germany is clearly bad, but what about British violation of Norwegian neutrality in WW2? Books like this are a great reminder of how often we reason from outcomes rather than from first principles.
Walzer is fairly “moderate” when it comes to what makes war just or unjust. He gives states and soldiers a fair amount of leeway in waging war – although it’s not always so clear to what extent Walzer is making the case for a moral stance versus simply describing the existing conventions around war. He’s good at “steelmanning” what might at first seem like morally noxious stances, for instance, that retaliatory violence could be permissible in war. I was pleasantly surprised by this; he thinks through the issues deeply and with some degree of compassion for the people who fight. There are places where I think he is more convincing (the use of the nuclear bomb was immoral), and places where he is less convincing (his arguments around the Vietnam War), but he’s clear and effective.
My favorite chapters: on the use of indiscriminate violence against civilians (e.g., fire bombing of Germany/Japan); on the use of nuclear bomb; on how technology changes the war convention (e.g., the introduction of submarines to naval warfare); the chapter on guerrilla war.
PS: picked this up because it is apparently frequently assigned at West Point.
Summary statistics
Here are some “big picture” summary statistics about my reading:
Summary statistics
First logged book
Total pages read
Average rating (out of 5)
Median publication year
Male authors (%)
Feb 2022
17,599
3.4
2004
73.17
Here’s the distribution of book ratings:
Show code
books |>count(my_rating) |>mutate(percentage = n /sum(n)) |>ggplot(aes(x =factor(my_rating), y = percentage)) +geom_col(color ="white", fill = pal[7], alpha = .9) +scale_y_continuous(limits =c(0, 1), labels = scales::percent) +labs(x ="My rating (1-5)", y ="Percent of books") +theme(panel.grid.major =element_blank())
Other descriptives
Here’s the correlation between my rating, the average rating on Goodreads, how long it took me to read the book, and when the book was originally published:
# Randomly select five books to labelsum_pages = books |>arrange(date_read) |>select(title, date_read, number_of_pages) |>rownames_to_column() |>mutate(pages =cumsum(number_of_pages),books = rowname)highlighted_points = sum_pages |>filter(books %in%round(seq(1, n(), length.out =5)))ggplot(sum_pages, aes(x = date_read, y = pages)) +geom_area(fill = pal[7], alpha = .8, color ="white") +labs(x =NULL, y ="Cummulative pages read") +scale_y_comma() +geom_point(data = highlighted_points, aes(x = date_read, y = pages), color = pal[7], size =3) + ggrepel::geom_label_repel(data = highlighted_points, aes(x = date_read, y = pages, label = title), size =3,nudge_x =-100, fill ="white", color = pal[7],nudge_y =30) +scale_y_continuous(expand =expansion(mult =c(0, 0.1)))## Scale for y is already present.## Adding another scale for y, which will replace the existing scale.
What are the top five shortest and longest books I’ve read?
Show code
# slice to top five shortest and longest in page lengthtop_5 = books |>slice_max(order_by = number_of_pages, n =5, with_ties =FALSE) |>mutate(label ="5 longest")bot_5 = books |>slice_min(order_by = number_of_pages, n =5, with_ties =FALSE) |>mutate(label ="5 shortest")# combine and plotbind_rows(top_5, bot_5) |>select(title, author, number_of_pages) |>kable() |>group_rows("Longest Books", 1, 5) %>%group_rows("Shortest Books", 6, 10)
title
author
number_of_pages
Longest Books
2666
Roberto Bolaño
1128
Putin: His Life and Times
Philip Short
848
La guerra del fin del mundo
Mario Vargas Llosa
720
Slouching Towards Utopia: An Economic History of the Twentieth Century
J. Bradford DeLong
624
Return of a King: The Battle for Afghanistan
William Dalrymple
608
Shortest Books
Little Labors
Rivka Galchen
144
Anti-Semite and Jew: An Exploration of the Etiology of Hate
Jean-Paul Sartre
153
We Have Never Been Modern
Bruno Latour
168
Una historia política de Colombia: Del siglo XIX al Frente Nacional (Spanish Edition)
Álvaro Tirado Mejía
191
War of the Flea: The Classic Study of Guerrilla Warfare
Robert Taber
214
How do my ratings compare versus the averages reported by Goodreads?
Show code
books |>select(title, my_rating, average_rating) |>mutate(diff = my_rating - average_rating) |>ggplot(aes(y =reorder(title, diff), x = diff,fill = diff >0)) +geom_col(alpha =0.8) +theme(axis.text.y =element_blank(),axis.ticks.y =element_blank()) +labs(title ="Difference between my ratings and the\n average Goodreads user", x ="My rating - average Goodreads user", fill ="Books I liked:", y =NULL) +scale_fill_manual(values = pal[c(1, 7)], labels =c("...less than the Goodreads average","...more than the Goodreads average")) +theme(#panel.background = element_blank(),#plot.background = element_blank(),panel.grid.major =element_blank(),#panel.grid.minor = element_blank(),axis.line =element_blank(),legend.position ="top" )
How long am I spending on individual books? Caveat: the dates added / read are approximations in some cases.
Show code
# Reorder titles so longer reads appear lower in plotbooks_bell = books %>%mutate(title =str_remove(title, ":.*$")) |>mutate(title =fct_reorder(title, date_added)) # hilite top three longesthilite = books_bell |>mutate(duration = date_read - date_added) |>slice_max(order_by = duration, n =3) |>mutate(title =str_remove(title, ":.*$")) |>mutate(title =fct_reorder(title, date_added))# Plotggplot(filter(books_bell, date_added >=ymd("2023-01-01")), aes(y = title)) +geom_segment(aes(x = date_added, xend = date_read, yend = title), color ="gray70", size =2) +geom_point(aes(x = date_added), color = pal[1], size =4) +geom_point(aes(x = date_read), color = pal[7], size =4) +labs(title ="Time spent on each book",x ="Date",y =NULL, ) +theme_minimal() +scale_x_date(date_labels ="%b %Y", date_breaks ="3 months") +theme(axis.text.y =element_blank(),panel.grid.minor =element_blank())## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.## ℹ Please use `linewidth` instead.
Movies
Here are the last five movies I’ve watched:
Show code
movies |>slice_max(order_by = watched_date, n =5) |>mutate(watched_date =format(watched_date, "%B %d, %Y")) |>select(name, year, rating, watched_date) |> kableExtra::kbl(caption ="Last five movies watched")
Last five movies watched
name
year
rating
watched_date
Nymphomaniac: Vol. I
2013
3.0
May 16, 2025
Melancholia
2011
5.0
May 15, 2025
Nightbitch
2024
3.0
May 14, 2025
Heretic
2024
0.5
May 10, 2025
Louis Theroux: The Settlers
2025
3.0
April 29, 2025
Summary statistics
Overall stats:
Show code
movies |>summarise(`First review`=format(min(watched_date), "%b %d %Y"),`Number of movies`=n(),`Average rating`=mean(rating), `Median year movie came out`=median(year),`Average length of review (num. of words)`=mean(review_count)) |>kable()
First review
Number of movies
Average rating
Median year movie came out
Average length of review (num. of words)
Jun 11 2022
192
3.221
2016
35.49
Distribution of movie ratings:
Show code
movies |>count(rating) |>mutate(percentage = n /sum(n)) |>ggplot(aes(x = rating, y = percentage)) +geom_col(color ="white", fill = pal[7], alpha = .9) +scale_y_continuous(limits =c(0, 1), labels = scales::percent) +labs(x ="My rating (1-5)", y ="Percent of movies") +theme(panel.grid.major =element_blank())
Descriptives
Movies over time:
Show code
# Randomly select five movies to labelhighlighted_points = movies |>filter(counter %in%round(seq(1, n(), length.out =5)))movies |>ggplot(aes(x = watched_date, y = counter)) +geom_area(fill = pal[7], alpha = .8, color ="white") +geom_point(data = highlighted_points, aes(x = watched_date, y = counter), color = pal[7], size =3) + ggrepel::geom_label_repel(data = highlighted_points, aes(x = watched_date, y = counter, label = name), nudge_x =-100, fill ="white", color = pal[7],nudge_y =20) +labs(x ="Date watched", title ="Movies watched so far",y ="Number of movies watched") +scale_x_date(expand =expansion(mult =c(0.05, 0.05)))
Here’s the correlation between the year a movie came out, my rating, and the word count for my review: