Visualizes price and performance of road bicycles.
In May 2015, I was interested in buying a road bike but didn't know very much about them. I started this project to get an idea of the market.
There are a lot of road bikes. I looked at four mainstream bicycle brands for this project, which each have a column in the table below. Each brand has several models, and each model has several versions. In total, there are 190 versions.
Cannondale | Giant | Specialized | Trek | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
Notes - I excluded track, cyclocross, and triathlon bicycles. Models without links have been discontinued or renamed. The number of models in the table is from whenever I last scraped data and may not be current.
I use three specifications to give an idea of the bike's performance.
(1) Price: the MSRP price given on their website.
(2) Material: describes which key parts of the bicycle are made from carbon-fiber. The two parts in question are the frame, colored blue below, and the fork, colored green below:
Carbon-fiber is lightweight, strong, corrosion-resistant, and can be molded into almost any shape, but is difficult to manufacture so expensive. On these bikes, parts not made of carbon are made of aluminum.
A carbon frame is probably, but not necessarily, better than an aluminum frame. See Results § Useful scope for more.
This value of the material field is one of:
- none - neither the frame nor fork are carbon-fiber
- fork - the fork is carbon fiber, but the frame isn't
- all - both the frame and fork are carbon-fiber
Almost every bike I sampled has at least a carbon fork. They don't make bikes with carbon frames but non-carbon forks.
(3) Groupset: the bicycle's drivetrain components, which come in a set. The parts shown below are most of a groupset:
Importantly, a groupset also includes the brake/shift levers. More expensive groupsets are lightweight and have faster/smoother/nicer mechanisms.
Two companies make groupsets at this price level, and each company makes multiple lines:
Shimano | SRAM |
---|---|
Dura-Ace (Di2) Ultegra (Di2) 105 Tiagra Sora Claris |
Red (eTAP) Force Rival Apex |
Comparing groupset hierarchy between brands is inexact, but most of these bikes use Shimano so it's not a major problem. In the current diagram, Sram groupsets are displayed as their Shimano approximation.
Notes - Di2 and eTAP versions are electronic, which shift using batteries, motors, and wired and/or wireless signals. Di2 stands for Digital Integrated Intelligence. Campagnolo makes more expensive groupsets.
The idea for making the first chart was to get a feel for what was out there: see all my options and visually compare everything.
Soon, I hoped to answer some specific questions:
- Do different brands have different pricing styles?
- What's price distribution like? Is there a bike at almost every price point? Or, are bike clustered around price points?
- Are there any obvious best values?
Answers are discussed in Results § Questions answered.
I also was interested to learn if, in general, it is better to buy a cheap version of an expensive model or an expensive model of a cheap version. It turns out this question doesn't have an answer.
I made JavaScript web scrapers to help gather bike specs; read about them in folder scripts_to_scrape/
. The resulting data are in bikesInput.txt
.
It would make a lot of sense to have a visualization program do all the work for me. But, I haven't found anything that can replicate this kind of chart. I made a version using Tableau Public, published here, but it's pretty shitty.
Instead, I made the first proof-of-concept chart the hard way, just to see if this was a good idea. I used Java because it was installed on my computer, I knew how to use it, and it's easy to draw shapes with. Since then, the project has expanded and I'm still using Java. The current diagram is drawn using Erich Seifert's VectorGraphics2D
library.
To draw a diagram:
- Read a text file of bike data. The current file is
bikesInput.txt
. - Each entry becomes a
Bike
instance. Enums forGroupset
andCarbon
describe specs. - A
Diagram
draws each bike and aLegend
shows what the shapes and colors used mean.
You can add Histogram
s to the Diagram
using an Analysis
object. Currently this is not added to the chart, but you can try it using AnalysisTesting
.
In September 2015 I got a 2015 Giant Defy 1 with a 105 groupset, carbon fork, and aluminum frame.
The MSRP is $1,425 which is comparable to bikes with the same specs. The price at The Off Ramp in Mountain View was $1,325 and it was on sale for $1,000, which was a great deal. But, I didn't use my chart to help choose bicycles. I just compared bikes in stores around me.
(The bike I got isn't show on the diagram because data is from the previous model year.)
The three variables described in Background § Variables and terminology do not fully describe how good a bike is.
In particular, frame material is less useful than I first thought, because a carbon frame can be heavier and less comfortable than an aluminum frame. And, features like wheel weight, internal cable routing, disc brakes, and others are not captured.
Here's a concrete example about frame type. The two most expensive aluminum-frame bikes are from the same model:
- Cannondale CAAD12 Black Inc. ($5,860)
- Cannondale CAAD12 Disc Dura Ace ($4,260)
CAAD stands for Cannondale Advanced Aluminum Design, so in fact every Cannondale CAAD12 has an aluminum frame—even at nearly $6,000. Every other bike at that price range is full-carbon.
Does that mean Cannondale skimped on components? No. The CAAD12 Red ($3,200) is the cheapest bike to have a Dura-Ace/Red level groupset, and is the only aluminum-frame bike to have that level of groupset.
So, costs saved from manufacturing with aluminum instead of carbon-fiber can be transferred to high-grade components. Fixating on frame type when choosing a bike would be foolish.
Do different brands have different pricing styles?
Giant has many (11) models each with few versions (4 max), while the other brands have fewer (6.6 avg) models with many models (19 max).
Some Trek bikes have enormous range within the model. The Domane goes from $1,360 to $11,000 in 19 models, and the Emonda goes from $1,570 to $12,080 in 14 models.
Otherwise, pricing styles are similar.
What's price distribution like? Is there a bike at almost every price point? Or, are bike clustered around price points?
Spread out fairly continuously. Click for bigger:
The histograms below show distributions of versions within each model:
Are there any obvious best values?
No, but there is a worst value.
The most expensive bike with a Sora groupset is the Trek Domane 4.0 Disc, $2,100. The second most expensive bike with Sora is the Specialized Dolce Sport Disc, $1,150. That Domane is nearly twice as much as that Dolce, with the same (entry-level) groupset.
Furthermore, the Domane one version cheaper than the 4.0 Disc is the 2.3 ($1,680), which has a 105 groupset. That means if you spend $420 to upgrade from the Domane 2.3 to the Domane 4.0 Disc, you downgrade from 105, skipping Tiagra, and get Sora.
The Domane 4.0 Disc has a carbon-fiber frame, which the Dolce and other Domane I just compared it to don't. But you can choose from at least five other bikes cheaper than the Domane 4.0 Disc which still have a 105 groupset and a full-carbon frame.
If or when I put more time into this, here's what I'll work on:
-
Distinguish between Shimano and Sram groupsets, and represent groupsets better. Currently,
Groupset.java
is pretty stupid. -
Instead of showing Di2 groupsets as their own groupset, show them as variants of the non-electronic version. Maybe with a little lightning bolt icon.
-
Use a better colormap for groupsets.
-
Make
Analysis
useful.
-
Find a better way to display stuff. A static PDF is really shitty. I would like to be able to zoom, sort, and filter the data, and see details of a bike by clicking on its dot.
-
Get bike data for current model year, and compare over time.
-
Scrape more bike brands.
Trek is from Wisconsin and Specialized is from California, but they like sounding European.
I've done research so you don't have to:
-
Specialized Roubaix is pronounced roo-BAY and is named after the Paris–Roubaix race.
-
Trek Madone is pronounced muh-DOHN and is named after the Col de la Madone climb.[1]
-
Trek Èmonda is pronounced eh-MON-da and is named after Italian èmonder, meaning "prune" or "trim" (as in weight).[2][3]
- Shouldn't Èmonda be pronounced EH-monda, with the spoken accent on the first syllable? Shouldn't the way Trek pronounced it be spelled Emònda, with the grave accent on the O? What the hell do I know.
-
Trek Domane is pronounced do-MAH-nee. Allegedly, domane is Latin for "king's crown," [4][5] but I think they made that up.[6][7]
Those three Trek model names are anagrams.