Escolar Documentos
Profissional Documentos
Cultura Documentos
.c
na
hi
dc
la
sk
Visualize This
The FlowingData Guide to Design,
Visualization, and Statistics
sk
la
dc
hi
na
.c
om
Nathan Yau
sk
la
dc
hi
na
.c
om
2013
65.012.2
65.291.34
88
.
88 . /
; . . . . : , , 2013. 352 .
, ,
, , . ,
, , .
Adobe Illustrator, HTML, CSS, JavaScript, Flash-,
, R, Python SVG,
.
, : , , ,
.
65.012.2
65.291.34
.
-
, ,
,
.
sk
la
dc
hi
na
.c
om
ISBN 978-5-91657-737-2
, , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
26
30
38
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
106
107
130
142
dc
hi
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
sk
la
na
.c
om
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
om
.c
na
hi
dc
276
276
289
304
324
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
la
232
232
263
269
274
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
186
186
205
218
230
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
sk
326
327
331
337
338
2007 FlowingData,
, , .
, New York Times, CNN, Mozilla SyFy, ,
, .
-,
. Data
Points: Visualization That Means Something..
(Kim Rees) Periscopic, ,
.
.
. Journal of Information Mapping InfoVIS 2010,
, OReilly
Strata Conference, WebVisions, AIGA Shift Portland Data Visualization.
- . Periscopic
CommArts Insights, Adobe, VAST
Challenge, CommArts Web Picks, Communication Arts Interactive Annual.
Periscopic Cooper-Hewitt.
,
. ,
, .
.c
om
FlowingData,
, .
.
dc
hi
na
Wiley Publishing,
, , , .
sk
la
,
, .
sk
la
dc
hi
na
.c
om
, - .
.
FlowingData, ,
, , - .
,
, . ,
, ,
,
, .
2009 ,
Data.gov.
, ,
.
, ,
.
. Data.gov
, .
,
. UNdata.
, ,
Data.gov.uk. , -, - ,
.
na
.c
om
(application programming interfaces, API).
- .
, Twitter Flickr, API ,
, ,
. ProgrammableWeb , API,
. ,
Infochimps Factual, .
sk
la
dc
hi
, , Facebook,
Foursquare , , Twitter
.
, ,
, .
, , .
, , ,
, .
( , ). ,
. , ,
, . (Hal Varian),
Google, , ,
, . (
* , .)
.
. . ,
, , , .
(John Tukey), ,
, , ,
. ,
. ,
, , ,
.
, . 0.1, ,
.
, , ,
, , ,
. 2009 ,
10 .
. (. . 0.2).
la
dc
hi
na
.c
om
, 2009
. 2007 4,6 , 2008
5,8 , 2009 9,8 .
.
. , , - , ,
? , , ?
sk
10
* (. geek) , - . , ()
. . .
11
, 20042009 .
2004 5,5%
2000 2004 .
,
6,3% 2003 .
.
2005 5,1%
0,4
2004 .
2006 4,6%
,
10%.
2007 4,6%
2008 5,8%
2003 ., ,
.
2008 .
1
8,9 .
2009 9,8%
1983 .,
10,1%.
,
,
0,1%.
(%)
0 2 4 6 8 10+
sk
la
dc
hi
na
.c
om
. 0.2. , 2009 .
: . : FlowingData, http://flowingdata.com
12
126.
1000 , , 1990 2007 .
( 2443,5 2 443 500 . .)
1
( .)
1990
2000
3
1000 2
2007
1990
2000
9,8
8,3
2007
( .)
1000 2
1990
2000
2007
1990
2000
2007
7,3 1182,0
4,7
4,1
3,6
43,1
5,7
36,8
36,0
237,1
45,0
5,6
38,7
41,1
196,9
42,4
5,8
39,5
33,7
225,8
10,6
10,2
10,0
15,3
7,9
10,3
8,9
7,9
16,0
5,9
9,2
8,4
6,2
11,9
6,2
25,3
2,9
25,1
16,8
128,0
23,5
2,7
21,6
17,9
19,8
3,0
21,5
16,8
6,1
5,5
6,9
6,9
4,3
5,4
4,4
4,4
6,9
4,3
4,3
3,9
5,9
32,4
26,0
5,6
5,0
141,8
35,6
19,4
5,1
2,8
141,9
29,2
17,3
4,7
2,1
157,6
9,8
7,9
8,4
8,2
10,9
8,6
5,9
6,7
5,4
9,3
6,0
4,9
5,5
3,6
8,6
18,4
10,3
3,0
2,7
81,7
6,5
3,2
1,5
81,9
21,2
10,7
3,9
1,0
86,4
5,5
3,2
4,4
4,5
6,3
2,0
4,2
3,0
5,3
4,4
3,1
4,5
1,6
4,7
66,8
18,3
14,1
100,6
53,2
56,0
25,0
14,0
85,5
334,5
64,0
27,3
15,4
75,3
51,2
10,3
16,4
13,9
8,8
9,6
7,1
21,2
11,0
7,0
5,8
6,7
21,3
10,3
5,9
8,1
35,7
5,2
6,6
44,3
30,7
4,6
6,9
39,1
7,4
32,8
5,5
4,6
6,5
3,8
3,9
3,9
5,4
3,2
4,9
2,6
24,9
22,7
49,8
40,4
11,9
20,3
22,2
39,7
40,5
10,5
20,1
18,6
33,6
32,8
10,1
9,0
9,2
14,5
9,6
9,7
7,0
8,3
10,0
9,3
8,3
6,7
6,7
7,9
7,6
7,7
11,1
12,6
21,8
5,3
9,4
10,6
21,6
5,8
7,8
9,2
19,7
5,9
3,9
5,0
5,8
4,3
3,3
4,0
5,4
4,6
2,6
3,3
4,6
4,5
46,3
47,7
76,1
33,7
24,3
40,0
37,0
66,4
33,4
19,7
35,5
38,4
59,1
29,8
15,7
9,7
7,9
8,2
7,7
9,4
7,7
6,0
6,7
6,9
7,1
6,3
6,0
5,9
5,7
5,4
16,1
16,8
40,2
15,4
14,4
17,0
18,6
39,4
14,8
14,4
17,4
14,5
35,5
14,2
3,4
2,8
4,3
3,5
5,5
3,3
3,0
4,0
3,1
5,2
3,1
2,2
3,5
4,9
49,1
6,9
12,6
120,6
10,5
43,7
6,6
13,0
144,3
11,6
39,4
7,1
12,4
126,4
9,4
9,6
8,6
8,0
99,0
9,5
7,9
7,4
7,8
76,7
9,5
6,7
7,4
7,0
49,3
7,1
26,4
4,1
6,5
13,3
5,3
26,5
2,1
6,4
18,1
7,1
22,4
3,6
5,5
16,6
5,1
5,1
5,1
4,0
11,4
4,7
4,8
2,4
3,8
9,6
5,8
3,8
3,7
3,1
6,5
3,9
-
5
-
-5
58,7
13,3
154,8
51,9
4,8
50,4
14,5
162,0
65,6
4,6
45,4
11,2
130,6
68,1
4,2
7,6
8,8
8,6
7,8
7,5
6,1
8,3
8,9
8,5
7,3
5,2
5,7
6,8
7,5
6,6
23,6
7,7
57,9
34,0
2,3
25,6
9,2
62,8
36,9
2,0
25,7
8,4
55,9
37,4
1,5
3,0
4,9
3,2
5,1
3,6
3,1
5,3
3,4
4,8
3,2
3,0
4,3
2,9
4,1
2,4
98,1
33,2
25,3
84,9
8,1
88,5
15,6
26,0
73,2
8,0
70,9
26,2
29,4
71,1
6,8
9,0
10,6
8,9
7,1
8,1
7,9
4,6
7,8
6,1
8,0
6,2
7,3
7,8
5,7
6,4
51,0
24,9
15,9
40,1
3,8
49,3
12,4
16,7
37,9
3,1
37,9
18,8
14,8
35,3
3,0
4,7
7,7
5,5
3,3
3,7
4,4
3,7
5,0
3,2
3,1
3,3
5,2
4,0
2,8
2,8
55,8
7,7
68,0
178,6
19,4
42,7
7,1
88,2
196,4
24,1
31,4
6,2
65,6
179,9
22,6
15,9
11,1
13,9
10,5
11,2
10,9
9,6
15,9
9,6
11,1
7,1
7,7
10,6
7,5
8,6
16,1
2,6
32,3
94,0
8,8
14,4
2,7
33,8
85,2
9,7
14,4
2,4
29,9
79,5
8,9
4,5
3,7
6,5
5,5
5,1
3,7
3,6
6,1
4,2
4,5
3,3
3,1
4,9
3,3
3,4
6,1
6,1
71,0
46,6
13,0
38,9
4,9
62,4
40,9
15,7
36,1
4,9
5,3
58,0
41,8
13,0
32,2
4,8
10,9
11,4
9,5
7,2
7,9
10,7
10,2
9,0
7,0
8,7
6,8
10,3
8,6
7,5
6,5
7,2
5,8
9,3
2,6
27,3
28,8
9,7
17,8
3,1
5,1
30,2
27,2
9,3
17,6
2,8
2,4
29,5
28,9
9,0
16,1
2,9
4,5
4,4
5,9
5,3
3,6
6,6
8,6
4,3
4,7
5,2
3,3
5,9
3,8
3,8
4,5
5,0
2,9
5,5
om
. 1. , . 2.
, ; 1 1990 2000 . 1
. 3. . 4.
, . 2000 .
.
1996 . 5. .
la
dc
hi
na
.c
sk
. 0.3.
'
,
,
,
.
,
.
,
.
,
,
,
.
, ,
:
, -
.
, ,
(. 0.3),
.
.
.
, .
. 0.4
,
,
- . ,
13
,
, ,
,
.
.
, New
York Times Washington Post,
.
, ,
,
.
, ,
, .
-
.
,
, ,
. New York
Times, ,
,
,
.
.
New York Times
.
sk
la
dc
hi
na
.c
om
. Stamen Design,
-,
MTV Video Music Awards .
. 0.4.
Stamen - ,
: , Twitter
. 2009
(Taylor
Swift)
(Kanye West)*,
, .
,
.
.
-
.
,
-
.
.
Stamen,
.
.
(Jonathan Harris).
,
, ,
, ,
,
.
. 0.5.
la
dc
hi
na
.c
om
. , GraphJam Indexed,
,
. ,
,
sk
14
* , ,
, , . . .
15
,
. (Data Underload) ,
FlowingData, .
. . 0.5
,
. , ( ,
).
, ? , , .
, .
. ,
, , , : data-
Microsoft Excel. , , ,
. , . ,
.
,
,
, ,
. - ,
. , . ,
- , .
, ,
, ,
.
,
.
dc
hi
na
.c
om
.
.
, , ,
.
, -
, , . , ,
, , ,
.
.
sk
la
, , .
(Data Underload)
FlowingData
: http://
datafl.ws/underload
, .
, , .
(, , ). , ,
. - , . , , .
, , ,
, , .
,
,
,
.
. ,
, , ,
. , , ?
.
, ?
, , , .
, .
la
dc
hi
na
.c
om
.
, .
.
, .
sk
16
. ,
. ( ,
), .
, ,
, .
. .
, ,
, Excel. ,
, ,
.
,
. , ,
. , ,
Grape Nuts ,
.
,
, .
, R* ,
, .
, . .
, . ,
. ,
:
New York Times.
( ),
. , .
, , ,
Adobe Illustrator, : New York Times
.
, - - . ,
, . ,
' ,
.
,
.
, ,
- - .
, .
, . ,
, . ,
.
, ,
. :
.
om
, ,
,
, .
http://www.wiley.com/go/visualizethis
http://book.flowingdata.com.
dc
hi
na
.c
, . 0.6 ,
, . !
sk
la
* R ;
. . .
17
la
dc
hi
na
.c
om
sk
18
. 0.6.
sk
la
dc
hi
na
.c
om
, , ,
, ,
, .
? . ,
-. , , -,
.
, - ,
, ,
.
1.
. - ,
, , , ,
. ,
, .
, , . :
. - .
. , , . ,
, ,
. . .
, ,
, .
, , .
, ,
, .
. ,
, , .
. .
, , ,
.
.
, , ,
. .
, ,
, , , , ?
, .
. ,
5
, .
, .
la
dc
hi
na
.c
om
sk
20
New York
Times. ,
. .
, ,
, .
, ,
New York Times ,
. ,
.
.
New York Times.
, . ?
, .
;
; Times , , ,
. . .
sk
la
dc
hi
na
.c
om
. 1.1.
21
22
1.
New
York Times
http://
datafl.ws/nytimes.
.
. ,
; , .
,
.
sk
la
dc
hi
na
.c
om
,
,
(Geoff McGhee
"Journalism in the
Age of Data").
.
. 1.2. ( , )
23
, , .
.
, , ,
, .
, , , , ,
. -
, - .
!
. , (Golan
Levin, The Dumpster). ,
. Sumedicina (Kim Asendorf),
,
, , .
(Andreas Nicolas Fischer),
.
,
, . , ,
.
, .
. ,
.
-
.
- ,
, .
.c
om
Facebook ,
- OkCupid
, , ,
(. 1.3). ,
.
- .
- .
sk
la
dc
hi
na
, Facebook , , OkCupid
, , ,
5 .
-
http://wefeelfine.
org.
, ,
FlowingData:
http://datafl.ws/
art.
24
1.
OkTrends,
- ,
: http://blog.
okcupid.com.
. 1.3. OkCupid
sk
la
dc
hi
na
.c
om
, ,
. ,
- .
, ,
, ?
, ,
, (Hans Rosling),
Gapminder.
(. 1.4), ,
.
, , .
. 1.4. Gapminder
hi
na
.c
om
.
.
.
? ,
. .
, ?! . ,
, .
, .
, .
.
sk
la
dc
Gapminder ,
, . .
, . .
25
26
1.
, .
. , . ,
.
,
,
http://
datafl.ws/hans.
' ,
, :
. ?
? ? - ?
.
, , .
- . .
, , ,
.
, . . ?
, , , ,
, : .
hi
na
.c
om
.
,
, (. 1.5).
.
. .
.
.
,
.
sk
la
dc
. 1.5.
,
,
.
. , ,
,
. , ,
, ,
? ? ? ,
, ? , ?
, ?
, - ,
, .
' , .
, , ,
.
' -.
. ,
. , ,
, .
sk
la
dc
hi
na
.c
om
,
, .
, . 1.6, ,
. .
. 1.6. FlowingData
27
1.
, (. 1.7),
, , ,
.
. 1.7. FlowingData
, .
. , , ,
( ).
la
dc
hi
na
.c
om
, , .
,
. ?
?
? .
, , , ,
.
sk
28
-
, ? ,
29
-
, ,
. , , .
, , .
.
, , ,
.
,
,
.
,
. 1.8.
-
,
UNdata.
http://
datafl.ws/12i.
om
. 1.8.
la
dc
hi
na
.c
,
100 . ,
- ( 0 95 100 ) , .
sk
, ,
, .
1.
,
, 95
100 .
.
, ,
, ,
. .
, ,
, . : , , , .
,
. , ,
, , .
.
.
.
, ,
.
, - ,
. , - ,
, . ,
. , -
, .
, , ,
. , :
90 , ,
, 1020 ? ?
la
dc
hi
na
.c
om
, .
,
. ,
.
sk
30
, .
, - data-,
31
. ,
, , , ,
, .
.
; , ;
. .
, ?
(William Cleveland) (Robert McGill)
. , .
, ,
, .
, , ,
, .
, , , - data-
, , data-
. ,
,
. .
,
.
, .
, , , ,
. . ,
, , ,
.
, , ?
, .
. , , . 1.9,
Firefox .
sk
la
dc
hi
na
.c
om
, ,
? ? ,
? , ,
- . , , . 1.10,
. :
,
.
,
,
Graphical Methods
for Analyzing Data
(
).
1.
,
,
. 1.11.
,
,
.
la
dc
hi
na
.c
om
. 1.9. Firefox ,
sk
32
. 1.10. Firefox
sk
la
dc
hi
na
.c
om
. 1.11.
33
1.
, , ,
,
. , , , , -
, ,
.
, .
, ,
.
, .
.
. ,
, . ,
, 100
? , , ,
.
. 1.12.
la
dc
hi
na
.c
om
, ,
FlowingData. , .
1.12, .
sk
34
60 .
. 1.13.
.c
om
la
dc
hi
na
* ,
. . .
sk
. 1.13. ,
FlowingData
35
1.
, ,
. , .
, - .
.
, .
. .
.
' .
, 100 (. 1.14).
, , .
, , , ,
, .
la
dc
hi
na
.c
om
. 1.14.
sk
36
,
, ,
. ,
. . ,
, .
,
.
. 1.15 , .
.
. 1.15.
. 1.16 , .
, .
. 1.16.
om
, .
, .
hi
na
.c
sk
la
dc
,
. ?
, ,
37
1.
- . . ,
.
, ? ,
, . ,
' ,
.
. ,
, , , ,
.
, . , ,
, . , ,
, , .
, ,
.
? data, - .
, . ?
, ,
. ,
?
,
.
la
dc
hi
na
.c
om
, ,
, , .
, ,
. ,
.
sk
38
, . ,
. , .
.
, ,
.
,
. .
, ,
. ? ?
.
, ,
. ,
- Excel,
- XML. . , ,
-, .
sk
la
dc
hi
na
.c
om
,
.
2.
. , ,
. ,
- .
,
, -
. -
. .
,
.
, , , ,
, ,
. , , - ? ,
, .
, , Excel -
( ,
), -
.
. ,
, ,
.
. , ,
. ? ?
? , , 1970 ,
, .
la
dc
hi
na
.c
om
sk
40
, , ,
, , . :
,
. .
- ? Google.
, , ,
, , , ,
, .
Google, Wolfram|Alpha,
.
, ,
, .
.
, ,
. ,
,
. , .
,
, New York Times.
- . ,
.
, , , .
, .
. , - ,
,
.
, ,
, .
. ,
. ,
.
.
sk
la
dc
hi
na
.c
om
41
Wolfram|Alpha
http://
wolframalpha.com.
2.
-
(http://www.stat.ucla.edu/data) ,
.
,
. ,
.
,
(API). , ,
, Twitter, .
.
Freebase (http://www.freebase.com) ,
,
. ,
.
back-end* .
Infochimps (http://infochimps.org)
. API.
Numbrary (http://numbrary.com) - ,
.
AggData (http://aggdata.com) ,
.
Amazon Public Data Sets (http://aws.amazon.com/publicdatasets)
,
.
Wikipedia (http://wikipedia.org) ,
, HTML-.
la
dc
hi
na
.c
om
sk
42
, .
, .
* Back-end ,
( SQL-), . . .
, ?
. ,
(-).
TIGER (http://www.census.gov/geo/www/tiger)
, , ,
, , , .
OpenStreetMap (http://www.openstreetmap.org) ,
.
Geocommons (http://www.geocommons.com) ,
.
Flickr Shapefiles (http://www.flickr.com/services/api)
, Flickr.
,
. Sports Illustrated
, ,
.
Basketball Reference (http://www.basketball-reference.com)
.
Baseball DataBank (http://baseball-databank.org) ,
.
DatabaseFootball (http://www.databasefootball.com)
, .
na
.c
om
, ,
. , , - ,
. ,
.
sk
la
dc
hi
43
2.
la
dc
hi
na
.c
om
, , .
, HTML-
. ?
sk
44
,
.
, , , .
, ? .
, . ,
. ( ) .
,
.
:
.
, ,
,
. , ,
, . , .
, .
, Weather Underground .
: .
, , .
Weather Underground BUF .
(. 2.1).
45
,
,
Needlebase
PDF-
Able2Extract.
.
sk
la
dc
hi
na
.c
om
wunderground.com.
. 2.1.
Weather Underground
46
2.
,
.
, ,
(History & Almanac), . 2.2.
, .
8 2013
(View). ,
(. 2.3).
, -, , ,
, .
, .
2013 0 C.
. 2.2.
.
2012 ? ,
. 365
.
? ?
- -.
Python
Beautiful Soup,
(Leonard Richardson).
sk
la
dc
hi
na
.c
om
.
,
.
,
.
,
, .
,
. ? .
. 2.3.
-, ,
. Mac OS X,
Python .
, Terminal :
python (. 2.4).
47
Python
http://python.org.
,
.
Windows, ,
, Python .
Beautiful Soup, ,
- . Beautiful Soup Python ( .py)
, . Python,
Beautiful Soup .
Python Beautiful Soup,
get-weather-data.py.
.
Beautiful Soup,
http://
www.crummy.
com/software/
, , ,
. URL
1 2010 :
www.wunderground.com/history/airport/KBUF/2010/10/1/DailyHistory.html?req_city=NA&req_
.c
om
state=NA&req_statename=NA
sk
la
dc
hi
na
, .html, -
, .
. :
www.wunderground.com/history/airport/KBUF/2010/10/1/DailyHistory.html
BeautifulSoup. ,
Python.
2.
URL /2010/10/1. , :
1 2009 ,
2009 . URL :
www.wunderground.com/history/airport/KBUF/2009/1/1/DailyHistory.html
- , .
: /2009/1/1/. .
2 2009 ?
, URL :
www.wunderground.com/history/airport/KBUF/2009/1/2/DailyHistory.html
URL -, 2
2009 . , , , ,
URL Weather Underground.
.
- Python, urllib2,
, :
import urllib2
1 Python,
urlopen.
page = urllib2.urlopen("www.wunderground.com/history/airport/KBUF/2009/1/1/DailyHistory.
html")
HTML-, URL
.
HTML. Beautiful Soup .
urllib2 Beautiful Soup :
from BeautifulSoup import BeautifulSoup
Beautiful Soup, ,
.
, , HTML,
, ,
, .
, , :
la
dc
hi
na
.c
om
soup = BeautifulSoup(page)
sk
48
images = soup.findAll('img')
Weather Underground,
HTML- <img />. ?
:
49
first_image = images[0]
? . src
<img />, :
src = first_image['src']
, . - :
, -, 1 2009 .
26 F ( 3 C). ,
, ,
. , findAll(),
HTML.
sk
la
dc
hi
na
.c
om
-. Firefox, ,
(View) (Page Source).
HTML- , . 2.5.
Beautiful Soup
, -
,
Beautiful
Soup,
.
. 2.5. HTML-
Weather
Underground
2.
, ,
, . 26 (3, ).
, .
<span> nobr. .
nobr.
nobrs = soup.findAll(attrs={"class":"nobr"})
, nobr.
, :
print nobrs[5]
! HTML- -.
2009
. URL.
www.wunderground.com/history/airport/KBUF/2009/1/1/DailyHistory.html
, , ,
? 1 2009 .
2 2009 , URL, ,
. 2009 ,
( 1- 12-), .
. get-weather-data.py.
import urllib2
from BeautifulSoup import BeautifulSoup
# Create/open afile called wunder.txt (which will be acomma-delimited file)
f= open('wunder-data.txt', 'w')
# Iterate through months and day
for min range(1, 13):
la
dc
hi
na
.c
om
sk
50
,
, urllib2 BeautifulSoup.
import urllib2
from BeautifulSoup import BeautifulSoup
hi
na
.c
om
wunder-data-txt ,
open(). , , ,
, .
la
dc
sk
f= open('wunder-data.txt', 'w')
51
52
2.
, for,
. , , m.
, .
d.
# Iterate through months and day
for min range(1, 13):
for din range(1, 32):
-
,
,
Python, http://
docs.python.org/
reference/compound_
stmts.html
.
Weather Underground.
URL. ,
. , urllib2,
Beautiful Soup,
, nobr.
# Open wunderground.com url
timestamp = '2009' + str(m) + str(d)
print "Getting data for " + timestamp
url = "http://www.wunderground.com/history/airport/KBUF/2009/" +
page = urllib2.urlopen(url)
sk
la
dc
hi
na
.c
om
,
. . ,
.
# Format day for timestamp
if len(str(d)) < 2:
dStamp = '0' + str(d)
else:
dStamp = str(d)
# Build timestamp
timestamp = '2009' + mStamp + dStamp
, 'wunder-data.txt' write()
' .
# Write timestamp and temperature to file
f.write(timestamp + ',' + dayTemp + '\n')
close().
# Done getting data! Close file.
f.close()
,
:
sk
la
dc
hi
na
.c
om
$ python get-weather-data.py
. 2.6.
,
. ,
365
2009 .
,
wunder-data.txt.
,
.
,
.
,
. 2.6.
53
2.
Weather Underground,
. ,
, :
1. .
2. .
3. .
, ,
. URL, -.
2009 , URL
. nobr
. URL , ,
URL , , .
, ,
. , URL
.
, . ,
,
. Beautiful
Soup, * XML HTML Python .
, , , .
, - .
, .
, .
, -,
JavaScript, .
la
dc
hi
na
.c
om
sk
54
.
, .
, .
, -
* ( )
;
. . .
,
, .
,
, - .
,
. ,
, -, ,
, , .
,
. , ,
Excel ( ,
, , ).
.
,
, . ,
.
, . . ,
. -
, - ,
.
, , -,
- , .
.c
om
, .
,
. - ,
,
.
. , ,
, ,
.
sk
la
dc
hi
na
, ,
, , ,
, ,
.
55
56
2.
Excel. ,
.
,
. , .
, , .
, ,
-
: , JavaScript
.
. ,
, -.
,
. - .
, ,
, , ,
.
-
, Excel Google Documents.
. Excel ,
, - .
sk
la
dc
hi
na
.c
om
JSON,
http://json.org.
,
,
,
,
- .
JAVASCRIPT (JSON)
, -API.
, , ,
, .
JavaScript, . JSON
, .
JSON .
JSON , (CVS),
.
, ,
JSON .
, .
(XML)
XML.
API. XML ,
,
. , RSS (Really Simple Syndication) ,
FlowingData, , XML- (. 2.7).
na
.c
om
RSS . <item></item>,
, , , - .
sk
la
dc
hi
XML , ,
Beautiful Soup Python.
XML, CSV JSON.
57
58
2.
.
, ,
, , . ,
.
GOOGLE REFINE
Google Refine Freebase Gridworks. Gridworks
Freebase .
Freebase Google, . Google
Refine
Gridworks 2.0,
(.
. 2.8) '
.
sk
la
dc
hi
na
.c
om
( ),
,
-
Google.
.
Refine -
,
,
.
Refine,
.
.
.
, - .
Refine ,
. ,
. ,
. Refine
. ,
(Undo).
,
, , Freebase,
.
Google Refine ,
. , ,
.
59
Refine http://
code.google.com/p/
google-refine
,
,
.
hi
na
.c
om
sk
la
dc
60
2.
GitHub
at https://github.
com/shancarter/MrData-Converter, -
sk
la
dc
hi
na
.c
om
Excel
,
.
, Excel
, , .
XML, JSON .
61
Mr. People
http://people.
ericson.net
Ruby
GitHub,
.
http://github.
com/mericson/
people.
om
sk
la
dc
hi
na
.c
,
,
. , . ,
, (
), , .
2.
, , ,
, ,
.
, .
? ,
.
. ,
.
, ,
.
:
Python, , , ,
. , .
( Python,
Python.)
wunder-data.txt, 2009 .
:
20090101,26
20090102,34
20090103,27
20090104,34
20090105,34
20090106,31
20090107,35
20090108,30
20090109,25
la
dc
hi
na
.c
om
sk
62
CSV-, , , , XML, :
<weather_data>
<observation>
<date>20090101</date>
<max_temperature>26</max_temperature>
</observation>
<observation>
<date>20090102</date>
<max_temperature>34</max_temperature>
</observation>
<observation>
<date>20090103</date>
<max_temperature>27</max_temperature>
</observation>
<observation>
<date>20090104</date>
<max_temperature>34</max_temperature>
</observation>
</weather_data>
<observation>, <date>
<max_temperature>.
CSV XML, ,
:
import csv
reader = csv.reader(open('wunder-data.txt', 'r'), delimiter=",")
print '<weather_data>'
for row in reader:
print '<observation>'
print '<date>' + row[0] + '</date>'
print '<max_temperature>' + row[1] + '</max_temperature>'
print '</observation>
print '</weather_data>'
, . ,
wunder-data.txt, CSV-.
import csv
hi
na
.c
om
wunder-data.txt, open(),
csv.reader().
sk
la
dc
63
2.
, .
, '\t'.
3 XML- .
print '<weather_data>'
,
, . CSV
(observation) XML.
for row in reader:
print '<observation>'
print '<date>' + row[0] + '</date>'
print '<max_temperature>' + row[1] + '</max_temperature>'
print '</observation>
: .
XML :
print '</weather_data>'
.
, .
XML CSV, .
, ,
XML- .
from BeautifulSoup import BeautifulStoneSoup
f= open('wunder-data.xml', 'r')
xml = f.read()
soup = BeautifulStoneSoup(xml)
observations = soup.findAll('observation')
for oin observations:
la
dc
hi
na
.c
om
sk
64
-, , , . CSV-
BeautifulStoneSoup BeautifulSoup. ,
BeautifulSoup HTML- Weather Underground. BeautifulStoneSoup
XML.
XML- , open(),
xml. .
xml- BeautifulStoneSoup <observation> XML. findAll() , , ,
CSV XML,
.
, :
20090101,26
20090102,34
20090103,27
20090104,34
, CSV
JSON.
import csv
reader = csv.reader(open('wunder-data.txt', 'r'), delimiter=,)
print "{ observations: ["
rows_so_far = 0
for row in reader:
rows_so_far += 1
print '{'
print '"date": ' + '"' + row[0] + '", '
print '"temperature": ' + row[1]
if rows_so_far < 365:
print " },"
else:
print " }"
print "] }"
, , .
, . ,
JSON. :
{
"observations": [
om
.c
"date": "20090101",
hi
na
"temperature": 26
sk
la
dc
},
{
"date": "20090102",
65
2.
"temperature": 34
},
]
}
, .
.
CSV- JSON,
if-else for print. ,
. ,
. . JSON.
.
, ,
, 1,
, 0, .
, .
.
. ,
. ,
. .
wunder-data.txt ,
, . , 0 ,
, 1
.
import csv
reader = csv.reader(open('wunder-data.txt', 'r'), delimiter=",")
for row in reader:
if int(row[1]) <= 32:
is_freezing = '1'
else:
la
dc
hi
na
.c
om
is_freezing = '0'
sk
66
, CSV- Python,
. .
, , , ,
. :
, , .
,
. ,
. ,
. ,
( ) . ,
, , .
. ,
.
. . Python,
Ruby, Perl, PHP.
, .
, ,
.
. ,
(drag and drop), ,
. ,
, , .
sk
la
dc
hi
na
.c
om
, . .
67
om
.c
na
hi
dc
la
sk
, ,
. . ,
, :
?
, .
(drag and drop).
, .
, ,
.
.
sk
la
dc
hi
na
.c
om
' ,
, , , ,
, ,
' .
,
3.
, .
CSV- .
, , , , -
.
,
. , Microsoft Excel Google Documents,
,
.
MICROSOFT EXCEL
la
dc
hi
na
.c
om
. ,
(. 3.1).
sk
70
,
. (. 3.2), ,
, .
Excel , ,
. , , Excel,
.
Excel, ,
, ,
.
, , Microsoft Excel,
.
, . ,
.
sk
la
dc
hi
na
.c
om
, , , .
, ( ),
, , .
, , .
-, , , .
71
3.
Excel
, .
, .
.
GOOGLE SPREADSHEETS
Google Spreadsheets , , Microsoft Excel
, , . 3.3.
la
dc
hi
na
.c
om
sk
72
, . 3.4.
Google Spreadsheets Microsoft Excel. -,
, Google,
, -.
.
73
.
Google Spreadsheets
,
. 3.5.
,
.
'
,
,
( , ).
,
. 3.6, , ,
, Google
Finance.
. 3.4.
Google
Spreadsheets
. 3.5. Google
Google
Docs http://
docs.google.com
sk
la
dc
hi
na
.c
om
3.
MANY EYES
Many Eyes
IBM. -,
. Many Eyes
,
*. , ( )
,
, - , .
Many Eyes
, .
, (. 3.7) (. 3.8).
, , Many Eyes ,
,
. , , .
, , , ,
. . 3.9
(right) .
la
dc
hi
na
.c
om
sk
74
na
.c
om
sk
la
dc
hi
,
. . 3.10 ,
Wordle. , .
75
76
3.
. 3.10.
http://many-eyes.
com .
, Many Eyes ,
.
(, , )
. . -,
Java-, ,
Java. ( , ,
, ,
.)
, , ,
, , .
Many Eyes , ,
, .
sk
la
dc
hi
na
.c
om
TABLEAU SOFTWARE
Tableau Software, , Windows, ,
.
. ,
. - .
Tableau Software ,
. Excel,
' ,
.
, ,
77
. . ,
, ,
, , .
Tableau Tableau Public ,
-
. Tableau,
. ,
, Many Eyes, ,
.
Tableau, ,
-.
999 1999 (
).
YOUR.FLOWINGDATA
Tableau Software
http://
tableausoftware.com.
: your.flowingdata (YFD). -,
Twitter,
.
. ,
, ,
, .
YFD ,
,
.
.c
om
,
.
(drag and drop), ,
. , , ,
, .
, , .
sk
la
dc
hi
na
: ,
, . ,
( ), - ,
, ,
Twitter http:// your.
flowingdata.com.
3.
.
, . ,
,
, .
,
.
. ,
. .
, ' ,
, .
, .
:
, ,
.
.
- ,
, ,
. , , , .
.
. .
,
. , .
, ,
.
la
dc
hi
na
.c
om
,
. , . ,
, . ,
, ,
.
sk
78
, . !
. ,
. - ,
,
.
, ,
.
. ,
. .
.
, .
, .
, ,
.
PYTHON
, Python.
Python
.
.
, Python
,
.
,
,
. 3.11.
sk
la
dc
hi
na
.c
om
,
- .
Python
.
.
.
,
,
.
. 3.11. , Python
79
80
3.
PYTHON:
Python (http://python.org);
NumPy SciPy (http://numpy.scipy.org)
.
PHP
PHP , ,
. , . ,
. PHP . , , ,
- ,
.
. 3.12. ,
PHP
PHP
CD, .
.
PHP- ,
.
Sparkline
Graphing Library, , ,
,
. 3.12.
PHP , MySQL.
, CSV-,
.
PHP:
PHP (http://php.net);
sk
la
dc
hi
na
.c
om
PROCESSING
Processing ,
, data-.
, .
81
Processing ,
. ,
.
Processing : .
,
. , ,
, , Processing ,
.
Processing ,
.
.
Processing , ,
Java-,
, , Java (
- ). , .
JavaScript- Processing, .
. ,
, - .
PROCESSING:
Processing (http://processing.org).
FLASH ACTIONSCRIPT
,
, New York Times,
Flash ActionScript. Flash,
(drag and drop),
ActionScript
. ActionScript
Flash. Flash-.
sk
la
dc
hi
na
.c
om
, Walmart, . 3.13,
ActionScript. Modest Maps
.
BSD, , .
ActionScript
, Flash Flash
Builder ,
.
3.
, . 3.14,
ActionScript.
. Flare
ActionScript,
.
, Flash
ActionScript . Flash- ,
Flash Player .
la
dc
hi
na
.c
om
. ,
. Processing, Flash
.
Flash-, ,
-, Flash
.
sk
82
- ,
.
. 3.14.
( ActionScript)
FLASH ACTIONSCRIPT:
sk
la
dc
hi
na
.c
om
83
3.
Protovis,
(streamgraph*), , . 3.16.
la
dc
hi
na
.c
om
. 3.15. , Protovis
sk
84
* (streamgraph) ,
, (
). 2008 .
GitHub: https://github.com/leebyron/streamgraph_generator. . .
. 3.16. , Protovis
. Flash
, JavaScript . JavaScript
, jQuery MooTools.
, ,
,
. ,
.
. , Sparkline jQuery,
, . 3.17.
PHP, . -,
, .
, , .
.c
om
,
PHP. , , .
, .
sk
la
dc
hi
na
.
-.
. 3.18 ,
your.flowingdata.
85
3.
la
dc
hi
na
.c
om
. 3.18.
your.flowingdata,
sk
86
, , .
, -.
,
Internet Explorer 6. ,
Firefox Google Chrome.
. , 5% FlowingData
Internet Explorer,
.
, :
JavaScript , Flash ActionScript.
Flash. ,
.
R
FlowingData, , , , R
.
.
R. ,
S-plus SAS,
.
R
,
. HTML
-, Flash
,
. R
( )
, , ,
.
sk
la
dc
hi
na
.c
om
R-,
. R,
, .
, Portfolio,
(. 3.19).
. 3.19. , R Portfolio
87
88
3.
.
'
(. 3.20).
,
,
' ,
,
.
R,
,
(. 3.21),
.
, R
,
,
. ,
R, ,
,
.
R,
, ,
,
.
sk
la
dc
hi
na
.c
om
,
.
( ,
)
. 3.20. , R
R. ,
, , .
, R.
R , , ,
, .
89
, , , -,
, .
R .
-,
R,
,
.
r-project, R.
.
. 3.21. R: http://www.r-project.org
-, R?
? . R ,
-. , .
,
,
, JavaScript.
dc
hi
na
.c
om
R . ,
R , , ,
Flash Processing.
sk
la
, , , , , .
3.19 3.20, . -
3.
. R ,
, :
R, , Adobe Illustrator,
. R ,
.
:
R (http://www.r-project.org).
. ,
, , .
, , Excel Tableau, , , .
, ,
.
-, , - .
la
dc
hi
na
.c
om
.
. ,
. ,
.
- , ,
, , ,
.
sk
90
, ,
, ,
,
.
, .
, . , ,
.
-. , ,
. . (
, .) ,
, . ,
,
, ? ,
, .
.
, -,
. -,
, ,
. ,
. ?
- .
. , .
.
, ,
,
. , , ,
. ,
: .
.
, , , .
, , ,
, ,
. , ,
. , ,
, .
, ,
, , ,
.
hi
na
.c
om
, . 3.19 R.
FlowingData 100 .
. ,
, , .
, , ,
, .
sk
la
dc
. 3.22 . ,
; , ,
; ,
91
3.
.
, .
la
dc
hi
na
.c
om
sk
92
, ,
Adobe Illustrator.
,
, , , R,
, .
,
. , ,
. ,
.
, ,
(drag and
drop). - ,
,
.
, ,
, ,
. , .
( ) .
ADOBE ILLUSTRATOR
, ,
, ,
Adobe Illustrator. . ,
New York Times, , Illustrator.
Illustrator ,
, . ,
.
,
, -.
,
- . Adobe Illustrator .
Graph ().
, ,
' .
, .
dc
hi
na
.c
om
, Illustrator ,
.
, ,
, ( ).
.
sk
la
93
94
3.
, , (
, , ).
, Illustrator
.
Illustrator Adobe 599
, (
). , Adobe
, , , . (
, - , .)
PHP ADOBE ILLUSTRATOR:
INKSCAPE
sk
la
dc
hi
na
.c
om
Adobe Illustrator,
,
Inkscape.
.
Inkscape (http://inkscape.org);
Inkscape (http://inkscapetutorials.wordpress.com).
Illustrator Inkscape, , ,
.
. , Corel Draw.
Windows , Illustrator.
, , .
, Raven Aviary Lineform,
. , Illustrator Inkscape
, .
,
() .
Illustrator Inkscape : .
.
,
, Illustrator Inkscape.
,
, ,
.
, ,
, .
, , ,
.
, .
,
, .
,
. ,
, .
hi
na
.c
om
.
. , MapQuest,
?
- Yahoo .
sk
la
dc
, Google (. 3.22).
, ,
95
3.
,
. .
,
.
la
dc
hi
na
.c
om
sk
96
, . , ,
( ). , ,
. , ,
, .
.
,
.
, - -
. '
. , .
GOOGLE, YAHOO MICROSOFT
, ,
. ,
API , Google, Yahoo Microsoft.
sk
la
dc
hi
na
.c
om
,
, Google. ,
. Google API JavaScript, Flash,
,
. ,
, , , ,
, .
.
97
3.
ARCGIS
- ,
. , ,
, . ArcGIS,
.
,
, .
, .
, ,
ArcGIS. .
, ArcGIS.
ArcGIS ,
.
:
. - ,
.
la
dc
hi
na
.c
om
ARCGIS:
sk
98
MODEST MAPS
Modest Maps , , . 3.13.
Walmart. Modest Maps Flash- ActionScript , Python.
, -
, ,
.
hi
na
.c
om
sk
la
dc
99
3.
la
dc
hi
na
.c
om
. 3.26. , , Polymaps
sk
100
JavaScript, (
) . Polymaps
(SVG), Internet
Explorer, . , 5%
FlowingData -, ,
.
JavaScript ,
. ,
Flash. .
POLYMAPS:
Polymaps (http://polymaps.org).
sk
la
dc
hi
na
.c
om
R ,
, R .
. 3.27 , R.
, Adobe Illustrator.
. 3.27. ,
R
101
102
3.
, R, , ,
, -
R.
, .
R :
(http://cran.r-project.org/web/views/Spatial.html)
R ;
(A Practical Guide to
Geostatistical Mapping) http://spatial-analyst.net/book/download
, R
.
sk
la
dc
hi
na
.c
om
- ,
.
, , .
ArcGIS. . Many
Eyes GeoCommons.
.
GeoCommons
. GeoCommons
, - KML.
. 3.28. , Indiemapper
,
Indiemapper
SpatialKey. SpatialKey
,
Indiemapper
. .
3.28 ,
Indiemapper
.
103
. -
. , .
ArcGIS, , , , ,
, .
R , ,
, . -,
Modest Maps Polymaps,
. ,
, 8.
,
,
.
. ,
,
,
,
.
? ,
R Illustrator.
-?
JavaScript
Flash.
sk
la
dc
hi
na
.c
om
FlowingData
, ,
.
1000 .
. 3.29.
. 3.29. FlowingData
3.
, FlowingData.
Excel, R.
. 200
. ,
.
.
.
, .
, , ,
. ,
,
, .
, ,
,
. .
, ,
.
la
dc
hi
na
.c
om
: .
. . ,
, , .
,
, , , . ,
, ,
.
sk
104
! .
,
, ,
. ,
.
sk
la
dc
hi
na
.c
om
' .
, , , ,
.
, ,
. R Adobe Illustrator
, .
4.
. , ,
, .
, . ,
. , .
' , ,
. ?
- ? , ,
, . , .
, ,
, ,
, .
la
dc
hi
na
.c
om
, ,
(. 4.1).
.
sk
106
. 4.1.
,
. , ,
,
. 4.2? ?
,
. - , ,
? , ?
- ? , ?
,
. , : ,
. ,
, .
na
.c
om
sk
la
dc
hi
. ,
, ,
.
107
108
4.
, . , ,
, . , .
, . ,
, .
, .
,
,
, R Illustrator.
,
. . ,
. :
.
. 4.3 .
( ,
,
X) ,
,
.
(
2011 ),
-
.
, ,
.
sk
la
dc
hi
na
.c
om
.
. ,
, .
. 4.3.
109
(, , Y) .
. 4.3
. . , ,
, .
. . ,
. , . ,
, ,
.
, , . 4.4.
1. ,
,
, .
. :
.
.
,
.
.
. 4.4. ,
om
, ,
, , .
- . !
sk
la
dc
hi
na
.c
. 4.5 ,
. :
R, Illustrator.
110
4.
. 4.5. , -
CSV
http://datasets.
flowingdata.com/
hot-dog-contestwinners.csv. -
sk
la
dc
hi
na
.c
om
,
(Nathans Hot
Dog Eating Contest)
,
.
,
, - ,
4 . .
, ESPN.
1990- 15 10 20 - (HDB).
2001 (Takeru Kobayashi), ,
, 50 HDB. ,
- . .
1916 , -
1980- . HTML-
(Year), (Winner) - (Dogs
eaten), (Country), . CSV, http://datasets.flowingdata.com/hot-dog-contest-winners.csv.
:
"Year","Winner","Dogs eaten","Country","New record"
1980,"Paul Siederman & Joe Baldini",9.1,"United States",0
1981,"Thomas DeBerry ",11,"United States",0
1982,"Steven Abrams ",11,"United States",0
1983,"Luis Llamas ",19.5,"Mexico",1
1984,"Birgit Felden ",9.5,"Germany",0
R, read.csv().
, URL.
R :
hotdogs <read.csv("http://datasets.flowingdata.com/hot-dog-contest-winners.csv",
sep=",", header=TRUE)
,
R , .
setwd().
, , , -
, , .
R. read.csv() . .
. URL.
, sep, , .
-, .
, ,
, \t.
header R, ,
. , ,
- , ,
. , , , : (New
record). , 1,
0. .
, R hotdogs. ,
, .
, hotdogs:
Year
Winner
Dogs.eaten
Country
New.record
1980
9.10
United States
1981
Thomas DeBerry
11.00
United States
1982
Steven Abrams
11.00
United States
1983
Luis Llamas
19.50
1984
Birgit Felden
9.50
Mexico
Germany
sk
la
dc
hi
na
.c
om
111
4.
, R,
barplot().
barplot(hotdogs$Dogs.eaten)
R
Dogs.eaten. , . 4.6.
. 4.6. , barplot() R,
-
, . names.arg barplot(),
. .
barplot(hotdogs$Dogs.eaten, names.arg=hotdogs$Year)
la
dc
hi
na
.c
om
, . 4.7: .
sk
112
. 4.7.
. ,
, . 4.8.
col (
R) , #821122.
NA ( , ). ,
X Y: Year () Hot dogs and buns (HDB) eaten (
- (HDB)) .
. 4.8.
sk
la
dc
hi
na
.c
om
- . barplot()
, , . , ,
. (#821122), -, . 4.9.
. 4.9.
113
114
4.
, ( R) .
, .
, .
. , :
fill_colors <- c()
for ( iin 1:length(hotdogs$Country)) {
if (hotdogs$Country[i] == "United States") {
fill_colors <- c(fill_colors, "#821122")
} else {
fill_colors <- c(fill_colors, "#cccccc")
}
}
fill_colors. R
c().
(),
0
0-index.
R , 1.
for. R
i 1 hotdogs. ,
- , Country, hotdogs, .
length() hotdogs, ,
5, , 31.
1980 2010 , , 31 ,
i .
, , i 1, ,
( 1980 ) . ,
fill_colors #821122 (
). #cccccc (-).
1980 ,
. 30 . ,
, R fill_colors. , .
fill_colors col barplot() :
barplot(hotdogs$Dogs.eaten, names.arg=hotdogs$Year, col=fill_colors,
sk
la
dc
hi
na
.c
om
, , , col
fill_colors, "red".
(. . 4.5) , , ,
, , .
. .
New.record,
115
1, -, .
R:
fill_colors <- c()
for ( iin 1:length(hotdogs$New.record)) {
if (hotdogs$New.record[i] == 1) {
fill_colors <- c(fill_colors, "#821122")
} else {
fill_colors <- c(fill_colors, "#cccccc")
}
}
barplot(hotdogs$Dogs.eaten, names.arg=hotdogs$Year, col=fill_colors,
border=NA, xlab="Year", ylab="Hot dogs and buns (HDB) eaten")
, , if .
, . 4.10.
. 4.10. ,
, . 4.9
barplot(),
.
om
na
.c
dc
hi
eaten")
sk
la
, . 4.11. ,
, , .
.
,
.
4.
. 4.11.
! R.
File . PDF.
.
R, . , barplot(), ?barplot. , .
, .
ILLUSTRATOR
la
dc
hi
na
.c
om
. ,
, .
, -
.
sk
116
. ,
. 4.11 . .
? ,
- . ,
? - . , ?
? -,
? ?
, , ,
. ,
, . .
Illustrator
. , ,
, ,
.
Illustrator,
, ,
, .
. PDF-
Illustrator.
, , ,
, , . ,
, (. 4.12).
. ,
Window () Tools ().
Selection (). ,
.
. (. 4.13). Illustrator
(clipping mask).
, ,
Delete .
,
Direct Selection ( ),
.
,
:
?
Illustrator,
Inkscape
.
,
Inkscape
Illustrator.
om
. . ,
Selection (), , ,
.
Font (), . 4.14.
Type (). . 4.15
Georgia Regular.
sk
la
dc
hi
na
.c
117
. 4.12.
Illustrator
118
4.
om
. 4.13. PDF-
sk
la
dc
hi
na
.c
. 4.14. Illustrator
. 4.16. Transform ()
, ( , ) ,
, .
- , .
119
- (HDB), . -
. -
. 4.17.
,
. 4.5. - .
, ,
, -.
, .
. ,
.
Selection (),
. ,
. , Direct Selection (
). , Delete,
.
,
. Pen (),
. ,
Stroke (). 0,3 pt ,
Dashed Line ( ) .
. 4.17.
, ,
( , ), ,
. Shift,
. . 30
.
, . Mac,
Option, PC Alt. ,
. Command + D Mac Control + D PC.
, , ,
. Command/Control + D ,
.
na
.c
om
, . ,
.
.
Align () Horizontal Distribute Center ( ),
. 4.18.
sk
la
dc
hi
.
, (Selection)
, .
,
.
,
.
120
4.
,
.
. 4.18. Align ()
Illustrator
,
(Direct Selection)
. ,
. , ?
: , Select Same Fill Color
( ).
, :
. ,
, Color (). ,
,
. 4.19.
sk
la
dc
hi
na
.c
om
. 4.19.
: .
, .
, ,
. 4.5.
, , ,
. , R
.
Illustrator , ,
.
, ,
, R Illustrator .
, .
om
. 4.20,
. , , ,
. ,
- .
hi
na
.c
. 4.20.
sk
la
dc
,
, . , . 4.20,
.
121
.
,
.
122
4.
,
( ,
). : R? ,
, . .
1. .
2. , .
3. R, .
la
dc
hi
na
.c
om
,
,
R
. -
,
. ,
R,
,
.
. ,
,
.
sk
. 4.21. -
-.
-
,
.
. 4.21
,
.
- ,
. ( )
, .
2000-
, .
. R.
URL :
hot_dog_places <read.csv('http://datasets.flowingdata.com/hot-dog-places.csv',
sep=",", header=TRUE)
hot_dog_places, .
, .
X2000
X2001
X2002
X2003
X2004
X2005
X2006
X2007
X2008
X2009
X2010
25
50.0
50.5
44.5
53.5
49
54
66
59
68.0
54
24
31.0
26.0
30.5
38.0
37
52
63
59
64.5
43
22
23.5
25.5
29.5
32.0
32
37
49
42
55.0
37
, X.
, ,
. R , ,
, , .
,
.
names(hot_dog_places) <- c("2000", "2001", "2002", "2003", "2004",
"2005", "2006", "2007", "2008", "2009", "2010")
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
25
50.0
50.5
44.5
53.5
49
54
66
59
68.0
54
24
31.0
26.0
30.5
38.0
37
52
63
59
64.5
43
23.5
25.5
29.5
32.0
32
37
49
42
55.0
37
om
2000
.c
, , .
hot_dog_places, .
dc
hi
na
22
sk
la
, barplot(),
. barplot(),
123
124
4.
hot_dog_places . . R
, . , ,
.
hot_dog_matrix <- as.matrix(hot_dog_places)
hot_dog_matrix.
barplot().
barplot(hot_dog_matrix, border=NA, space=0.25, ylim=c(0, 200),
xlab="Year", ylab="Hot dogs and buns (HDB) eaten",
main="Hot Dog Eating Contest Results, 1980-2010")
, ,
0,25
0 200. .
. 4.22.
la
dc
hi
na
.c
om
- .
. PDF Illustrator.
, .
Type (), , , ,
.
. , , . 4.23.
sk
. 4.22. ,
R
. 4.23. ,
Illustrator
.
. 4.21.
. ,
, .
om
, . ,
, ,
. . 4.24
.
na
.c
. 4.24.
sk
la
dc
hi
,
.
,
125
4.
( ).
, .
,
, .
x- y-,
, .
,
.
la
dc
hi
na
.c
om
R plot(),
, , . . 4.25
.
sk
126
. 4.25. , R Illustrator
FlowingData 2010
Feedburner, , FlowingData. 1 2010
25 047 , 27 611. , ,
, .
, 17
? .
, , R?
. read.csv (subscribers) URL.
subscribers <read.csv("http://datasets.flowingdata.com/flowingdata_subscribers.csv",
sep=",", header=TRUE)
, :
subscribers[1:5,]
:
Date
Subscribers
Reach
Item.Views
Hits
101-01-2010
25047
4627
9682
27225
201-02-2010
25204
1676
5434
28042
301-03-2010
25491
1485
6318
29824
401-04-2010
26503
6290
17238
48911
501-04-2010
26654
6544
16224
45521
: (Date), (Subscribers),
(Reach), (Item.Views) (Hits). .
, ,
.
, , ,
. 4.26.
plot(subscribers$Subscribers)
na
.c
om
, ? plot()
, .
.
plot() , , ,
x-.
sk
la
dc
hi
, ,
0 30 000.
plot(subscribers$Subscribers, type="p", ylim=c(0, 30000))
127
.
,
, -
.
128
4.
. 4.27 , . 4.26,
, ylim.
type, , . type h,
R .
. 4.26. , R
. 4.27. R
Y
,
. 4.28.
points().
plot() ,
.
,
:
plot(subscribers$Subscribers, type="h", ylim=c(0, 30000),
xlab="Day", ylab="Subscribers")
om
sk
la
dc
hi
na
.c
. 4.28.
,
.
. pch
, col,
, .
. 4.27.
PDF Illustrator,
.
129
Select (),
, . ,
. Transform
Transform Each ( ),
. Direct Selection (
) ,
.
, ,
, Color (),
(Stroke) (Fill). ,
Grayscale ( ) CMYK ( Cyan , Magenta
, Yellow , black ). Color ()
(. 4.29).
, . 4.30.
.
. 4.29.
Color ()
. 4.30.
sk
la
dc
hi
na
.c
om
, ,
.
Select () ,
, .
, .
, Stroke ().
, . 4.31,
.
. 4.31.
Stroke ()
4.
. 4.32 .
. 4.32.
, , ,
. 4.32, , . Pen
() , ,
Type (). .
.
la
dc
hi
na
.c
om
'
.
,
. .
, .
, ,
, .
sk
130
' ,
.
, . , . .
4.33 .
'
. 4.33.
x- y- , ,
. ,
, .
, ,
. , .
'
, R, ,
' . plot(),
type p l, .
1960
2009 . , read.csv().
population <-
om
read.csv("http://datasets.flowingdata.com/world-population.csv",
hi
na
.c
sep=",", header=TRUE)
sk
la
dc
. (Year)
(Population).
131
132
4.
Year
Population
1960
3028654024
1961
3068356747
1962
3121963107
1963
3187471383
1964
3253112403
plot() x y-, ,
.
plot(population$Year, population$Population, type="l",
ylim=c(0, 7000000000), xlab="Year",
ylab="Population")
, ,
. 4.34.
. 4.34. ' R
sk
la
dc
hi
na
.c
om
. 4.35.
Illustrator
PDF
Illustrator,
, -
- , :
Illustrator
Line Graph ( ).
Illustrator,
(. 4.35).
http://datasets.flowingdata.
com/world-population.csv. Adobe Illustrator
URL, R,
. CSV- Excel Google Documents,
, , . 4.36.
( ).
Illustrator.
. 4.37. Illustrator
, Excel,
. . 4.38.
na
.c
om
,
, .
Type (). Mark Data Points ( ),
. 4.39.
sk
la
dc
hi
. 4.38. ,
Illustrator
. 4.39. Illustrator
133
134
4.
-
Illustrator,
,
,
.
R.
Illustrator.
. 4.40.
sk
la
dc
hi
na
.c
om
Illustrator,
R . ,
, . .
,
. , ,
.
, ,
. , ,
, .
, . 4.41.
. 4.41.
, ,
, .
( ) . .
om
Illustrator .
R . R,
Illustrator.
?
hi
na
.c
. 4.42 . ,
, .
sk
la
dc
1995 1999 32 .
. 2006 2009
.
135
4.
. 4.42.
R, ,
:
1. .
2. , .
3. R, .
la
dc
hi
na
.c
om
( )
. CSV-,
http://datasets.flowingdata.com/us-postage.csv. URL
read.csv() , R.
sk
136
. ,
1991 2009 ,
. , .
Year
Price
1991
0.29
1995
0.32
1999
0.33
2001
0.34
2002
0.37
2006
0.39
2007
0.41
2008
0.42
2009
0.44
10
2010
0.44
plot()
. , , ,
x-
(Year), y- (Price),
type s, , ,
.
plot(postage$Year, postage$Price, type="s")
,
.
US Postage Rates for Letters, First Ounce, 19912010
. 4.43. , R
( ,
30 , 19912010),
Year () Postage Rate (Dollars) ( , ).
plot(postage$Year, postage$Price, type="s",
main="US Postage Rates for Letters, First Ounce, 1991-2010",
xlab="Year", ylab="Postage Rate (Dollars)")
,
. 4.43.
, ,
, (. 4.44).
sk
la
dc
hi
na
.c
om
, ,
? . 2001 2006
38 , ,
.
. 4.44.
137
138
4.
.
,
,
.
PDF, Illustrator.
, ,
. Type
() .
, , .
. ,
, .
,
. , ,
, Illustrator . ,
?! Layers (). , .
, ,
,
Layer 1 ( 1), . 4.45.
. 4.45. Layers ()
Illustrator
,
,
;
background (). Rectangle
(), .
,
, Color ().
,
, .
, .
. 4.46.
, , ,
.
,
, :
sk
la
dc
hi
na
.c
om
y = mx + b,
m , b . ,
? ,
. ,
(William Cleveland) (Susan Devlin)
().
139
.
.
.
,
,
,
.
Google.
.
,
.
.
Journal of the
American Statistical
Association.
sk
la
dc
hi
na
.c
om
, ,
. 4.46.
.
, , . ?
. 4.47,
1980- , 1990- , 2008 .
. 4.47.
4.
. 4.48 , ,
R plot().
# Load data
unemployment <read.csv(
"http://datasets.flowingdata.com/unemployment-rate-1948-2010.csv",
sep=",")
unemployment[1:10,]
# Plain scatter plot
plot(1:length(unemployment$Value), unemployment$Value)
. 4.48.
la
dc
hi
na
.c
om
(. 4.49).
sk
140
. ,
. , ,
scatter.smooth().
scatter.smooth(x=1:length(unemployment$Value), y=unemployment$Value)
. 4.50.
1980- . .
om
. 4.49.
hi
na
.c
. 4.50. ,
sk
la
dc
, , degree
() span () scatter.smooth().
, , . ,
141
4.
. . 4.51 , ' ,
' .
2, 0,5.
scatter.smooth(x=1:length(unemployment$Value),
y=unemployment$Value, ylim=c(0,11), degree=2, col="#CCCCCC", span=0.5)
. 4.51.
. , ,
.
la
dc
hi
na
.c
om
, . 4.47,
PDF Illustrator.
Selection (), Type (), Pen (), ,
. ,
, .
sk
142
.
,
. ,
,
, .
, -
. , :
, .
. .
:
- , ,
- .
,
, .
, ,
. , , .
, ,
.
sk
la
dc
hi
na
.c
om
, R Illustrator. R
, Illustrator , ,
. , ,
, .
,
.
, ,
.
143
om
.c
na
hi
dc
la
sk
' .
. ,
, . ,
. ,
. .
,
, .
-, .
sk
la
dc
hi
na
.c
om
, ,
, .
, ,
, HTML, CSS JavaScript,
Flash.
5.
: ,
. .
, , ,
. ,
.
, ,
, .
.
. ,
, ? ,
, ?
.
. ,
, ,
100 . ,
, .
la
dc
hi
na
.c
om
.
- , .
, , 1801
(William Playfair), ,
. .
sk
146
, . . 5.1,
, , (),
. .
, .
100 . , , -
.
. 5.1.
, ,
, , .
, . ,
.
,
, . :
.
, , ,
Illustrator. ,
.
sk
la
dc
hi
na
.c
om
.
, Tool Pie
Graph ( ), . 5.2.
, ,
. .
. 5.2.
Illustrator
147
148
5.
, ,
. ,
.
, FlowingData.
, , , .
831 .
(Statistics)
172
(Design)
136
(Business)
135
(Cartography)
101
(Information Science)
80
- (Web Analytics)
68
(Programming)
50
(Engineering)
29
(Mathematics)
19
(Other)
41
Illustrator, . 5.3.
,
, .
,
,
.
.
,
.
sk
la
dc
hi
na
.c
om
Illustrator
,
.
Microsoft Excel,
Illustrator.
. 5.3. Illustrator
,
,
149
(. 5.4).
, . ,
.
,
, , . ,
, ' .
, ,
, .
12 ,
.
,
. 5.4.
. ,
:
, .
, ,
, , . ,
, , ,
, .
. 5.5. ,
Direct Selection (
) .
Color ()
. . 5.5
,
,
. ,
,
.
dc
hi
na
.c
om
,
. ,
( . 5.6). ,
,
. ,
, .
sk
la
. 5.6.
FlowingData,
,
FlowingData,
,
(opacity). Transparency
,
.
,
.
,
,
.
150
5.
(). 0 ,
100 .
sk
la
dc
hi
na
.c
om
,
,
,
.
,
,
.
,
.
, Type (), ,
. ,
.
, , ,
Alignment (), Illustrator .
.
Pen (),
, . 5.7. ,
, ,
.
. 5.7.
151
, , : .
, , (. . 5.8).
. 5.8.
, .
. , ,
, .
,
.
.c
om
Illustrator . ,
. , . 5.9.
, -, , .
sk
la
dc
hi
na
, .
,
.
.
152
5.
Protovis http://
, Protovis
. Protovis JavaScript,
(Scalable Vector Graphics, SVS).
,
. Protovis
-.
vis.stanford.edu/
, -
, , R Illustrator.
, ,
.
. 5.10 , . ,
. 5.9, , ,
, ,
. ,
, .
sk
la
dc
hi
na
.c
om
protovis
,
.
. 5.9.
. 5.10. , Protovis
HTML-. donut.html.
<html>
<head>
<title>Donut Chart</title>
<script type="text/javascript" src="protovis-r3.2.js"></script>
<style type="text/css">
#figure {
width: 400px;
height: 400px;
}
</style>
</head>
<body>
<div id="figure ">
</div><!-- @end figure -->
</body>
</html>
- -, .
, , , HTML,
. <html>. <head>,
,
. , <body>, .
Donut Chart ( ),
Protovis JavaScript- <script>. CSS
. . id figure
<div> 400 . ,
. HTML, ,
, , JavaScript . donut.html , .
<div> , , ,
JavaScript. <script>.
<script type="text/javascript+protovis">
</script>
la
dc
hi
na
.c
om
. . . ,
FlowingData, .
, .
sk
153
5.
,
.
var w= 350,
h= 350,
r= w/ 2,
a= pv.Scale.linear(0, pv.sum(data)).range(0, 2* Math.PI);
350 , (
), , 175 .
. :
,
, 0 2
( 0 360 , ).
. ,
. Illustrator , Protovis
. ,
.
var depthColors = pv.Scale.linear(0, 172).range("white", "#821122");
- (#821122),
0 172 ( ,
). , , 0 , ,
172 -.
- .
. .
, 350 (w, )
350 (h, ) .
var vis = new pv.Panel()
.width(w)
la
dc
hi
na
.c
om
.height(h);
sk
154
, .
,
.
vis.add(pv.Wedge)
.data(data)
.bottom(w / 2)
155
.left(w / 2)
.innerRadius(r 120)
.outerRadius(r)
.fillStyle(function(d) depthColors(d))
.strokeStyle("#fff")
.angle(a)
.title(function(d) String(d) + " votes")
.anchor("center").add(pv.Label)
.text(function(d) cats[this.index]);
,
. bottom() left() ,
. innerRadius() , outerRadius()
. .
' - ,
,
depthColors. strokeStyle() (#fff).
.
(),
, ,
title(). mouseover,
, , .
title (),
.
"votes" (). .
, "May 2009" ( 2009 .)
.
vis.anchor("center").add(pv.Label)
.font("bold 14px Georgia")
.text("May 2009");
Georgia 14- 2009.
, .
flowingdata.com/
http://book.
ch05/donut.html,
om
vis.render();
.c
donut.html , , . 5.10.
sk
la
dc
hi
na
,
. : Protovis ,
. ,
, .
5.
,
. - ,
. , , ,
.
Protovis.
,
. . 5.11,
.
,
, Gallup CBS 2010 .
,
13 .
la
dc
hi
na
.c
om
. 5.11.
sk
156
(Race relations)
52
38
10
(Education)
49
40
11
(Terrorism)
48
45
(Energy policy)
47
42
11
(Foreign affairs)
44
48
(Environment)
43
51
(Situation in Iraq)
41
53
(Taxes)
41
54
(Healthcare policy)
40
57
(Economy)
38
59
(Situation in Afghanistan)
36
57
31
64
(Immigration)
29
62
, . 5.12. Illustrator,
.
.
sk
la
dc
hi
na
.c
om
, ,
. .
Illustrator
(Stacked Graph). -
.
157
5.
. 5.12.
la
dc
hi
na
.c
om
sk
158
, , Protovis,
. . 5.13
. . -,
,
.
(approve), (disapprove), (no
opinion) , .
. 5.13. , Protovis
.c
om
<div id="figure">
na
dc
hi
sk
la
</body>
</html>
159
5.
? , Protovis
. : Stacked Bar
Chart ( ), <div> id="figurewrapper". , CSS-
.
JavaScript. <div> ( )
.
<script type="text/javascript+protovis">
var data = {
"Issue":["Race Relations","Education","Terrorism","Energy Policy",
"Foreign Affairs","Environment","Situation in Iraq",
"Taxes","Healthcare Policy","Economy","Situation in Afghanistan",
"Federal Budget Deficit","Immigration"],
"Approve":[52,49,48,47,44,43,41,41,40,38,36,31,29],
"Disapprove":[38,40,45,42,48,51,53,54,57,59,57,64,62],
"None":[10,11,7,11,8,6,6,5,3,3,7,5,9]
};
</script>
:
52 , 38 . ,
49 , 40 , . .
,
:
var cat = data.Issue;
var data = [data.Approve, data.Disapprove, data.None];
cat, .
(width), (height), (scale) (colors)
:
var w= 400,
h= 250,
x= pv.Scale.ordinal(cat).splitBanded(0, w, 4/5),
la
dc
hi
na
.c
om
sk
160
400 250 .
( ), ,
. , .
, .
161
0 100.
0 , 250 .
, . .
- , -
- , .
.
:
. ,
. , bottom(90)
90 . .
var vis = new pv.Panel()
.width(w)
.height(h)
.bottom(90)
.left(32)
.right(10)
.top(15);
,
(), Protovis
: Stack.
,
. bar
().
var bar = vis.add(pv.Layout.Stack)
.layers(data)
.x(function() x(this.index))
.y(function(d) y(d))
.layer.add(pv.Bar)
.fillStyle(function() fill[this.parent.index])
.width(x.range().band)
.title(function(d) d+ "%")
.event("mouseover", function() this.fillStyle("#555"))
.event("mouseout", function()
om
this.fillStyle(fill[this.parent.index]));
sk
la
dc
hi
na
.c
, -:
, . ,
? layers(),
x y .
,
,
ColorBrewer
http://
colorbrewer2.org.
,
.
0to255
( http://0to255.
com)
,
.
162
5.
, pv.Bar.
fillStyle(). , this.parent.
index. ,
, . this.index,
,
39 ( 3 13 ). ,
, .
,
. title() Protovis title
HTML-, , . , ,
- ,
.
, . ,
( )
(%).
sk
la
dc
hi
na
.c
om
Protovis
,
.
,
.
Protovis.
,
, event().
("mouseover") -
(#555), , ,
"mouseout".
, . JavaScript :
vis.render();
, , : , . .
- ( Firefox Safari),
, . 5.14.
, ,
. - , .
.
. 5.13 .
, . ,
, ( ,
vis.render(), ).
bar.anchor("center").add(pv.Label)
.visible(function(d) d> 11)
.textStyle("white")
.text(function(d) d.toFixed(0));
. 5.14. -
: ,
11, , , ,
.
X .
, ,
. ,
,
45 . , .
bar.anchor("bottom").add(pv.Label)
.visible(function() !this.parent.index)
.textAlign("right")
.top(260)
.left(function() x(this.index)+20)
.textAngle(-Math.PI / 4)
.text(function() cat[this.index]);
sk
la
dc
hi
na
.c
om
, ,
.
, . textAlign()
top()
. - , ,
45 , .
163
5.
, .
, .
vis.add(pv.Rule)
.data(y.ticks())
.bottom(y)
.left(-15)
.width(15)
.strokeStyle(function(d) d> 0? "rgba(0,0,0,0.3)" : "#000")
.anchor("top").add(pv.Label)
.bottom(function(d) y(d)+2)
.text(function(d) d== 100? "100%" : d.toFixed(0));
(Rule), , y.ticks().
- , ,
. . .
la
dc
hi
na
.c
om
, ,
, . 5.15.
sk
164
. 5.15.
HTML CSS. , .
, , HTML CSS Protovis,
JavaScript,
.
1990 (Ben Shneiderman)
, .
, .
, .
, , .
. .
, . .
5.16, , ,
.
,
.
, ,
, , .
sk
la
dc
hi
na
.c
om
. 5.16.
165
,
http://book.
flowingdata.com/
ch05/stacked-bar.
html. , ,
HTML, CSS
JavaScript.
,
,
http://
datafl.ws/11m.
166
5.
Illustrator , R, ,
(Jeff Enos) (David Kane)
Portfolio ().
( ), .
100
FlowingData ,
.
, R.
URL.
, .
,
, R.
sk
la
dc
hi
na
.c
om
.
http://
www.r-project.org.
R,
,
,
.
,
, R
,
.
CSV- URL . R
read.csv() . 5.17.
posts <- read.csv("http://datasets.flowingdata.com/post-data.txt")
, ?
( CSV),
read.csv(),
posts.
, read.csv()
,
-.
, , ,
sep,
\t.
,
:
. 5.17. CSV R
, .
,
, read.csv(), R:
?read.csv
. , posts,
, .
posts[1:5,]
, CSV-: id,
views, comments category. , R,
Portfolio. :
library(portfolio)
? , , .
:
install.packages(portfolio)
. ? .
.
Portfolio map.market().
, .
map.market(id=data$id, area=posts$views, group=posts$category,
color=posts$comments, main="FlowingData Map")
, id ,
,
R
views,
,
(
)
( ).
FlowingData Map
.
dc
hi
na
.c
om
Enter
, ,
. 5.18.
sk
la
. 5.18. R
,
,
,
.
, ,
167
R .
Packages & Data
Package Installer
(
).
Get List ( )
.
.
168
5.
, ,
, .
, . '
.
R PDF, Illustrator.
. , , ,
, , .
sk
la
dc
hi
na
.c
om
, ,
.
http://
nyti.ms/9JUkWL.
, 90 90.
, .
. , ,
. ,
, .
Selection (). ,
. , , . 5.19.
. 5.19. , R Illustrator
. :
, .
- , . , ,
, ,
.
' Portfolio, ,
, ,
. : : id
,
.
.
, .
.
, .
, ,
, ,
.
, . ,
.
1860 2005 .
,
.
om
' .
,
. . ,
, ,
, 0 100 ,
. 5.20.
sk
la
dc
hi
na
.c
,
.
,
.
169
170
5.
. 5.20.
hi
na
.c
om
. http://book.
flowingdata.com/ch05/data/us-population-by-age.xls.
,
.
.
?
,
. ,
.
sk
la
dc
. 5.21.
(Area Graph),
,
Illustrator.
(Area Graph) . 5.21.
-
, , .
171
,
, ?
,
, ,
. 5.22.
100 .
,
, 100 .
, ,
'
. 5.22.
100 ,
Illustrator
.
:
. --! - ,
. 5.23. , , ,
,
.
, .
, ,
, ,
.
, , .
Direct Selection ( ).
,
.
,
. ,
( ) .
.
,
. 5.24.
.
.
sk
la
dc
hi
na
.c
om
, -,
, ,
.
. ,
,
.
. 5.23.
172
5.
, .
. 5.24.
sk
la
dc
hi
na
.c
om
, - ? , . .
, ,
(. 5.25).
. 5.25. ,
, .
.
, .
, , .
, , .
, . 5.26.
om
. 5.26. ,
na
.c
sk
la
dc
hi
,
, .
, .
173
174
5.
, .
,
.
,
.
(Martin
Wattenberg)
NameVoyager.
.
, .
http://www.
babynamewizard.com/
sk
la
dc
hi
na
.c
om
voyager.
,
, , ,
.
, , .
,
, ,
.
JavaScript Protovis, ,
( ), Flash ActionScript.
, . '
, Flare ,
. Flare
ActionScript- ,
Java- Prefuse.
Flare , JobVoyager, NameVoyager,
.
,
.
ActionScript Flash-.
, ( , ),
, Flash-
, . , , ,
, .
,
Adobe. ,
, , -
.
,
Flash ActionScript, Adobe Flex Builder.
ActionScript,
, , .
, , .
, ,
.
. , Flex Builder,
.
, Adobe
Flex Builder Flash Builder. , .
Flex Builder, Flash Builder.
Flash Builder http://www.adobe.com/products/flashbuilder.
.
.
, Flex Builder.
la
dc
hi
na
.c
om
Flex Builder , ,
, . 5.27.
sk
Flare
http://flare.
prefuse.org.
175
176
5.
. 5.29.
(Flex Navigator)
Import ().
,
. 5.28.
sk
la
dc
hi
na
.c
om
. 5.30. JobVoyager
flare.apps.
flare.apps/
flare/apps/ JobVoyager.as,
Flex Builder ,
. 5.30.
177
( ,
), JobVoyager , . 5.31.
, , .
. , ?
. 5.31. JobVoyager
http://datafl.
ws/16r
sk
la
dc
hi
na
.c
om
. 5.32 , .
1984 2008 ( ). ,
.
,
,
.
5.
. 5.32.
, 57- JobVoyager.as.
_url ,
: http://datasets.flowingdata.com/expenditures.txt. jobs.txt,
. ,
, .
la
dc
hi
na
.c
om
sk
178
179
.
.
, 58- 59-, , ,
, .
1850 2000 . ,
, ,
.
1984- 2008-,
58 59 .
private var _cols:Array =
[1984,1985,1986,1987,1988,1989,1990,1991,1992,
1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,
2003,2004,2005,2006,2007,2008];
, , . (jobs.txt)
: , , .
: , .
.
, . ,
( ),
(). ,
.
74-
. (occupation)
(sex), , , (year)
X, (people) Y.
var dr:Array = reshape(ds.nodes.data, ["occupation","sex"],
"year", "people", _cols);
:
var dr:Array = reshape(ds.nodes.data, ["category"],
"year", "expenditure", _cols);
.c
om
( ), (category).
, Y (expenditure).
la
dc
hi
na
84 ( ) ( ).
, :
sk
data.nodes.sortBy("data.category");
,
,
,
.
,
,
.
5.
? .
.
92 , ,
. :
data.nodes.setProperty("fillHue", iff(eq("data.sex",1), 0.7, 0));
.
103 (occupation).
_vis.operators.add(new StackedAreaLabeler("data.occupation"));
, (category) ,
:
_vis.operators.add(new StackedAreaLabeler("data.category"));
JobVoyager 213231 . /
, . ,
215218, 219 if.
: 264293
/. .
.
filter() 213- . ,
, .
222 :
var s:String = String(d.data["occupation"]).toLowerCase();
(occupation) (category):
var s:String = String(d.data[category]).toLowerCase();
la
dc
hi
na
.c
om
.
, , ,
. 5.33. .
. 8689
:
sk
180
shape: Shapes.POLYGON,
lineColor: 0,
fillValue: 1,
fillSaturation: 0.5
. 5.33.
105 ( )
. SaturationEncoder() 360383.
. .
8689 :
shape: Shapes.POLY shape: Shapes.POLYGON,
ON,lineColor: 0xFFFFFFFF
om
lineColor .
, , , , .
, .
la
dc
hi
na
.c
, , .
, 50- :
sk
181
182
5.
ColorBrewer ( ),
.
,
.
ColorEncoder 110:
var colorPalette:ColorPalette = new ColorPalette(_reds);
vis.operators.add(new ColorEncoder("data.max", "nodes",
"fillColor", null, colorPalette));
! , (. 5.32). ,
. .
,
.
.
, ActionScript . ., . .
sk
la
dc
hi
na
.c
om
,
,
,
.
'
,
.
. 5.34.
,
Illustrator .
,
.
,
, . 5.34.
,
' ,
(. 5.35).
. 5.35.
, ,
. ,
, . ,
, .
, .
dc
hi
na
.c
om
, , ,
. ,
, . ,
, .
sk
la
? , ,
. .
183
5.
, ,
. ,
. .
, ,
, , .
? ,
. ,
, ,
, .
, ,
: , . :
, ,
, .
,
, , , , , .
. ,
, . , , ,
, .
. , . ,
, Protovis Flare,
.
la
dc
hi
na
.c
om
R. ,
. ? .
sk
184
.
? ? ?
. ,
, ,
. .
, , ,
, .
,
.
sk
la
dc
hi
na
.c
om
, R. -
.
, R ,
Illustrator .
6.
,
'
. ,
, , ,
.
. - ,
- ,
- ?
, . , ,
.
,
. , :
.
, , . ,
, , ,
, .
. ?
?
, , , ,
' : ? , ?
?
, ,
, .
la
dc
hi
na
.c
om
sk
186
, , ,
. , - .
, -
. ,
, . ,
. ,
. - .
, , ? ,
: , -
, , , ?
187
, , (),
- .
.
, , .
.
, .
sk
la
dc
hi
na
.c
om
4, ,
.
, .
( ).
. ,
. 6.1, ,
,
.
. 6.1.
6.
(
. 6.2 ), ,
. , ,
(
. 6.2).
. 6.2. ,
, , , .
. ,
, ,
. ,
. ,
, . ,
.
?
la
dc
hi
na
.c
om
, . - ,
. ,
. ,
- , . ,
, , ,
.
sk
188
2005
100 000 ( ).
, : (murder), (forcible rape), (robbery),
(aggravated assault),
(burglary), (larceny-theft) (motor
vehicle theft). :
. ? ,
?
, R.
, R read.csv().
CSV- http://datasets.flowingdata.com/crimeRatesByState2005.csv,
R, URL.
# Load the data
crime <read.csv('http://datasets.flowingdata.com/crimeRatesByState2005.csv',
sep=",", header=TRUE)
, crime
, .
crime[1:3,]
:
state
1
United
murder
forcible_rape
robbery
aggravated_assault
burglary
5.6
31.7
140.7
291.1
726.7
States
2
Alabama
8.2
34.3
141.4
247.8
953.8
Alaska
4.8
81.1
80.9
465.1
622.5
motor_vehicle_
population
larceny_theft
theft
1
2286.3
416.7
295753151
2650.0
288.3
4545049
2599.1
391.0
669488
sk
la
dc
hi
na
.c
om
,
. , 2005
140,7 100 000 . plot(),
, (murder) (burglary),
. 6.3.
plot(crime$murder, crime$burglary)
189
6.
. 6.3. ,
, . ,
,
, -
.
. , ,
35,4.
9,9.
, , ,
,
.
crime2<- crime[crime$state != "District of Columbia",]
, crime2.
.
, , ,
, . 6.4.
la
dc
hi
na
.c
om
sk
190
plot(crime2$murder, crime2$burglary)
. 6.4.
sk
la
dc
hi
na
.c
om
, , .
X 0 10, Y 0 1200.
, . 6.5.
. 6.5. ,
191
192
6.
, ? ,
(),
, .
. . 6.6.
scatter.smooth(crime2$murder, crime2$burglary,
xlim=c(0,10), ylim=c(0,1200))
,
.
.
7,
.
sk
la
dc
hi
na
.c
om
. 6.6.
.
, .
, ,
, , . 6.7.
, ,
, ,
.
. 6.7. ,
sk
la
dc
hi
na
.c
om
, , , ,
. -
,
,
.
. , ,
(. 6.8).
193
194
6.
. 6.8.
sk
la
dc
hi
na
.c
om
,
.
,
,
.
. ,
, , .
, , .
, .
, .
,
. ,
, .
sk
la
dc
hi
na
.c
om
. (
), :
.
. . 6.9 , ' .
. 6.9.
195
6.
, , , . ,
, ,
. ,
, .
. , :
. ,
, ,
.
, R ,
,
. plot(),
, .
la
dc
hi
na
.c
om
plot(crime2[,2:9])
sk
196
. 6.10. , R
, . 6.10, ,
. ,
.
, ,
, pairs(). ,
, . . 6.11.
pairs(crime2[,2:9], panel=panel.smooth)
sk
la
dc
hi
na
.c
om
panel pairs()
- -. panel.smooth(),
R .
.
. 6.11.
197
198
6.
,
,
,
,
,
.
Gapminder
www.
gapminder.org,
BBC
.
sk
la
dc
hi
na
.c
om
,
,
.
,
, . 6.9. PDF
Illustrator.
, , , ,
, . , ,
, .
, . ,
, .
.
, -. . 6.9
. 6.11 , ?!
,
Gapminder,
, X Y
.
,
, .
,
, ,
, , ,
.
,
, . 6.12.
, Y, .
,
. 1,
, .
, . .
,
, .
, . ,
.
, .
, .
150 , 100 . ,
50 . . 6.13 ,
, . , ,
50 .
. 6.12.
hi
na
.c
om
. 6.14 , ,
.
sk
la
dc
. 6.13. ,
. 6.14. ,
199
200
6.
, , 50
-,
. , ,
, , ' ,
.
dc
hi
na
.c
om
, . 6.15, ,
.
,
. , '
? (, , ).
, , , ,
,
.
,
.
sk
la
. 6.15. ,
R
read.csv().
,
,
,
.
, .
.
sep.
crime <read.csv("http://datasets.flowingdata.com/crimeRatesByState2005.tsv",
header=TRUE, sep="\t")
symbols().
X , Y , ,
, .
. 6.16. symbols()?
.
symbols(crime$murder, crime$burglary, circles=crime$population)
. 6.16.
sk
la
dc
hi
na
.c
om
? ? .
, .
, ,
. ,
. ,
,
?
201
6.
,
:
= r2.
. ,
. : , ,
:
r=
( / ).
, ,
. , ,
crime$population, symbols().
radius <- sqrt( crime$population/ pi )
symbols(crime$murder, crime$burglary, circles=radius)
la
dc
hi
na
.c
om
(sqrt)
radius. . 6.17 ,
. , ,
, , .
sk
202
. 6.17.
, ,
. inches symbols() .
1 (2,54 ), . 6.17 ,
, 1 ,
. , 0,35 (0,89 ),
. ,
fg bg, .
. . 6.18.
symbols(crime$murder, crime$burglary, circles=radius, inches=0.35,
fg="white", bg="red", xlab="Murder Rate", ylab="Burglary Rate")
.c
om
. 6.18.
hi
na
- .
sk
la
dc
symbols() , :
, , , .
203
6.
, , .
, , ,
, .
. 6.19 , , :
symbols(crime$murder, crime$burglary,
squares=sqrt(crime$population), inches=0.5)
. 6.19.
la
dc
hi
na
.c
om
- . . 6.18
, ,
. text(),
-, - . . ,
X , Y .
, .
sk
204
cex , 1.
, .
- -, . 6.20.
. 6.20.
,
. 6.15. R PDF,
,
. ,
, .
, , ,
,
.
om
! ?symbols R,
. , !
hi
na
.c
sk
la
dc
, .
. ,
. ,
205
6.
, .
, .
, . ,
. ,
.
,
. .
,
.
,
,
.
1970- , ,
. ,
*,
.
.
( ). ,
, ,
.
1980- (
), ,
.
,
,
.
, ,
, R . . 6.21
,
2008 ( ).
, . ,
. (|). ,
la
dc
hi
na
.c
om
sk
206
* . . . .: , 1981.
,
10 12 1000 . ()
52 54.
. 6.21. ,
.
8 52 2 . .
, , .
8,2, 2 8.
9,9, 8,
9.
dc
hi
na
.c
om
, .
, R.
, stem().
sk
la
6.
. ( . 6.22),
R , .
, , , .
, .
la
dc
hi
na
.c
om
. 6.22.
sk
208
. 6.22, ,
.
,
. ,
. .
, , ,
. 6.23.
. 6.23.
, .
,
(
, ).
na
.c
om
, ,
. ,
, . ,
. ,
, .
, . ,
, - .
la
dc
hi
sk
R , . ,
hist(),
209
6.
, . 6.24. ,
. 6.22?
. 6.24.
, ,
2008 hist().
hist(birth$X2008)
, , . 6.25.
hist(birth$X2008, breaks=5)
, , 20 (. 6.27).
la
dc
hi
na
.c
om
, ,
breaks. ,
, , . 6.26.
.
sk
210
hist(birth$X2008, breaks=20)
sk
la
dc
hi
na
.c
om
. 6.25.
. 6.26. 5
211
212
6.
.
,
.
sk
la
dc
hi
na
.c
om
R ,
,
summary().
. 6.27. 20
, ,
. ' - ,
,
.
,
. ,
.
, . , , 10,
1000 10 25. ,
25, .
PDF
Illustrator. ' , ,
4, , ,
, .
(. 6.24)
, , , .
, .
, .
,
. ,
.
, ?
, - . ,
(), , 4
.
.
. 6.28 .
,
.
om
. 6.28.
na
.c
sk
la
dc
hi
. ,
, .
density(), .
213
214
6.
, 2008 15 ,
.
,
,
:
.
R NA. ,
.
birth2008<- birth$X2008[!is.na(birth$X2008)]
2008 , , , , ,
birth2008. : is.na()
birth$X2008 (true) (false)
, , , .
, ,
. , .
, .
, .
, .
,
birth2008, density()
d2008.
d2008<- density(birth2008)
. , ,
,
. Rd2008, ,
. :
Call:
Data: birth2008(219obs.);
Min.
:-1.299
Min.
:6.479e-06
1st Qu.
:14.786
1st Qu.
:1.433e-03
Median
:30.870
Median
:1.466e-02
Mean
:30.870
Mean
:1.553e-02
3rd Qu.
:46.954
3rd Qu.
:2.646e-02
Max.
:63.039
Max.
:4.408e-02
sk
la
dc
hi
na
.c
om
density.default(x = birth2008)
215
x y. ,
, :
d2008$x
d2008$y
, write.table().
, , , (,
) - .
, :
d2008frame <- data.frame(d2008$x, d2008$y)
write.table(d2008frame, "birthdensity.txt", sep="\t")
birthdensity.txt. ,
,
, :
write.
table() -
.
setwd().
, R,
R,
, write.table().
sk
la
dc
hi
na
.c
om
. ,
.
, , , plot(). . 6.29.
. 6.29.
6.
plot(d2008)
, , ,
plot() polygon(), . 6.30.
, type "n",
,
. -, .
plot(d2008, type="n")
polygon(d2008, col="#821122", border="#cccccc")
la
dc
hi
na
.c
om
. 6.30.
sk
216
. ,
,
, , (. 6.31).
histogram() lattice lines().
, .
library(lattice)
histogram(birth$X2008, breaks=10)
lines(d2008)
. 6.31.
sk
la
dc
hi
na
.c
om
,
,
. ,
.
,
,
. . 6.32
-
.
,
.
,
, ,
.
. 6.32.
2008
217
6.
, ,
. ,
, .
, , 2008
19,98 1000 1960
32,87, 39- 1960 2008 .
, . ,
1960- , ,
, ?
? ?
.
. (
.)
. , ,
,
, . ,
.
,
2008 .
R, , 1960-.
, , , . ,
, ?
, ,
. ,
, .
lattice R
, .
, .
.
la
dc
hi
na
.c
om
sk
218
Country,1960,1961,1962,1963...
Aruba,36.4,35.179,33.863,32.459...
Afghanistan,52.201,52.206,52.208,52.204...
...
. (country),
, 30 234
. , :
(year), (rate). , ,
, :
year,rate
1960,36.4
1961,35.179
1962,33.863
1963,32.459
1964,30.994
1965,29.513
...
, , , ,
. ,
, .
9870, .
? , Python 2?
CSV- Python,
. .
transform-birth-rate.py . ,
, birth-rate.csv. :
import csv
reader = csv.reader(open('birth-rate.csv', 'r'), delimiter=",")
rows_so_far = 0
print 'year,rate'
for row in reader:
if rows_so_far == 0:
header = row
rows_so_far += 1
else:
for iin range(len(row)):
if i> 0and row[i]:
na
.c
om
dc
hi
rows_so_far += 1
sk
la
. . csv
birth-rate.csv.
219
220
6.
, . ,
CSV- birth-rate-yearly.csv.
. histogram().
R read.csv() .
( ), ,
URL:
birth_yearly <read.csv("http://datasets.flowingdata.com/birth-rate-yearly.csv")
histogram(), 105,
(rate) (year). . 6.33.
histogram(~ rate | year, data=birth_yearly, layout=c(10,5))
sk
la
dc
hi
na
.c
om
,
R,
reshape,
(Hadley Wickham).
.
. 6.33.
, . . , -,
, . -, ,
,
. ,
. ( ,
), , .
1960- , 1969- . , 1970-,
1960-. , .
.
, summary() birth_yearly.
year
rate
Min.
:1960
Min.
:6.90
1st Qu.
:1973
1st Qu.
:18.06
Median
:1986
Median
:29.61
Mean
:1985
Mean
:29.94
3rd Qu.
:1997
3rd Qu.
:41.91
Max.
:2008
Max.
:132.00
132. , .
. ? , 132
, 1999 . ,
, 1999
20. , 13,2. ,
. .
birth_yearly.new <- birth_yearly[birth_yearly$rate < 132,]
.
,
. , .
:
birth_yearly.new$year <- as.character(birth_yearly.new$year)
.c
om
,
.
hi
na
sk
la
dc
update(), .
update(h, index.cond=list(c(41:50, 31:40, 21:30, 11:20, 1:10)))
221
6.
, , . . 6.34,
( ).
.
, , , .
la
dc
hi
na
.c
om
. 6.34.
sk
222
. Illustrator,
, -,
. 6.35. .
,
, ,
.
,
, .
. 6.35. , Illustrator
, , Processing, Protovis,
PHP , .
R . , -
FlowingData ,
2002 2009 (. 6.36).
sk
la
dc
hi
na
.c
om
, , ,
. , - ,
, . ,
histogram() lattice.
par(), R ,
, , hist().
223
la
dc
hi
na
.c
om
6.
sk
224
. 6.36.
# Load data
tvs <- read.table('http://datasets.flowingdata.com/tv_sizes.txt',
sep="\t", header=TRUE)
# Filter outliers
tvs <- tvs[tvs$size < 80, ]
tvs <- tvs[tvs$size > 10, ]
# Set breaks for histograms
breaks = seq(10, 80, by=5)
# Set the layout
par(mfrow=c(4,2))
# Draw histograms, one by one
hist(tvs[tvs$year == 2009,]$size, breaks=breaks)
hist(tvs[tvs$year == 2008,]$size, breaks=breaks)
hist(tvs[tvs$year == 2007,]$size, breaks=breaks)
hist(tvs[tvs$year == 2006,]$size, breaks=breaks)
hist(tvs[tvs$year == 2005,]$size, breaks=breaks)
hist(tvs[tvs$year == 2004,]$size, breaks=breaks)
hist(tvs[tvs$year == 2003,]$size, breaks=breaks)
hist(tvs[tvs$year == 2002,]$size, breaks=breaks)
. 6.37.
, mfrow par().
, ,
Illustrator Excel .
(small multiples*).
, .
,
.
om
* small multiples ,
sk
la
dc
hi
na
.c
, ( ) ,
. , small multiples .
: , , , .
.
(. panel chart). . .
225
6.
la
dc
hi
na
.c
om
. 6.37.
sk
226
. - Rotten
Tomatoes ( ), , .
, , Rotten Tomatoes
. 60
, , .
.
. 6.38.
na
.c
om
, *
. , (. 6.38).
37 ,
. , ,
.
dc
hi
* (
sk
la
) ( ), ( ), ( , , ) ( ,
, ). . .
227
6.
. 6.39.
la
dc
hi
na
.c
om
. 6.38 , .
R . 6.39.
Illustrator.
sk
228
- FlowingData .
.
sk
la
dc
hi
na
.c
om
(. 6.40)
. ,
. ,
, .
. 6.40.
229
6.
, , ,
, mfrow ,
, plot() polygon().
Column Graph ( ) Illustrator ,
.
-.
,
. ,
, - ,
.
, .
. ,
, , , ,
, .
,
. ,
,
. ,
, . ,
: ?
.
la
dc
hi
na
.c
om
, ,
, , , - . ,
, , . :
, , .
, .
sk
230
,
. -
, .
: ', . .
, , .
, ,
, -
: .
. .
sk
la
dc
hi
na
.c
om
, .
.
, - -,
. ,
, , ,
.
7.
.
, , , .
, .
, . ,
, , .
, ?
, ,
, ?
. , ,
.
, ,
(, )
. ,
, .
, .
, , ,
.
,
, .
, .
,
.
la
dc
hi
na
.c
om
sk
232
.
, ( ) . 7.1.
, , ,
, .
, , ' ,
, .
. 7.1.
( ) , .
, ,
.
, ,
, , ,
, ,
.
R . heatmap(),
,
,
, . , R ,
. .
sk
la
dc
hi
na
.c
om
2008 . CSV- http://datasets.flowingdata.com/
ppg2008.csv. , 22 : ,
, . . R,
read.csv(). ,
(. 7.2).
233
234
7.
bball <read.csv("http://datasets.flowingdata.com/ppg2008.csv",
header=TRUE)
bball[1:5,]
. 7.2.
, ,
,
order().
bball_byfgp <- bball[order(bball$FGP, decreasing=TRUE),]
sk
la
dc
hi
na
.c
om
decreasing
order() ,
.
bball_byfgp, ,
, , ,
.
.
bball <- bball[order(bball$PTS, decreasing=FALSE),]
, , CSV-.
, .
, .
row.names(bball) <- bball$Name
bball <- bball[,2:20]
,
2- 20-,
bball.
, , .
heatmap(),
. , ,
.
. ,
, , ,
, .
bball_matrix <- data.matrix(bball)
, .
heatmap() . scale
column, R
,
.
bball_heatmap <- heatmap(bball_matrix, Rowv=NA,
Colv=NA, col = cm.colors(256), scale="column", margins=c(5,10))
. 7.3. cm.colors()
(cyan) (magenta).
,
( 256). ,
( ) ,
,
,
.
- , ( )
( ).
, ? col,
cm.colors(256) , .
?cm.colors, , R. ,
. 7.4 .
bball_heatmap <- heatmap(bball_matrix,
Rowv=NA, Colv=NA, col = heat.colors(256), scale="column",
margins=c(5,10))
hi
na
.c
om
R cm.colors(10),
, heatmap() ,
.
la
dc
sk
235
.
,
. ,
,
.
7.
.
'
la
dc
hi
na
.c
om
. 7.3. , (PTS)
sk
236
sk
la
dc
hi
na
.c
om
. 7.4. -
.
'
237
238
7.
,
. , 0to255.com ,
. . 7.5 .
heatmap(), . 7.6. R
, red_colors .
red_colors <- c("#ffd3cd", "#ffc4bc", "#ffb5ab",
"#ffa69a", "#ff9789", "#ff8978", "#ff7a67", "#ff6b56",
"#ff5c45", "#ff4d34")
bball_heatmap <- heatmap(bball_matrix, Rowv=NA,
Colv=NA, col = red_colors, scale="column", margins=c(5,10))
sk
la
dc
hi
na
.c
om
,
. ,
, ,
, ,
,
.
. 7.5. 0to255.com
.
'
om
. 7.6.
sk
la
dc
hi
na
.c
,
RColorBrewer. ,
Package Installer, . RColorBrewer
(Cynthia Brewer)
, .
239
240
7.
ColorBrewer
http://
colorbrewer2.com.
,
,
.
:
, , .
. ?brewer.pal R,
.
RColorBrewer, , ,
(. 7.7).
library(RColorBrewer)
bball_heatmap <- heatmap(bball_matrix, Rowv=NA,
Colv=NA, col = brewer.pal(9, "Blues"),
scale="column", margins=c(5,10))
, . 7.7, Illustrator -
. ,
, .
, . ,
, , ,
, .
, , ,
Color () Illustrator. ,
. . 7.8.
, ,
, .
,
.
, , ,
sk
la
dc
hi
na
.c
om
,
. *.
.
, ,
, ,
.
* ,
. . .
, (. 7.9). :
,
,
. , , .
hi
na
.c
om
.
'
sk
la
dc
. 7.7. RColorBrewer
241
242
7.
50 20082009
.
'
: databaseBasketball
sk
la
dc
hi
na
.c
om
(Mike Bostock)
Protovis,
.
,
:
,
.
. 7.8. , 50
20082009 .
243
. 7.9.
, '
, . ,
, .
, 50 2008
2009 . .
. aplpack R
faces(), .
, install.packages()
Package Installer. , , aplpack
another plotting package ( ),
(Hans Peter Wolf).
, ,
.
library(aplpack)
dc
hi
na
.c
om
,
. , read.csv(),
URL.
sk
la
faces()
.
,
,
ncolors
0,
- . ,
,
.
7.
,
faces(), . 7.10.
faces(bball[,2:16], ncolors=0)
. 7.10.
la
dc
hi
na
.c
om
20 . faces(),
aplpack, 15 ,
15 , .
, 2 16.
sk
244
?
:
1. .
2. .
3. .
faces()
4. .
5. .
6. .
7.
8.
9.
10.
11.
.
.
.
.
12.
13.
14.
15.
.
.
.
.
,
. ,
, ,
, , 7,
, ,
.
labels faces(), , . 7.11.
la
dc
hi
na
.c
om
faces(bball[,2:16], labels=bball$Name)
. 7.11.
sk
245
,
. , ,
: ,
.
246
7.
()
,
,
.
sk
la
dc
hi
na
.c
om
,
.
,
,
.
. , .
, , ,
, .
,
, . , ,
.
,
, (. 7.12).
, ,
.
-
, , .
, , ,
, , , , ,
, ,
.
(. 7.13),
- , , .
,
.
,
, , , . ,
, .
-, , , (
-).
. 7.14, ,
, ,
().
, . ,
. ( ,
, ).
sk
la
dc
hi
na
.c
om
. 7.12. 20082009 .
247
la
dc
hi
na
.c
om
7.
sk
248
. 7.13. , ( )
. 7.14. -
, .
, ,
.
.
-
, . 7.13, ,
- . .
R.
crime <- read.csv("http://datasets.flowingdata.com/
crimeRatesByState-formatted.csv")
.c
om
- ,
. stars(), R.
hi
na
stars(crime)
sk
la
dc
, , . 7.15. ,
- . , - ,
249
la
dc
hi
na
.c
om
7.
sk
250
. 7.15. - ,
, , , . ,
faces(), , ,
. , .
: ,
. , .
flip.labels FALSE, ,
. . 7.16.
row.names(crime) <- crime$state
crime <- crime[,2:7]
stars(crime, flip.labels=FALSE, key.loc = c(15, 1.5))
. ,
, ,
-, ,
,
.
, , - -.
, ,
.
, .
, , ,
.
, . 7.17.
stars(crime, flip.labels=FALSE, key.loc = c(15, 1.5), full=FALSE)
,
7.18. -, * (
), .
, , , ,
, .
stars(crime, flip.labels=FALSE, key.loc = c(15, 1.5), draw.segments=TRUE)
hi
na
.c
om
, , (. 7.16),
Illustrator - .
. , ,
, , , , ,
(. 7.19). .
sk
la
dc
* (Florence Nightingale) ,
, ,
. . .
251
la
dc
hi
na
.c
om
7.
sk
252
. 7.16. -
hi
na
.c
om
sk
la
dc
. 7.17. -,
253
la
dc
hi
na
.c
om
7.
sk
254
. 7.18. ,
hi
na
.c
om
sk
la
dc
. 7.19. -,
255
7.
- ,
, ,
, .
, 1885
(Maurice dOcagne).
. 7.20,
. ,
. ,
.
la
dc
hi
na
.c
om
. 7.20.
sk
256
, , ,
. :
, . ,
, , , .
,
.
257
,
.
.
. - ,
Protovis, , GGobi.
,
, .
,
. ,
, , .
. ,
. R read.csv().
education <- read.csv("http://datasets.flowingdata.com/education.csv",
header=TRUE)
education[1:10,]
. (state)
.
(reading), (math) (writing)
(). (percentage of graduates),
,
(pupil-to-staff ratio) (dropout rate) .
, , -
( ). , ,
, , ?
R
, lattice. , ,
.
library(lattice)
.c
om
. lattice parallel(),
.
hi
na
parallel(education)
sk
la
dc
, . 7.21. , , -
. - ,
, . .
GGobi http://ggobi.
org.
7.
. 7.21. , lattice
, ? . , ,
, , ,
- (. 7.22)
state , -,
, -, .
. , .
. 7.23.
la
dc
hi
na
.c
om
parallel(education, horizontal.axis=FALSE)
sk
258
sk
la
dc
hi
na
.c
om
. 7.22.
. 7.23.
259
7.
. , , ,
. , ,
,
. , ,
.
, ,
. ,
, , . :
.
, , ,
, . ,
, , .
, .
col.
- (#000000),
. 50-
, , , .
, summary().
summary(education). ,
, (median) (reading) 523.
parallel()
state
reading
om
.c
na
hi
dc
la
math
writing
Alabama
: 1
Min.
:466.0
Min.
:451.0
Min.
:455.0
Alaska
: 1
1st Qu.
:497.8
1st Qu.
:505.8
1st Qu.
:490.0
Arizona
: 1
Median
:523.0
Median
:525.5
Median
:510.0
Arkansas
: 1
Mean
:533.8
Mean
:538.4
Mean
:520.8
California
: 1
3rd Qu.
:571.2
3rd Qu.
:571.2
3rd Qu.
:557.5
Colorado
: 1
Max.
:610.0
Max.
:615.0
Max.
:588.0
(Other)
:46
percent_graduates_sat
sk
260
pupil_staff_ratio
dropout_rate
Min.
: 3.00
Min.
: 4.900
Min.
: 1.000
1st Qu.
: 6.75
1st Qu.
: 6.800
1st Qu.
: 2.950
Median
:34.00
Median
: 7.400
Median
: 3.950
Mean
:37.35
Mean
: 7.729
Mean
: 4.079
3rd Qu.
:66.25
3rd Qu.
: 8.150
3rd Qu.
: 5.300
Max.
:90.00
Max.
:12.100
Max.
: 7.600
, ,
, . c() ,
.
reading_colors <- c()
for (i in 1:length(education$state)) {
if (education$reading[i] > 523) {
col <- "#000000"
} else {
col <- "#cccccc"
}
reading_colors <- c(reading_colors, col)
}
reading_colors parallel
("#000000"), . . 7.24.
.
hi
na
.c
om
sk
la
dc
. 7.24. (reading)
261
7.
? ,
, , ,
? 5,3 .
, ,
.
dropout_colors <- c()
for (i in 1:length(education$state)) {
if (education$dropout_rate[i] > 5.3) {
col <- "#000000"
} else {
col <- "#cccccc"
}
dropout_colors <- c(dropout_colors, col)
}
parallel(education[,2:7], horizontal.axis=FALSE, col=dropout_colors)
la
dc
hi
na
.c
om
, . 7.25.
, .
, . 7.24.
sk
262
263
. . 7.24
. . ,
- . ,
50 ? . 7.26.
. 7.26. ,
sk
la
dc
hi
na
.c
om
,
.
. , ,
. ,
.
. ,
.
,
.
7.
, , ,
,
. ,
, .
, ,
.
,
. ,
. , , ,
, ,
. , , ,
. ?
.
. .
, ,
. , ,
. .
. : . , .
, , ,
.
? , ( )
, ( )
, .
, ? ,
.
, . ,
50 , ,
. , ?
.
la
dc
hi
na
.c
om
sk
264
,
. , R,
.
education <read.csv("http://datasets.flowingdata.com/education.csv",
header=TRUE)
, , , ,
. :
, , ,
/ .
, ,
, ,
. :
X Y ,
.
,
. dist() .
,
, , .
ed.dis <- dist(education[,2:7])
ed.dis, .
, ( )
. , /
, .
. .
5151 --? ,
. cmdscale().
, ,
, .
ed.mds <- cmdscale(ed.dis)
ed.mds, ,
. , plot().
, . 7.27.
x<- ed.mds[,1]
y<- ed.mds[,2]
plot(x,y)
dc
hi
na
.c
om
. .
: , . , ,
, text(), ,
, . 7.28.
la
plot(x, y, type="n")
sk
text(x, y, labels=education$state)
265
266
7.
sk
la
dc
hi
na
.c
om
. 7.27. ,
. 7.28.
,
. , , , .
, ,
.
, ,
.
, , ( dropout_colors),
, .
. 7.29. ,
, . 7.25.
. 7.29.
hi
na
.c
om
, ? ,
, . 7.30. , ,
. , ,
, ? , ?
.
sk
la
dc
,
. ,
, , , .
267
7.
. , mclust,
. mclust , .
, . 7.31.
library(mclust)
ed.mclust <- Mclust(ed.mds)
plot(ed.mclust, data=ed.mds)
. 7.30.
la
dc
hi
na
.c
om
. .
, ? , ,
.
sk
268
PDF- Illustrator
, - ,
. .
, , .
. ,
. , ,
, .
. 7.31.
sk
la
dc
hi
na
.c
om
, , ,
. ,
, ,
, . , .
,
. ,
269
7.
, .
, -
, ?
,
: .
, -, .
, , ,
: ,
.
'
. . 7.32
, Weather Underground ( ,
2, ) 1980 2005 .
, ,
? ,
. , ,
, , ,
, .
la
dc
hi
na
.c
om
, -,
, ,
.
, . 7.33. ,
, , ,
, , ? .
sk
270
, 3,
, . 7.34?
, - , FlowingData
?
,
. 7.35.
, .
sk
la
dc
hi
na
.c
om
. 7.33.
271
7.
. 7.35. ,
la
dc
hi
na
.c
om
. 7.34. FlowingData
sk
272
,
. , R
boxplot(), ,
273
(. 7.36).
,
.
,
;
,
25
;
25 .
. 7.36. ,
, , ,
, ( ) .
, ,
( ). ,
Feedburner, -, , ,
.
sk
la
dc
hi
na
.c
om
,
. ,
. ,
, .
, , , -
, .
, , ,
, ,
.
7.
,
, . ,
. , ,
, , , ,
? , , .
,
, .
la
dc
hi
na
.c
om
.
, .
,
, . ,
, , :
. .
sk
274
sk
la
dc
hi
na
.c
om
, :
. . ,
,
, .
,
.
.
, .
, .
R,
Python SVG.
ActionScript Flash.
8.
, .
,
, , .
, - - .
, .
, , ,
.
, , .
,
.
New York Times ,
. ,
, ,
.
.
,
, .
, .
,
. , , , ( )
. ,
, ,
, ,
.
- .
la
dc
hi
na
.c
om
sk
276
,
. ,
. , , - ,
, , , .
, .
Google Bing Maps. API ,
JavaScript.
, , , .
API .
, ,
Google Microsoft. , ,
, , ,
. , ,
, ,
' , .
, ,
. , ,
?
, ,
, .
,
.
, .
: ,
, ,
, , ,
.
.
, - . Geocoder.
us . ,
, Google Maps Latitude
Longitude Popup. Google Maps,
(Pierre Gorissen), ,
.
na
.c
om
,
.
. Google, Yahoo, Geocoder.us, Mediawiki
API . Geopy
Python .
sk
la
dc
hi
Geopy. , ,
, .
(, ).
277
Google Microsoft
,
API,
,
-.
278
8.
Geocoder.us, http://geocoder.us ,
. API.
Latitude Longitude Popup, www.gorissen.info/Pierre/maps/ ,
Google Maps. ,
.
Geopy, http://code.google.com/p/geopy/
Python. API .
Geopy, http://book.flowingdata.com/ch08/
geocode/costcos-limited.csv. CSV-, -
Costco , .
.
geocode-locations.py,
, .
from geopy import geocoders
import csv
http://
code.google.com/
apis/maps/signup.
html, -
API- Google
Maps API.
.
API- , .
Google.
API- g_api_key, ,
.
g_api_key = 'INSERT_YOUR_API_KEY_HERE'
g= geocoders.Google(g_api_key)
costcos-limited.csv .
, .
costcos = csv.reader(open('costcos-limited.csv'), delimiter=',')
next(costcos) # Skip header
sk
la
dc
hi
na
.c
om
# Print header
. costcos-geocoded.csv.
, .
Address,City,State,Zip Code,Latitude,Longitude
1205N. Memorial Parkway,Huntsville,Alabama,358015930,34.7430949,
86.6009553
3650Galleria Circle,Hoover,Alabama,352442346,33.377649,86.81242
8251Eastchase Parkway,Montgomery,Alabama,36117,32.363889,86.150884
5225Commercial Boulevard,Juneau,Alaska,998017210,58.3592,134.483
330West Dimond Blvd,Anchorage,Alaska,995151950,61.143266,149.884217
, ?! -
. , ,
. ,
, .
try:
place, (lat, lng) = list(g.geocode(full_addy, exactly_one=False))
[0]
print full_addy + "," + str(lat) + "," + str(lng)
except:
print full_addy + ",NULL,NULL"
,
, .
Python , .
? Geopy
Geocoder.us.
, , .
. ,
. 8.1.
sk
la
dc
hi
na
.c
om
, ,
, .
279
8.
. 8.1.
R ,
. maps.
. Package Installer install.packages()
. , .
library(maps)
la
dc
hi
na
.c
om
.
Costco, ,
,
URL.
sk
280
costcos <read.csv("http://book.flowingdata.com/ch08/geocode/costcos-geocoded
.csv", sep=",")
. ,
( ,
).
, .
,
Costco. ,
. 8.2.
map(database="state")
. 8.2.
( Costco),
symbols(). ,
6, ,
, , - -
. add TRUE,
, .
symbols(costcos$Longitude, costcos$Latitude,
circles=rep(1, length(costcos$Longitude)), inches=0.05, add=TRUE)
sk
la
dc
hi
na
.c
om
. 8.3. , circles
, ,
inches 0,05, . ,
, .
281
8.
. 8.3. Costco
, , ,
, ,
. 8.4. , ,
-.
map(database="state", col="#cccccc")
symbols(costcos$Longitude, costcos$Latitude, bg="#e2373f", fg="#ffffff",
lwd=0.5, circles=rep(1, length(costcos$Longitude)),
inches=0.05, add=TRUE)
, ,
. Costco
.
la
dc
hi
na
.c
om
. 8.3
,
, .
.
sk
282
. 8.4.
283
- , .
. , . ?
, , map()
. ,
, Costco
, , . 8.5.
map(database="world", col="#cccccc")
symbols(costcos$Longitude, costcos$Latitude, bg="#e2373f", fg="#ffffff",
lwd=0.3, circles=rep(1, length(costcos$Longitude)),
inches=0.03, add=TRUE)
. 8.5. Costco
, . ,
,
Illustrator ,
.
, , ,
Costco .
region.
.c
om
na
"Washington"), col="#cccccc")
dc
hi
sk
la
R ,
,
,
,
/ ,
284
8.
, . 8.6,
, ,
.
.
,
,
. -
.
,
.
,
Foursquare,
.
,
lines().
, ,
,
( )
.
,
.
faketrace <read.csv("http://book.flowingdata.com/ch08/
points/fake-trace.txt",sep="\t")
hi
na
.c
om
map(database="world", col="#cccccc")
sk
la
dc
. 8.6. Costco
,
R faketrace. ,
. ,
,
.
latitude
longitude
46.31658
3.515625
61.27023
69.609375
34.30714
105.468750
26.11599
122.695313
30.14513
22.851563
35.17381
63.632813
21.28937
99.492188
36.17336
115.180664
, . lines(). (col)
(lwd).
lines(faketrace$longitude, faketrace$latitude, col="#bb4cd4", lwd=2)
, ,
Costco. , , . 8.7.
symbols(faketrace$longitude, faketrace$latitude, lwd=1, bg="#bb4cd4",
fg="#ffffff", circles=rep(1, length(faketrace$longitude)), inches=0.05,
.c
om
add=TRUE)
dc
hi
na
. 8.7.
sk
la
, .
, .
285
8.
, . ,
,
. 8.8.
map(database="world", col="#cccccc")
for (i in 2:length(faketrace$longitude)-1) {
lngs <- c(faketrace$longitude[8], faketrace$longitude[i])
lats <- c(faketrace$latitude[8], faketrace$latitude[i])
lines(lngs, lats, col="#bb4cd4", lwd=2)
}
. 8.8.
,
.
,
. , , ,
R, , ,
.
, . .
la
dc
hi
na
.c
om
sk
286
,
. ,
. ,
- , .
.
, ,
, ?! , .
,
, .
2008 1000 15 19 .
GeoCommons.
.
, , Costco.
, , ,
symbols() , .
sqrt() (fertility).
fertility <read.csv("http://book.flowingdata.com/ch08/points/adol-fertility.csv")
map(world, fill = FALSE, col = "#cccccc")
symbols(fertility$longitude, fertility$latitude,
circles=sqrt(fertility$ad_fert_rate), add=TRUE,
inches=0.15, bg="#93ceef", fg="#ffffff")
. 8.9. , , ,
,
. ,
, . ,
summary() R.
summary(fertility$ad_fert_rate)
Min.
1stQu.
Median
Mean
3rdQu.
Max.
NAs
3.20
16.20
39.00
52.89
78.20
201.40
1.00
sk
la
dc
hi
na
.c
om
, ,
. , ,
, - . , ,
,
,
( ), ,
, . . 8.10.
287
8.
la
dc
hi
na
.c
om
. 8.9.
sk
288
. 8.10.
,
. , ,
, .
, ,
. ,
,
: . ,
,
.
sk
la
dc
hi
na
.c
om
.
, . 8.11.
,
.
. 8.11.
289
290
8.
, ColorBrewer
, , ,
.
, , , ,
- (
,
),
. 8.12.
. 8.12. ,
ColorBrewer
. 8.13. ,
ColorBrewer
la
dc
hi
na
.c
om
,
,
,
,
, . 8.13.
sk
. 8.14. ,
ColorBrewer
,
,
, , ,
(. 8.14).
, . -, ,
, -,
, . ,
Python Scalable Vector Graphics (SVG),
.
. ,
.
, ( ,
) http://book.flowingdata.com/ch08/regions/unemploymentaug2010.txt. .
. , ,
. ,
, . ,
, , .
(
) .
. R,
, Python SVG.
, .
.
(,
. 8.15) (Wikimedia
Commons) http://commons.wikimedia.
org/wiki/File:USA_Counties_with_FIPS_and_
names.svg.
PNG
SVG. ,
SVG.
counties.svg ,
.
sk
la
dc
hi
na
.c
om
, SVG, ,
, , ,
XML-, ,
, HTML-.
. 8.15.
291
292
8.
SVG-
XML-,
.
,
SVG-
.
XML, XML ,
: .
, SVG-
, , , . SVG , .
, <path> (),
. 8.16. . .
,
. style .
sk
la
dc
hi
na
.c
om
. 8.16. SVG-
, <path> style? ,
- CSS, . fill
(), ,
SVG-, . ,
3000, .
, Beautiful Soup, Python , XML HTML
- .
, SVG-
. colorize_svg.py.
CSV- SVG- Beautiful
Soup, .
293
import csv
from BeautifulSoup import BeautifulSoup
CSV- , ,
csv.reader(). , r open() ,
, , , .
reader = csv.reader(open('unemployment-aug2010.txt', 'r'), delimiter=",")
SVG- .
svg = open('counties.svg', 'r').read()
. , .
, SVG. ? ?
. ,
. , , !
SVG- id,
.
, . ,
01, 001. id- SVG-
: 01001.
,
. , ,
, .
: SVG CSV,
.
,
-, Python
dictionary ().
. (
) (FIPS), :
unemployment = {}
min_value = 100; max_value = 0
for row in reader:
om
try:
.c
na
dc
hi
unemployment[full_fips] = rate
sk
la
except:
pass
SVG,
,
id.
,
.
8.
BeautifulSoup SVG-.
, ,
. findAll()
.
soup = BeautifulSoup(svg, selfClosingTags=['defs','sodipodi:namedview'])
paths = soup.findAll('path')
, ColorBrewer, Python.
.
colors = ["#F1EEF6", "#D4B9DA", "#C994C7", "#DF65B0", "#DD1C77", "#980043"]
. , style
SVG. , , ,
.
stroke #ffffff, .
, , .
path_style = 'font-size:12px;fill-rule:nonzero;stroke:#fffff;strokeopacity:
1;stroke-width:0.1;stroke-miterlimit:4;strokedasharray:
none;stroke-linecap:butt;marker-start:none;strokelinejoin:
bevel;fill:'
fill , ,
.
! (
, )
. 10, , ,
2, .
for pin paths:
if p['id'] not in ["State_Lines", "separator"]:
# pass
try:
rate = unemployment[p['id']]
la
dc
hi
na
.c
om
except:
sk
294
continue
if rate > 10:
color_class = 5
elif rate > 8:
color_class = 4
295
: SVG-.
prettify(). ,
.
: http://
book.flowingdata.
print soup.prettify()
Python
SVG- , , colored_map.svg (. 8.17).
sk
la
dc
hi
na
.c
om
, , Illustrator -
, Firefox, Safari Chrome,
, , . 8.18. ,
2010 , .
, -
, , , .
.
com/ch08/regions/
colorize_svg.py.txt.
8.
. 8.18. ,
, , ,
. SVG- Illustrator,
, ,
(:
).
la
dc
hi
na
.c
om
, ,
, .
,
.
sk
296
. ,
6 2
. 10 ;
8 10 , 6 8, . .
.
4 , .
, ,
6,9, 8,7 10,8 . ,
6,9 , 6,9 8,7,
8,7 10,8,
10,8 . ,
, .
, .
colors = ["#f2f0f7", "#cbc9e2", "#9e9ac8", "#6a51a3"]
for, .
if rate > 10.8:
color_class = 3
elif rate > 8.7:
color_class = 2
elif rate > 6.9:
color_class = 1
else:
color_class = 0
.c
om
, .
. 8.19. ,
.
dc
hi
na
. 8.19.
sk
la
,
, . Python .
297
8.
,
, , . ,
,
colorize_svg.py , .
unemployment = {}
rates_only = [] # To calculate quartiles
min_value = 100; max_value = 0; past_header = False
for row in reader:
if not past_header:
past_header = True
continue
try:
full_fips = row[1] + row[2]
rate = float( row[5].strip() )
unemployment[full_fips] = rate
rates_only.append(rate)
except:
pass
.
# Quartiles
rates_only.sort()
q1_index = int( 0.25* len(rates_only) )
q1= rates_only[q1_index]
# 6.9
# 8.7
# 10.8
la
dc
hi
na
.c
om
sk
298
, , ,
, .
,
.
. 8.18, , ,
, . 8.20.
299
. 8.20. ,
om
.
. , , SVG-
, ( ),
, .
, .
sk
la
dc
hi
na
.c
,
, 2008 . Excel-
http://data.worldbank.org/indicator/SH.H2O.SAFE.UR.ZS/countries.
CSV- FlowingData: http://
book.flowingdata.com/ch08/worldmap/water-source1.txt.
.
.
8.
, , ,
CSV-.
, . , (
, ?),
1990 2008 .
.
SVG, : http://en.wikipedia.org/wiki/
File:BlankMap-World6.svg. SVG-
, . . 8.21,
, .
. 8.21.
la
dc
hi
na
.c
om
SVG- . ,
XML, -, .
id, style .
, . .
, , .
sk
300
,
ISO 3166-1 alpha 3. SVG- , ,
ISO 3166-1 alpha 2. ,
, , . ,
, ,
http://en.wikipedia.org/wiki/ISO_3166-1. Excel,
. : alpha 2,
alpha 3. : http://book.flowingdata.com/ch08/
worldmap/country-codes.txt.
. -.
path,
CSS . , .
generate_css.py ,
SVG- CSV-. CSV, CSV-
, .
import csv
codereader = csv.reader(open('country-codes.txt', 'r'), delimiter="\t")
waterreader = csv.reader(open('water-source1.txt', 'r'), delimiter="\t")
,
alpha 3 alpha 2.
alpha3to2= {}
i= 0
next(codereader)
for row in codereader:
alpha3to2[row[1]] = row[0]
om
fill = "#08589E"
fill = "#4EB3D3"
dc
hi
na
.c
sk
la
301
8.
1) CSV;
2) ;
3) alpha 2, alpha 3 CSV,
2008 , alpha 2;
4) , ;
5) CSS .
generate_css.py style.css. CSS
:
.af { fill: #7BCCC4}
.al { fill: #08589E }
.dz { fill: #4EB3D3}
.ad { fill: #08589E }
.ao { fill: #CCEBC5}
.ag { fill: #08589E }
.ar { fill: #08589E }
.am { fill: #08589E }
.aw { fill: #08589E }
.au { fill: #08589E }
la
dc
hi
na
.c
om
CSS. , ,
.af #7BCCC4.
sk
302
style.css .
SVG- 135- ,
.oceanxx. , ,
, (. 8.22).
- 100 ,
. ,
.
. 8.22. ,
sk
la
dc
hi
na
.c
om
, ,
( - )
,
.
. 8.22
,
SVG-
Illustrator
.
,
,
(. 8.23).
. 8.23.
303
8.
, , . , ,
, , .
,
, .
, ! .
,
, .
4 , ,
, ,
,
. ,
.
,
, .
la
dc
hi
na
.c
om
6
. , . 8.24,
.
, .
,
.
sk
304
,
2009 ,
(. 8.25).
,
,
' .
. 8.24.
305
, 20042009 .
2004 5,5%
2000 2004 .
,
6,3% 2003 .
.
2005 5,1%
0,4
2004 .
2006 4,6%
,
10%.
2007 5,5%
2008 5,8%
2003 ., ,
.
2008 .
1
8,9 .
2009 9,8%
1983 .,
10,1%.
,
,
0,1%.
(%)
: . : FlowingData, http://flowingdata.com
0 2 4 6 8 10+
( ) .
20042006 (. 8.26).
, , .
2004 5,5%
om
2000 2004 .
,
6,3% 2003 .
.
2005 5,1%
2006 4,6%
0,4
2004 .
,
10%.
sk
la
dc
hi
na
.c
306
8.
2008 (. 8.27),
, , , .
2009 . (. 8.28).
4 , '
.
2008 5,8%
2009 9,8%
2008 .
1
8,9 .
1983 .,
10,1%.
,
,
0,1%.
. 8.27. 2008 .
-
sk
la
dc
hi
na
.c
om
,
, OpenZoom
Viewer (http://
openzoom.org),
,
.
. 8.28. 2009 .
, FlowingData,
,
. OpenZoom Viewer,
,
, .
' ,
, 3000.
, , .
, ,
.
- . ,
(. 8.29).
. 8.29.
,
, ,
. , .
,
. ,
, ,
. ,
2005 2009 , ,
. , 2005 2009
.
, . ,
, .
.
Excel
Python-,
, . 8.30.
om
,
,
,
.
.
. 8.31
2005 .
sk
la
dc
hi
na
.c
. 8.32
2009 .
,
.
. 8.30. 20052009 .
307
8.
. 8.31. 2005 .
la
dc
hi
na
.c
om
. 8.32. 2009 .
sk
308
,
, . ,
, 4 . :
,
.
, ,
(. 8.33).
309
. 8.33.
.
, -
.
.
sk
la
dc
hi
na
.c
om
,
Walmart (. 8.34).
, , 1962 2010 .
.
,
. , , ,
, . ,
, Walmart .
Walmart
http://datafl.
ws/197.
310
8.
. 8.34. , Walmart
, , Flash
ActionScript, .
, Target (. 8.35),
.
sk
la
dc
hi
na
.c
om
Target
: http://datafl.
ws/198.
. 8.35. , Target
311
, , . -,
, ,
.
, , ,
, .
, Walmart.
, .
, , . ,
, , ;
. ,
( ), ,
, .
Walmart ActionScript.
Modest Maps ActionScript,
.
. http://book.flowingdata.com/ch08/Openings_
src.zip. ,
.
la
dc
hi
na
.c
om
5, ,
ActionScript
Flare,
Adobe Flex Builder.
ActionScript
. ,
, Flex Builder
:
, ,
. ,
, Flex Builder
, , ,
ActionScript 3 Adobe.
sk
. 8.36.
ActionScript-
Flex Builder 3
,
.
Import (), . 8.36.
Modest
Maps http://
modestmaps.com.
Adobe Flex Builder
Adobe Flash
Builder.
,
,
.
,
http://book.
flowingdata.com/
ch08/Openings_src.
zip.
8.
. 8.37.
. 8.38. Openings
la
dc
hi
na
.c
om
Openings.as .
sk
312
import com.modestmaps.Map;
import com.modestmaps.TweenMap;
import com.modestmaps.core.MapExtent;
import com.modestmaps.geo.Location;
import com.modestmaps.mapproviders.OpenStreetMapProvider;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.ColorMatrixFilter;
import flash.geom.ColorTransform;
import flash.text.TextField;
import flash.net.*;
Modest Maps,
,
Flash.
.
, .
,
:
. 8.39.
com, modestmaps
Map. ,
ActionScript.
public class Openings extends Sprite
Flash-: (width), (height), (background color)
(frame rate).
[SWF(width="900", height="450", backgroundColor="#ffffff", frameRate="32")]
,
Map ( ).
private var stageWidth:Number = 900;
private var stageHeight:Number = 450;
private var map:Map;
private var mapWidth:Number = stageWidth;
private var mapHeight:Number = stageHeight;
hi
na
.c
om
sk
la
dc
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
313
8.
// Initialize map
map = new TweenMap(mapWidth, mapHeight, true, new OpenStreetMapProvider());
map.setExtent(new MapExtent(50.259381, 24.324408, -128.320313, -59.941406));
addChild(map);
Illustrator,
. ActionScript Flash (stage).
, ,
. (top left).
mapWidth mapHeight, ,
OpenStreetMap. ,
,
.
MapExtent() ,
, .
,
.
, addChild() . . 8.40
, .
Play Flex Builder,
Run Run Openings.
la
dc
hi
na
.c
om
. 8.40. OpenStreetMap
sk
314
Openings, ,
. , ,
. , ,
Microsoft (. 8.41) Yahoo (. 8.42).
315
. 8.41. Microsoft
.
Modest
Maps
, ,
.
. 8.42. Yahoo
.c
om
, . ,
,
, . mat
20 0 1. , , ,
- .
hi
na
dc
0.0656,0,44.7,0.24688,0.48752,0.0656,0,44.7,0,0,0,1,0];
sk
la
,
ActionScript,
http://livedocs.
adobe.com/flash/9.0/
ActionScriptLang
RefV3/flash/filters/
ColorMatrixFilter.
html.
8.
. 8.43, , , ,
, .
.
. 8.43.
color
transform.
map.grid.transform.colorTransform =
new ColorTransform(-1,-1,-1,1,255,255,255,0);
la
dc
hi
na
.c
om
, , . 8.44.
sk
316
. 8.44. -
,
, . , ,
, ,
.
makeButton() Openings.
public function makeButton(clip:Sprite, name:String, labelText:String,
action:Function):Sprite
{
var button:Sprite = new Sprite();
button.name = name;
clip.addChild(button);
var label:TextField = new TextField();
label.name = 'label';
label.selectable = false;
label.textColor = 0xffffff;
label.text = labelText;
label.width = label.textWidth + 4;
label.height = label.textHeight + 3;
button.addChild(label);
button.graphics.moveTo(0, 0);
button.graphics.beginFill(0xFDBB30, 1);
button.graphics.drawRect(0, 0, label.width, label.height);
button.graphics.endFill();
button.addEventListener(MouseEvent.CLICK, action);
button.useHandCursor = true;
button.mouseChildren = false;
button.buttonMode = true;
return button;
}
,
.
, makeButton(), (zoom in)
(zoom out).
// Draw navigation buttons
om
na
.c
dc
hi
sk
la
317
8.
addChild(navButtons);
buttons.push(makeButton(navButtons, 'plus', '+', map.zoomIn));
buttons.push(makeButton(navButtons, 'minus', '', map.zoomOut));
var nextX:Number = 0;
for(var i:Number = 0; i< buttons.length; i++) {
var currButton:Sprite = buttons[i];
Sprite(buttons[i]).scaleX = 3;
Sprite(buttons[i]).scaleY = 3;
Sprite(buttons[i]).x = nextX;
nextX += 3*Sprite(buttons[i]).getChildByName('label').width;
}
navButtons.x = 2; navButtons.y = map.height-navButtons.height-2;
}
, , , .
Openings() - drawNavigation().
, . 8.45.
. 8.45.
la
dc
hi
na
.c
om
, . ,
.
sk
318
Walmart
.
XML- URL. ,
onLoadLocations().
var urlRequest:URLRequest =
new URLRequest('http://projects.flowingdata.com/walmart/walmarts_new.xml');
urlLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, onLoadLocations);
urlLoader.load(urlRequest);
, onLoadLocations().
XML- ,
. ,
navButtons.
private var urlLoader:URLLoader;
private var locations:Array = new Array();
private var openingDates:Array = new Array();
onLoadLocations().
locations, ( ) openingDates.
private function onLoadLocations(e:Event):void {
var xml:XML = new XML(e.target.data);
for each(var w:* in xml.walmart) {
locations.push(new Location(w.latitude, w.longitude));
openingDates.push(String(w.opening_date));
}
markers = new MarkersClip(map, locations, openingDates);
map.addChild(markers);
}
MarkersClip. , ,
com flowingdata, gps.
MarkersClip com flowingdata gps.
, , .
, , .
,
.
import com.modestmaps.Map;
om
import com.modestmaps.events.MapEvent;
.c
import flash.display.Sprite;
na
import flash.events.TimerEvent;
dc
hi
import flash.geom.Point;
sk
la
import flash.utils.Timer;
319
8.
Modest Maps, .
MarkersClip().
, , , ,
.
protected var map:Map;
// Base map
, ,
MarkersClip() - , ,
. .
la
dc
hi
na
.c
om
storesPerYear ,
. , ,
.
,
storesPerYear. ,
,
.
, .
sk
320
this.map = map;
this.x = map.getWidth() / 2;
this.y = map.getHeight() / 2;
this.locations = locations;
setPoints();
setMarkers();
this.openingDates = openingDates;
var tempIndex:int = 0;
storesPerYear = [1,0,1,1,0,2,5,5,5,15,17,19,25,19,27,
39,34,43,54,150,63,87,99,110,121,142,125,131,178,
163,138,156,107,129,53,60,66,80,105,106,114,96,
130,118,37];
timePerYear = totalTime / storesPerYear.length;
, setMarkers(), , setPoints(),
() .
protected function setMarkers():void
{
markers = new Array();
for (var i:int = 0; i< locations.length; i++)
om
sk
la
dc
hi
na
.c
321
8.
}
}
, com flowingdata
gps Marker.as. ( , , .)
, play(), .
.
, -
. : ,
.
playNextStore() play()
. startAnimation() onNextYear()
.
private function playNextStore(e:TimerEvent):void
{
Marker(markers[markerIndex]).play();
markerIndex++;
}
. 8.46. Walmart
la
dc
hi
na
.c
om
, ( . 8.46),
, -
, ,
, .
sk
322
,
. MapEvent Modest Maps
, MarkersClip.as. , ,
: ,
onMapStartZooming().
this.map.addEventListener(MapEvent.START_ZOOMING,onMapStartZooming);
this.map.addEventListener(MapEvent.STOP_ZOOMING,onMapStopZooming);
this.map.addEventListener(MapEvent.ZOOMED_BY,onMapZoomedBy);
this.map.addEventListener(MapEvent.START_PANNING,onMapStartPanning);
this.map.addEventListener(MapEvent.STOP_PANNING,onMapStopPanning);
this.map.addEventListener(MapEvent.PANNED,onMapPanned);
, . 8.47.
. 8.47. , Walmart
Walmart ,
. - ,
. . , Target
. Costco , , ,
, , ,
.
sk
la
dc
hi
na
.c
om
.
,
, McDonalds Starbucks. ,
, .
.
323
8.
,
.
, ,
, ,
, ,
.
,
. ,
. . ? :
,
, ,
, , .
; ,
Flash;
.
la
dc
hi
na
.c
om
- ,
.
ActionScript Flash,
JavaScript. .
, ,
, . ,
, .
. , .
sk
324
,
. , . ,
, ,
, , .
sk
la
dc
hi
na
.c
om
, , ,
, .
, ,
, .
. , , ,
, .
326
9.
,
. , ,
.
,
.
, ,
.
,
,
. -
. 9.1.
,
?
hi
na
.c
om
. ,
, ,
.
New York Times
.
,
,
,
,
.
.
,
.
sk
la
dc
. 9.1. . ,
,
,
- .
,
.
.
R, ,
, , , -
. - , ,
. , -
, , .
, ,
. .
-, ?
, ,
, : .
, , , , ,
, . . ,
, .
, . -
Netflix.
,
, .
.
, ,
, , , , ,
- , , .
,
; , Facebook, Twitter
, , , .
. 9.2, , ,
. , , . ,
, 8, ,
- .
sk
la
dc
hi
na
.c
om
,
,
20 2009 .
. .
, . . ,
. -
. . 9.3.
. 9.2 ,
.
327
http://
datafl.ws/19n.
9.
. 9.2.
la
dc
hi
na
.c
om
. 9.3.
sk
328
, ,
- .
- , ,
.
, , , ,
, ,
, .
.
. . 9.4 ,
2000 2008 .
. 9.4. 2000
. 10 ,
FlowingData, , 2000 2008
. ,
, Forbes.
. ,
, .
: ,
. , , , ,
.
dc
hi
na
.c
om
, .
, , , OkCupid ,
-.
, .
sk
la
,
OkCupid . , , ,
329
9.
-
-
-
-
: 526 OkCupid.com
, .
,
,
. . 9.5, ,
, , .
OkCupid,
. -, -!
! .
,
,
, ,
, .
, , ,
. , FloatingSheep ,
. 9.5. ( -
OkCupid)
: , -
,
. ,
. ,
.
?
,
.
la
dc
hi
na
.c
om
(. 9.6).
,
, ,
, .
FloatingSheep
.
sk
330
. 9.6. ,
, - .
, . ,
( ).
1 , . , ,
, . ,
, . .
.
, ,
.
,
. ,
.
,
.
, , ,
.
, . ,
R Excel ,
.
.
,
. , ,
,
.
. 9.7
,
. .
sk
la
dc
hi
na
.c
om
, , ,
.
. 9.8 , ,
,
.
. 9.7.
331
9.
. 9.8.
la
dc
hi
na
.c
om
,
, (. 9.9).
sk
332
. 9.9.
, -
. , . 9.10.
. 9.10.
, .
( ) , .
, .
, . . 9.11,
.
(David McCandless)* Always With
Honor**. . ,
;
.
om
,
. , . 9.12 ,
Data-Driven Documents*** (Mike Bostock).
, .
na
.c
* . TED 2010
hi
http://www.ted.com/talks/lang/ru/david_mccandless_the_beauty_of_data_visualization.html. . .
sk
la
dc
333
9.
A
B
C
D
E
1.
2. /
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
F
J
H
I
J
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
la
dc
hi
na
.c
om
sk
334
,
. 9.13, .
,
.
335
. , ,
, , .
. 9.12.
.c
om
. 9.13.
sk
la
dc
hi
na
,
. . 9.14 , ,
.
, .
(Lee
Byron)
(Martin
Wattenberg)
.
,
-
Protovis D3.
9.
4
1
1/2
1 .
1 1/2 .
1 1/2 .
816
:
1 (56 )
1
1/2
4
6
250
30 .
180
2 .
la
dc
hi
na
.c
om
sk
336
. 9.14.
'
: , ( , ,
) .
.
. , ,
.
, .
'
,
,
, , .
. ,
. -,
? ,
,
?
, ?
, ,
,
, , .
, .
, , .
, ,
, .
, .
.
,
.
om
? .
,
, .
sk
la
dc
hi
na
.c
, ,
. ,
, , .
, ? .
, , ,
337
9.
. ,
, .
, .
. ,
, .
, .
, , ,
. ,
. , ,
.
, , ,
data-, .
, ,
, , .
: . ?
? ?
? ,
. , .
la
dc
hi
na
.c
om
, ,
, . .
.
,
. ,
. ,
, .
sk
338
: . ,
, . ,
, ,
. , ,
, .
,
, , .
. .