Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
NDS#51
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kasacchiful
PRO
March 25, 2017
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
NDS#51
NDS#51 の LT で発表した資料
kasacchiful
PRO
March 25, 2017
More Decks by kasacchiful
See All by kasacchiful
俺流 AWS Step Functions 構築の流儀 / 20261005shinagawakai-aws-step-functions
kasacchiful
PRO
1
86
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
600
Step Functions Express ワークフローの使い所 / 20260725jawsug-niigata-sado
kasacchiful
PRO
1
140
Step FunctionsでAIエージェント × 人の承認を試す / 20260705jawsug-hokurikushinkansen-agentcore-hitl-workflow
kasacchiful
PRO
0
130
上越のサメ食文化を訪ねて - 新潟市民の初体験レポ / ssmjp-shark
kasacchiful
PRO
1
89
Rust on AWS でデータ分析 / 20260523iotlt-niigata-rust-on-aws
kasacchiful
PRO
0
71
Step Functionsで始めるサーバーレス入門 〜 つないで動かすAWSサーバーレス
kasacchiful
PRO
0
80
Amazon Q Developer CLI (現Kiro CLI) で作った 新潟ランチマップWebアプリのこれまでとこれから / 20260207jawsug-tochigi
kasacchiful
PRO
0
150
Amazon SageMaker Catalogの、AIエージェントによる自動データ分類機能を試してみようとしたが、できなかったので、代わりに最近構築したデータ連携基盤を紹介します / 20260117jawsug-fukui
kasacchiful
PRO
0
210
Featured
See All Featured
How to Talk to Developers About Accessibility
jct
2
560
New Earth Scene 8
popppiees
4
2.6k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
How to Ace a Technical Interview
jacobian
280
24k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
490
Making the Leap to Tech Lead
cromwellryan
135
10k
Embracing the Ebb and Flow
colly
88
5.2k
Statistics for Hackers
jakevdp
799
230k
Done Done
chrislema
187
17k
Amusing Abliteration
ianozsvald
1
330
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Transcript
RͱdplyrͱPipe @kasacchiful NDS#51 2017-03-25
Who am I ? • ּݪ (@kasacchiful) • ৽ׁࢢࡏॅ,
SIerۈ • Ruby͕͓ؾʹೖΓ • ࠷ۙSwiftͱ͔Rͱ͔JavaScriptʢϞόΠϧ༻్ʣ • JaSST৽ׁͷਓ
એ
JaSST’17 Niigata։࠵ • ࣌ɿ20174݄28ʢۚʣ13:00 ʙ 16:40 • ॴɿगϝοη தձٞࣨ 201B
• ςʔϚɿʮϢʔβϏϦςΟ / UXʯ • جௐߨԋɿḺຊ ప ࢯʮϢʔβΤΫεϖϦΤϯεͷཁૉͱϓϩηε——UX/UCD֓ʯ • ࣄྫհɿ༄ੜ େհ ࢯʮػೳத৺͔Βਓؒத৺ ʙཱιϦϡʔγϣϯζͷऔΓΈʙʯ • ࢀՃඅɿ2,160ԁʢ੫ࠐʣ • ࢀՃਃࠐडதʢਃࠐظݶɿ4/14ʢۚʣ18:00ʣ • ৄࡉ http://jasst.jp ʢʮJaSSTʯͰݕࡧʣ
ࠓͷ͓ • σʔλΛѻ͏ࡍʹɺσʔλΛ͍͘͢ܗ͢ΔΑͶ • Rͩͱdplyr͕ศརͩͶʢσϑΝΫτελϯμʔυʁʣ • Pipe͏ͱศརͩͶ
ΈΜͳେ͖R • Rͷࡉ͔͍આ໌͠·ͤΜ • Rࡢ͔Β৮Γͩͨ͠ॳ৺ऀͰ͢
σʔλܗ
σʔλੳ͢Δલʹσʔλܗ • R Ͱσʔλੳ • σʔλੳ͢Δࡍʹɺ࣮ࡍͷσʔλΛͦͷ··ѻ͏͜ ͱͳ͍ ѻ͍͍͢Α͏ʹσʔλΛܗ͢Δͣ
ྫ • Λʮʯʮ݄ʯʮʯʹׂ • ϥϯΫ͚ • ιʔτ • άϧʔϓԽͯ͠ूܭͯ͠ΈΔ •
σʔλΛJoinͨ͠ΓɺUnionͨ͠Γ
࠷ۙʹͳͬͨͭ • ֳͷࠃຽͷॕcsvσʔλ • ݱࡏɺϑΥʔϚοτ͕վળ͞Ε͍ͯ·͢ • ͜Εܗ͓ͯ͠͏Ͷ
dplyr • ߴʹσʔλϑϨʔϜΛѻ͏ϥΠϒϥϦ • pythonͳΒʮpandasʯ
dplyrΠϯετʔϧ install.packages('dplyr') # Πϯετʔϧ library(dplyr) # ϥΠϒϥϦͷಡࠐ # ศརπʔϧΛҰׅΠϯετʔϧ install.packages('tidyverse')
# ҰׅΠϯετʔϧ library(tidyverse) # Ұׅಡࠐ
ҰׅΠϯετʔϧ͞ΕΔ ϥΠϒϥϦ • ggplot2: for data visualisation. • dplyr :
for data manipulation. • tidyr: for data tidying. • readr: for data import. • purrr: for functional programming. • tibble: for tibbles, a modern re-imagining of data frames. ࢀর: https://github.com/tidyverse/tidyverse
ྫ • ৽ׁࢢͷΦʔϓϯσʔλΛͬͯΈΔ • ආॴͱ֎ආॴͷGISใΛϚοϐϯά • ܽଛʹΛิ͢ΔͨΊʹɺtidyr Λͬͯ·͢
library(ggplot2) library(ggmap) library(dplyr) library(tidyr) library(readr) niigata <- c(139.0255893, 37.8490611) data.indoor_shelter
<- read_csv("od_gis_10161_okunaihinanjo.csv") data.outdoor_shelter <- read_csv("od_gis_10162_okugaihinanbasho.csv") # ֎ආॴσʔλΧϥϜ͕Γͳ͍ͷͰɺՃͯ͠ɺආॴσʔλʹunion # ʢ࣮ࡍΧϥϜΓͳͯ͘unionՄೳʣ indoor <- data.indoor_shelter %>% rename(lon = longitude, lat = latitude) # ΧϥϜ໊Λมߋ dplyr::rename outdoor <- data.outdoor_shelter %>% rename(lon = longitude, lat = latitude) %>% # ΧϥϜ໊Λมߋ mutate(SAFIELD007 = NA, SAFIELD008 = NA, SAFIELD009 = NA, SAFIELD010 = NA) # ྻΛՃ dplyr::mutate data.shelter <- dplyr::union_all(indoor, outdoor) # SAFIELD005ʢ۠ʣͷܽଛิ data.shelter <- data.shelter %>% replace_na(list(SAFIELD005 = ‘ͦͷଞ')) # tidy::replace_na # ਤඳը get_googlemap(niigata, zoom = 10, maptype = "roadmap", language = "ja-JP") %>% ggmap(extent = "device", darken = c(0.2, "black")) + geom_point(data = data.shelter, aes(color = SAFIELD005,shape = SAFIELD006)) + theme_bw(base_family = "HiraKakuProN-W3") + xlab("") + ylab("") + labs(color = "۠", shape = "/֎", title = "৽ׁࢢͷ/֎ආॴ") + guides(shape = guide_legend(order = 1), colour = guide_legend(order = 2)) + theme(axis.ticks = element_blank(), axis.text = element_blank()) https://github.com/kasacchiful/nds51-sample
None
dplyrػೳ͕๛ • ࠔͬͨ࣌ͷνʔτγʔτ • https://www.rstudio.com/wp-content/uploads/ 2015/02/data-wrangling-cheatsheet.pdf • dplyr͚ͩͰͳ͘ɺtidyrΛͬͯσʔλܗ
Pipe
library(ggplot2) library(ggmap) library(dplyr) library(tidyr) library(readr) niigata <- c(139.0255893, 37.8490611) data.indoor_shelter
<- read_csv("od_gis_10161_okunaihinanjo.csv") data.outdoor_shelter <- read_csv("od_gis_10162_okugaihinanbasho.csv") # ֎ආॴσʔλΧϥϜ͕Γͳ͍ͷͰɺՃͯ͠ɺආॴσʔλʹunion # ʢ࣮ࡍΧϥϜΓͳͯ͘unionՄೳʣ indoor <- data.indoor_shelter %>% rename(lon = longitude, lat = latitude) # ΧϥϜ໊Λมߋ outdoor <- data.outdoor_shelter %>% rename(lon = longitude, lat = latitude) %>% # ΧϥϜ໊Λมߋ mutate(SAFIELD007 = NA, SAFIELD008 = NA, SAFIELD009 = NA, SAFIELD010 = NA) # ྻΛՃ data.shelter <- dplyr::union_all(indoor, outdoor) # SAFIELD005ʢ۠ʣͷܽଛิ data.shelter <- data.shelter %>% replace_na(list(SAFIELD005 = 'ͦͷଞ')) # ਤඳը get_googlemap(niigata, zoom = 10, maptype = "roadmap", language = "ja-JP") %>% ggmap(extent = "device", darken = c(0.2, "black")) + geom_point(data = data.shelter, aes(color = SAFIELD005,shape = SAFIELD006)) + theme_bw(base_family = "HiraKakuProN-W3") + xlab("") + ylab("") + labs(color = "۠", shape = "/֎", title = "৽ׁࢢͷ/֎ආॴ") + guides(shape = guide_legend(order = 1), colour = guide_legend(order = 2)) + theme(axis.ticks = element_blank(), axis.text = element_blank())
indoor <- data.indoor_shelter %>% rename(lon = longitude, lat = latitude)
outdoor <- data.outdoor_shelter %>% rename(lon = longitude, lat = latitude) %>% mutate(SAFIELD007 = NA, SAFIELD008 = NA, SAFIELD009 = NA, SAFIELD010 = NA) data.shelter <- dplyr::union_all(indoor, outdoor)
Pipe • %>% (dplyr::%>%) • ࠨลͷΛӈลͷؔͷୈҰҾʹ • x %>% f
#=> f(x) • x %>% f(y) #=> f(x, y) • x %>% f %>% g %>% h #=> h(g(f(x)))
Pipe data.library2014 <- read.csv("2014toshokanriyo.csv") head(rename(select(data.library2014, ਤॻ໊ؗ, ։ؗ..), name=ਤॻ໊ؗ, open_days=։ؗ..), 5)
ҎԼͱՁ data.library2014 <- read.csv("2014toshokanriyo.csv") data.library2014 %>% select(ਤॻ໊ؗ, ։ؗ..) %>% rename(name=ਤॻ໊ؗ, open_days=։ؗ..) %>% head(5) ϝιουͷωετݟͮΒ͍ɻ pipe͑ɺՄಡੑ্͕Δɻॻ͖͍͢ɻ
ݩmagrittr • https://github.com/tidyverse/magrittr • R package to bring forward-piping features
ala F#'s |> operator. Ceci n'est pas un pipe. • F#ͷ |> ԋࢉࢠͷػೳ͕༝དྷ
F# ͷpipe ࢀর: https://msdn.microsoft.com/ja-jp/library/dd233229(v=vs.120).aspx#ؔ߹ͱύΠϓϥΠϯॲཧ
ଞݴޠͷpipe • Elixir • Julia • ԋࢉࢠͱߴ֊͕ؔఆٛͰ͖ΔݴޠͰ͋Εɺಠ࣮ࣗ Ͱ͖Δ͔͠Ε·ͤΜɻ ࢀর: http://elixir-lang.org/getting-started/enumerables-and-streams.html#the-pipe-operator
ࢀর: http://docs.julialang.org/en/stable/stdlib/base/#Base.|>
ଞʹPipe.R͕͋ΔΑ • %>>% • Pipe() • pipeline() • dplyrͱڞଘՄೳɻ
## magrittr system.time({ lapply(1:100000, function(i) { sample(letters,6,replace = T) %>%
paste(collapse = "") %>% "=="("rstats") }) }) Ϣʔβ γεςϜ ܦա 13.495 0.064 13.807 ## Pipe.R system.time({ lapply(1:100000, function(i) { sample(letters,6,replace = T) %>>% paste(collapse = "") %>>% "=="("rstats") }) }) Ϣʔβ γεςϜ ܦա 4.922 0.030 5.015 ࢀর: https://renkun.me/blog/2014/08/08/difference-between-magrittr-and-pipeR.html
·ͱΊ • σʔλੳ͢ΔલʹɺdplyrΛͬͯσʔλܗ͕େࣄ • RͰPipe͏ͱɺϝιουνΣΠϯ෩ʹॻ͚ͯศར • ଞݴޠͰPipe͕࣮͞Ε͍ͯΔͷ͕͋ΔͷͰɺͬ ͓ͯ͘ͱͤʹͳΕΔ͔