14/15 edits
This commit is contained in:
parent
b95ebeedf4
commit
ff05e37b59
BIN
14.misc/mosaic.jpg
Normal file
BIN
14.misc/mosaic.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 281 KiB |
BIN
14.misc/plotly-dash.png
Normal file
BIN
14.misc/plotly-dash.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 192 KiB |
227
14.misc/slides.html
Normal file
227
14.misc/slides.html
Normal file
File diff suppressed because one or more lines are too long
236
14.misc/slides.md
Normal file
236
14.misc/slides.md
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
# Data Visualization for Public Policy
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## This Week
|
||||||
|
|
||||||
|
- Project Questions / Deployment
|
||||||
|
- Code Quality & Style
|
||||||
|
- Dashboards
|
||||||
|
- Visual Style Guides
|
||||||
|
- 100 Visualizations
|
||||||
|
- Animation & Interaction
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Code Quality
|
||||||
|
|
||||||
|
When you are writing a data pipeline or application, code quality is of high importance.
|
||||||
|
|
||||||
|
- Readability & Documentation => easier maintenance & bugs prevented.
|
||||||
|
- Small speed-ups from better algorithm/data structure choices can make big differences when that task executes millions of times.
|
||||||
|
- Test coverage makes refactoring easier, prevents regressions.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Unique Considerations for Data Viz
|
||||||
|
|
||||||
|
- Typically little to no ongoing reuse/maintenance.
|
||||||
|
- Visualization itself unlikely to be performance bottleneck compared to data manipulation.
|
||||||
|
- Focus is on **immediate visual output**, testing de-emphasized.
|
||||||
|
- Often written by solo developer, even in larger organizations.
|
||||||
|
|
||||||
|
Code quality still matters, but your main goal should be code that you can trust is correct. Testing, documentation, and the "right way" are less essential.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
## Dashboards
|
||||||
|
|
||||||
|
![bg fit left](plotly-dash.png)
|
||||||
|
|
||||||
|
Long-lived data visualizations that typically run against a central repository of data.
|
||||||
|
|
||||||
|
You can use the same techniques & tools, or custom dashboard-focused tools like Tableau or Dash.
|
||||||
|
|
||||||
|
Key difference: You will likely need some degree of dynamic refresh (instead of loading CSV/JSON load data from DB/API). Comes with caching and other performance considerations.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dashboard Psuedocode
|
||||||
|
|
||||||
|
```
|
||||||
|
every interval {
|
||||||
|
data = update()
|
||||||
|
visualize(data)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Can make use of animation to provide context:
|
||||||
|
|
||||||
|
- scrolling time series
|
||||||
|
- animated dials to show directional changes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Are Dashboards Bad?
|
||||||
|
|
||||||
|
Dashboards saw a surge in popularity a decade or so ago, and there are now plenty of bad dashboards out there.
|
||||||
|
|
||||||
|
Golden rule of dashboards: **answer a question & make them actionable**.
|
||||||
|
|
||||||
|
Too often people just throw all their data on a dashboard.
|
||||||
|
|
||||||
|
*OK, I can see that 6 errors occurred in the last 24 hours...*
|
||||||
|
|
||||||
|
- Is that a lot? **Show trends where appropriate!**
|
||||||
|
- What can I do? **Provide links/action items!**
|
||||||
|
|
||||||
|
Without this focus, dashboards become decorations.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Style Guide
|
||||||
|
|
||||||
|
It can be helpful to create or build from a style guide. Even for your own work.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- [Sunlight Foundation](https://www.amycesal.com/portfolio#/data-visualization-style-guidelines/)
|
||||||
|
- [CFPB](https://www.amycesal.com/portfolio#/cfpb-design-manual-data-visualization/)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Elements
|
||||||
|
|
||||||
|
### Typography
|
||||||
|
|
||||||
|
Select 2 complementary fonts:
|
||||||
|
|
||||||
|
- Prefer a very legible sans-serif font for data/axes labels.
|
||||||
|
- Any legible font for chart titles/narrative/etc.
|
||||||
|
|
||||||
|
### Color Selection
|
||||||
|
|
||||||
|
Best to have:
|
||||||
|
|
||||||
|
- Nominal data: Distinct, contrasting hues
|
||||||
|
- Quantitative data: Linear or divergent gradients
|
||||||
|
- Consider color-blindness and accessibility
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Style Guide: Chart Selection
|
||||||
|
- Match chart type to **data characteristics** and **audience**.
|
||||||
|
- Consider:
|
||||||
|
- Data dimensionality
|
||||||
|
- Comparison needs
|
||||||
|
- Narrative goals
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Creativity: 1 Dataset 100 Visualizations
|
||||||
|
|
||||||
|
<https://100.datavizproject.com>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Applications of Animation
|
||||||
|
|
||||||
|
- Demonstrate change over time: Data being added to chart as time "plays."
|
||||||
|
- Highlight relationships: Hover/highlight/select modifies display of other data on page.
|
||||||
|
- Focus attention: Show subsets of data at a time.
|
||||||
|
- Show uncertainty: "wiggle", shifting trend line (next page)
|
||||||
|
|
||||||
|
More Examples:
|
||||||
|
- <https://informationisbeautiful.net>
|
||||||
|
- <https://www.visualcinnamon.com/portfolio/>
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
![bg fit](https://clauswilke.com/dataviz/visualizing_uncertainty_files/figure-html/mpg-uncertain-HOP-animated-1.gif)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Applications of Interaction
|
||||||
|
|
||||||
|
- Enable user-driven exploration of data.
|
||||||
|
- "How do these two variables compare?"
|
||||||
|
- "What happens if this price increases?"
|
||||||
|
- Allow personalization (e.g. enter your zip code)
|
||||||
|
- "What is this like in my city?"
|
||||||
|
- Increased engagement/retention. Lots of evidence showing we learn best by participating.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## JS setInterval
|
||||||
|
|
||||||
|
```js
|
||||||
|
// will call `func` every `everyMS`
|
||||||
|
let intervalId = setInterval(func, everyMS)
|
||||||
|
|
||||||
|
// stop calling func
|
||||||
|
clearInterval(intervalId)
|
||||||
|
```
|
||||||
|
|
||||||
|
<https://developer.mozilla.org/en-US/docs/Web/API/Window/setInterval>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Interaction: Making Data Selections
|
||||||
|
|
||||||
|
For user-driven data explorations, **selection** is an important concept.
|
||||||
|
|
||||||
|
How do you want to let a user select individual records or groups of records?
|
||||||
|
|
||||||
|
### Selection Spectrum: Simple to Complex
|
||||||
|
|
||||||
|
- Menu/Select Box
|
||||||
|
- Hover/click on items on page (tooltips, etc.)
|
||||||
|
- Drag/Region selection
|
||||||
|
- Pre-written SQL queries with dropdowns/selects. (Common on dashboards.)
|
||||||
|
- Allow user to write queries themselves in SQL or a custom query language. Common on advanced dashboards.
|
||||||
|
|
||||||
|
Altair Selection: <https://altair-viz.github.io/user_guide/interactions.html>
|
||||||
|
D3 Selection: <https://observablehq.com/collection/@d3/d3-selection>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Discussion: Major Visualization Challenges
|
||||||
|
|
||||||
|
- Missing/Incomplete data
|
||||||
|
- Huge quantities of data
|
||||||
|
- Complex, high-dimensional data
|
||||||
|
- Uncertainty
|
||||||
|
- Challenges of Scale
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Missing/Incomplete Data
|
||||||
|
|
||||||
|
- Imputation of missing values.
|
||||||
|
- Label missing data.
|
||||||
|
- Regardless of choice. Be transparent.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Big Data
|
||||||
|
|
||||||
|
- Aggregation
|
||||||
|
- Sampling
|
||||||
|
- Filtering/Interactives
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Lots of Attributes/Dimensions
|
||||||
|
|
||||||
|
- Small multiples approach
|
||||||
|
- Pairwise charts. (XY, YZ, XZ)
|
||||||
|
- Advanced: Dimensionality Reduction Algorithms (PCA, TSNE, etc.)
|
||||||
|
- Interactive exploration
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Handling Uncertainty
|
||||||
|
|
||||||
|
- Frequency Approach
|
||||||
|
- Confidence intervals & error bars
|
||||||
|
- Probabilistic visualizations
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Visualizing Scale
|
||||||
|
|
||||||
|
- Hierarchical visualizations (treemaps)
|
||||||
|
- Logarithmic scales when appropriate.
|
119
15.conclusion/slides.md
Normal file
119
15.conclusion/slides.md
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
# Data Visualization for Public Policy
|
||||||
|
|
||||||
|
![bg fit right](mosaic.jpg)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Recap: Why Do We Create Visualizations?
|
||||||
|
|
||||||
|
- To **better understand** large, complex datasets.
|
||||||
|
- To **influence others** through compelling, evidence-based storytelling.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Influence: The Power of Visual Communication
|
||||||
|
|
||||||
|
Effective data visualizations can:
|
||||||
|
|
||||||
|
- Draw attention to critical problems or potential solutions.
|
||||||
|
- Argue for specific policy interventions.
|
||||||
|
- Connect an audience with large and potentially abstract data concepts.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Key Ideas Exercise
|
||||||
|
|
||||||
|
What are *your* golden rules of data visualization?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## (Some) Key Rules for Effective Data Visualization
|
||||||
|
|
||||||
|
### 1. Audience-Centered Design
|
||||||
|
|
||||||
|
- Take time to consider and understand your audience's background, expertise, and information needs.
|
||||||
|
- The "best" data visualization is one that the audience understands & remembers.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. **Prioritize Truthful Representation**
|
||||||
|
|
||||||
|
- Correct chart types & encodings.
|
||||||
|
- Never sacrifice **data integrity** in the name of a "better" chart.
|
||||||
|
- Avoid misleading choices: truncated axes, dual axes, etc.
|
||||||
|
- Consider the role of **uncertainity** in representing your data.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- Mackinlay's Effectiveness Hierarchy-->
|
||||||
|
|
||||||
|
![bg fit](../01.gog-altair/effectiveness.png)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. **Maximize Clarity and Comprehension**
|
||||||
|
|
||||||
|
- Simplify complex information where possible. It is OK to refer a user to a table or other source for deeper analysis.
|
||||||
|
- Remove unnecessary visual elements -- "chart junk"
|
||||||
|
- Guide the viewer's attention to key insights with **labeling**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tufte's Key Ideas Revisited
|
||||||
|
|
||||||
|
![bg fit right](../03.charts/tufte.png)
|
||||||
|
|
||||||
|
- Graphical Integrity: Above all else, show the data.
|
||||||
|
- Maximize the data-ink ratio.
|
||||||
|
- Minimize chart junk.
|
||||||
|
- Aim for high chart density, consider *small multiples*.
|
||||||
|
- Revision & Editing are essential.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. **Optimize for Accessibility**
|
||||||
|
|
||||||
|
- Use color-blind friendly palettes.
|
||||||
|
- Ensure readability for viewers with different visual capabilities. (Contrast,font size, etc.)
|
||||||
|
- Provide *alternative text descriptions* in web presentations.
|
||||||
|
- `<img src="..." alt="A graphic representing the length of rivers..." />`
|
||||||
|
- Accessibility tools: contrast/color/WCAG checkers.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5. **Build a Compelling Narrative**
|
||||||
|
|
||||||
|
- Create a clear, coherent story and use graphics to support it.
|
||||||
|
- Each chart should have a clear "why" -- don't make users wonder why you're showing them something.
|
||||||
|
- Use visual elements & conventions to guide the viewer through key arguments and order.
|
||||||
|
- Connect data to broader context and implications.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 6. **Embrace Iterative Improvement**
|
||||||
|
|
||||||
|
- Seek feedback from diverse perspectives, especially those represented in your audience.
|
||||||
|
- Be willing to revise and refine, if someone had an issue others will too.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 7. **Consider Ethical Implications**
|
||||||
|
|
||||||
|
- Represent marginalized groups respectfully: color choices, language.
|
||||||
|
- Remember that pixels often represent people, dismissing outliers/etc. should not be done without consideration.
|
||||||
|
- Be transparent about data sources and limitations.
|
||||||
|
- Use visualization as a tool for **understanding and persuasion, not manipulation**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
Effective data visualization is both an art and a science.
|
||||||
|
|
||||||
|
Understand your data and what you people to understand.
|
||||||
|
|
||||||
|
Center your audience.
|
||||||
|
|
||||||
|
Prioritize clarity & truth.
|
||||||
|
|
||||||
|
Be creative & have fun!
|
Loading…
Reference in New Issue
Block a user