On an average day, Twitter generates about 500 million tweets. That's about 15 times the number of books in the Library of Congress
In August 2010, Eric Schmidt, former CEO of Google, said that between the beginning of time and 2003, humanity generated about 5 exabytes (5 x 1018 bytes) of data.
Now, we generate that much data roughly every 2 days.
These mountains of data add up. We record much more data than we can possibly analyze 1:1 in a lifetime.
Even when we aggregate data, it's not always clear what's going on.
And this is sort of a bummer, because
Data is only valuable when it's understood.
Anscombe's Quartet
4 Datasets with nearly-identical statistical properties
Anscombe's Quartet
Upon visual analysis, could not be more distinct from one another.
In the absence of the ability to code and analyze the information ourselves, Data-Driven Journalism sites do us a great service when they provide methods for us to interact with their data.
A mainstay of Data Journalism is the pairing of a story with the understanding that a reader's interpretation of it may differ.
In practical terms, this means that the best data journalism allows the reader to sort, filter, combine and rearrange data through a visual interface.
3. Data as a means of Critical Thinking
Some people mislead in order to persuade.
This probably doesn't work anymore. (good)
Persuade the right way: back your narrative up with data.
Telling Data Stories is more about being able to answer questions than about telling a single narrative.
(Data Science is not an Op-Ed piece)
There are some very good reasons to use data / data visualization as an aid to critical thinking:
1. Some of our questions have conflicting answers.
It is a foregone conclusion that someone selling you something has an unobjective bias toward their product.
In the name of persuasion, some sources are simply unreliable. Sometimes they look like the wrinkle ad from before. Other times they require analysis.
Data lets us explore, lets us fact-check.
Data makes critical thinkers of us.
2. Sometimes we ask the wrong questions.
We might ask "How many customers did you have in October?"
We probably means "How many customers did you have in October, relative to September" or "relative to last October"
Data answers the questions we didn't know we had.
3. Sometimes the answer to a simple question is unsatisfying.
Q: How many Californians relocated from outside the USA?
A: About 28%
Okay but...
Q: Where do the other 72% come from?
Q: What about Californians who leave? Where do they go?
Q: How does this compare to last year? to 100 years ago?
Q: How does this compare to the US as a whole? To any given state?
In terms of static data visualization, we've been working at this for a long time. From 1910:
Good data design adheres to the properties of the visual encodings it uses
Certain types of visualizations are well-suited to particular data types:
Bar charts are boring, but well-suited to allow us to quickly determine differences in quantity:
Sometimes pie graphs are okay for this too, but be warned: at a glance, people don't see area, they see height.
Treemaps show quantity, plus a sense of hierarchy
Maps provide several ways to show physical location.
Maps are particularly versatile because of our common understanding of their expected shape; differences from our expectations let us see a different kind of story:
This cartogram shows expected popularion by 2300. It is only by changing our previous knowledge of the shape of the world that this has any effect.
Time-Series charts show how quantitative values change over time:
Scatter plots show us the differences between things in two dimensions
Network graphs show us the relationships between things - for example, this map of all of the followers of @CollideHalifax
5. The Qualities of Highly Successful Interactive Data Visulizations
Let's build on this. Let's highlight the import trends of each product from year to year.
Let's iterate (map) over each row (product) and:
1. figure out the min and max values
2. use D3 to paint the min values red, max values green, and scale the in-between accordingly
3. Iterate (map) over each cell in the row and paint its background according to where it sits in the d3 domain
$('tr').map(function(iter,row){
var max = _.max($(row).children('td').map(function(iter,cell){ return $(cell).text().replace(/,/g,'') }))
var min = _.min($(row).children('td').map(function(iter,cell){ return $(cell).text().replace(/,/g,'') }))
var color = d3.scale.linear()
.domain([min, max])
.range(["#c33", "#0fc"]);
$(this).children('td').map(function(iter,cell){
$(cell).css('background-color', color($(cell).text().replace(/,/g,'')))
})
})