-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathdata-visualization-from-matplotlib-to-ggplot2.html
2958 lines (2803 loc) · 187 KB
/
data-visualization-from-matplotlib-to-ggplot2.html
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
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<!--[if lt IE 9 ]><html class="no-js oldie" lang="zh-hant-tw"> <![endif]-->
<!--[if IE 9 ]><html class="no-js oldie ie9" lang="zh-hant-tw"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!-->
<html class="no-js" lang="zh-hant-tw">
<!--<![endif]-->
<head>
<!--- basic page needs
================================================== -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="author" content="Lee Meng" />
<title>LeeMeng - 淺談資料視覺化以及 ggplot2 實踐</title>
<!--- article-specific meta data
================================================== -->
<meta name="description" content="這篇主要描述自己以往在利用 Python 做資料視覺化時常犯的思維瑕疵,而該思維如何在接觸 R 的 ggplot2 以後得到改善。本文會試著說明資料視覺化的本質為何,以及在設計視覺化時,概念上應該包含什麼要素以及步驟。最後展示如何透過 ggplot2 活用前述的概念,來實際做資料視覺化。" />
<meta name="keywords" content="R, visualization, ggplot2, 資料視覺化" />
<meta name="tags" content="R" />
<meta name="tags" content="visualization" />
<meta name="tags" content="ggplot2" />
<meta name="tags" content="資料視覺化" />
<!--- Open Graph Object metas
================================================== -->
<meta property="og:image" content="https://leemeng.tw/theme/images/background/neven-krcmarek-145603-unsplash.jpg" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://leemeng.tw/data-visualization-from-matplotlib-to-ggplot2.html" />
<meta property="og:title" content="淺談資料視覺化以及 ggplot2 實踐" />
<meta property="og:description" content="這篇主要描述自己以往在利用 Python 做資料視覺化時常犯的思維瑕疵,而該思維如何在接觸 R 的 ggplot2 以後得到改善。本文會試著說明資料視覺化的本質為何,以及在設計視覺化時,概念上應該包含什麼要素以及步驟。最後展示如何透過 ggplot2 活用前述的概念,來實際做資料視覺化。" />
<!-- mobile specific metas
================================================== -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSS
================================================== -->
<!--for customized css in individual page-->
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/bootstrap.min.css">
<!--for showing toc navigation which slide in from left-->
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/toc-nav.css">
<!--for responsive embed youtube video-->
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/embed_youtube.css">
<!--for prettify dark-mode result-->
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/darkmode.css">
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/base.css">
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/vendor.css">
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/main.css">
<link rel="stylesheet" type="text/css" href="https://leemeng.tw/theme/css/ipython.css">
<link rel="stylesheet" type="text/css" href='https://leemeng.tw/theme/css/progress-bar.css' />
<!--TiqueSearch-->
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400">
<link rel="stylesheet" href="https://leemeng.tw/theme/tipuesearch/css/normalize.css">
<link rel="stylesheet" href="https://leemeng.tw/theme/tipuesearch/css/tipuesearch.css">
<!-- script
================================================== -->
<script src="https://leemeng.tw/theme/js/modernizr.js"></script>
<script src="https://leemeng.tw/theme/js/pace.min.js"></script>
<!-- favicons
================================================== -->
<link rel="shortcut icon" href="../theme/images/favicon.ico" type="image/x-icon"/>
<link rel="icon" href="../theme/images/favicon.ico" type="image/x-icon"/>
<!-- Global Site Tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-106559980-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments)};
gtag('js', new Date());
gtag('config', 'UA-106559980-1');
</script>
</head>
<body id="top">
<!-- header
================================================== -->
<header class="s-header">
<div class="header-logo">
<a class="site-logo" href="../index.html"><img src="https://leemeng.tw/theme/images/logo.png" alt="Homepage"></a>
</div>
<!--navigation bar ref: http://jinja.pocoo.org/docs/2.10/tricks/-->
<nav class="header-nav-wrap">
<ul class="header-nav">
<li>
<a href="../index.html#home">Home</a>
</li>
<li>
<a href="../index.html#about">About</a>
</li>
<li>
<a href="../index.html#projects">Projects</a>
</li>
<li class="current">
<a href="../blog.html">Blog</a>
</li>
<li>
<a href="https://demo.leemeng.tw">Demo</a>
</li>
<li>
<a href="../books.html">Books</a>
</li>
<li>
<a href="../index.html#contact">Contact</a>
</li>
</ul>
<!--<div class="search-container">-->
<!--<form action="../search.html">-->
<!--<input type="text" placeholder="Search.." name="search">-->
<!--<button type="submit"><i class="im im-magnifier" aria-hidden="true"></i></button>-->
<!--</form>-->
<!--</div>-->
</nav>
<a class="header-menu-toggle" href="#0"><span>Menu</span></a>
</header> <!-- end s-header -->
<!--TOC navigation displayed when clicked from left-navigation button-->
<div id="tocNav" class="overlay" onclick="closeTocNav()">
<div class="overlay-content">
<div id="toc"><ul><li><a class="toc-href" href="#" title="淺談資料視覺化以及 ggplot2 實踐">淺談資料視覺化以及 ggplot2 實踐</a><ul><li><a class="toc-href" href="#目錄" title="目錄">目錄</a></li><li><a class="toc-href" href="#資料視覺化是資料與圖的直接映射?" title="資料視覺化是資料與圖的直接映射?">資料視覺化是資料與圖的直接映射?</a></li><li><a class="toc-href" href="#資料視覺化應該是-.." title="資料視覺化應該是 ..">資料視覺化應該是 ..</a><ul><li><a class="toc-href" href="#先確認觀眾及目的" title="先確認觀眾及目的">先確認觀眾及目的</a></li><li><a class="toc-href" href="#正式定義" title="正式定義">正式定義</a></li><li><a class="toc-href" href="#一個簡單例子" title="一個簡單例子">一個簡單例子</a></li><li><a class="toc-href" href="#圖像的分層文法" title="圖像的分層文法">圖像的分層文法</a></li></ul></li><li><a class="toc-href" href="#ggplot2-實踐_1" title="ggplot2 實踐">ggplot2 實踐</a><ul><li><a class="toc-href" href="#載入-packages" title="載入 packages">載入 packages</a></li><li><a class="toc-href" href="#載入資料-+-簡單資料處理" title="載入資料 + 簡單資料處理">載入資料 + 簡單資料處理</a></li><li><a class="toc-href" href="#簡單資料視覺化" title="簡單資料視覺化">簡單資料視覺化</a></li><li><a class="toc-href" href="#基本層數缺一不可" title="基本層數缺一不可">基本層數缺一不可</a></li><li><a class="toc-href" href="#另個簡單例子" title="另個簡單例子">另個簡單例子</a></li><li><a class="toc-href" href="#複雜例子" title="複雜例子">複雜例子</a></li></ul></li><li><a class="toc-href" href="#結語_1" title="結語">結語</a></li><li><a class="toc-href" href="#References" title="References">References</a></li></ul></li></ul></div>
</div>
</div>
<!--custom images with icon shown on left nav-->
<!--the details are set in `pelicanconf.py` as `LEFT_NAV_IMAGES`-->
<article class="blog-single">
<!-- page header/blog hero, use custom cover image if available
================================================== -->
<div class="page-header page-header--single page-hero" style="background-image:url(https://leemeng.tw/theme/images/background/neven-krcmarek-145603-unsplash.jpg)">
<div class="row page-header__content narrow">
<article class="col-full">
<div class="page-header__info">
<div class="page-header__cat">
<a href="https://leemeng.tw/tag/r.html" rel="tag">R</a>
<a href="https://leemeng.tw/tag/visualization.html" rel="tag">visualization</a>
<a href="https://leemeng.tw/tag/ggplot2.html" rel="tag">ggplot2</a>
<a href="https://leemeng.tw/tag/zi-liao-shi-jue-hua.html" rel="tag">資料視覺化</a>
</div>
</div>
<h1 class="page-header__title">
<a href="https://leemeng.tw/data-visualization-from-matplotlib-to-ggplot2.html" title="">
淺談資料視覺化以及 ggplot2 實踐
</a>
</h1>
<ul class="page-header__meta">
<li class="date">2018-04-14 (Sat)</li>
<li class="page-view">
6,546 views
</li>
</ul>
</article>
</div>
</div> <!-- end page-header -->
<div class="KW_progressContainer">
<div class="KW_progressBar"></div>
</div>
<div class="row blog-content" style="position: relative">
<div id="left-navigation">
<div id="search-wrap">
<i class="im im-magnifier" aria-hidden="true"></i>
<div id="search">
<form action="../search.html">
<div class="tipue_search_right"><input type="text" name="q" id="tipue_search_input" pattern=".{2,}" title="想搜尋什麼呢?(請至少輸入兩個字)" required></div>
</form>
</div>
</div>
<div id="toc-wrap">
<a title="顯示/隱藏 文章章節">
<i class="im im-menu" aria-hidden="true" onclick="toggleTocNav()"></i>
</a>
</div>
<div id="social-wrap" style="cursor: pointer">
<a class="open-popup" title="訂閱最新文章">
<i class="im im-newspaper-o" aria-hidden="true"></i>
</a>
</div>
<div id="social-wrap">
<a href="https://www.facebook.com/sharer/sharer.php?u=https%3A//leemeng.tw/data-visualization-from-matplotlib-to-ggplot2.html" target="_blank" title="分享到 Facebook">
<i class="im im-facebook" aria-hidden="true"></i>
</a>
</div>
<div id="social-wrap">
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A//leemeng.tw/data-visualization-from-matplotlib-to-ggplot2.html&title=%E6%B7%BA%E8%AB%87%E8%B3%87%E6%96%99%E8%A6%96%E8%A6%BA%E5%8C%96%E4%BB%A5%E5%8F%8A%20ggplot2%20%E5%AF%A6%E8%B8%90&summary=%E9%80%99%E7%AF%87%E4%B8%BB%E8%A6%81%E6%8F%8F%E8%BF%B0%E8%87%AA%E5%B7%B1%E4%BB%A5%E5%BE%80%E5%9C%A8%E5%88%A9%E7%94%A8%20Python%20%E5%81%9A%E8%B3%87%E6%96%99%E8%A6%96%E8%A6%BA%E5%8C%96%E6%99%82%E5%B8%B8%E7%8A%AF%E7%9A%84%E6%80%9D%E7%B6%AD%E7%91%95%E7%96%B5%EF%BC%8C%E8%80%8C%E8%A9%B2%E6%80%9D%E7%B6%AD%E5%A6%82%E4%BD%95%E5%9C%A8%E6%8E%A5%E8%A7%B8%20R%20%E7%9A%84%20ggplot2%20%E4%BB%A5%E5%BE%8C%E5%BE%97%E5%88%B0%E6%94%B9%E5%96%84%E3%80%82%E6%9C%AC%E6%96%87%E6%9C%83%E8%A9%A6%E8%91%97%E8%AA%AA%E6%98%8E%E8%B3%87%E6%96%99%E8%A6%96%E8%A6%BA%E5%8C%96%E7%9A%84%E6%9C%AC%E8%B3%AA%E7%82%BA%E4%BD%95%EF%BC%8C%E4%BB%A5%E5%8F%8A%E5%9C%A8%E8%A8%AD%E8%A8%88%E8%A6%96%E8%A6%BA%E5%8C%96%E6%99%82%EF%BC%8C%E6%A6%82%E5%BF%B5%E4%B8%8A%E6%87%89%E8%A9%B2%E5%8C%85%E5%90%AB%E4%BB%80%E9%BA%BC%E8%A6%81%E7%B4%A0%E4%BB%A5%E5%8F%8A%E6%AD%A5%E9%A9%9F%E3%80%82%E6%9C%80%E5%BE%8C%E5%B1%95%E7%A4%BA%E5%A6%82%E4%BD%95%E9%80%8F%E9%81%8E%20ggplot2%20%E6%B4%BB%E7%94%A8%E5%89%8D%E8%BF%B0%E7%9A%84%E6%A6%82%E5%BF%B5%EF%BC%8C%E4%BE%86%E5%AF%A6%E9%9A%9B%E5%81%9A%E8%B3%87%E6%96%99%E8%A6%96%E8%A6%BA%E5%8C%96%E3%80%82&source=https%3A//leemeng.tw/data-visualization-from-matplotlib-to-ggplot2.html" target="_blank" title="分享到 LinkedIn">
<i class="im im-linkedin" aria-hidden="true"></i>
</a>
</div>
<div id="social-wrap">
<a href="https://twitter.com/intent/tweet?text=%E6%B7%BA%E8%AB%87%E8%B3%87%E6%96%99%E8%A6%96%E8%A6%BA%E5%8C%96%E4%BB%A5%E5%8F%8A%20ggplot2%20%E5%AF%A6%E8%B8%90&url=https%3A//leemeng.tw/data-visualization-from-matplotlib-to-ggplot2.html&hashtags=r,visualization,ggplot2,zi-liao-shi-jue-hua" target="_blank" title="分享到 Twitter">
<i class="im im-twitter" aria-hidden="true"></i>
</a>
</div>
<!--custom images with icon shown on left nav-->
</div>
<div class="col-full blog-content__main">
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>這篇主要描述自己以往在利用 Python 做資料視覺化 (data visualization) 時常犯的思維瑕疵,而該思維如何在接觸 R 的 <a href="http://ggplot2.org/">ggplot2</a> 以後得到改善。</p>
<p>本文會試著說明資料視覺化的本質為何,以及在設計視覺化時,概念上應該包含什麼要素以及步驟。最後展示如何透過 ggplot2 活用前述的概念,來實際做資料視覺化。</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="目錄">目錄<a class="anchor-link" href="#目錄">¶</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>文章內容大致上會分為以下幾個小節:</p>
<ul>
<li><a href="#資料視覺化是資料與圖的直接映射?">資料視覺化是資料與圖的直接映射?</a></li>
<li><a href="#資料視覺化應該是-..">資料視覺化應該是 ..</a></li>
<li><a href="#ggplot2-實踐">ggplot2 實踐</a></li>
<li><a href="#結語">結語</a></li>
<li><a href="#References">References</a></li>
</ul>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="資料視覺化是資料與圖的直接映射?">資料視覺化是資料與圖的直接映射?<a class="anchor-link" href="#資料視覺化是資料與圖的直接映射?">¶</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>身為一個 Python 起家的資料科學家,在做資料視覺化的時候,我很自然地使用 Python ecosystem 裡像是 <a href="https://matplotlib.org/">matplotlib</a> 以及 <a href="https://seaborn.pydata.org/">seaborn</a> 等繪圖 packages。針對手中的資料,我會想辦法找到一個「對應」的圖然後把資料塞進去。簡單無腦 <em>(:3 」∠)</em></p>
<p>舉例來說,當我們手上有三個變數 x, y, z 且其各自的資料型態為:</p>
<ul>
<li>x: <a href="https://zh.wikibooks.org/zh-hant/%E7%B5%B1%E8%A8%88%E5%AD%B8/%E7%B5%B1%E8%A8%88%E8%B3%87%E6%96%99">定量變數 (quantitative)</a></li>
<li>y: 定量變數</li>
<li>z: <a href="https://zh.wikibooks.org/zh-hant/%E7%B5%B1%E8%A8%88%E5%AD%B8/%E7%B5%B1%E8%A8%88%E8%B3%87%E6%96%99">定性變數(categorical)</a></li>
</ul>
<p>則我們想要進行資料視覺化的時候有幾種選擇:</p>
<ul>
<li>想分析 x, y -> 都是定量資料 -> 散佈圖 (scatter plot)</li>
<li>想分析 x, z -> 一定量一定性 -> 長條圖 (bar chart)</li>
</ul>
<p>在這,「資料視覺化」的定義是一種映射關係 (mapping):也就是如何將資料直接對應到某個「特定」圖表形式(折線圖、散佈圖 etc.)。基本上這種映射關係在做簡單的分析的時候沒有什麼問題,但是當想要同時分析/呈現的變數超過兩個 (例: x & y & z )的時候就不容易找到適合的圖。一個折衷的方法是我們把變數兩兩畫圖做比較,但這樣會侷限我們能分析的資料維度數目,錯過一些有趣的洞見。</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="資料視覺化應該是-..">資料視覺化應該是 ..<a class="anchor-link" href="#資料視覺化應該是-..">¶</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="先確認觀眾及目的">先確認觀眾及目的<a class="anchor-link" href="#先確認觀眾及目的">¶</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>在完成一些 <a href="#References">ggplot2 的 tutorials</a> 後,可以發現資料視覺化一般依用途可以分為兩種:</p>
<ul>
<li>探索、了解資料特性</li>
<li>說故事:將探索過後得到的洞見 (insight) 傳達給其他人</li>
</ul>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<center>
<img src="https://leemeng.tw/images/ggplot2/data-vis-purpose.png" style="mix-blend-mode: initial;"/>
</center>
<center>
搞清楚資料視覺化的目的以及觀眾是重要的第一步
(<a href="https://www.datacamp.com/courses/data-visualization-with-ggplot2-1" target="_blank">圖片來源</a>)
<br/>
<br/>
</center>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>依照目的以及觀眾的不同,資料視覺化的方式會有所不同。一個常見的例子是當我們第一次接觸某個資料集。這時候資料視覺化的觀眾是自己,目的是在最短的時間了解資料特性。則這時我們在做圖的時候的要求就可以很寬鬆,像是不加上標題,或是只要能做出自己能理解的視覺化即可。</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="正式定義">正式定義<a class="anchor-link" href="#正式定義">¶</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>在確認觀眾及目的以後,我們終於可以開始進行資料視覺化了!資料視覺化的定義因人而異,而這邊我想給出一個非常直觀的定義:</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<blockquote>
<p>
資料視覺化是將資料中的變數映射到視覺變數上,進而有效且有意義地呈現資料的樣貌
<br/>
<br/>
</p>
</blockquote>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>一些常見且肉眼容易識別的視覺變數 / 刻度(visual variables / scales)包含:</p>
<ul>
<li>位置(x / y axis)</li>
<li>顏色(color)</li>
<li>大小(size)</li>
<li>透明程度(alpha)</li>
<li>填滿(fill)</li>
<li>形狀(shape)</li>
</ul>
<p>用更口語的方式來解釋:在做資料視覺化的時候,我們希望能將</p>
<ul>
<li>肉眼難以分析的資料</li>
</ul>
<p>對應到:</p>
<ul>
<li>肉眼容易解讀的視覺元素</li>
</ul>
<p>透過這個映射關係,我們可以將原本的變數的數值變化也映射到視覺變數的變化。而因為我們人類容易區別視覺變數的變化(位置差異、大小長度變化 etc),我們能更容易地理解原始資料的樣貌、變化以及模式。</p>
<p>舉例來說,我們可以:</p>
<ul>
<li>把不同捷運路線(文湖線、板南線)對應到不同顏色</li>
<li>把各國的 GDP 對應到點的大小</li>
<li>把某個資料的年份對應到 X 軸,越右邊代表越接近現代</li>
</ul>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="一個簡單例子">一個簡單例子<a class="anchor-link" href="#一個簡單例子">¶</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>事實上,我們可能平常每天都在做資料視覺化而不自知。比方說我們有一個數列 <code>y</code>:</p>
<div class="highlight"><pre><span></span><span class="n">y</span> <span class="o">=</span> <span class="p">[</span><span class="o">-</span><span class="mf">2.055</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.132</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.522</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.229</span><span class="p">,</span> <span class="mf">0.013</span> <span class="o">..</span> <span class="p">]</span>
</pre></div>
<p>光是看這個數字,肉眼無法看出什麼模式,但我們可以簡單畫個圖:</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<img src="https://leemeng.tw/images/ggplot2/simple-visual-encoding.png" style="mix-blend-mode: initial;width:70%;"/>
<br/>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>這邊我們利用視覺變數「Y軸位置」來呈現數值的變化,可以馬上看出數列裡頭的值都落在 -3 到 3 之間,而這是因為我們肉眼很容易辨別「位置」這個視覺變數的變化。</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="圖像的分層文法">圖像的分層文法<a class="anchor-link" href="#圖像的分層文法">¶</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>在 <a href="http://byrneslab.net/classes/biol607/readings/wickham_layered-grammar.pdf">A Layered Grammar of Graphics</a> 裡頭,<a href="http://hadley.nz/">Hadley Wickham</a> 闡述所謂的圖像(包含由資料視覺化產生的圖像)實際上如同我們平常使用的語言,是有文法的。而其文法可以拆成 7 個部分(層)。前述的</p>
<ul>
<li>原始資料 = 資料層(Data)</li>
<li>視覺變數層(Visual variables = Aesthetics)</li>
</ul>
<p>則恰好是這個架構裡頭最底下的兩層。視覺變數是我為了方便理解建立的名詞,在原文以及 ggplot2 裡頭被稱作 <strong>Aesthetics</strong>。(中文翻作「美學」,當初看好久也無法理解啊 (╯°Д°)╯ ┻━┻)</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<center>
<img src="https://leemeng.tw/images/ggplot2/layered-grammar-of-graphics.png" style="mix-blend-mode: initial;width:80%;"/>
</center>
<center>
圖像的分層文法
(<a href="https://www.datacamp.com/courses/data-visualization-with-ggplot2-1" target="_blank">圖片來源</a>)
<br/>
<br/>
</center>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>看到這你一定會「哇靠那我每次畫個圖都要實作七層?」。實際上不需要,上面幾層像是主題(Theme)比較像是裝飾品,給我們更大的自由與彈性來訂製(customize)視覺化結果。在下一節我們會看到,ggplot2 會自動幫我們設定合適的主題或座標。(如果沒特別指定的話)</p>
<p>但一般而言,一個圖像最基本的組成是底下三層。也就是除了前述的兩層(資料、視覺變數)以外還需要加上</p>
<ul>
<li>幾何圖形層(Geometries)</li>
</ul>
<p>為何還要這層?假如我們有了資料,決定了視覺變數(第二層,例:把資料中的變數 A 對應到 X 軸;變數 B 對應到 Y 軸)後,實際上就可以畫一個充滿點(point)的散佈圖了不是嗎?</p>
<p>這樣的思維如同<a href="#資料視覺化是資料與圖的直接映射?">資料視覺化是資料與圖的直接映射?</a>部分所提到的,有所瑕疵。如果變數 A 是分類型變數(Categorical)的話,單純以<strong>點</strong>為圖形的散佈圖就會變得十分難以理解(下圖左);這時候以<strong>長條</strong>為圖形(下圖右)的方式會比較清楚:</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<center>
<img src="https://leemeng.tw/images/ggplot2/make-geom-layer-independent.png" style="mix-blend-mode: initial;"/>
</center>
<center>
獨立幾何圖形層,讓資料視覺化不再侷限於「我要畫什麼圖」,而是「我想要怎麼畫」
<br/>
<br/>
</center>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>將「幾何圖形」這個選擇獨立出來一層讓我們在資料視覺化的時候有更大的彈性。有了這些基本概念以後,我們可以開始嘗試使用 ggplot2 來實際做一些資料視覺化。</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="ggplot2-實踐_1">ggplot2 實踐<a class="anchor-link" href="#ggplot2-實踐">¶</a></h2><p>在這個章節裡頭我們將使用 Kaggle 的 <a href="https://www.kaggle.com/residentmario/ramen-ratings/data">Ramen Ratings</a> 來做資料視覺化。這資料集紀錄了各國泡麵所得到的星星數。首先我們要先載入這次的主角:R 語言裡頭最著名的視覺化 package ggplot2。<a href="http://yaojenkuo.io/r_programming/ch14#(1">dplyr</a> 則是 R 語言用來處理資料的 package。</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="載入-packages">載入 packages<a class="anchor-link" href="#載入-packages">¶</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class="highlight hl-ipython3"><pre><span></span><span class="n">library</span><span class="p">(</span><span class="n">ggplot2</span><span class="p">)</span>
<span class="n">library</span><span class="p">(</span><span class="n">dplyr</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>值得一提的是它們都是同屬於 <a href="https://medium.com/datainpoint/tidyverse-r-%E8%AA%9E%E8%A8%80%E5%AD%B8%E7%BF%92%E4%B9%8B%E6%97%85%E7%9A%84%E6%96%B0%E8%B5%B7%E9%BB%9E-3b01ca6a348c">TidyVerse</a> 的一員。TidyVerse 是 R 裡頭常被用來做資料科學的 packages 的集合,以 Python 來說大概就像是 Pandas + Matplotlib + Numpy 的感覺吧。</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="載入資料-+-簡單資料處理">載入資料 + 簡單資料處理<a class="anchor-link" href="#載入資料-+-簡單資料處理">¶</a></h3><p>如下註解所示,這邊將資料集讀入,做一些簡單的資料型態轉變後選擇一部分的資料集(subset)來做之後的視覺化:</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class="highlight hl-ipython3"><pre><span></span><span class="c1"># 將 CSV 檔案載入成資料框架(dataframe)</span>
<span class="n">ramen_all</span> <span class="o"><-</span> <span class="n">read</span><span class="o">.</span><span class="n">csv</span><span class="p">(</span><span class="s2">"datasets//ramen-ratings.csv"</span><span class="p">)</span>
<span class="c1"># 將「星星數」轉成定量資料</span>
<span class="n">ramen_all</span><span class="err">$</span><span class="n">Stars</span> <span class="o"><-</span> <span class="k">as</span><span class="o">.</span><span class="n">numeric</span><span class="p">(</span><span class="n">ramen_all</span><span class="err">$</span><span class="n">Stars</span><span class="p">)</span>
<span class="c1"># Subset 資料,選擇拉麵數量前幾多的國家方便 demo</span>
<span class="n">ramen</span> <span class="o"><-</span> <span class="n">ramen_all</span> <span class="o">%>%</span>
<span class="nb">filter</span><span class="p">(</span><span class="n">Country</span> <span class="o">%</span><span class="k">in</span>% count(ramen_all, Country, sort = TRUE)[1:6, 1, drop=TRUE]) %>%
<span class="nb">filter</span><span class="p">(</span><span class="n">Style</span> <span class="o">%</span><span class="k">in</span>% count(ramen_all, Style, sort = TRUE)[1:4, 1 , drop=TRUE])
</pre></div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>除了我們使用 dplyr 的 <code>filter</code> 依照條件 subset 資料集以外,值得一提的是 pipe 運算子 <code>%>%</code>。它是前面提到的 TidyVerse 裡頭的 packages 共享的介面(interface),將前一個函示的輸出當作下一個函式的輸入,讓我們可以把運算全部串(chain)在一起。在 Linux 裡頭就是如同 <code>|</code> 的存在。</p>
<p>而實際我們的資料長這樣:</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class="highlight hl-ipython3"><pre><span></span><span class="n">head</span><span class="p">(</span><span class="n">ramen</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
<div class="output_html rendered_html output_subarea">
<table class="table table-striped table-responsive">
<thead><tr><th scope="col">Review..</th><th scope="col">Brand</th><th scope="col">Variety</th><th scope="col">Style</th><th scope="col">Country</th><th scope="col">Stars</th><th scope="col">Top.Ten</th></tr></thead>
<tbody>
<tr><td>2580 </td><td>New Touch </td><td>T's Restaurant Tantanmen </td><td>Cup </td><td>Japan </td><td>37 </td><td> </td></tr>
<tr><td>2579 </td><td>Just Way </td><td>Noodles Spicy Hot Sesame Spicy Hot Sesame Guan-miao Noodles</td><td>Pack </td><td>Taiwan </td><td> 7 </td><td> </td></tr>
<tr><td>2578 </td><td>Nissin </td><td>Cup Noodles Chicken Vegetable </td><td>Cup </td><td>USA </td><td>16 </td><td> </td></tr>
<tr><td>2577 </td><td>Wei Lih </td><td>GGE Ramen Snack Tomato Flavor </td><td>Pack </td><td>Taiwan </td><td>19 </td><td> </td></tr>
<tr><td>2575 </td><td>Samyang Foods </td><td>Kimchi song Song Ramen </td><td>Pack </td><td>South Korea </td><td>47 </td><td> </td></tr>
<tr><td>2574 </td><td>Acecook </td><td>Spice Deli Tantan Men With Cilantro </td><td>Cup </td><td>Japan </td><td>39 </td><td> </td></tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="簡單資料視覺化">簡單資料視覺化<a class="anchor-link" href="#簡單資料視覺化">¶</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>有了資料,讓我們再確定一下資料視覺化的目的及觀眾:</p>
<ul>
<li>目的:探索資料</li>
<li>觀眾:我們自己</li>
</ul>
<p>這樣的條件讓我們知道視覺化的條件是快速做出結果,不需調整如標題、主題的設定。</p>
<p>現在讓我們問一些簡單的問題。像是</p>
<ol>
<li>泡麵的包裝(碗裝、袋裝等)各佔多少比例?</li>
<li>不同國家各有多少泡麵在資料集裡頭?</li>
<li>不同包裝的泡麵所得到的星星總數,在不同國家有什麼差異嗎?</li>
</ol>
<p>其中一種能解決第一個問題的資料視覺化是:</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class="highlight hl-ipython3"><pre><span></span><span class="n">ggplot</span><span class="p">(</span><span class="n">ramen</span><span class="p">,</span> <span class="n">aes</span><span class="p">(</span><span class="n">x</span> <span class="o">=</span> <span class="n">Style</span><span class="p">))</span> <span class="o">+</span> <span class="n">geom_bar</span><span class="p">()</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
</div>
<div class="output_area">
<div class="output_png output_subarea">
<img src="data:image/png;base64,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
QACBVAT+H+5PGMGtxImPAAAAAElFTkSuQmCC"/>
</div>
</div>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>在</p>
<div class="highlight"><pre><span></span><span class="nf">ggplot</span><span class="p">(</span><span class="n">ramen</span><span class="p">,</span><span class="w"> </span><span class="nf">aes</span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Style</span><span class="p">))</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nf">geom_bar</span><span class="p">()</span>
</pre></div>
<p>裡頭,我們實際上已經建構了圖表最基礎的三層元素:</p>
<ul>
<li>資料層: <code>ramen</code> 告訴 ggplot2 使用此資料框架</li>
<li>視覺變數層: <code>aes(x = Style)</code> 告訴 ggplot2 我們將使用「 X 軸位置」這個視覺變數來反映泡麵包裝 <code>Style</code> 這個變數的變化<ul>
<li>因為包裝的值有四種可能,你可以想像 ggplot2 已經準備好要幫你在 X 軸上的四個位置畫圖</li>
<li><code>aes</code> 是我們前面提到 <strong>aesthetics</strong> 的縮寫</li>
</ul>
</li>
<li>幾何圖形層: <code>geom_bar()</code> 告訴 ggplot 去計算對應到 <code>x</code> 視覺變數的變數裡頭,所有值的出現次數後將結果以<strong>長條</strong>來呈現</li>
</ul>
<p>我們通常透過 <code>+</code> 來疊加不同層的結果。</p>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="基本層數缺一不可">基本層數缺一不可<a class="anchor-link" href="#基本層數缺一不可">¶</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<p>上面的例子很簡單,但假如我們沒有指定幾何圖形層的話,圖會長什麼樣子呢?</p>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="inner_cell">
<div class="input_area">
<div class="highlight hl-ipython3"><pre><span></span><span class="n">ggplot</span><span class="p">(</span><span class="n">ramen</span><span class="p">,</span> <span class="n">aes</span><span class="p">(</span><span class="n">x</span> <span class="o">=</span> <span class="n">Style</span><span class="p">))</span>
</pre></div>
</div>
</div>
</div>
<div class="output_wrapper">
<div class="output">
<div class="output_area">
</div>
<div class="output_area">
<div class="output_png output_subarea">
<img src="data:image/png;base64,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