Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Tokyo.R #97 Data Visualization
Search
kilometer
March 19, 2022
Technology
1
340
Tokyo.R #97 Data Visualization
第97回Tokyo.Rの初心者セッションでトークした際のスライドです。
kilometer
March 19, 2022
Tweet
Share
More Decks by kilometer
See All by kilometer
TokyoR#111_ANOVA
kilometer
2
890
TokyoR109.pdf
kilometer
1
480
TokyoR#108_NestedDataHandling
kilometer
0
820
TokyoR#107_R_GeoData
kilometer
0
440
SappoRo.R_roundrobin
kilometer
0
150
TokyoR#104_DataProcessing
kilometer
1
700
TokyoR#103_DataProcessing
kilometer
0
900
TokyoR#102_RMarkdown
kilometer
1
660
TokyoR#101_RegressionAnalysis
kilometer
0
470
Other Decks in Technology
See All in Technology
CodePipelineのアクション統合から学ぶAWS CDKの抽象化技術 / codepipeline-actions-cdk-abstraction
gotok365
5
210
Amazon CloudWatch を使って NW 監視を行うには
o11yfes2023
0
170
ブラウザのレガシー・独自機能を愛でる-Firefoxの脆弱性4選- / Browser Crash Club #1
masatokinugawa
1
490
“パスワードレス認証への道" ユーザー認証の変遷とパスキーの関係
ritou
1
600
コスト最適重視でAurora PostgreSQLのログ分析基盤を作ってみた #jawsug_tokyo
non97
0
440
MCPを活用した検索システムの作り方/How to implement search systems with MCP #catalks
quiver
12
6.8k
От ручной разметки к LLM: как мы создавали облако тегов в Lamoda. Анастасия Ангелова, Data Scientist, Lamoda Tech
lamodatech
0
750
DuckDB MCPサーバーを使ってAWSコストを分析させてみた / AWS cost analysis with DuckDB MCP server
masahirokawahara
0
1.3k
AIと開発者の共創: エージェント時代におけるAIフレンドリーなDevOpsの実践
bicstone
1
320
白金鉱業Meetup_Vol.18_AIエージェント時代のUI/UX設計
brainpadpr
1
170
クラウド開発環境Cloud Workstationsの紹介
yunosukey
0
180
「経験の点」の位置を意識したキャリア形成 / Career development with an awareness of the “point of experience” position
pauli
4
100
Featured
See All Featured
How to Ace a Technical Interview
jacobian
276
23k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Product Roadmaps are Hard
iamctodd
PRO
52
11k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
104
19k
Building an army of robots
kneath
304
45k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Done Done
chrislema
183
16k
Documentation Writing (for coders)
carmenintech
69
4.7k
Code Review Best Practice
trishagee
67
18k
Transcript
#97 @kilometer00 2022.03.19 BeginneR Session -- Data Visualization --
Who!? 誰だ?
Who!? 名前: 三村 @kilometer 職業: ポスドク (こうがくはくし) 専⾨: ⾏動神経科学(霊⻑類) 脳イメージング
医療システム⼯学 R歴: ~ 10年ぐらい 流⾏: むし社
宣伝!!(書籍の翻訳に参加しました。)
BeginneR Session
BeginneR
Beginne R Advance d Hoxo_m If I have seen further
it is by standing on the shoulders of Giants. -- Sir Isaac Newton, 1676
Before After BeginneR Session BeginneR BeginneR
"a" != "b" # is A in B? ブール演算⼦ Boolean
Algebra [1] TRUE 1 %in% 10:100 # is A in B? [1] FALSE
George Boole 1815 - 1864 A Class-Room Introduc2on to Logic
h7ps://niyamaklogic.wordpress.com/c ategory/laws-of-thoughts/ Mathema;cian Philosopher &
ブール演算⼦ Boolean Algebra A == B A != B George
Boole 1815 - 1864 A | B A & B A %in% B # equal to # not equal to # or # and # is A in B? wikipedia
Programing
Programing
Programing Write Run Read Think Write Run Read Think Communicate
Share
Text Image Information Intention Data decode encode Data analysis feedback
≠
Text Image First, A. Next, B. Then C. Finally D.
time Intention encode "Frozen" structure A B C D 8me value α β
σʔλ 情報のうち意思伝達・解釈・処理に 適した再利⽤可能なもの 国際電気標準会議(International Electrotechnical Commission, IEC)による定義
σʔλ 情報のうち意思伝達・解釈・処理に 適した再利⽤可能なもの ใ 実存を符号化した表象
σʔλ ใͷ͏ͪҙࢥୡɾղऍɾॲཧʹ దͨ͠࠶ར༻Մೳͳͷ ใ ࣮ଘΛූ߸Խͨ͠ද ࣮ଘ ؍ͷ༗ແʹΑΒͣଘࡏ͍ͯ͠Δ ͷͦͷͷ ࣸ૾ʢූ߸Խʣ
ࣸ૾ Ϧϯΰ ʢ࣮ଘʣ Ϧϯΰ ʢใʣ mapping
ࣸ૾ (mapping) 𝑓: 𝑋 → 𝑌 𝑋 𝑌 ͋Δใͷू߹ͷཁૉΛɺผͷใͷू߹ͷ ͨͩͭͷཁૉʹରԠ͚ͮΔϓϩηε
ใྔ ࣮ଘ ใ σʔλ Ϧϯΰ ූ߸Խ
ใྔ ࣮ଘ ใ σʔλ Ϧϯΰ ූ߸Խ ใྔͷଛࣦ
Ϧϯΰ ࣸ૾ ϑϧʔπ ৭ ը૾ ࣮ଘ ใ νϟωϧ mapping
channel
𝑋 𝑌 𝑦! 𝑥! 𝑦" 𝑥" 𝑋 𝑌 𝑥! 𝑥"
𝑦! 𝑦" σʔλՄࢹԽ ࣸ૾ mapping
𝑋 𝑌 𝑦! 𝑥! 𝑦" 𝑥" 𝑋 𝑌 𝑥! 𝑥"
𝑦! 𝑦" σʔλՄࢹԽ ࣸ૾ mapping x axis, y axis, color, fill, shape, linetype, alpha… aesthetic channels ৹ඒతνϟωϧ
𝑋 𝑌 𝑦! 𝑥! 𝑦" 𝑥" 𝑋 𝑌 𝑥! 𝑥"
𝑦! 𝑦" σʔλՄࢹԽ ࣸ૾ mapping x axis, y axis, color, fill, shape, linetype, alpha… aesthetic channels ৹ඒతνϟωϧ ggplot(data = my_data) + aes(x = X, y = Y)) + goem_point() HHQMPUʹΑΔ࡞ਤ
࣮ଘ ࣸ૾ʢ؍ʣ σʔλ ࣸ૾ʢσʔλՄࢹԽʣ άϥϑ 𝑋 𝑌 𝑦! 𝑥! 𝑦"
𝑥" 𝑋 𝑌 𝑥! 𝑥" 𝑦! 𝑦" EBUB mapping aesthetic channels ৹ඒతνϟωϧ σʔλՄࢹԽ
ॳΊͯͷHHQMPU library(tidyverse) dat <- data.frame(tag = rep(c("a", "b"), each =
2), X = c(1, 3, 5, 7), Y = c(3, 9, 4, 2)) ggplot() + geom_point(data = dat, mapping = aes(x = X, y = Y))
ॳΊͯͷHHQMPU
ॳΊͯͷHHQMPU library(tidyverse) dat <- data.frame(tag = rep(c("a", "b"), each =
2), X = c(1, 3, 5, 7), Y = c(3, 9, 4, 2)) ggplot() + geom_point(data = dat, mapping = aes(x = X, y = Y)) EBUBGSBNFͷࢦఆ BFT ؔͷதͰ৹ඒతཁૉͱͯ͠มͱνϟωϧͷରԠΛࢦఆ ඳը։࢝Λએݴ ه߸Ͱͭͳ͙ BFT ؔͷҾ໊ EBUͷม໊ άϥϑͷछྨʹ߹ΘͤͨHFPN@ ؔΛ༻
library(tidyverse) dat <- data.frame(tag = rep(c("a", "b"), each = 2),
X = c(1, 3, 5, 7), Y = c(3, 9, 4, 2)) ggplot() + geom_point(data = dat, mapping = aes(x = X, y = Y)) + geom_path(data = dat, mapping = aes(x = X, y = Y)) ॳΊ͔ͯΒ൪ͷHHQMPU
ॳΊ͔ͯΒ൪ͷHHQMPU
HHQMPUίʔυͷॻ͖ํͷ৭ʑ ggplot() + geom_point(data = dat, mapping = aes(x =
X, y = Y)) + geom_path(data = dat, mapping = aes(x = X, y = Y)) ggplot(data = dat, mapping = aes(x = X, y = Y)) + geom_point() + geom_path() ggplot(data = dat) + aes(x = X, y = Y) + geom_point() + geom_path() ڞ௨ͷࢦఆΛHHQMPU ؔͷதͰߦ͍ɺҎԼলུ͢Δ͜ͱ͕Մೳ NBQQJOHͷใ͕ॻ͔ΕͨBFT ؔΛHHQMPU ؔͷ֎ʹஔ͘͜ͱͰ͖Δ
HHQMPUίʔυͷॻ͖ํͷ৭ʑ ggplot() + geom_point(data = dat, mapping = aes(x =
X, y = Y, color = tag)) + geom_path(data = dat, mapping = aes(x = X, y = Y)) ggplot(data = dat) + aes(x = X, y = Y) + # 括り出すのは共通するものだけ geom_point(mapping = aes(color = tag)) + geom_path() ϙΠϯτͷ৭ͷNBQQJOHΛࢦఆ
HHQMPUίʔυͷॻ͖ํͷ৭ʑ ggplot(data = dat) + aes(x = X, y =
Y) + geom_point(aes(color = tag)) + geom_path() ggplot(data = dat) + aes(x = X, y = Y) + geom_path() + geom_point(aes(color = tag)) ͋ͱ͔Β ͰॏͶͨཁૉ͕લ໘ʹඳը͞ΕΔ
library(tidyverse) dat <- data.frame(tag = rep(c("a", "b"), each = 2),
X = c(1, 3, 5, 7), Y = c(3, 9, 4, 2)) g <- ggplot(data = dat) + aes(x = X, y = Y) + geom_path() + geom_point(mapping = aes(color = tag)) HHQMPUը૾ͷอଘ ggsave(filename = "fig/demo01.png", plot = g, width = 4, height = 3, dpi = 150)
library(tidyverse) dat <- data.frame(tag = rep(c("a", "b"), each = 2),
X = c(1, 3, 5, 7), Y = c(3, 9, 4, 2)) g <- ggplot(data = dat) + aes(x = X, y = Y) + geom_path() + geom_point(mapping = aes(color = tag)) HHQMPUը૾ͷอଘ ggsave(filename = "fig/demo01.png", plot = g, width = 4, height = 3, dpi = 150) αΠζσϑΥϧτͰΠϯν୯ҐͰࢦఆ
library(tidyverse) dat <- data.frame(tag = rep(c("a", "b"), each = 2),
X = c(1, 3, 5, 7), Y = c(3, 9, 4, 2)) g <- ggplot(data = dat) + aes(x = X, y = Y) + geom_path() + geom_point(mapping = aes(color = tag)) HHQMPUը૾ͷอଘ ggsave(filename = "fig/demo01.png", plot = g, width = 10, height = 7.5, dpi = 150, units = "cm") # "cm", "mm", "in"を指定可能
HFNP@ ؔ܈ DGIUUQTXXXSTUVEJPDPNSFTPVSDFTDIFBUTIFFUT
ෳͷܥྻΛඳը͢Δ > head(anscombe) x1 x2 x3 x4 y1 y2 y3
y4 1 10 10 10 8 8.04 9.14 7.46 6.58 2 8 8 8 8 6.95 8.14 6.77 5.76 3 13 13 13 8 7.58 8.74 12.74 7.71 4 9 9 9 8 8.81 8.77 7.11 8.84 5 11 11 11 8 8.33 9.26 7.81 8.47 6 14 14 14 8 9.96 8.10 8.84 7.04 ggplot(data = anscombe) + geom_point(aes(x = x1, y = y1)) + geom_point(aes(x = x2, y = y2), color = "Red") + geom_point(aes(x = x3, y = y3), color = "Blue") + geom_point(aes(x = x4, y = y4), color = "Green") ͜Ε·ͰͷࣝͰؤுΔͱ͜͏ͳΔ
HHQMPUʹΑΔσʔλՄࢹԽ ࣮ଘ ࣸ૾ʢ؍ʣ σʔλ ࣸ૾ʢσʔλՄࢹԽʣ άϥϑ 𝑋 𝑌 𝑦! 𝑥!
𝑦" 𝑥" SBXEBUB 写像 aesthetic channels ৹ඒతνϟωϧ ՄࢹԽʹదͨ͠EBUBܗࣜ 変形 ਤͷͭͷ৹ඒతνϟωϧ͕ σʔλͷͭͷมʹରԠ͍ͯ͠Δ
> head(anscombe) x1 x2 x3 x4 y1 y2 y3 y4
1 10 10 10 8 8.04 9.14 7.46 6.58 2 8 8 8 8 6.95 8.14 6.77 5.76 3 13 13 13 8 7.58 8.74 12.74 7.71 4 9 9 9 8 8.81 8.77 7.11 8.84 5 11 11 11 8 8.33 9.26 7.81 8.47 6 14 14 14 8 9.96 8.10 8.84 7.04 > head(anscombe_long) key x y 1 1 10 8.04 2 2 10 9.14 3 3 10 7.46 4 4 8 6.58 5 1 8 6.95 6 2 8 8.14 ggplot(data = anscombe_long) + aes(x = x, y = y, color = key) + geom_point() ৹ඒతνϟωϧ Y࣠ Z࣠ ৭ ʹରԠ͢ΔมʹͳΔΑ͏มܗ ݟ௨͠ྑ͘γϯϓϧʹՄࢹԽͰ͖Δ
> head(anscombe) x1 x2 x3 x4 y1 y2 y3 y4
1 10 10 10 8 8.04 9.14 7.46 6.58 2 8 8 8 8 6.95 8.14 6.77 5.76 3 13 13 13 8 7.58 8.74 12.74 7.71 4 9 9 9 8 8.81 8.77 7.11 8.84 5 11 11 11 8 8.33 9.26 7.81 8.47 6 14 14 14 8 9.96 8.10 8.84 7.04 > head(anscombe_long) key x y 1 1 10 8.04 2 2 10 9.14 3 3 10 7.46 4 4 8 6.58 5 1 8 6.95 6 2 8 8.14 ৹ඒతνϟωϧ Y࣠ Z࣠ ৭ ʹରԠ͢ΔมʹͳΔΑ͏มܗ anscombe_long <- pivot_longer(data = anscombe, cols = everything(), names_to = c(".value", "key"), names_pattern = "(.)(.)") ԣσʔλ ॎσʔλ
ggplot(data = anscombe_long) + aes(x = x, y = y,
color = key) + geom_point() ggplot(data = anscombe_long) + aes(x = x, y = y, color = key) + geom_point() + facet_wrap(facets = . ~ key, nrow = 1) ਫ४ͰਤΛׂ͢Δ
Wide Long Nested input output pivot_longer pivot_wider group_nest unnest ggplot
visualization map output ggsave
Enjoy!! KMT©